New: meet Clu, and send email, LinkedIn and call steps with Sequences. Watch the videos →
Features
CRM Duplicate Cleanup
👤

Who this is for: self-serve plans (Free, Starter, Pro, Enterprise). CRM cleanup is not part of the AppSumo lifetime deal. See the AppSumo documentation. Support agent: confirm whether the user is self-serve or AppSumo before giving plan-specific advice.

TL;DR: A cleanup agent scans Salesforce (Accounts, Contacts, Leads) or HubSpot (Companies, Contacts) weekly, monthly or quarterly, emails you the duplicate groups it found, and waits on Runs → Review duplicates for you to approve. Only an org admin or the person who connected the CRM can merge, with the agent on. Salesforce merges go to the Recycle Bin for 15 days; HubSpot merges are permanent. No credits. Pro and Enterprise.

CRM duplicate cleanup

Cleanlist's match order stops it from creating new duplicates when it writes to your CRM. A cleanup agent deals with the duplicates that are already there: it finds them on a schedule, shows you each group side by side, and merges only what you approve.

How it works

A cleanup agent is an agent whose play has three steps in a line:

StepWhat it decides
CRM duplicates trigger (Salesforce duplicates or HubSpot duplicates)Which records to check, what counts as a duplicate, what never merges, and the schedule
Review duplicatesGroups wait for a person, or (Salesforce only) small exact contact groups are approved automatically after your first review
Merge duplicates (optional)Which record is kept and how its blank fields fill

A play without a Merge duplicates step only reports duplicates and never changes your CRM.

Before you start

  • Plan: Pro or Enterprise. You can build a cleanup agent during the Pro trial, but merging needs the agent turned on, and turning agents on needs a paid Pro or Enterprise plan. On Pro, the cleanup agent counts toward your 5 active agents.
  • CRM: Salesforce or HubSpot connected on Integrations. See HubSpot and Salesforce.
  • Salesforce permission: the Salesforce user Cleanlist connects as needs Delete on each object you merge.

Set up a cleanup agent

Create an agent

Go to Agents and click New agent.

Ask Clu

In the agent's workspace, describe what you want, for example: "Every quarter find duplicate contacts and accounts in Salesforce and let me review them before anything merges."

Answer at most two questions

Clu may ask How strict? ("Also similar names in the same account, which you approve" is recommended, or "Exact only: same email, LinkedIn or website") and Merging is hard to undo. What should I do with matches? ("Show me first, I pick what to merge" is recommended, "After my first review, merge exact contact matches on their own", or "Report only, never merge").

Review and accept the play

Clu proposes the play and reads the setup back as a table: the objects, what counts as a duplicate, which record is kept, the built-in exclusions and the schedule. Accept it on the canvas.

Wait for the scan

Accepting starts a scan of your CRM. Clu tells you it will email you when the scan is done. A run started before the scan is ready waits and starts once it finishes.

You can also add the trigger by hand: on the agent's Triggers tab, pick Salesforce duplicates or HubSpot duplicates ("Duplicate records, on a schedule"). When both CRMs are connected, the Triggers tab offers Salesforce; ask Clu to set up a HubSpot cleanup instead.

Only an org admin or the person who connected the CRM can accept a play that merges on its own.

What counts as a duplicate

Exact matches

ObjectMatched on
Salesforce Contact and Lead, HubSpot ContactSame email, same LinkedIn URL, or same Cleanlist ID (where your CRM has the field and your CRM settings use that key)
Salesforce Account, HubSpot CompanySame website domain

Possible matches (only if you choose similar names under How strict?): people with similar names in the same account or company, and accounts with the same name when neither has a website.

Never merged (built in):

  • Records on free email domains (for example Gmail addresses)
  • Converted Salesforce Leads and Salesforce Person Accounts
  • Records your do-not-sync field marks, and records in your protected lifecycle stages
  • A value shared by more than 10 records (such as one info@ address on many contacts)
  • Pairs someone marked Not duplicates

You can add your own exclusions: specific owners, records created within the last N days (up to 365), and field conditions.

A group holds at most 10 records, and Leads never merge with Contacts. One scan reads up to 15,000 records and stores up to 5,000 groups.

Which record is kept

ObjectDefault order
Accounts and companiesMost open opportunities or deals, then owned by a rep, then the oldest
Contacts and LeadsOwned by a rep, then the oldest

Other rules you can ask for: newest, latest activity, most complete. A reviewer can also pick a different kept record for any group.

Fields: by default the kept record keeps its own values and fills its blank fields from the others ("fill blanks"). You can instead leave the kept record unchanged. A blank is never written, an opt-out on any record stays set on the kept record, and consent is never copied.

