What to do with duplicate deals after a CRM migration

What to do with duplicate deals after a CRM migration: the cause, a fixed decision rule for which record survives and the safe order to clean them up.

ON THIS PAGE · 8 SECTIONS
  1. Why CRM migrations create duplicate deals
  2. How many duplicate deals should you expect?
  3. Which deal record should survive?
  4. What merging actually does to deal history
  5. Salesforce versus HubSpot: how each one handles duplicate deals
  6. The cleanup order that protects live deals
  7. How to stop the duplicates from coming back
  8. Questions about duplicate deals after a CRM migration

THE SHORT VERSION

  • A duplicate deal after a CRM migration is one real opportunity split across two or more records, created by parallel syncs, a broken match key or a rep who could not find their deal and started a new one.
  • Pick the survivor with a fixed rule, not a judgment call: open beats closed, highest stage beats lowest, most recent activity beats stale, largest amount breaks a tie.
  • HubSpot merges deals natively but caps any record at 250 combined merges over its lifetime and cannot undo a merge. Salesforce has no native merge for Opportunities at all.
  • Clean up in order: freeze the old system first, protect open deals closing this quarter, then older open deals, then closed-won for attribution, then closed-lost last.
  • Fix the match key that caused the duplicates or the same mess is back within a quarter.

A duplicate deal after a CRM migration is two or more records tracking the same real opportunity, created when both systems write at once during a parallel run, when an import skips the right match key or when a rep cannot find their deal in the new system and starts a fresh one. The fix is not a bulk merge button. It is a short decision rule for which record survives, applied in a fixed order, starting with open deals that have a close date this quarter and ending with closed deals nobody is chasing anymore.

Why CRM migrations create duplicate deals

Duplicates rarely come from one mistake. They come from the migration itself running two systems at once for a stretch, which is normal and usually unavoidable. A few patterns cause most of the mess:

  • Parallel run overlap. Reps keep working in the old CRM while the new one goes live. Both get updated independently for a week or two.
  • A weak match key. Matching by contact email instead of company domain creates a new deal every time a second contact at the same account gets added.
  • Re-imports. A second CSV pass to fix a field mapping error often re-creates records instead of updating the ones already migrated.
  • Rep workaround. A rep cannot find a deal they know exists, assumes it did not migrate and creates a new one rather than waiting on support.
  • Marketing and sales tools writing in parallel. An enrichment tool or a form submission creates a company or contact record the migration script does not recognize as the same account.

None of these are rare. They are the normal cost of moving a system of record while the business keeps selling through it, which is also what makes outbound pipeline during a CRM migration fragile in the same window.

Duplicate deals get created at three points: the parallel run, the import and the rep workaround. Each one needs a different fix.

How many duplicate deals should you expect?

CRM data quality is worse than most teams assume going in, migration or not. Validity surveyed 602 CRM users and stakeholders for its 2025 report and found that most organizations are not close to a clean baseline before a migration even starts.

76%say less than half their CRM data is accurate and complete
37%say poor data quality has cost them revenue directly

Source: Validity, State of CRM Data Management, 2025

A migration does not add new duplicates on top of clean data. It exposes duplicates that were already there and adds a batch of fresh ones from the move itself. One education company cited in Validity's own research was merging 6,000 duplicate records a month once it automated matching, which gives a sense of scale at the enterprise end (Validity, 2024). A company with a few thousand deals should expect the count to run into the hundreds, not dozens, in the first month after cutover.

Which deal record should survive?

Eyeballing two records and picking the one that "looks right" does not scale past a handful of duplicates. It also produces inconsistent decisions between reps. Use a fixed order instead:

  • Open beats closed. An active conversation always outranks a record that is no longer moving.
  • Highest pipeline stage beats lowest. The record further along has more accurate data about where the deal actually stands.
  • Most recent activity beats stale. A record with a logged call or email in the last 30 days beats one with none.
  • Largest amount breaks a tie. If both records are equally open, equally advanced and equally recent, keep the one with the number closest to what the rep would quote today.

Write this down before anyone starts merging. A rule a manager can check in ten seconds beats a conversation about every disputed record. It also means two reps working the duplicate pair get the same answer either way.

A decision rule beats a merge button every time.

What merging actually does to deal history

The two most common destinations for a migration, HubSpot and Salesforce, handle a deal merge very differently. That difference changes how you plan the cleanup.

In HubSpot, merging two deals keeps the primary record's properties and fills any blank field from the secondary record. All logged activity from both records lands on the survivor. Associated records such as contacts and companies carry over too. The catch: a record cannot be merged once it has been part of 250 combined merges over its lifetime. A merge also cannot be undone once it runs (HubSpot, Merge records).

In Salesforce, there is no merge action for Opportunity records at all. Merge only works for Leads, Contacts, Accounts, Person Accounts and Individuals, up to three records per request, with the master record's field choices kept and the others deleted (Salesforce, Merge duplicate contacts). Two duplicate Opportunities have to be closed and reassigned by hand, through Flow automation or with a paid AppExchange tool. If you migrated into Salesforce, plan for this before you find out mid-cleanup.

