Key takeaways
- Snapshot and profile both sources before normalization. A clean target is useless if source identity and relationships cannot be reconstructed.
- Separate candidate detection from merge approval. Similar fields are evidence to review, not proof that two records represent one person or company.
- Treat consent/privacy state, active work, portal access and conflicting relationships as hard human-review routes.
- Execute small idempotent batches, reconcile counts and relationships, and retain a tested rollback path before expanding scope.
Define the cleanup contract before comparing records
| Field | Required decision | Evidence |
|---|---|---|
| Purpose | What business problem the batch may solve | Approved scope and owner |
| Entity | Contact, account, lead or another supported type | Source schema and identifiers |
| Comparison | Permitted fields and normalization | Rule version and test set |
| Survivorship | Which field wins under which evidence | Field-level decision table |
| Hard stops | Consent, privacy, access, active work, conflict | Named human review route |
| Recovery | Restore or reverse path | Tested snapshot and change ledger |
Run proposal-first cleanup in seven stages
- 01Snapshot and countCodeCapture read-only source identifiers, entity counts, relationships and the approved batch boundary.
- 02Normalize in stagingCodeStandardize comparison values without overwriting the source record.
- 03Generate candidate pairsAI judgmentReturn matched fields, conflicting fields and uncertainty. A candidate is not a merge.
- 04Apply hard stopsCodeRoute consent/privacy differences, active opportunities, portal users and relationship conflicts to review.
- 05Approve field-level survivorHuman approvalThe data owner chooses identity, retained values, related records and whether to defer.
- 06Execute idempotentlyCodeUse proposal and approval versions as the operation key; retries read effect state first.
- 07Reconcile and closeHuman approvalVerify counts, required fields, relationships, privacy state and the exception queue before expanding.
The hardest cases look similar enough to be dangerous
| Case | Risk | Route |
|---|---|---|
| Same email, different people | Shared or recycled address | Verify identity; do not auto-merge |
| Same company, active deals in both | Ownership and pipeline loss | Revenue-operations review |
| Different privacy or consent state | Wrong communication permission | Privacy/data-owner review and source preservation |
| Contact tied to portal access | Access break or account takeover | System-owner review |
| Different historical source | Attribution and relationship context erased | Preserve source events; field-level decision |
Microsoft and Salesforce both document field-level and relationship considerations around duplicate merges. Their exact product behavior varies. This playbook does not claim that all-agents connects to or performs actions in either CRM.
Northline rejects the obvious merge
Two Northline branches contain a contact with the same name and email. One record owns an open service agreement; the other is connected to a portal user and has a newer privacy preference. A name-and-email rule proposes a match.
The hard stops route it to the data owner. The owner determines that the shared mailbox represents two site contacts and rejects the merge. The team adds a site identifier to the matching rule and keeps both source records.
No real personal data, CRM integration or cleanup result is represented.
Adapt the procedure and workflow blueprint together
The SOP is for the accountable process owner. The blueprint turns the same boundary into trigger, data contracts, steps, approval, idempotency, recovery and acceptance tests. Neither authorizes a destructive production action.
CRM data cleanup SOP
Editable procedure for profiling, human-reviewed merge proposals, staged execution and reconciliation.
Preview the fileHide preview
# CRM Data Cleanup After an Acquisition — SOP ## Purpose and scope Prepare reviewed CRM merge and correction proposals after an acquisition without erasing source identity, consent or local context. This procedure covers profiling, candidate detection, human review, staged execution and reconciliation. It does not authorize collection of new personal data, legal conclusions, consent changes or an unattended destructive merge. ## Owner, trigger and output - **Owner:** named CRM data owner. - **Trigger:** approved cleanup scope and source snapshots are available. - **Output:** reconciled change ledger, unresolved exception queue and retained rollback evidence. ## Prerequisites 1. Approved purpose, fields, systems, access roles and retention rules. 2. Read-only source snapshots with counts and stable record identifiers. 3. Field and status mapping, including values that must remain source-specific. 4. Duplicate rules, confidence bands and human approval authority. 5. Tested restore or rollback route in a non-production rehearsal. ## Procedure 1. Profile record counts, missing keys, field values, relationships and active automations by source. 2. Normalize comparison values in a staging copy; never overwrite the original source snapshot. 3. Generate candidate pairs with the matched fields and reasons visible. 4. Reject automatic merge when identity conflicts, consent/privacy state differs, active opportunities conflict, or related records cannot be mapped safely. 5. Have the data owner approve the surviving record, field-level values and relationship treatment. 6. Execute a small reviewed batch with an idempotency key per approved proposal. 7. Reconcile source, target and change-ledger counts; sample every exception class. 8. Stop on an unexpected deletion, relationship loss, consent change or unmatched count. 9. Publish unresolved cases to a named queue and retain rollback evidence. ## Exceptions and approvals Potential shared inboxes, household records, changed names, conflicting account ownership, active deals, suppression/consent differences and portal users always require human review. Only the named data owner may authorize destructive execution. ## Audit record and revision log Retain scope, rule version, source snapshot identifiers, candidate reason, approver, execution identifier, before/after record keys, reconciliation result and rollback outcome. Review after every batch and revise the rules only through a new tested version.
CRM cleanup workflow blueprint
Machine-oriented trigger, data contract, approval, idempotency, failure and acceptance design.
Preview the fileHide preview
# CRM Data Cleanup After an Acquisition — Workflow Blueprint ## Trigger and termination - **Trigger:** an approved cleanup batch references immutable source snapshots and rule version. - **Success:** every approved proposal has one verified target state and a complete change record. - **Safe stop:** any unapproved proposal, integrity mismatch, relationship loss, consent/privacy conflict or unavailable rollback route. ## Data contracts Input: source system, source record ID, entity type, permitted comparison fields, consent/privacy state, related-record counts, active-work flags and snapshot ID. Never include secrets. Output: candidate ID, matched reasons, proposed survivor, field decisions, relationship plan, approval, execution status and reconciliation evidence. ## Ordered steps 1. **Code — validate batch:** check scope, snapshot, rule version and unique business keys. 2. **Code — normalize in staging:** produce comparison values without altering source records. 3. **Code — propose candidates:** emit reasons and confidence; do not merge. 4. **Human — decide identity and fields:** approve, reject or request evidence. Privacy, consent and active-work conflicts cannot auto-pass. 5. **Code — execute idempotently:** use the candidate ID plus approval version; a retry returns the prior result. 6. **Code — reconcile:** compare counts, relationships, required fields and change ledger with the expected state. 7. **Human — close exceptions:** data owner resolves or defers every unmatched case. ## Failure, retry and rollback Retry only after reading the candidate's effect state. If the target is unknown, reconcile before another write. Stop the batch when a critical invariant fails. Restore from the approved snapshot or reverse through the recorded field and relationship changes where the actual CRM supports that tested method. ## Permissions and tests Separate read, proposal, approval and destructive-write roles. Test exact duplicates, likely matches, false positives, shared contact details, conflicting consent, active opportunities, missing keys, repeated delivery, partial write and rollback. Acceptance requires no unauthorized merge, no lost required relationship, complete change evidence and matched reconciliation counts.
Limitations and when not to use this
- This is a system-agnostic design and simulated example, not a tested connector, migration service or claim of support for Salesforce, Microsoft, HubSpot or another CRM.
- Customer and contact records may contain personal, consent, contractual and access information. Use the actual data owner, privacy rules, permissions and retention requirements.
- A match score does not establish identity. Destructive merges require a named accountable reviewer and a tested recovery path.
- The downloads are editable design artifacts. Validate every action against the actual CRM and approved environment before use.
Sources
- Data Integrity: Detecting and Responding to Destructive Events — NIST Accessed 9 August 2026
- Merge Duplicate Records — Microsoft Learn Accessed 9 August 2026
- Considerations for Merging Duplicate Contacts — Salesforce Help Accessed 9 August 2026
Download the cleanup procedure
Adapt the scope, roles, hard stops and reconciliation tests before touching production records.
Download the cleanup procedureUli Prantz
Builds and operates all-agents
Uli Prantz builds all-agents, the process-automation platform this site documents. He writes about the operational side of automating recurring business work: where deterministic code beats model judgment, where it does not, and where a human still has to approve.