RevOps HQ
← BACK TO BLOG
9/22/2026
Industry SolutionsRevOps Strategy & Frameworks

HubSpot Deduplication Across Three Systems: Survivorship, Identity and the Sync That Recreates Them

Deduplicating inside HubSpot fixes the portal. Where an ERP and a field service platform also hold the same customer, the duplicates come back on the next sync, because the problem is identity rather than hygiene.

P

Paul Maxwell

AUTHOR

GET WEEKLY REVOPS INSIGHTS

No spam. Unsubscribe anytime.

The duplicate that returns

A portal is deduplicated on a Friday and holds duplicates again by the following Thursday. The cleanup was competent, the merges were correct, and the records came back anyway.

That pattern means the duplicates are not being typed in. They are being created by an integration, and an integration that created them once will create them again on its next run no matter how thoroughly the portal is cleaned. Cleaning without fixing the source buys a week. Redman (1998) describes poor data quality as a cost borne continuously and recognised rarely, which is what makes this particular loop so easy to fund repeatedly.

This is the ordinary condition in any business running HubSpot beside an enterprise system and an operational platform: three systems, each holding a version of the same customer, each having minted its own identifier for it.

Why in-portal deduplication does not settle it

HubSpot's own duplicate management is good at what it is for. It surfaces likely matches on a fixed set of criteria and offers a merge, and for duplicates created by human entry that is usually enough.

It cannot settle a three-system estate, for a reason that has nothing to do with the tool. The question of which record should survive is not answerable from inside HubSpot. A company record created by a dispatch platform and a company record created by a finance system differ in which fields each one is authoritative about, and HubSpot can see neither system.

Merging without answering that first is a coin toss with a destructive outcome, because a merge resolves conflicting values to the surviving record and the other values are gone. Batini, Cappiello, Francalanci and Maurino (2009) separate data-quality work into assessment and improvement as distinct phases requiring distinct techniques, and the separation matters more here than usual: the improvement step is irreversible.

Survivorship is decided per object type

The instinct is to pick one system and declare it canonical for everything. It is simple, and on at least one object type it will be wrong.

An enterprise system is authoritative about a customer's legal entity, billing address, payment terms and account status, because finance is accountable for those. It knows nothing useful about a service department, which exists because a dispatcher created it to route a technician. A CRM is authoritative about the commercial relationship and about nothing financial.

The rule is therefore set per object type, and the merge direction follows from that assignment rather than from which record happens to be older or more complete.

What each of three systems authoritatively knows about each object typeA grid of four object types against three systems. For a company, the enterprise system holds the legal entity, billing and account status, the dispatch platform holds the site a technician was sent to, and the CRM holds the commercial relationship. For a contact, the enterprise system holds billing and remittance contacts, the dispatch platform holds whoever booked and signed for the job, and the CRM holds whoever is being sold to. For a deal, the enterprise system holds invoiced value, the dispatch platform holds nothing, and the CRM holds stage, owner and forecast. For a department, the enterprise system holds nothing, the dispatch platform creates the record in order to route work, and the CRM holds only what the integration gave it. The final column, which system is canonical for each row, is left open: the client designates it per object type before any merge runs, and the assignment is not the same on every row. A single global survivorship rule would be correct on some rows and destructive on others.SURVIVORSHIP IS DECIDED PER OBJECT TYPE, NOT ONCEEach cell is what that system authoritatively holds about that object. A dash means it holds nothing useful.The right-hand column is a decision the client makes before any merge runs. It is left open here because the scope of work records the rule and not the answers.ENTERPRISE SYSTEMDISPATCH PLATFORMHUBSPOTCANONICALCompanyLegal entity, billing, account statusThe site a technician was sent toThe commercial relationshipclient designates,this row onlyContactBilling and remittance contactsWho booked and signed for the jobWho is being sold toclient designates,this row onlyDealInvoiced valueStage, owner, forecastclient designates,this row onlyDepartmentCreated by dispatch to route workInherited from the integrationclient designates,this row onlyA global rule would be correct on one row and destructive on another.A merge resolves conflicting values to the surviving record. Choosing the wrong survivor discards the values the business relies on for that object.
What each system knows about each object type, and why survivorship is decided one row at a time.
What each system authoritatively knows about each object type, and why one global rule fails

Two consequences follow. The assignment belongs to the business rather than to whoever runs the migration, because only the business knows whether the dispatch platform or the finance system is right about what a department is. Pipino, Lee and Wang (2002) argue that data-quality assessment has to combine objective measurement with subjective judgement, and which system owns a department is exactly the judgement half. It also has to be written down and agreed before a single merge executes, because a merge cannot be reversed by agreeing afterwards.

The three-identifier write

The mechanism that creates integration duplicates is usually a partial identifier write, which stays invisible until it is drawn.

A record created by an early sync carries the enterprise identifier and the CRM identifier. A record created later carries the operational identifier and the CRM identifier. Neither carries the full set. When the integration next runs, it cannot match an incoming record against either of them with confidence, so it creates a third.

