Back to blog

The CRM Cleanup Checklist: How to Fix a Broken HubSpot Database Before Building Automation

Automation amplifies what's already in your CRM. If the data is dirty, all your workflows do is send the wrong email to the wrong person faster. Here's the cleanup process we run on every new client account before touching a single workflow.


Why cleanup has to come first

Most companies that come to us for marketing automation help have the same hidden problem: their CRM is full of duplicates, outdated contacts, missing fields, and data that was entered inconsistently by five different people over three years. None of it is anyone's fault — it just accumulates.

The instinct is to start building automations anyway and "clean as you go." That's the fastest way to make a mess bigger. Automation running on bad data generates bad outcomes at scale — wrong lead assignments, emails going to people who left the company two years ago, lead scores built on incomplete records.

The fix is to pause, audit, and clean before you build. It usually takes 1–2 weeks depending on database size, and it's the least glamorous part of any engagement. It's also the part that makes everything else work.

Rule of thumb: if you wouldn't trust a human to work from your current contact list, don't trust an automation to either.

Step 1 — Run a full contact audit

Before you delete or change anything, export your entire contact database and look at it in a spreadsheet. You want to understand what you're actually dealing with.

Things to check in the audit:

  • Total contact count and how it breaks down by lifecycle stage
  • What percentage have a valid email address (HubSpot tracks email validity)
  • What percentage are missing key fields — company, phone, lead source, owner
  • When contacts were last updated — how many haven't been touched in 12+ months
  • Whether lifecycle stages are being used consistently or randomly

This gives you a baseline. Most teams are genuinely surprised — it's common to find that 30–40% of contacts are missing core fields, or that lifecycle stage values are a mix of manual entries and whatever default was set three years ago.

Step 2 — Deduplicate aggressively

Duplicates are the most common CRM problem and the easiest to underestimate. One person with three contact records means they might get enrolled in the same nurture sequence three times, or get counted as three separate leads, or get assigned to three different reps.

HubSpot has a built-in duplicate management tool under Contacts → Actions → Manage Duplicates. Start there. It surfaces pairs that match on email or similar name + company combinations and lets you merge them one at a time or in bulk.

For larger databases (10k+ contacts), a tool like Dedupely or a custom Zapier/Make workflow works better — you can set your own matching logic and handle edge cases the built-in tool misses.

Before merging: always know which record is the "winner" — the one whose data gets preserved. Usually it's the one with more activity, a more complete profile, or the earlier create date. Set this logic before you start merging in bulk.

Step 3 — Standardize field values

This is the unglamorous middle part that nobody wants to do and that makes the biggest difference downstream. You're looking for inconsistency in how data was entered — things like:

  • Country: "USA", "US", "United States", "united states", "U.S.A." all in the same field
  • Job title: "VP Marketing", "VP of Marketing", "V.P., Marketing", "vp mktg"
  • Industry: a mix of freeform text entries when it should be a dropdown with fixed values
  • Phone numbers: missing country codes, inconsistent formatting

This matters enormously for automation because filters and conditions match on exact values. An automation that triggers for contacts where Country = United States will silently miss everyone entered as "USA."

The fix is to convert freeform fields to dropdowns with fixed values, then bulk-update existing records to match the new values. HubSpot's bulk edit and list-based property updates make this manageable.

Step 4 — Set lifecycle stages correctly

Lifecycle stage is the most important field in HubSpot for automation — it drives enrollment triggers, suppression logic, and reporting. It's almost always wrong when we inherit an account.

The most common issues we see:

  • Everyone imported from a purchased list was set to "Lead" regardless of intent
  • "Customer" contacts are still in nurture sequences because the stage was never updated after they closed
  • Lifecycle stage is being manually edited by reps inconsistently instead of being driven by automation
  • There's no clear definition of what each stage actually means for this company

Before you touch lifecycle stages, write down what each one means for your business — what action or signal moves someone from Subscriber to Lead, Lead to MQL, MQL to SQL. Once the definition is clear, you can build the automation that moves people between stages automatically, which removes the human error entirely.

Step 5 — Prune inactive and unengaged contacts

Not every contact in your CRM should stay there. You're paying for your contact tier, and more importantly, emailing a large percentage of unengaged contacts hurts your deliverability — which affects the emails going to people who actually want to hear from you.

Build a list of contacts who:

  • Haven't opened or clicked any email in the last 12 months
  • Have a hard bounced email address
  • Have unsubscribed or marked you as spam
  • Have invalid email syntax or domains that no longer exist

For the hard bounces and invalids, delete or archive them. For the unengaged, run one re-engagement campaign — a genuinely useful email, not a "we haven't heard from you" guilt trip — and if they don't engage, suppress them from all future sends. Some teams prefer to keep these contacts for reporting history; either way, stop emailing them.

Practical note: a smaller, cleaner list nearly always outperforms a large, dirty one on every metric — open rate, reply rate, deliverability, and ROI per contact.

Step 6 — Audit your properties and delete the junk

HubSpot lets you create unlimited custom properties, and over time most accounts accumulate dozens of properties that nobody uses anymore — leftover from old campaigns, old team members, old tools that got disconnected. Properties nobody uses still show up in filters, reports, and form builders, making everything harder to navigate.

Export your full property list. Mark any property that has data in fewer than 5% of contacts, hasn't been referenced in any workflow or form in the past 6 months, and can't be explained by anyone on the team. Archive or delete those. Keep a record of what you removed.

Quick CRM cleanup checklist

  • Full contact audit — count, stage breakdown, completeness %
  • Duplicates identified and merged (HubSpot tool or Dedupely)
  • Field values standardized — country, title, industry
  • Lifecycle stage definitions documented and agreed
  • Lifecycle stages corrected in bulk for existing contacts
  • Hard bounces and invalids removed
  • Unengaged 12-month contacts suppressed or re-engaged
  • Unused custom properties archived
  • Contact owners assigned (no unowned contacts)
  • Lead source field populated for all contacts where possible

Only now: start building automations

Once the above is done, you have something you can actually build on. Your workflow conditions will match the right contacts. Your lead scores will be based on consistent data. Your lifecycle stage automations won't accidentally re-enroll existing customers into a new prospect sequence.

The cleanup phase is the part that clients most want to skip and the part we insist on running first. Every hour spent here saves three hours of debugging automations that are misbehaving because the underlying data is inconsistent.

If you're about to build your first automation and haven't done this yet — do this first. The workflows can wait two weeks.

Need someone to run this process for you?

We audit, clean, and structure CRM databases before building automation — then stay on as a long-term partner to run it. If your database is a mess and you know it, let's talk.

Start a conversation