Skip to content

Can HubSpot workflows merge duplicate contacts?

50 specsNeeds Professional or higher (per-hub plans: Data Hub, formerly Operations Hub)4 need Enterprise23 also need Marketing Hub Professional on per-hub plans

Short answer

No. There is no merge action in the workflow tool, at any tier.

What you can build is the detection half: a custom coded action searches for a near match the moment a record is created, writes the candidate's record ID onto the record, adds it to a review list and assigns a task. A person merges afterwards, in the duplicate management tool or through the API. Data Hub Professional, about forty five minutes. The trap is exact string matching.

Read the whole answerShow less

What a spec looks like

Free Required field enforcement on contact creation (email or phone missing) Contact9 steps Read it in full
The nine sections, and the files

Every spec follows the same nine sections, so a team reads one and knows how to read all of them.

  • Outcome, when to use it and when not to
  • Prerequisites: properties, lists, tiers, with the JSON to create them
  • Enrollment and re-enrollment, then every step with its parameters
  • Known pitfalls, a test plan, variants, and the YAML build spec

PDF, Markdown, properties JSON, workflow JSON, custom code where used. Test plan and known pitfalls in every spec.

Each spec states its minimum tier. The 12 free ones open in full, the others show their public preview.

The 50 specs, in build order

Detect the duplicate at creation

Searches for a near match while the record is new, and writes the candidate's ID where a reviewer can open it.

What each spec doesHide
Show the 2 other specs in this groupShow fewer

Flag the gap that creates the next duplicate

Required fields and association checks on every object, because a record with no domain and no company is the one that gets created twice.

What each spec doesHide
Show the 7 other specs in this groupShow fewer
Association hygiene: ticket must have a contact associationTicket5 stepsService Hub ProfessionalTickets created without a linked contact are flagged and routed to a cleanup queue instead of sitting unassignable to any customer record.Per-hub plans: also Marketing Hub ProfessionalPrimary company association enforcement on contactContact7 stepsContacts linked to more than one company always have a clear primary company on record, instead of leaving reports and account-based routing to guess which one counts.Per-hub plans: also Marketing Hub ProfessionalAssociation hygiene: prevent duplicate association labels on the same record pairDeal6 stepsDeals that end up associated to the same contact under a repeated or conflicting association label get flagged for cleanup, instead of quietly confusing reports that count associations by label.Per-hub plans: also Marketing Hub ProfessionalCustom object required-field enforcement on creationCustom4 stepsData Hub EnterpriseNew custom object records missing a required field get flagged and routed to a task immediately, instead of an incomplete record sitting unnoticed until someone downstream tries to use it.EnterpriseOrphaned deal cleanup list (no owner, no contact, no company)Deal2 stepsDeals missing an owner, a contact, or a company land on one list ranked by amount, so cleanup effort starts with the deals that actually matter financially instead of a random crawl through the pipeline.Custom object association hygiene (child record must link to parent)Custom5 stepsData Hub EnterpriseChild custom object records created without a link to their parent get flagged immediately, instead of orphaned records piling up that nobody can trace back to where they belong.EnterpriseAssociation count cap per company (portfolio hygiene flag)Company7 stepsCompanies that have accumulated an unusually large number of associated contacts get flagged for a portfolio review, catching runaway association growth, a shared catch-all company absorbing every unrelated inbound lead for example, before it distorts account-level reporting.Per-hub plans: also Marketing Hub Professional

Normalize the fields matching depends on

Phone, country, state, casing, job title, industry, address, dates and locale, so two versions of the same value stop reading as two records.

What each spec doesHide
Show the 8 other specs in this groupShow fewer
Job title standardization via lookup mappingContact7 stepsJob titles entered as free text ("VP Sales", "Vice President of Sales", "Sales VP") collapse into one standard title, so persona-based segmentation and lead scoring can filter on job title reliably.Per-hub plans: also Marketing Hub ProfessionalIndustry field standardization to a fixed picklistCompany7 stepsIndustry values imported as free text or as slightly different phrasing all collapse into one of your portal's standard industry options, so segmentation and reporting by industry are not silently split across near-duplicate values.Per-hub plans: also Marketing Hub ProfessionalAddress field standardization (street abbreviations, casing)Contact2 stepsStreet addresses land in one consistent format, title case with standard abbreviations for street, avenue, suite, and similar terms, so mailing labels, exports, and address-based matching all read the same value.LinkedIn and social URL cleanup and format enforcementContact5 stepsLinkedIn profile URLs land in one clean, consistent format with tracking parameters stripped, and anything that is not a real LinkedIn profile URL gets flagged instead of silently sitting there unusable.Language and locale property normalizationContact7 stepsA contact's preferred language always reads as one of a small, standard set of values, instead of a mix of raw locale codes, free-text guesses, and inconsistent casing that no email personalization rule or list segmentation can reliably filter on.Standardize date property format across import sourcesContact1 stepA date property fed by multiple import sources in inconsistent formats reads and sorts correctly everywhere in HubSpot, instead of storing some records as text-parsed garbage or the wrong day from a day and month swap.Round and format a numeric property (revenue estimate)Company1 stepA revenue estimate field always lands as a clean rounded number, instead of mixing precise-looking decimals next to plain guesses that both claim a precision they do not have.Custom object property normalization (picklist mapping from free text)Custom5 stepsData Hub EnterpriseA free-text field on a custom object that different people or import sources fill in inconsistently gets mapped to a small, standard set of categories automatically, the same lookup-table pattern used for standard-object fields in data-quality-014, applied here to a custom object.Enterprise

