Tips & Tricks

CRM Cleanup for Insurance Agents: The Monthly Pipeline Audit

10 min read · July 31, 2026

Nobody's CRM breaks in a single dramatic moment. It rots.

Month one, everything is clean because you set it up last week. Month four, there are forty callbacks scheduled in the past, three hundred contacts sitting in a status you cannot remember creating, and two records for the same woman in Ohio. Month eight, you open the CRM, feel a small wave of dread, close it, and go dial off a spreadsheet you exported in May.

That last step is the real cost. A messy pipeline does not just make reporting wrong — it makes you stop trusting the system, and an agent who does not trust the system starts working around it. That is when suppression gets missed, callbacks get dropped, and the compliance record you would need in a bad month turns out to be full of holes.

This is the monthly audit I would hand any agent working leads by phone. Eight passes, about an hour, once a month. You are not tidying for its own sake. Each pass exists because something specific and expensive happens when you skip it.

Pass 1: Clear the callbacks that already happened — or didn't

Filter for every contact with a scheduled callback date in the past. On most agents' systems this is the single biggest pile, and it is the one that poisons everything else.

A callback set for last Tuesday at 2pm that you never made is not a callback anymore. It is a record in a state that lies to you. And once there are thirty of them, the callback queue stops being something you check first thing in the morning, because opening it feels like reading a list of your own missed commitments.

Every past-due callback gets one of three outcomes, and none of them is “leave it”:

  • Reschedule it to a real future slot you intend to honor.
  • Drop it back to the general dialing pool if it was a soft callback and the moment has passed — no promise was broken, it just goes back in the rotation.
  • Retire it if the contact has already hit your attempt cap and this callback was wishful thinking.

Do this every month and the callback queue stays small enough to be credible. Credible is the whole point: a queue you believe is a queue you work.

Pass 2: Retire everything sitting at the attempt cap

Whatever your attempt limit is — and the cadence that actually works is a longer conversation — there are records that have hit it and are still floating in your active pool. They come back around every time you dial the list, they burn dials, and they gently drag your contact rate down.

Retiring is not deleting. Move them to a closed or exhausted status where they keep their full history and stay searchable. You want them out of the working queue, not out of the database — partly because a batch of exhausted records is exactly what a structured revival pass runs on three or six months later, and partly because their call history is part of your record if anyone ever asks how many times you dialed a given number.

Pass 3: Test your suppression list against real numbers

This is the five minutes that matters most, and almost nobody does it.

Pick five numbers you suppressed a few months ago — people who said take me off your list, wrong numbers, anyone you marked do-not-call. Search each one in the CRM. For each, you want to see exactly one record, still suppressed.

What you are hunting for is duplicate drift. A number you suppressed in March appears in a list you imported in June. If that import created a second, clean contact instead of merging into the existing one, your do-not-call request has been silently overwritten by a CSV — and the next time that batch gets dialed, you call someone who explicitly told you not to. Under the TCPA that carries statutory damages of $500 to $1,500 per call, and “the import made a new record” is not a defense anyone will accept.

If you find drift, fix the two records and then fix the cause. Matching and merging on a normalized phone number is the mechanism, and the import process that prevents it is worth locking down before the next list lands.

Pass 4: Hunt duplicates on phone, not on name

Even with a clean import process, duplicates accumulate. A lead comes in through a Facebook form and also arrives in a purchased batch. A contact gets typed in manually after a referral call. A household produces two records because the same landline was submitted with two different names.

Run the duplicate check on the normalized phone number. Names will not find them — the same person arrives as Bob, Robert, and R. Ellison across three sources, and a mother and daughter in one house often share a spelling. The phone is the only field that reliably identifies the person your dialer is about to reach.

When you merge, keep the record with the richer call history and attach the newer source and opt-in date to it. The instinct to keep the newest record is backwards: the new one is a blank slate, and the blank slate is precisely what loses you the suppression flag and the note that says his wife handles the finances and calls after 4pm.

Pass 5: Find the records with no status at all

Filter for contacts with no disposition, no attempts, and an import date more than thirty days old. This pile is the honest measure of how much you over-bought or over-imported.

Every agent has it. A batch imported during a busy week and never touched. A list someone sent you that you loaded because it seemed wasteful not to. Three hundred records that exist entirely as a number on your dashboard.

You have two honest choices, and both are better than leaving it:

