One customer, one record. And a log of how it got there.

The same customer lives in your CRM, your accounting and a spreadsheet, spelled three ways with two phone numbers. We match them, settle which version is right by a rule you agree, merge only with your approval, and keep a line for every change.

Three rows that are really one.

Sample records for a made-up customer. This is the most common mess we see, and the one that quietly breaks reports, reminders and mailings.

BeforeFound in three systems

SystemNamePhoneEmailStatusLast order
CRMSample Plumbing Co(305) 555-0142office@sampleplumbing.testInactivenever updated(blank)
AccountingSAMPLE PLUMBING CO.305.555.0142jo@personal-mail.testa person, not the firmActive12 Oct 2026
SpreadsheetSample Plumbing (Kendall)305 555 0199second branchoffice@sampleplumbing.test(none)3 Sep 2026

AfterOne parent record, one branch, every field with a source

RecordNamePhoneEmailStatusLast order
Sample Plumbing Co.Sample Plumbing Co.from accounting+1 305 555 0142formatted onceoffice@sampleplumbing.testfirm address kept as mainActivederived from orders12 Oct 2026from accounting
└ Kendall branchSample Plumbing, Kendall+1 305 555 0199(uses parent)Active3 Sep 2026

The personal address was not deleted: it moved to a named contact under the firm, with a note of where it came from.

Not every match is equally sure.

We sort every candidate match into one of four buckets before anything is merged. This is the method we used to sync a dental lab's practice list into its CRM.

Strong match

Same phone and name, or same unique ID. Merged in a batch you approve.

Weaker match

Similar name, one detail differs. Listed side by side for a person to confirm.

Shared identifier

Two real customers share one phone or email. Kept apart, or grouped under a parent, never merged.

Not found

Exists in one system only. Reported, not invented into the others.

Clean without losing anything.

A sealed archive box labelled with a date, holding the untouched original export, tape across the lid
  • The original export is kept, untouchedEvery cleanup starts with a dated copy you can go back to.
  • Merge, never overwriteA field that already holds a value is not replaced without a rule saying so.
  • A dry run firstWe show you what would change, record by record, before anything is written.
  • One line per changeOld value, new value, time and result, in a log you keep.
  • Some fields are off limitsAnything sensitive, such as details a patient or customer typed in, goes on a do-not-write list.

On the lab's CRM sync those rules held across 324 records and 3,244 field updates: no failed writes, no value overwritten. Read the case.

A list you can finally trust.

  • A source of truth per fieldA written rule saying which system wins.
  • Records you can trustMatched, merged and corrected in the system you choose as home.
  • A review sheetThe uncertain matches, settled with you.
  • The log and the originalEvery change, plus the untouched starting copy.
  • Optional: a duplicate checkScheduled, flagging new duplicates as they appear.

About cleaning records.

Cards dropping out of a web form slot into a small sieve that catches the duplicates
How do you decide which system is right when they disagree?

By field, not by system. Accounting is usually right about billing names and balances, the CRM about who to talk to, the job tool about what was done. We write the rule down with you and apply it the same way every time.

Can we keep working while you clean?

Yes. We work on a copy, then apply changes in a short window you choose. Anything your team changed in between is caught by the dry run.

Will duplicates come back?

Some will, unless the cause is fixed. We report where they come from, such as a web form or an import, and can add a check that catches new ones weekly.

How many versions of your best customer exist?

Send us a sample export after a free call. We will show you the matches and the conflicts before you commit to anything.