Associations and the values that should travel with them

Links a contact to its company from the email domain, then copies the handful of fields that segmentation keeps asking for.

What each spec doesHide
Show the 2 other specs in this groupShow fewer

Scores, checks and the review queue

Completeness, junk values, typo detection, cross-field contradictions and the enrichment fallbacks, all landing in a queue with a named owner.

What each spec doesHide
Show the 9 other specs in this groupShow fewer
Calculated property: lead-to-customer conversion time in daysContact4 stepsEvery contact that becomes a customer carries a single number for how many days the lead-to-customer journey took, so sales cycle reporting stops depending on a manual date-diff pulled separately for every cohort.Data-verified checkbox with periodic review reminderContact4 stepsContacts marked as verified automatically come back up for review after a fixed interval, instead of a verified checkbox staying checked forever after the one time someone actually checked it.Custom code email typo detection (common domain misspellings)Contact6 stepsContacts with a likely misspelled email domain, such as "gmial.com" or "yahooo.com", get flagged with a suggested correction, instead of bouncing silently on the first send and never being noticed until a campaign report shows a dead address.Cross-field consistency check: phone country code vs. address countryContact6 stepsContacts whose phone number's country calling code clearly disagrees with their stated address country are flagged for a look, catching mismatched or copy-pasted contact records before a call goes to the wrong country's sales rep or time zone.Territory-country mismatch flag (phone or address vs. assigned territory)Contact6 stepsContacts whose phone country code or address country falls outside the countries actually covered by their assigned sales territory get flagged before a rep spends time on a lead routed to the wrong region.Per-hub plans: also Marketing Hub ProfessionalEnrichment: reverse IP-to-company lookup review queueContact6 stepsContacts a connected IP-to-company enrichment tool matches with low confidence get routed to a human check before the guessed company is treated as reliable, instead of a wrong or generic ISP match silently sitting on the record as if verified.Enrichment fallback task when third-party enrichment finds no matchContact6 stepsContacts that a connected enrichment tool fails to match get a manual research task after a short grace period, instead of quietly staying incomplete because everyone assumed enrichment handled it.Per-hub plans: also Marketing Hub ProfessionalCustom code validation of deal amount against line item totalDeal7 stepsA deal whose amount field disagrees with the sum of its actual line items gets flagged before it reaches a forecast or a quote, instead of a stale, manually-typed amount quietly overstating or understating what the deal is really worth.Per-hub plans: also Marketing Hub ProfessionalAdvanced multi-step enrichment and normalization via webhook and custom codeContact2 stepsData Hub EnterpriseA newly created contact gets enriched from an external data provider and has its returned fields normalized to your standard formats in the same pass, landing with a clear success or failure status, instead of enrichment and cleanup running as two disconnected steps someone has to babysit separately.Enterprise

Fix the backlog, then keep it fixed

One controlled pass over the records that already exist, and a scheduled sweep so the portal does not drift back.

What each spec doesHide

The 3 things that break this, and how the specs stop them

There is no merge action, on any tier

This is the honest answer to the question people arrive with.

A workflow can flag, tag, list and assign, and that is where its authority over a duplicate ends. Merging happens in the native duplicate management tool under Contacts, Actions, Manage duplicates, or through the CRM API, both outside the workflow. So every spec here is built as detect and queue, with a named owner and a short due date. A review queue nobody clears is not a cleanup process, it is a second place where the problem lives.

How the specs stop itShow less

Exact matching misses your duplicates and flags the ones you do not have

Comparing raw domain values treats acme.com and https://acme.com/ as different companies, and mail.acme.com as a third.

In the other direction, a parent brand and a sub-brand can legitimately share one marketing domain, and a name similarity check on Global Logistics and Global Marketing flags two unrelated companies. Matching on last name plus email domain turns every free mail address into a false positive unless the code excludes those domains explicitly. This is why the normalization component comes before the matching component, not after it.

How the specs stop itShow less

Custom code has a clock, a memory ceiling and a rate limit

Each custom coded action run has to finish inside twenty seconds and 128 MB, and you can set a rate limit per action that pauses that action and everything after it once it is exceeded.

The CRM Search API these specs call is itself rate limited, so a bulk import that creates two thousand contacts in a burst will throttle the lookup. The good news is that it surfaces as a failed execution in workflow history rather than a silent pass, which means you can find it. The specs say where to look.

How the specs stop itShow less

What this bundle builds

Two records for the same person, and nobody knows which one the rep should call. That is the visible symptom. Underneath it sit a dozen smaller failures: a country field holding four spellings of the United States, a phone number with no country code, a contact with no company, an email domain typed as gmial.com.

