Marketing operations

CRM audit checklist: how to find and fix bad CRM data

A CRM audit is a structured review of your CRM's records, fields, owners, automations and integrations to find data that is duplicated, missing, stale or written by the wrong process. Work through the checklist, record what fails, then do your CRM cleanup in an order that keeps reports and workflows running.

By Michelle IvanovaPublished September 29, 2026

What a CRM audit checks, and when to run one

A CRM audit checks whether your CRM data can be trusted for routing, reporting and follow-up. It covers the records, their fields and owners, the automations that write to them and the reports that read from them. Most bad data comes from a process, not a typo: an import with no dedupe key, or two automations writing the same field. So the audit looks for the process behind each failure.

It usually comes before wider marketing operations consulting work, because routing, scoring and reporting all read from the same records. Run one:

  • Before a CRM migration, so you move clean records instead of the mess
  • Before rebuilding reports or dashboards
  • Before setting up lead routing or lead scoring
  • After inheriting a CRM from a previous admin or agency
  • When sales stops trusting the numbers and keeps side spreadsheets
  • Once a year, even when nothing looks broken

Before you start: exports, permissions and a change log

Set these up before you open a single record, so every finding has a baseline and every later change can be reversed.

  1. 01Export every object you will review with all properties, and date the files.
  2. 02Confirm admin-level access; workflows, integrations and property settings usually need it.
  3. 03Record baseline counts per object and open deals by stage, to compare against after cleanup.
  4. 04Start a change log: date, change, records affected, who made it and how to reverse it.
  5. 05Agree who can approve merge rules and retire field values.
  6. 06Pause bulk imports and new fields until the audit is done.

The CRM audit checklist

Mark each item pass, fail or unknown, and note how many records it affects. Unknown usually means nobody owns that area, which is itself a finding.

Duplicate contacts and companies

  • Contacts sharing an email address (where your CRM allows it), or one person at the same company under a personal and a work email
  • Companies sharing a domain, or near-identical names such as "Acme Inc" and "Acme, Inc."
  • The source of each duplicate batch: an import, a form, or an integration creating records instead of updating them
  • Which duplicate rules are active and what they match on
  • A written merge rule: which record survives, and which owner, stage and source it keeps

Properties nobody uses or fills in

Measure fill rate for each custom property: fill rate = records with a value ÷ records the field applies to × 100. Illustrative example: if Industry should be filled in on all 4,000 contacts and 1,000 have a value, the fill rate is 1,000 ÷ 4,000 × 100 = 25%.

  • Low fill rate and no form, workflow, list or report using it: an archive candidate
  • Several fields storing the same thing, such as "Lead Source" and "Lead source (old)"
  • Free-text fields that should be dropdowns (country, state, industry)
  • Misspelled, duplicated or retired dropdown options
  • Properties with no description

Record owners and unassigned leads

Unowned records are either old data or broken routing, and the last check below tells you which: if recent leads go unassigned, fix the routing before reassigning old records. The guide on how to set up lead routing covers rules and a fallback owner.

  • Contacts, companies and open deals with no owner
  • Records owned by deactivated users or people who have left
  • Contact and company owners that differ where your process expects them to match
  • Leads from the last 30 days that were never assigned, which tests routing as it works today

Lifecycle stages and lead status

Stage data can only be judged against written definitions. If sales and marketing have not agreed them, write them before cleaning anything; the guide to MQL vs SQL and HubSpot lifecycle stages shows how.

  • Written stage definitions that sales and marketing both accept
  • Contacts with no lifecycle stage
  • Customers with no closed-won deal, and closed-won deals whose contacts are not customers
  • Backward moves with no documented reason, such as an import resetting customers to leads
  • Records stuck in a working lead status past your follow-up window

Source and campaign fields

Gaps in source and campaign fields show up as "unknown" in every channel report. The campaign measurement framework lists the CRM fields campaign analysis needs.

  • Original source filled in on records created in the last 90 days
  • A large share of records labelled imported, offline or unknown
  • UTM parameters captured in hidden form fields and stored on the record
  • One campaign naming convention across ads, email and the CRM
  • Self-reported source kept in a separate field from tracked source

Workflows and integrations that write to the CRM

List every process that creates or updates records: CRM workflows, native integrations, Zapier Zaps, Make scenarios and scheduled imports. Note each one's trigger, fields written, owner and last run.

  • Two automations writing the same field, such as lifecycle stage set by both a workflow and a sync
  • Automations switched on but idle for months, or switched off but still referenced
  • Integrations connected through a former employee's login
  • Sync errors, grouped by error type rather than read one by one

Reports that depend on the data

  • Dashboards used in recurring meetings, and the fields they filter on; those fields get cleanup priority
  • Reports filtering on a property the audit flagged
  • Numbers that disagree between the CRM, ad platforms and spreadsheets
  • Reports nobody opens, which can be archived

Running a HubSpot audit: where to look in the portal

A HubSpot audit uses the same checklist; built-in views make some checks faster. Menus move between updates and some tools depend on your subscription, so search settings by feature name if a location has changed.

