Contacts
The shared spine: every person deduplicated across doors, refilled automatically from sheets, CRMs, and webhooks, carrying DND, attribution, and history.
View as MarkdownContacts is the business's memory of people. Every door writes into it, every campaign reads from it, and one person stays one record no matter how many ways they reach you — matched by phone first, then email, then external ID.
Where contacts come from
| Source | How |
|---|---|
| Conversations | Every door auto-creates or matches the contact — a caller's number, a chat identify, a DM profile. |
| Contact sources (sync) | Connect a Google Sheet, an external CRM, or a webhook feed and Contacts refills itself — new rows appear, existing ones update, matched by phone → email → ID. Set it once. |
| CSV import | One-time list uploads. |
| The API | Create/upsert programmatically — see the Contacts API. |
| Manual | Add contact for the walk-in you want to remember. |
What a contact carries
- Name, phone, email, external ID, and any custom attributes you define (plan, LTV, last visit…).
- [DND flags](/docs/crm/dnd) — per channel and master, honored by every send in the platform.
- Their conversations across all doors, their deals, and their first-touch attribution.
- Tags and stage — the raw material for audiences.
Audiences are rules, not lists
"Ordered before, quiet 30 days", "everyone we quoted", "plan holders" — define the rule once and it stays current as Contacts refills. See Audiences.