Contacts
Customer profiles in Enscale — how they're created, matched to Shopify, and how consent is tracked.
A contact is one person. Enscale creates them automatically from inbound messages, storefront activity, and Shopify customers, then matches them to your Shopify customer record where it can.
Contacts are unlimited on every plan, including Free. You're never charged for storing them.
How contacts are created
| Source | When |
|---|---|
| Inbound message | Someone messages you on any channel for the first time. |
| Shopify customer | A customer is created or updated in Shopify. |
| Storefront popup | Someone submits a popup form. |
| Back-in-stock signup | Someone joins a product waitlist. |
| CSV import | You upload a list for a campaign. |
| Workflow | A flow creates or updates a contact. |
Matching to Shopify
Enscale links contacts to Shopify customers by phone and email. When it matches, the contact profile gains order history, lifetime spend, and customer details — which is what makes the inbox sidebar genuinely useful during a support conversation.
An unmatched contact still works fully. It just has less context: someone who messages your WhatsApp from a number that isn't on any order has no Shopify record to link to yet, and will link automatically when they order.
The contact profile
Open a contact to see:
- Identity — name, phone, email, and channel identities.
- Shopify — linked customer, order history, spend.
- Consent — WhatsApp opt-in status and where it came from.
- Tags — see Tags.
- Loyalty — points balance, if loyalty is enabled.
- Conversations — every conversation across every channel.
- Waitlists — back-in-stock products they're waiting on.
Consent status
Every contact has one of three WhatsApp consent states:
| Status | Can you send outbound WhatsApp? |
|---|---|
| Pending | No. They haven't opted in yet. |
| Opted in | Yes. |
| Opted out | No, and they can't be added to campaigns. |
Consent is evidence, not a flag
Enscale records where each consent came from and when — popup, keyword reply, checkout, staff action, workflow, AI conversation, or CSV import — and keeps a history of changes.
That record is what lets you answer "why did you message this person?" if Meta or a customer ever asks. Don't set opt-in manually for people who didn't actually opt in.
How consent changes
Opting in — a popup submission, a back-in-stock signup, replying START or SUBSCRIBE, a staff action, a workflow's Set WhatsApp Consent node, or an AI agent capturing it in conversation.
Opting out — replying STOP, UNSUBSCRIBE, CANCEL, END, QUIT, or OPT OUT. Enscale handles these automatically, immediately, on every channel, and fires the WhatsApp Opt-Out trigger so you can tag or re-segment them.
You never need to maintain a suppression list. Opted-out contacts are excluded from campaigns and workflow sends automatically.
Importing contacts
Import via CSV when building a campaign audience.
Your file needs a phone number column, and should carry consent information if these contacts opted in elsewhere. Importing a list of people who never agreed to hear from you on WhatsApp is the fastest way to get your number restricted by Meta.
Phone numbers are normalised to international format on import. Numbers that can't be parsed are reported rather than silently dropped.
Blocking
Blocking a contact stops their messages appearing in your inbox and prevents outbound sends. It's for abuse, not for unsubscribes — use consent for those.
Blocking and unblocking are recorded on the conversation timeline.
Contacts and workflows
Three triggers fire on contact activity:
| Trigger | Fires when |
|---|---|
| Contact Added | A new contact is created. |
| Tag Added | A specific tag is added. |
| WhatsApp Opt-Out | A contact opts out. |