Fifty specs work on all of it. Six detect near duplicates at creation, on contacts, companies and tickets, and write the candidate's record ID onto the record so the reviewer opens one tab instead of searching. Eleven flag the gaps that manufacture duplicates in the first place, the missing domain, the missing association, the missing required field. Twelve normalize the values that matching depends on, phone, country, state, casing, job title, industry, address, dates and locale. Six handle associations and the cross-object copies that stop people re-typing company data onto contacts. Thirteen score, check and queue: completeness, junk values in name fields, a deal amount that disagrees with its line items, a phone country code that contradicts the address. Two deal with the backlog you already have.

Every one of them is detect and queue. None of them merges anything, because no workflow can.

Read the restShow less
How the pieces fit together

Normalization before matching. That order is the whole argument of this bundle. A domain comparison on raw values treats one company as three, so the phone, country and casing specs earn their keep by making the later comparisons mean something.

Then the flags, which need nothing and depend on nothing. Required fields, association hygiene, the primary company enforcement. They are the fastest twenty minutes in the bundle and they cut the inflow of new problems while you build the rest.

Detection third, once the fields it reads are consistent and once you know who owns the review queue. Each detection spec writes a review status property, so a record cleared as unique is not re-queued next week. Keep those status values consistent across the three detection specs or your queue reports will not add up.

The backlog last, deliberately. Running a normalization pass over four hundred thousand contacts before testing the rule on twenty is how a cleanup project becomes an incident. And the scheduled sweep repeats logic the event based specs already run, so decide which one owns each field rather than leaving both live and drifting apart.

What you get
  • 50 specs, from a 15 minute rounding rule to a 60 minute enrichment and normalization pass, roughly 27 hours of build with testing
  • Each spec as PDF and Markdown, with enrollment criteria, the step list, a diagram, a test plan and the known pitfalls written out
  • Properties JSON: 76 property definitions across contacts, companies, deals, tickets and custom objects, including the review status properties that stop a cleared record re-entering the queue
  • Workflow JSON in Automation API format, switched off on import
  • Custom coded actions in 33 specs, with the matching logic, the free mail exclusions and the error result codes written out, not left as a comment
  • Tier stated per spec: 43 Data Hub Professional, 4 Sales Hub Professional, 2 Data Hub Enterprise, 1 Service Hub Professional
  • Static lists and review queues named and specified, with the task owner and the due window
  • Install in one click for Full and Agency buyers
Who it is for, and who should skip it

For whoever owns data in a portal where reporting has stopped being believed. Also for a consultant inheriting a portal after two migrations and an acquisition, since the first thing anyone asks for is a duplicate count and the second is a plan that does not involve a spreadsheet.

Skip it if you are looking for automatic merging, because it does not exist and this bundle will tell you so on every page. Skip most of it if you are not on Data Hub Professional, since forty three of the fifty need a custom coded action, though the flag and required field specs will still run. And if the duplicates came from one bad import rather than an ongoing process, the native duplicate tool plus an afternoon may be the honest answer instead of any of this.

Questions admins ask

Can HubSpot workflows merge duplicate contacts?

No. The workflow action list has no merge action at any tier, and it is not a permissions or pricing question. The workable pattern is detection: search for a near match at creation, write a review status and the candidate record ID, add the record to a static list and create a task. The merge itself happens in the native duplicate management tool or through the CRM API, by a person who can judge which record should survive.

What does the native duplicate management tool do that a workflow cannot?

It merges, and it works on the backlog. The tool surfaces likely duplicate pairs across the records you already have and lets somebody merge them in place. What it does not do is catch a duplicate the minute it is created, or tell you why two records looked alike. That is what these specs add: a fast net on new records, an audit trail on the decision, and a queue with a due date. Use both, they solve different halves.

Do I need Data Hub Professional to deduplicate in HubSpot?

For matching beyond an exact field filter, yes, because that needs a custom coded action. Forty three of the fifty specs here sit at Data Hub Professional for that reason. Four run on Sales Hub Professional and one on Service Hub Professional, and those are the flag and required field specs, which is worth knowing if you want the review queue working this week while the code question goes through procurement.

Can a workflow stop a duplicate record from being created?

No. Workflows react after the record exists, so every check in this bundle detects and flags rather than blocks. HubSpot does prevent two contacts from sharing the same primary email address by itself, which is why these specs target near duplicates, the same person with a work address and a personal one. The preventive controls that do exist live on forms and pipeline stages, not in automation.

How do I clean up the duplicates already in the portal?

Two specs cover the backlog. One enrolls an existing list once, through manual enrollment with every automatic trigger switched off, so a normalization rule applies to history rather than only to new records. The other is a scheduled sweep that re-checks the active database on a fixed cadence. Export the source list before the one-time pass, because removing records from the list as a progress indicator also destroys your targeting.

Read 12 complete specs before you pay.

One per category, same format as the paid ones. Email only, no card.

We email the link, then a short note when specs change. Nothing else.

69 EUR89

This bundle
Get this bundle