CRM · Customer Data

One record per human, no matter the channel

Every WhatsApp message, Instagram DM, email reply, web chat or webhook call resolves to a single contact record in SabNode CRM. Identity resolution merges phone numbers, emails and social handles automatically. Custom fields stay populated. Opt-in status follows. The same human, the same timeline, the same conversation.

  • Automatic identity resolution across channels
  • Conversation timeline from every surface
  • Custom fields, tags and segments built in
  • Bulk merge, edit and export
The problem

The CRM duplication graveyard

Look inside any growing business's CRM and you will find the same wreckage: Priya Sharma exists three times. Once with her phone, once with her email, once with her Instagram handle. Each ghost has a partial history. Marketing campaigns hit her three times. The support team has no idea she is the same person who complained last quarter. The finance team sees three "customers" and reports inflated active counts.

The usual fix is "we will run a deduplication job next sprint", which never happens, or "we are migrating to a new CRM", which buys 18 months before the new system has the same problem. The actual problem is not a data hygiene issue — it is an architecture issue. Most CRMs assume each tool (WhatsApp, email, web form) creates a contact, with no built-in resolver. Tools accumulate, contacts accumulate, the mess accumulates.

SabNode CRM is built on a unified identity model from day one. Every signal that arrives — a WhatsApp message, an email reply, a webhook from Shopify with a phone, an Instagram DM — is matched against the contact graph. Strong matches merge; weak matches surface for human review. The result is one record per human, period. Marketing sees one Priya. Support sees one Priya. Finance counts one Priya.

What it is

Contacts, in depth.

A Contact in SabNode is an identity-resolved customer record. Each contact has a stable internal ID and a set of identifiers — phone numbers (E.164), emails, Instagram username, WhatsApp WA-ID, Shopify customer ID, custom external IDs. When a new event arrives carrying any of these identifiers, the resolver looks up the contact graph. Exact match merges into the existing record. Fuzzy match (similar email at same phone, same name and address) surfaces in a merge queue for human approval. No match creates a new contact. This happens transparently before the event hits any flow or inbox.

Every contact carries a full timeline. Inbound and outbound messages across WhatsApp, Instagram, Web Chat, Email; flow executions the contact was in; broadcasts the contact received; orders, payments, refunds from connected commerce; CRM stage changes; tag adds and removes; opt-in events; agent notes. The timeline is searchable, filterable by channel or event type, exportable. An agent who picks up a conversation tomorrow has the full context — last support ticket, last purchase, last marketing nudge — without leaving the contact page.

Custom fields turn contacts into structured records, not just chat partners. Define fields with types (text, number, date, boolean, JSON, file reference) and validation rules. Populate them via flows ("after KYC, set `kyc_verified=true`"), via CSV import, via the REST API, or manually. Fields drive segments, gate flow branches, personalise templates, and surface in agent UIs. The CRM scales from "chat with a customer" to "operate a regulated financial product" without rebuilding the data model.

Bulk operations are pragmatic for the real-world mess. Multi-select up to 50,000 contacts at a time. Edit a field, add a tag, move them through a Kanban stage, trigger a flow, export to CSV, opt out of a channel. Merge two or twenty duplicates with field-by-field conflict resolution. Filter by anything — last message older than 90 days, segment X minus segment Y, opt-in status false on WhatsApp but true on email. The CRM is built to be operated, not just admired.

Capabilities

Everything you get with Contacts.

7 capabilities
01

Identity resolution engine

Match contacts across phone (E.164), email, WA-ID, Instagram handle, Shopify ID and custom external IDs. Strong matches auto-merge with full audit. Fuzzy matches surface in a review queue. Configurable rules per tenant — strict for finance, lenient for D2C.

02

Unified timeline

Every event from every channel lands on the contact timeline — messages, flows, broadcasts, orders, stage changes, tags, opt-ins, notes. Searchable, filterable, exportable. The single place to see the customer relationship across two years.

03

Custom fields with types

Define text, number, date, boolean, single-select, multi-select, JSON, and file-reference fields. Validation rules, default values, required flags. Fields populate from flows, imports, API or manual entry. Drive segments, branches and personalisation.

04

Bulk operations

Select up to 50,000 contacts at once. Edit, tag, move stage, trigger flow, opt out, export, delete. Every bulk action is undoable for 24 hours with a single click. Audit log captures who did what to which segment.

05

Manual merge with conflict resolution

Pick two contacts that should be one. The merge UI shows every field side-by-side with the conflict highlighted; pick a value per field or let the rule engine decide (newer wins, longer wins, manual). Messages and events combine into one timeline.

06

Opt-in tracking per channel

Each contact has independent opt-in status per channel (WhatsApp, Email, SMS, Web Push). Updates respect the channel-specific consent rules — WhatsApp opt-in via service window, email via double opt-in. Audit log retains every state transition for compliance.

07

Import and CSV workflows

CSV import with column mapping, validation, dry-run preview, and conflict resolution against existing contacts. Imports above 50,000 rows process in the background with email completion. Supports re-import to update fields without creating duplicates.

Use cases

Built for the way teams actually work.

D2C
Case 01

D2C identity unification post-migration

