Section 4 · Nutshell — Turn 30,000 Records Into an Asset
4.4Clean duplicate and messy records
Built in the POC- No.
- 4.4
- DMA's reference
- Decision Book p.14
- Phase
- Phase 1
- Autonomy
- L1 · Recommend
- DMA's decision
- Yes
What DMA asked for · Decision Book p.14
Find duplicate people and companies, and incomplete records.
Why it matters to DMA: Bad data undermines every score and outreach decision built on top of it.
In our words, from DMA's Product Decision Book v3, page 14.
How we do it
- Every review run compares accounts by name, domain and shared contacts and flags likely duplicates with a match score. It also flags messy records: deals stuck with no activity, deals with no next step, records owned by someone who has left, and bad email addresses.
- It recommends; it doesn't merge (L1, as DMA's book sets it). A likely duplicate is capped at tier C so the same company is never contacted twice, and "duplicate of another account" appears in its reasons.
- The flags are kept with the rule that raised them, so the team can clean up in Nutshell; a merge is always a person's decision.
The flow
It plays on its own while it's on screen; hover or use the controls to pause or step through.
Compared
"Lakefield Roofing Co (old)" and "Lakefield Roofing Co" share a domain and a contact.
- Stored data
- Rule in code
- Routing
- Person
Where the data goes
The same six stages on every page. Nothing reaches Nutshell except through the write gate.
- 1Nutshell records
Source
Accounts, contacts and deals.
- 2Sync
Copies Nutshell changes into the bridge database
Brings the records into the mirror.
- 3Bridge database
A copy of the CRM data, plus what the AI works out
Duplicate candidates and hygiene flags, with the rule that raised them.
- 4AI
Claude models, only through DMA's own gateway
Not needed: matching and checks are rules.
- 5Write gate
The only way back into Nutshell: checked, approved when needed, sent once
Nothing is merged or changed in Nutshell automatically.
- 6Nutshell
The system of record
The team cleans up where it works.
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, with the match score and what matched. | 10 |
| ai.hygiene_flags | Messy-record flags, each with its rule and severity. | 10 |
Worked example
Synthetic demo data: every name, business and number is made up.
A duplicate, capped so it is never contacted twice
What you see
1."Duplicate of another account"
Why? on Lakefield Roofing Co (old): a decent score, capped at tier C because it duplicates another account.

What happens in the system
- Bridge database
ai.duplicate_candidatesMatched on name and domain with the active Lakefield Roofing Co record.
- Rule engineHOLD
duplicate gateScore 60 would be tier B; the gate caps it at C.
The prototype's latest review over its synthetic accounts.
Likely duplicates
| Record | Looks like | Matched on | Match |
|---|---|---|---|
| Wilowhill Pediatric Dentistry | Willowhill Pediatric Dentistry | Name, domain, contact | 100% |
| Southside Home Goods | Southside Home Goods Inc | Name, domain, contact | 100% |
| southside home goods | Southside Home Goods Inc | Name, domain | 85% |
Messy-record flags
| Flag | Open |
|---|---|
| Deal stuck with no activity | 164 |
| No next step | 124 |
| Owner has left | 70 |
| Likely duplicate | 50 |
| Bad email address | 28 |
In the running POC

Why? on a likely duplicate, capped at tier C.
- 1The reasons, including "duplicate of another account".
- 2Could be wrong if.
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 |
|---|---|---|
| Accounts | DMA AI dashboard | Duplicates show tier C with the reason. |
Status
Built in the POC. This capability runs in the POC today, on synthetic data, end to end.