How a partial identifier write makes a duplicate, and what the survivor carriesTwo company records exist for one dealership. The first, created by an early sync, carries the enterprise system identifier and the CRM identifier, and its dispatch platform identifier is empty. The second, created by a later sync, carries the dispatch identifier and the CRM identifier, and its enterprise identifier is empty. Because neither record carries the full set, the integration cannot match an incoming record against what it has already created, so it creates another one. The identifier values shown are placeholders; the pattern of which are present and which are empty is the diagnosed mechanism. Below, the surviving record carries all three identifiers, which is what converts a deduplication into a reconciliation. Beside it, the fix to the synchronisation logic is what stops the pattern above from recurring on the next sync.ONE DEALERSHIP, TWO RECORDS — NEITHER CARRIES THE FULL SETIdentifier values are placeholders. Which ones are empty is the diagnosed mechanism.Company record Acreated by the first syncenterprise idvalue presentdispatch idEMPTYCRM idvalue presentCompany record Bcreated by a later syncenterprise idEMPTYdispatch idvalue presentCRM idvalue presentno match possible between themmerge, survivorship rule appliedSurviving recordone dealership, one recordenterprise idvalue presentdispatch idvalue presentCRM idvalue presentFix to the sync logicTwo hours of a twenty-hour engagement,and the only part with a permanent effect.Without it, the upper band returnson the next sync.A deduplicated record carrying one identifier is correct in one system and orphaned in two.Validation traces a sample across all three systems, because nothing inside one system can detect an identifier pointing at the wrong customer in another.
The duplicate-creation mechanism and its remedy. Writing all three identifiers onto the survivor is what makes the record recognisable to the next sync.
Two records for one customer, neither carrying the full identifier set, and the survivor that does

The step that converts a deduplication into a reconciliation is therefore writing every identifier onto the surviving record. A deduplicated record carrying one identifier is correct in one system and orphaned in the other two, which is a cheaper form of the same problem rather than a solution to it.

Fixing the thing that made them

The allocation of effort in this work is counterintuitive.

The merging is the visible part and the larger part by hours. The diagnosis that precedes it produces no visible change at all and is what makes the merging safe. The smallest part, frequently a couple of hours against a couple of days of cleanup, is the correction to the synchronisation logic.

The correction is the only part with a permanent effect. A cleanup without a source fix produces a portal that is correct on the day of handoff and degrades from the next sync onward.

Validation has to leave the system

A record can be perfectly deduplicated inside HubSpot and still carry an enterprise identifier belonging to a different customer. Nothing inside HubSpot can detect that.

The check that matters samples records and traces each one across all three systems, confirming the identifiers reconcile end to end rather than confirming that one portal looks tidy. Wang and Strong (1996) define data quality by fitness for the consumer's use, and the consumers here are a dispatcher, a finance clerk and a salesperson each believing they are looking at the same customer. A check confined to one system cannot establish that they are. Associations merit a spot-check afterwards, because the association graph is what a merge is most likely to damage quietly.

Controls worth insisting on

Four, and none of them is technically interesting. A confirmed export point before any merge runs, because the operation is destructive and the alternative to a backup is hope. Staged execution reviewed before running at scale, so that a rule which turns out to be wrong is wrong about twenty records rather than twenty thousand. An instruction to pause and re-estimate if the duplicate volume proves materially larger than what was observable at diagnosis, which is the honest response to discovering the job is not the job that was scoped. And a written survivorship rule per object type, signed off by whoever owns the data, before anything executes.

The choice of improvement technique is a decision in its own right rather than an implementation detail (Batini et al. 2009), and these four are what that decision looks like when the technique cannot be undone.

What this does not cover

This describes duplicates created by integrations between systems. Duplicates created by people entering records twice are a different problem with a different remedy, and that remedy is validation and a required-field discipline at the point of entry rather than a reconciliation project.

Nothing here establishes that deduplication improves a commercial outcome. It removes a known source of error from reporting and from outbound communication, and whether that changes a number depends on what the error was costing. Redman (1998) puts that cost on the operating account rather than on a hygiene line, although quantifying it at a particular firm is work in itself.

Three systems is also where this gets interesting. Two systems with one integration have a single identity question. Three have three pairwise relationships, and the survivorship complexity grows faster than the count of systems suggests.

Where to start

Not with a merge. The starting question is, for each object type that carries duplicates, which system is telling the truth about what that record is. Where that question has never been answered, it is the reason the integration cannot recognise its own output, and answering it is most of the work.

The related mechanics of in-portal deduplication, what HubSpot merges automatically and what a merge destroys field by field, are covered separately in the HubSpot duplicate management guide. The decisions that govern any integration crossing a system boundary are set out in the integration architecture white paper.

References

Batini, C., Cappiello, C., Francalanci, C., & Maurino, A. (2009). Methodologies for data quality assessment and improvement. ACM Computing Surveys, 41(3), 1–52. https://doi.org/10.1145/1541880.1541883

Pipino, L. L., Lee, Y. W., & Wang, R. Y. (2002). Data quality assessment. Communications of the ACM, 45(4), 211–218. https://doi.org/10.1145/505248.506010

Redman, T. C. (1998). The impact of poor data quality on the typical enterprise. Communications of the ACM, 41(2), 79–82. https://doi.org/10.1145/269012.269025

Wang, R. Y., & Strong, D. M. (1996). Beyond accuracy: What data quality means to data consumers. Journal of Management Information Systems, 12(4), 5–33. https://doi.org/10.1080/07421222.1996.11518099

HubSpot services

Onboarding, implementation, integration, migration, administration and training, each scoped and priced before the work begins

WEEKLY PROGRAM

RevOps Office Hours

A recurring weekly RevOps operating program. Live support plus hands-on HubSpot implementation work.

$1,500/mo
Monthly Operating Program
  • 1 live Office Hours session per week
  • 4 hours of hands-on implementation work per month
  • Hours allocated against priorities agreed at the start of each period
  • Recurring monthly cadence