Where each check lives in HubSpot
CheckWhere to look in HubSpot
DuplicatesThe manage duplicates tool (subscription-dependent), or an export sorted by name and domain
PropertiesProperty settings, which show the forms, workflows, lists and reports each property is used in
OwnersRecord views filtered to records with no owner
Users and seatsThe users list: deactivated users still owning records, who holds super admin rights, and paid seats nobody uses
Lifecycle stageA contacts-by-lifecycle-stage report, and the workflows that set or clear the stage
Marketing contactsContacts filtered by marketing contact status, to find people set as marketing contacts who no longer need to be
SourceOriginal source and its drill-down properties, plus hidden UTM fields on forms
Tracking and formsWhether the tracking code runs on every site domain, and which forms write to lifecycle stage and source fields
WorkflowsThe workflows list sorted by last updated, with enrollment counts
IntegrationsConnected apps, and the sync health or error view for connectors such as Salesforce

HubSpot cautions before you change anything

  • Merges are permanent. HubSpot cannot unmerge contacts or companies, so test your merge rule on a few records first.
  • Lifecycle stage moves forward by default. Moving a record back usually means clearing the value first, so check every workflow that clears it.
  • Imports match on email and domain. Contact rows without an email and company rows without a domain usually arrive as new records.

CRM data cleanup: the order that avoids breaking things

CRM cleanup goes wrong when it starts with the most visible problem instead of the upstream one. I work in this order:

  1. 01Fix the inputs. Correct the forms, imports and integrations creating bad data first, or the cleanup will not last.
  2. 02Settle definitions for stages, lead status, required fields and owner rules.
  3. 03Standardize values by mapping old dropdown and free-text values to approved ones, then updating in bulk.
  4. 04Merge duplicates, companies first and then contacts, so contact duplicates can be matched within one clean company record.
  5. 05Reassign owners away from deactivated users, using your routing rules.
  6. 06Backfill stage and source only where records show evidence. Where they do not, mark the gap explicitly, for example with a custom source field set to "Unknown (pre-audit)", rather than guessing or overwriting system-set source properties.
  7. 07Archive unused properties, workflows and reports after checking what references them.
  8. 08Re-check reports against your baseline counts and log why each number moved.

Cleaning up before a CRM migration

A migration is the cheapest moment to drop what you do not need, because every field you move must be mapped, tested and maintained.

  1. 01Decide what stays behind: unused properties, records older than your retention policy allows, and contacts with no email or activity.
  2. 02Deduplicate before export; the new CRM may match on different keys.
  3. 03Build a field map: old field, new field, type and value mapping (for example, "Web" and "web form" both become "Website form").
  4. 04Create users first, so owners map to real people.
  5. 05Store each record's old ID in a property for traceability.
  6. 06Import a sample, check associations, owners and reports, then move the rest.
  7. 07Rebuild only the automations the audit showed are still needed.

Keeping the CRM clean after the audit

Cleanup lasts only if the inputs stay controlled. Put these in place once it is done:

  • Required fields and dropdowns for the fields your reports depend on
  • One owner for the data model who approves new properties and makes sure each has a description; if the portal needs structural changes as well as data fixes, see what HubSpot implementation and cleanup covers
  • Naming conventions for properties, workflows and lists
  • Monthly saved views for missing owners, blank stages, missing sources, new duplicates and sync errors
  • Automated alerts to Slack or email when unassigned leads or sync errors appear; alerts that span several tools are typical workflow automation consulting work in Make
  • A yearly rerun of this checklist, plus one before any migration

Questions this guide answers

How often should you run a CRM audit?

Run a full audit once a year and before any migration, reporting rebuild or lead routing project. In between, a short monthly check of saved views catches problems before they reach your reports.

What is the difference between a CRM audit and CRM cleanup?

The audit finds and records problems without changing data; cleanup changes the data. Keeping them separate lets you fix things in the right order, and the audit's baseline shows what the cleanup changed.

How long does a CRM audit take?

There is no fixed duration: it depends more on how many custom properties, active workflows and connected integrations you have than on record count. To scope it, count those three first. Each one has to be traced to the process that writes it, and that tracing takes most of the time.

Should you delete old contacts during CRM cleanup?

Export them first and check any retention requirements. In HubSpot, marking inactive contacts as non-marketing contacts is an alternative to deleting them, since Marketing Hub pricing is based on marketing contacts.

Should you clean up the CRM in-house or get help?

In-house works when the failures are mostly data (duplicates, blanks, messy values) and one person owns the CRM. Outside help makes sense when failures trace back to conflicting automations or integrations, a migration is planned, or nobody has time to own the fix.

More than a few of these checks failed?

Bring your audit notes to a 20-minute call. I'll help you decide which failures to fix first and whether your team can handle them in-house.

Book a 20-minute CRM review

Michelle Ivanova runs imivs consulting, building marketing operations, CRM workflows and reporting automation in the tools a team already uses.