
Customers
The Customers module is the canonical place to view, search, and manage individual users in your workspace.
Customer record
Each row consists of:
| Field | Type | Notes |
|---|---|---|
external_id | text | Unique per workspace. Your internal user ID. |
email | text | Lowercased on write. Used for email channels and as a soft identity hint. |
phone | text | E.164 format preferred. Used for SMS and WhatsApp. |
first_name, last_name | text | Used for Liquid personalization. |
country, city, device, platform | text | Auto-populated from Track API context where possible. |
attributes | jsonb | Arbitrary traits. Register schema in Attributes for autocomplete. |
is_blacklisted | bool | When true, the customer is excluded from all sends regardless of channel or campaign. |
last_seen_at | timestamp | Auto-updated on any event ingest. |
Customer profile page
Click any row to open the profile. You'll see the identity card on the left, and a timeline of the 50 most recent events on the right, with full properties displayed inline. From here you can:
- Add or remove the customer from the blacklist.
- Delete the customer permanently (cascades to events, list memberships, attributions).
- Inspect consent states (if Trust module is used).
Creating customers
Customers are created in four ways:
- Manual add — Customers → + Add customer.
- CSV import — see CSV import.
- Track API — any event with an unknown
external_idcreates a stub customer. - Commerce ingest — Shopify / Woo webhooks upsert by email.
Anonymous → identified merge
Browser and mobile SDKs assign each new device an anonymous id (anon_…) and persist it across reloads. Events fired before sign-in are stored under that anonymous customer.
The first time you call identify('user_123', …) on a device, the SDK passes the anonymous id to the server, which:
- Reassigns every event from the anon customer to
user_123. - Reassigns device tokens (push, web push) to
user_123. - Deletes the orphan anon row.
The result is a single, continuous profile — the user's pre-signup behaviour is preserved on their real account.
CSV import
Go to Imports → + New import. Upload a CSV with headers that match known fields (external_id, email, first_name, etc.). Unknown columns land in the attributes JSONB.
- Imports are deduplicated by
external_id. Rows without one fall back toemail. - Existing customers are merged, not replaced — blank CSV values don't overwrite existing data.
- Large files are processed in chunks; the Imports page shows progress per file.
Exporting customers
From the Customers list, use Export CSV to download the current filtered view, or schedule recurring exports under Integrations → Scheduled exports.
Deleting customer data
For GDPR erasure requests, delete the customer from their profile page. Pulse cascades the delete across:
- Events
- List memberships
- Campaign messages & attributions
- Journey runs
- Consent records
The suppression list retains the email/phone hash so the person is not accidentally re-contacted if they're re-imported.