Brand migrated from Mailchimp + Interakt + Shopify and arrived with 340,000 records across three systems. Importer resolved 220,000 unique contacts via phone+email matching. The 7,000-row merge queue cleared in 48 hours with two ops people. Marketing CTR jumped because dedup eliminated duplicate-send penalty.

Financial Services
Case 02

Fintech KYC field gating

Custom field `kyc_status` enforced per contact. Flow Send Template node skips contacts where status != "verified". Compliance segment surfaces unverified contacts for ops follow-up. Custom field history lets the audit team trace exactly when KYC moved to verified for any contact.

SaaS
Case 03

B2B SaaS account-contact hierarchy

Custom field `company_id` links multiple contacts to one account. Filter shows all contacts at a company, total LTV, latest churn risk. AE's working a renewal see every person at the customer with their role and engagement, not just the champion they normally talk to.

Healthcare
Case 04

Healthcare patient deduplication

Clinic chain across 14 branches kept creating duplicate patients when the same person visited a different branch. Identity resolution on phone+DOB merged 18,000 duplicates. Patient timeline now spans branches. Doctors see full history. Reduced no-shows because reminder targeting is accurate.

EdTech
Case 05

Education lead consolidation

Same student fills inquiries via the website, WhatsApp, and Instagram DM. CRM resolves all three to one contact. Counsellor sees the full inquiry sequence and intent signals. Replaces a manual spreadsheet match the team used to run weekly. Lead-to-enrollment time drops 40%.

How it works

From signup to first send in minutes.

Contacts is included on every SabNode workspace. No separate billing, no extra setup — flip it on from your workspace settings.

  1. 01

    Bring contacts in

    Import via CSV, sync from Shopify, sync from HubSpot, or let inbound channel messages create contacts automatically. Each path runs through identity resolution.

  2. 02

    Identity resolution runs

    On each new record or event, the resolver checks the contact graph. Strong matches merge silently. Fuzzy matches enter the review queue with a confidence score.

  3. 03

    Custom fields populate

    Set fields from flows, imports, the API, or by hand. Validation rules enforce schema. Field history captures every change for audit.

  4. 04

    Operate at scale

    Filter, segment, tag, bulk-edit, bulk-trigger. The same UI scales from one contact to 50,000 in a single action with progress and rollback.

  5. 05

    Export and integrate

    Export filtered slices to CSV, push to BigQuery via the export connector, or query via the REST API. Contacts power everything downstream — broadcasts, flows, AI, analytics.

Plays well with

Works with the tools you already ship on.

ShopifyHubSpotSalesforceGoogle SheetsMailchimpPipedriveRazorpayStripe
Frequently asked

Questions about Contacts.

Can't find what you're looking for? Talk to our team.

How does identity resolution decide a strong match versus fuzzy?
Strong match: identical phone in E.164 form, or identical email (case-insensitive, normalised), or identical platform ID (WA-ID, Instagram user ID, Shopify customer ID). These auto-merge silently. Fuzzy match: similar email (one-character edit distance), same phone with different country code, same name and address but different phone. These enter the review queue with a confidence score and the human picks. Rules are configurable per tenant — finance teams typically dial up strictness, D2C teams dial down.
Can I undo a merge?
Yes, within 30 days. Every merge captures the pre-merge state of both records. Unmerge restores both contacts with their original fields and splits the timeline events back to whichever record they originally belonged to. After 30 days the snapshot is purged for storage reasons but the audit log retains the metadata (who, when, what fields).
What happens to contacts when a message comes from an unknown phone?
Three configurable behaviors. (1) Auto-create with minimum data (phone + first message) — default for D2C. (2) Queue for human review before creating — common for B2B where every lead is high-touch. (3) Reject and route to a "stranger inbox" without creating a CRM record — useful when you want to filter spam before it pollutes the database. Setting is per-channel so WhatsApp can auto-create while Email can require review.
How are custom field histories tracked?
Every change to every field is logged with timestamp, source (flow node, API call, manual edit, import), and the previous and new values. Audit log is queryable per contact ("show every change to kyc_status for contact X") and exportable. Retention is two years on standard plans, seven years on enterprise — covers most regulatory windows.
Can contacts have multiple phone numbers or emails?
Yes. Each contact can hold multiple identifiers of each type with one designated as primary. Inbound messages match against any of them and update the contact accordingly. Outbound respects the primary by default but flows can target any specific identifier ("send to email of type=work"). This handles the common pattern where customers have a personal and work email or two phones.
Does the CRM scale to millions of contacts?
Yes. Production tenants run 5M-30M contacts comfortably. The contact list is virtualised, segments are materialised incrementally, search is backed by a dedicated index. Bulk operations stream rather than buffer so memory is bounded. We pre-scale tenants approaching 10M contacts to ensure consistent latency. If you are starting above 5M, talk to us and we will pre-provision.
How are GDPR and DPDP delete requests handled?
A delete request via the admin UI or API soft-deletes the contact, anonymises personally identifiable fields, retains the contact ID and aggregate metrics for billing and analytics. After 30 days the soft-delete promotes to hard delete and the row is purged from the operational store. Messages are scrubbed to a placeholder ("deleted by user request") so threads do not break. Audit log of the deletion is kept indefinitely as legal proof.
CRM · Customer Data

Ship contacts into production this week.

No credit card. No sales call required. Spin up a workspace, plug in a number, and your team is live in under an hour.