Section 20 · Sales Rep Work Elimination / Zero-Entry CRM
20.7Duplicate detection + smart merge
Built in the POC- No.
- 20.7
- DMA's reference
- Decision Book p.37
- Phase
- Phase 1
- Autonomy
- L1 · Recommend
- DMA's decision
- Yes
What DMA asked for · Decision Book p.37
Find duplicate companies and people, and suggest the merge.
Why it matters to DMA: Duplicates split a customer's history and send two reps after one buyer.
In our words, from DMA's Product Decision Book v3, page 37.
How we do it
- A rule compares company names and web domains, and people's names, e-mails and phones. Each likely pair gets a score and what matched.
- The book sets this at L1 (suggest). The pair is shown with its evidence; the merge itself is done by a person in Nutshell, which keeps Nutshell's own merge history.
- A likely duplicate's score is capped until it is resolved, so the same buyer isn't worked twice.
The flow
It plays on its own while it's on screen; hover or use the controls to pause or step through.
The records
Every company and person in the mirror.
- Nutshell
- Rule in code
- Stored data
- Person
Where the data goes
The same six stages on every page. Nothing reaches Nutshell except through the write gate.
- 1Nutshell
Source
Deals, contacts, tasks, activities, notes and users.
- 2Sync
Copies Nutshell changes into the bridge database
Keeps the mirror current, so the rules see today's state.
- 3Bridge database
A copy of the CRM data, plus what the AI works out
One open flag per record and problem, with its details and the rule version.
- 4AI
Claude models, only through DMA's own gateway
Not needed for most flags: they are rules. The audit adds what only the notes say.
- 5Write gate
The only way back into Nutshell: checked, approved when needed, sent once
Flags don't write to Nutshell; fixes happen there, by people (or through the write gate where a field rule allows it).
- 6Nutshell
The system of record
Reps fix the record; the flag closes on the next run.
The tables behind it
Drawn from the POC's database catalogue: structure only, no data.
PK primary keyFK reference the database enforces (solid line)ID reference kept by id (dashed line)
| Table | What it holds | Columns |
|---|---|---|
| ai.duplicate_candidates | Pairs of records that look like the same company or person, with the score and what matched. | 10 |
| ai.hygiene_flags | One open flag per record and problem (stuck deal, missing next step, former owner, bad email, duplicate), with severity, details and the rule version. | 10 |
Worked example
Synthetic demo data: every name, business and number is made up.
Likely duplicates in the POC today (live counts, synthetic data).
Open pairs
| Kind | Pairs | Top matches on |
|---|---|---|
| Companies | 24 | Name, web domain and a shared contact |
| People | 7 | Name, e-mail or phone |
In the running POC

1 / 2A likely duplicate: why its score is capped.
- 1The reasons, including the duplicate.
- 2What could make this wrong.
Dashboard · Accounts, a likely duplicate, why the score is capped. Captured from the running POC on September 25, 2026; synthetic data.
See it live
Opens the exact screen in the running POC, in a new tab.
| Open | Where | What to try |
|---|---|---|
| Pipeline hygiene: possible duplicates | DMA AI dashboard | Every likely pair, with what matched. |
Status
Built in the POC. This capability runs in the POC today, on synthetic data, end to end.