If the batch is…Do thisWhy
Genuinely workableSchedule it into a named dialing block this monthUnworked leads only get colder
Not going to happenTag as parked and move it out of the working queueKeeps your queue honest without losing the data
Consent you cannot verifySuppress it, do not dial itAn unverifiable batch is a liability, not an asset

That third row is the uncomfortable one. If a batch has no source tag, no opt-in date, and no memory attached to it, you cannot answer the only question that matters when a complaint arrives. A pile of records you are afraid to dial is not an asset you are saving for later. It is a pile you should mark as untouchable so a future version of you does not load it into a session on a slow Thursday.

Pass 6: Audit your dispositions for rot

Pull a count of contacts by disposition. You are looking for two specific patterns.

The dominant bucket.If 60% of your records are in one code — usually something like “no answer” or a generic “follow up” — that code is doing no work. It is a place records go so the screen can be cleared. Split it, or accept that your reporting on it is meaningless.

The dead codes. Any disposition with a handful of records after months of dialing is noise on the wrap-up screen. Every extra option costs a half-second of hesitation at the end of a call, eighty times a day, and hesitation is how you end up defaulting to the generic bucket in the first place.

A tight set of codes that each trigger something is the goal — the ten-code setup covers what each one should do. The monthly audit is just checking that reality still matches the design, because dispositions drift the moment you are dialing fast.

Pass 7: Check that the compliance fields are still populated

Spot-check twenty records created in the last month — a mix of imports, webhook leads, and anything you typed in by hand. For each one, confirm four fields are actually there: source, opt-in date, state, and consent reference.

Field rot is sneaky because it is usually structural, not random. A vendor changes their CSV headers and one column silently stops mapping. A lead form gets rebuilt and drops the consent URL. A webhook starts sending state as a full name instead of a two-letter code. None of that throws an error. It just means every lead since the change is missing something you will want.

State matters more than agents expect, because it drives both licensing and which state telemarketing rules apply to the call. Deriving it from the area code is a guess — people keep cell numbers for decades across moves — and a guess is a bad foundation for a calling-hours decision.

Pass 8: Confirm your scrubs have actually been running

Last pass, and it is quick. Check the date of your most recent DNC scrub and confirm every batch imported since then has been scrubbed.

Federal registry, state registries, your internal list, and litigator flagging run on different cadences, and treating them as one job is where agents get caught. The number that was clean in April may be on the registry in July. A monthly confirmation that the scrub ran, on everything, is the difference between a system and a hope.

What a clean pipeline actually looks like

After the audit, four things should be true:

  • Every callback in the queue is in the future. If it is in the past, it was handled or retired.
  • Every active record is dialable — under the attempt cap, scrubbed, not suppressed, with a state and a source on it.
  • Every suppressed number resolves to exactly one record. No clean duplicate hiding behind it.
  • The contact count means something. The number on your dashboard is work available, not a mix of work available, work finished, and work you will never do.

That last one is underrated. Most agents have no idea how many workable leads they actually have, because the count includes everything ever imported. When the number is honest, you can make an honest decision about whether you need more leads this month or just need to work the ones you have.

How much of this should the software do?

Most of it, honestly. A CRM built for agents who dial should be preventing these problems rather than handing you a monthly chore list. It is fair to judge one on exactly this:

  • Merge on import rather than creating parallel records, so suppression cannot be overwritten by a new file.
  • Enforce the attempt cap automatically, so exhausted records leave the queue without you filtering for them.
  • Surface past-due callbacks at the top of the day instead of burying them in a status.
  • Refuse to dial an unscrubbed batch, so the guardrail lives in the system rather than your memory.
  • Keep suppression at the account level, attached to the number, not to whichever list it arrived on.

Where the software handles it, the monthly audit shrinks to a ten-minute confirmation. Where it does not, the hour is not optional — it is the maintenance cost of the tool you chose, and you should count it when you compare options. That is also the practical difference between a general-purpose CRM and one built around a compliant dialing workflow: the second one is opinionated about state, and opinionated systems rot slower.

Honest verdict: once a month, clear past-due callbacks, retire records at the attempt cap, test five suppressed numbers for duplicate drift, merge duplicates on phone, decide what to do with untouched batches, prune dead disposition codes, spot-check the compliance fields, and confirm the scrub has run. An hour a month keeps the CRM a system you trust — and a system you trust is the only one you actually use.

A pipeline that stays clean on its own

Imports that merge instead of duplicating, account-level suppression, attempt caps enforced in the dialer, and DNC and quiet-hours protection applied before the call connects. From $29/mo, no contracts.

See Plans & Pricing