Merge Duplicates
Merge Duplicates finds records that duplicate the enrolled one and merges them into a single survivor. Matching can be as simple as a shared phone number or as precise as multi-property AND/OR rules with normalizers. Preview mode reports what would merge without changing anything. Available from the Pro plan.
Input fields
| Field | Shown for | What it does |
|---|---|---|
| How to find duplicates | always (required) | Same phone number (numbers are normalized before comparing), same value in a property (a live property dropdown appears), or advanced rules (a rules box appears). |
| Property that must match | property mode | Only for property matching: duplicates are records sharing the enrolled record's value in this property. |
| Advanced match rules | advanced mode | Properties joined by + must all match (AND); alternatives separated by | (OR). Normalizers: :phone, :domain, :exact, :ci. Example: phone:phone + country | customer_id:exact |
| Which record survives | always | Oldest (default), newest, or most complete (the record with the most filled properties). |
| Mode | always | Preview only (default) reports duplicates without merging. Merge for real performs the merges. |
Output fields
| Output | Meaning |
|---|---|
| Success | true when the scan or merge completed. |
| Status | preview, merged, no_duplicates or error. |
| Surviving Record ID | The record everything merged into. |
| Merged Record IDs | Comma separated IDs that were (or would be) merged away. |
Worked examples
Continuous contact dedupe by normalized phone
- 1Workflow: contact based, enrolled on create.
- 2How to find duplicates: Same phone number.
- 3Which record survives: Oldest record survives.
- 4Mode: Preview only for the first week; check the Merged Record IDs output in your workflow history.
- 5Flip Mode to Merge for real once the preview output looks right.
Advanced: phone AND country, or exact customer id
- 1How to find duplicates: Advanced rules.
- 2Rules: phone:phone + country | customer_id:exact
- 3Reads as: same normalized phone AND same country, OR exactly the same customer_id.
Good to know
- Always start in preview mode. Merges in HubSpot cannot be undone.
- The :phone normalizer strips formatting and leading zeros so +91 98765 43210 matches 09876543210.
- The :domain normalizer strips protocol and www so https://www.acme.com matches acme.com.
Use cases
Continuous contact dedupe
Enroll on create, match on normalized phone plus country, keep the oldest record. Run in preview first.
Company dedupe by domain
Match on domain with the :domain normalizer so www and protocol differences do not block matches.
Order dedupe on a custom object
Match a custom order object on order_number:exact and keep the most complete record.
Frequently asked questions
Is merging reversible?
No. HubSpot merges cannot be undone, which is why the action defaults to preview mode. Preview reports the duplicate record IDs it found without changing anything, so you can verify the rules before merging for real.
How does phone matching handle different formats?
The phone normalizer strips spaces, punctuation and leading zeros before comparing, so +91 98765 43210 and 09876543210 are recognized as the same number.
Can I match on more than one property?
Yes. Advanced rules combine properties: a plus sign means both must match, a vertical bar separates alternatives. For example phone:phone + country | customer_id:exact.
Which record survives the merge?
You choose: the oldest record, the newest record, or the most complete record, which is the one with the most properties filled in.