Reconciliation between CRM and external tools
A practical reconciliation loop for CRM, enrichment, sequencing, and reporting systems when records disagree, updates arrive late, or a job times out.
On this page
Two systems can both report success and still disagree. Reconciliation is the controlled process that decides which state is authoritative, which changes are safe to apply, and what needs review.
The reconciliation record
| Field | Example |
|---|---|
| Stable identity | CRM ID plus external object ID |
| Field | company_domain |
| CRM value | acme.example |
| External value | acme.co |
| Source authority | CRM for ownership, provider for observed domain |
| Observed times | One timestamp per source |
| Result | Keep CRM, accept provider, or review |
| Reason | Policy or conflict code |
Resolve field by field. A system may be authoritative for ownership and a provider may be authoritative for a narrow observed attribute.
Reconciliation loop
- Match the same subject with stable IDs and a reviewed fallback key.
- Compare values, source, authority, and observed time.
- Apply a deterministic overwrite rule where one exists.
- Route an unresolved or high-consequence conflict to review.
- Write the result and preserve the losing value in history.
- Recheck after the next source update.
Never overwrite a CRM value before recording what it was. Conflict resolution and overwrite policy covers the field-level decision.
Late and duplicate events
An old event arriving after a newer CRM update should be compared by source observation time, not ingestion time. A duplicate event should be safe to ignore by event ID. A timeout should be marked unknown until the result is confirmed. These rules belong in the job history, not just the integration log.
Platform boundary
Keep business authority in the CRM or the explicitly chosen system of record. Use API or workflow actions to move a permitted value. Current Salesforce integration guidance covers event and API patterns; HubSpot's developer documentation covers CRM object APIs and custom workflow actions. Verify limits and authentication scopes against the current Salesforce integration documentation and HubSpot CRM API documentation.
Compare meaning, not just values
Normalize dates, nulls, picklist values, identifiers, and casing before declaring a mismatch. Then apply field-level authority and freshness rules. A newer external observation does not automatically outrank a verified CRM value, and an empty value may mean unknown rather than delete.
Classify each difference as expected lag, auto-repairable, review required, or blocked by policy. Store both observed values, source timestamps, authority decision, action, and result. That record makes repeated disagreements visible and prevents an integration from oscillating between two values.
Operate the loop
Run reconciliation often enough for the business promise, with a broader full comparison on a slower cadence. Track mismatch rate, oldest unresolved item, repair success, repeated conflicts, and records missing a stable cross-system identity. Sample “matched” records too; a shared wrong value will not appear in an exception queue.
Related: Handoff contracts, Workflow states and job history, and Field-level source authority.
Related guides
FAQ
- How do I reconcile conflicting CRM and external-tool values?
- Choose field-level authority, compare source timestamps and provenance, apply the overwrite policy, and record the result. Do not resolve every conflict with last-write-wins. A conflict can be a review outcome.
Get the next guide
New guides and the occasional note on GTM tooling. Don't worry, I won't drop you into a three-month nurture.