> ## Documentation Index
> Fetch the complete documentation index at: https://docs.servicebooked.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts overview

> Your CRM — every lead and customer in one searchable list, with their full conversation history.

Every person who ever calls, texts, chats with the widget, or fills out a form lands in **Contacts** automatically. Deduplicated, with addresses and source tracked, conversation history attached, and tags + statuses you can use to organize.

## What's in the list

Each contact has:

* **Name + business name** — captured from forms, AI conversations, or manual entry
* **Phone + email** — primary contact methods, deduplication keys
* **Address** — street, city, state, postal code (when collected)
* **Status** — Lead, Booked, Customer, etc. — your pipeline position
* **Tags** — free-form labels for any organization scheme you like
* **Source** — how they reached you (widget, form, voice, manual import, reactivation)
* **Last interaction** — when you last heard from them
* **Appointment count** — how many bookings they've had

## Searching and filtering

The list view (`/dashboard/contacts`) supports:

* **Free-text search** across name, email, phone, and business name
* **Status filter** — drop to one stage at a time
* **Tag filter** — show only contacts with specific tags
* **Source filter** — show only contacts from a specific channel
* **Sort by any column** — name, phone, address, status, last interaction, appointment count

## Detail view

Clicking a contact opens their detail page with five sections:

1. **Header** — name, phone, email, address, status (editable), tags, last contact, appointment count.
2. **Appointments** — past + upcoming.
3. **Deals** — active pipeline cards for this contact.
4. **Conversations & interactions timeline** — every call, text, chat, email, and meeting note in chronological order.
5. **Notes** — free-form text you can type in.

The contact detail is your single source of truth for "what's the story with this person?"

## Bulk actions

Select multiple contacts (checkboxes) to:

* **Apply a tag** to all selected
* **Change status** in bulk
* **Delete** in bulk (with a typed-DELETE confirm because this is destructive)
* **Export to CSV**

## Auto-deduplication

Two contacts that land with the same phone number (or same email) are automatically merged into one row — appointments, conversations, and notes from both are preserved. We dedupe on:

* **Email** (case-insensitive, normalized)
* **Phone** (normalized to E.164 — `+16135551234`)

If a person calls in (creating a contact with phone only), then later fills out a form with both phone and email, those are merged on phone match. The email gets added to the existing record.

If you have actual duplicates that didn't auto-merge (different phones, different emails, same person), you can manually merge from the detail page.

## What about anonymous web visitors?

Visitors who chat the widget without sharing a phone or email are tracked as **"visitor:abcd1234"** — anonymous identifiers based on a localStorage token. If they later share a phone or book an appointment, the visitor record promotes to a real contact and the conversation history follows them.

## Next

<CardGroup cols={2}>
  <Card title="Add a contact manually" icon="user-plus" href="/contacts/adding-contacts">
    For walk-ins, referrals, or anyone who didn't reach you through the system.
  </Card>

  <Card title="Import from CSV" icon="upload" href="/contacts/importing-from-csv">
    Bring in your existing customer list when you start.
  </Card>
</CardGroup>
