Platform · Contacts
One contact record across calls, texts, and chat.
Assistable resolves every phone number, email, and web visitor to a single contact, so agents on every channel work from the same customer record. Import, tag, and act on lists at scale from one table.
Get started for free. Pay as you go. Or talk to sales
What it does
One identity across every channel
Inbound calls, texts, and web chats resolve to a single contact record. Resolved addresses are stored per contact, so the next message from the same sender is one indexed lookup. Phone lookups try multiple format candidates, so formatting differences do not split records.
- Phone, email, and visitor ids map to one record
- Resolved addresses stored for one-lookup matching
- Voice and messaging share the same contact identity
CSV import with dedupe built in
Upload a CSV, review auto-mapped columns with a preview, pick a dedupe key, and run it. Phones are stored in E.164 with the same normalizer the dialer uses and matched on the last 10 digits, so +1 (555) 111-2222 and 5551112222 are one contact. Matched contacts are tagged, never mutated.
- Headers auto-map across 40 recognized aliases
- Dedupe by phone, email, or none
- Matched contacts get tagged, never mutated
- Up to 5,000 rows per file
Bulk actions verified server side
Select up to 1,000 contacts and tag, untag, set status, set DND, move to a folder, archive, unarchive, or delete in one call. The server verifies every id belongs to your account before acting and reports any it dropped. Deletes are soft archives, so nothing disappears silently.
- 8 bulk actions on up to 1,000 contacts per call
- Ownership checked per id; invalid ids reported
- Delete archives instead of destroying
Tags that drive campaigns and agents
Tags are an account-level pool with unique names enforced. Filter by up to 25 tags, apply tags on import, and enroll campaigns from a filter on search, status, and tags. Active-tag rules pair a tag with an assistant on chosen channels, with priority and active-hour settings.
- Campaign enrollment reuses the list's filter query
- Apply up to 10 tags during import
- Rules bind a tag to an assistant per channel
DND that outbound systems obey
Do-not-disturb is one flag on the contact. The outbound call API refuses to dial a DND contact, and the campaign engine skips them at dial time. If a contact opts out mid-campaign, the reconcile pass treats them as opted out and stops further attempts.
- Outbound API blocks DND contacts before dialing
- Campaign dialer skips DND at dial time
- Mid-campaign opt-outs are honored on reconcile
Custom fields, folders, and the drawer
Define custom fields once at the account level with types, options, and ordering; they render on every contact in the edit drawer alongside identity, address, tags, and the DND switch. Folders and status tabs keep large lists workable, with live counts computed by grouped aggregates.
- Field definitions set once, rendered on every contact
- Folder and status counts stay live
- Tags attach and detach instantly from the drawer
At scale
Built for the agent lifecycle.
01 · Deploy
Import your list in one pass: auto-mapped columns, dedupe by phone or email, tags and a folder applied on entry. Phones land in E.164 with dialer parity, so imported contacts are dialable immediately.
02 · Test
Contacts carry an environment column, so production and non-production records stay separated. Keep test contacts in their own folder or tag and inspect exactly what an agent will see in the drawer.
03 · Scale
Server-side pagination, per-account indexes, 500-row import batches, and bulk actions on 1,000 contacts per call. Counts come from grouped aggregate queries, never page scans.
04 · Observe
Every import records created, matched, and skipped counts, with the last 20 kept as history. Status tabs, per-folder counts, and DND and source filters show the shape of your list at a glance.
Under the hood
- IDENTITY
Phone, email, and web visitor ids resolve to one contact record across channels
- IMPORT
Up to 5,000 rows and 3 MB per CSV; 40 header aliases auto-map; dedupe by phone or email
- PHONES
Stored E.164 with the same normalizer the dialer uses; matched on last 10 digits
- BULK
8 server-side actions on up to 1,000 contacts per call; every id ownership-checked
- DND
One flag blocks the outbound call API and skips the contact in campaign dialing
- FIELDS
Account-level custom field definitions with types, options, and required flags
- AUDIT
Each import logs created, matched, and skipped counts; last 20 kept as history
FAQ
How does Assistable unify identity across channels?
Every inbound message resolves the sender to a contact: an indexed channel-identity lookup first, then phone, email, or web visitor fallbacks. The match is stored per contact, so the next message from that address is a single lookup. Client-supplied hints can prefill a new record but never match to an existing contact.
What are the import and bulk limits?
CSV imports accept up to 5,000 rows and 3 MB per file, with up to 10 tags applied on import. Bulk actions cover up to 1,000 contacts per call, and list pages return up to 100 contacts. Larger jobs run as multiple passes; imports insert in 500-row batches server side.
Will importing a CSV overwrite my existing contacts?
No. Rows that match an existing contact by your chosen dedupe key are never mutated; they only receive the tags you selected for the import. New rows are created, in-file duplicates drop first-occurrence-wins, and the result reports created, matched, and skipped counts.
What does the DND flag actually stop?
Outbound calls placed through the API are refused for DND contacts, and the campaign engine skips DND contacts at dial time. If someone opts out mid-campaign, the reconcile pass marks them opted out and stops further attempts.
What does this cost to try?
Signup is free pay-as-you-go. Contacts, tags, folders, custom fields, and imports are part of the platform; you pay for usage at $0.07 per minute of voice and $0.02 per message.