Salesforce versus HubSpot: how each one handles duplicate deals

What you needHubSpotSalesforce
Native deal or Opportunity mergeYesNo
Records per merge23 (Leads, Contacts, Accounts only)
Merge limit per record250 combined merges, lifetimeNo published cap
Can you undo itNoNo
Time to fully sync activityUp to 30 minutesNear instant

HubSpot handles deal duplicates directly. Salesforce needs a workaround for Opportunities every time.

The cleanup order that protects live deals

Running the dedupe pass in the wrong order is how teams merge an open deal into the wrong record a week before a renewal call. Work through it like this:

  1. Freeze the source system. Stop writes to the old CRM once the new one is live. Every write after cutover is a future duplicate.
  2. Export and match on a real key. Match by company domain plus deal name or amount, not by record ID or contact email alone. The weak key is usually what caused the duplicates in the first place.
  3. Protect open deals closing this quarter. Review and merge these by hand, with the rep on the call, before touching anything else.
  4. Merge remaining open deals. Apply the survivor rule and move fast. These are lower risk but still live.
  5. Merge closed-won deals. This matters for revenue attribution and renewal timing even though nobody is actively working them.
  6. Merge or archive closed-lost deals last. They affect historical reporting but nothing live, so they can wait a week without costing you anything.

Worked example: a company migrating 1,400 deals from HubSpot to Salesforce matched records by company domain and deal amount and found 164 duplicate pairs, about 12% of the book. Of those, 9 were open deals closing within 30 days and got merged by hand on day one. The remaining 155 were cleared over the following week using the same four-step order. The closed-lost half of that list, 61 pairs, was handled last because no live conversation depended on it.

FROM THE YARD

Most of the duplicate deals we find after a migration are not identical twins. They are an open deal and a closed-lost deal for the same account, created months apart by two different reps who never checked a shared view. Merge those first. They are the ones costing you a live conversation, not a row in a report nobody reads.

How to stop the duplicates from coming back

THE USUAL WAY

  • Run one big dedupe pass after cutover and call the migration done.
  • Match records by whatever field the export happened to include.
  • Let reps keep creating deals by hand with no duplicate warning.

THE SYSTEM WAY

  • Fix the match key first, then run the dedupe pass on top of a key that actually works.
  • Set a native or third-party duplicate rule that blocks the second record at creation, not after.
  • Run a scheduled dedupe check at 30 and 90 days, since laggard syncs and forgotten exports still trickle in.

A single cleanup pass treats the symptom. The match key is the actual cause. A tool enforcing a real duplicate rule at the point of creation is what keeps the count from climbing back to where it started. This is also where a clear owner matters: see our RevOps handoff checklist for who should be watching this once the migration project itself is closed. If the CRM you landed on cannot enforce the rule you need, that is worth knowing before the next renewal, not after. Our CRM evaluation checklist covers what to test for before you buy the next one.

If the rest of your sending and reporting stack is shaky through the same window, that is usually not a coincidence. Our outbound system build covers the data layer alongside the send, so a migration does not quietly break both at once.

Questions about duplicate deals after a CRM migration

Can you merge duplicate Opportunities in Salesforce?

Not natively. Salesforce's merge action only supports Leads, Contacts, Accounts, Person Accounts and Individuals. Duplicate Opportunities have to be closed and reassigned by hand, through a Flow or with a paid AppExchange tool such as Cloudingo or DemandTools.

Does merging deals in HubSpot delete the activity history?

No. All logged activity from both deals moves to the surviving record. Associated contacts and companies carry over too. The limits to know about are that a record cannot be part of more than 250 combined merges over its lifetime and that a merge cannot be undone once it runs.

What is the best way to find duplicate deals after a migration?

Match on company domain plus deal name or amount, not record ID or contact email alone. Record IDs never match across systems. Contact email misses duplicates where two different people at the same account each got their own deal record.

Should you merge closed deals or leave them alone?

Merge them, just last. Closed-won duplicates distort revenue attribution and renewal dates. Closed-lost duplicates distort historical win rate on top of that. Neither is urgent compared with an open deal, so work through those first.

How soon after a migration should you run a dedupe pass?

Immediately for open deals, then again at 30 and 90 days. Laggard syncs, delayed imports and reps still logging into the old system for a few weeks keep adding duplicates well after cutover day.

Sources: Validity, State of CRM Data Management 2025, Validity, The Evolution of Data Quality Management, HubSpot, Merge records, Salesforce, Merge duplicate contacts

WRITTEN BY

Hlib Storchak

Founder of Shipyard GTM. Builds and runs outbound systems for B2B teams from Riga. 2000+ meetings booked for clients so far.

BUILD IT FOR YOUR MARKET

Want this running for your team?

30 minutes. We map your market on the call and show you how we would build your outbound system.

Book a call