Schedule and the review email

  • Schedule: weekly, monthly or quarterly. The default is quarterly, on the first business day at 09:00 in your organization's time zone. Cleanups never run daily or every 30 minutes. For a one-off, use Run now while the agent is off.
  • Review email: each scan emails the play's owner and the agent's recipients, for example "N duplicate groups to review", with counts (To review, Exact, Possible, Auto-approved) and a Review duplicates button. The email is the run's report.
  • Run test never merges anything.

Review duplicates

Open the agent, go to Runs and click Review duplicates (or click a scan run's Needs review chip, or filter runs by Needs review). A scan run reads like "Found 14 groups, 9 waiting for review"; a merge run like "Merged 8, skipped 1".

The review screen shows:

  • Counts: Open, Merging, Merged, Skipped, Failed, Not duplicates.
  • Filters: All, Exact, Possible, Possible no flags, one per object, and each status. Download CSV exports the filtered groups, one row per record.
  • Bulk actions: Merge selected (N), and Merge all shown (N) on the Exact and Possible no flags filters.
  • Row actions: Merge, Not duplicates, Skip, Reopen (for a dismissed group) and Refresh (for one that failed or changed).
  • Expanded row: the records side by side with differing fields highlighted, why they match (Same email, Same LinkedIn, Same Cleanlist ID, Same domain, Similar name, Related domain), why a record is kept, which fields fill from which record, and a choice to keep a different record.
  • Flags that call for a closer look, such as Names differ, Different accounts, Open deals on several, Different owners, Consent differs or Opted out.

Keyboard: J/K move, X selects, M merges, D marks Not duplicates, S skips, Enter opens a group.

Not duplicates means those records are never grouped together again (Reopen undoes that). Skip sets the group aside; it comes back on the next scan.

You can also ask Clu, in the agent's workspace, to show, merge, dismiss or skip groups. Each request shows a confirmation card with the same permission rules.

Merging

  • Who: an org admin or the member who connected the CRM. Anyone in the organization can view, filter, refresh and download.
  • Agent on: merging needs the cleanup agent turned on ("Turn on to merge").
  • Confirm: the dialog says which record is kept and that related records move to it. "This can't be undone."
  • Approvals last 7 days. Each merge run re-reads every record first. A record that changed in the CRM since the scan, now matches an exclusion, or whose contacts now sit under different accounts is skipped ("Changed since review").
  • Order: accounts and companies merge first, then Leads, then contacts. A contact group waits for its account group.
  • Reopened merges: changing the play's rules, merge policy or play, turning the agent off, or setting its CRM writes to never sends approved groups back to review, with the message "N merges reopened because the rules changed".

Salesforce

  • The kept record keeps its ID. Related records (opportunities, cases, activities, campaign members) move to it and don't move back.
  • Merged records go to the Salesforce Recycle Bin for 15 days, where a Salesforce admin can restore them. A restore is manual and partial: moved records stay on the kept record and filled fields stay filled.
  • Every merge is checked in Salesforce afterwards and logged with the values before.
  • Merges count against your daily Salesforce API limit. When the limit is near, the rest wait until after midnight UTC.

HubSpot

  • HubSpot merges are permanent; there is no undo.
  • HubSpot gives the merged record a new ID on each merge, and Cleanlist fills the kept record's blank fields after merging.
  • Every HubSpot group waits for a person. Auto-merge is not available for HubSpot.

Auto-merge (Salesforce only)

If you choose After my first review, merge exact contact matches on their own, Cleanlist approves a group automatically only when all of these are true:

  • It is an exact Contact or Lead group with no flags and at most 3 records.
  • A person has already reviewed one scan of this play.
  • No more than 50 groups are auto-approved in one run.
  • Records in exact groups stay within 2% of the records scanned.

Accounts always wait for a person, and Run test never auto-merges.

Why a merge failed or was skipped

ReasonWhat it means
No delete permissionThe Salesforce user Cleanlist connects as can't delete these records. Give that user Delete on the object, or reconnect as a user who has it.
Lead convertedSalesforce won't merge a converted Lead.
LockedAnother update had a record locked. Merging again later usually works.
API limitThe daily Salesforce API limit was reached. The rest merge after midnight UTC.
Changed since reviewA record changed after the scan. Refresh the group and review it again.
Record gone or merged elsewhereA record was deleted, or merged outside this cleanup (for example by a rep).
Now excludedA record now matches one of the play's exclusions.
Accounts differThe contacts now sit under different accounts.
Rules changed, Agent turned off, CRM writes offThe group went back to review because the play or agent changed.
HubSpot merge or association limitHubSpot refused the merge because of its own limits.

Plans and costs

PlansPro and Enterprise (build during the Pro trial; merging needs a paid plan). Not on Free, Starter or AppSumo.
CreditsNone for scans, reviews or merges
Limits10 records per group; 15,000 records read and 5,000 groups stored per scan; 50 auto-merges per run
CRM usageMerges count toward your daily CRM call cap and, on Salesforce, your Salesforce API limit

Related