Identity Resolution

Answering across every channel only works if the agent knows it is the same person each time. One customer emails from work, WhatsApps from their mobile and fills in the widget with a personal address. Identity resolution stops that becoming three lead records with a third of the history each, without wrongly gluing two different people together.

The problem#

Every inbound message has to answer "who is this?" before anything else can happen. Get it wrong in one direction and the agent replies without the context it already has. Get it wrong in the other and one customer sees another customer's history. Splice resolves confidently where the evidence is conclusive and asks a human where it isn't.

Signals#

Each lead carries a set of normalised identity signals. Emails are lowercased, phone numbers reduced to digits, domains lowercased, so "Priya@Acme.com" and "priya@acme.com" are the same signal. A signal is marked verified the moment Splice sees the lead use it directly.

SignalWhere it comes from
EmailThe sender address, or a form submission.
PhoneThe WhatsApp sender or caller ID.
LinkedInEnrichment or manual entry.
InstagramThe DM sender's handle.
DomainDerived from the email address.
Name + domainA composite, e.g. priya@acme.com becoming priya + acme.com - weak on its own, useful in combination.

The lookup order#

  • 1. Exact identity match on email, phone, LinkedIn or Instagram. If one exists, that's the lead - no scoring, no proposal.
  • 2. Legacy contact match, for leads created before identity records existed.
  • 3. Fuzzy candidates, scored as below. A strong-enough candidate produces a new lead plus a merge proposal, not a silent merge.
  • 4. Nothing matched - a new lead is created.

Merged leads resolve to their canonical record

A match on a lead that was previously merged away follows the chain to the surviving record, so old identities keep working after a merge rather than resurrecting a dead lead.

The whole search is scoped to your workspace. Two workspaces can hold the same email address with no interaction whatsoever.

Scoring a candidate#

Matching signalWeightWhy
Email, phone or LinkedInConclusiveNobody else has your phone number. One of these ends the search immediately.
Name + domainModerateTwo people called Priya at the same small company is possible, so it's suggestive rather than proof.
Company domainWeakSharing a corporate domain means colleagues, not the same person.
Free-mail domainAlmost nothingEverybody has gmail.com. It's scored near zero deliberately.

Weak signals combine rather than simply adding up, so two moderate signals together beat one on its own - but a pile of weak evidence can never reach the certainty of a single conclusive match. Fuzzy-only matches are capped below that ceiling by design.

Domain alone will never merge two people

This is the failure everyone fears from a CRM, and it's specifically prevented: a shared employer is treated as weak evidence, and free-mail domains as no evidence at all.

Proposals vs silent matches#

  • Conclusive signal - the conversation attaches to the existing lead silently, because there's nothing for a human to judge.
  • Strong-but-not-conclusive - a new lead is created and a merge proposal is raised for review. Nothing is combined until someone approves it.
  • Below the bar - a separate lead, no proposal, no noise.

Proposals live on the leads view. Reviewing them takes a couple of minutes a week and is the highest-value housekeeping in the product. An unreviewed duplicate splits conversation history in two, which means the agent answers the next message without half of what it already knows.

What a merge does#

  • Conversations, tasks, meetings and activity move to the surviving record.
  • The absorbed lead's identities move too, so future messages on any of them resolve correctly.
  • Splice records what was merged, when, by whom, and which record each identity came from.
  • The absorbed lead isn't destroyed - it's marked as merged into the survivor, which is what makes lookups and undo work.

Unmerging#

A wrong merge is recoverable. Because the origin of every moved identity and conversation was recorded, unmerging restores them to the record they came from rather than guessing.

There's a 30-day window

Unmerge is refused on merges older than 30 days - Merge is older than 30 days - unmerge window closed. After that, separating the records is a manual job. Review proposals promptly rather than approving in bulk and hoping.

Keeping it accurate#

Do

  • Clear merge proposals weekly, while you still remember the customers involved.
  • Add a phone number to a lead when you learn it. It's a conclusive signal and prevents the WhatsApp duplicate before it happens.
  • Let the widget verify email when the agent handles account questions. A verified address is the strongest identity you can get from a stranger.

Don't

  • Approve proposals in bulk without reading them. The 30-day undo window is generous, not infinite.
  • Import CSVs with a shared placeholder address like info@company.com - that's a genuinely conclusive signal, so every row will resolve to the same person.

For where these conversations land once they resolve, see Inbox.