← Back to blog
Case Study Feb 25, 2026

450 to 73: How I Cleaned My Entire CRM in One Afternoon

Matteo Lombardi
Feb 25, 2026

If your CRM hasn’t been cleaned in 6 months, your pipeline numbers are fiction.

I know because mine was. 450 companies. ~35% data quality. Duplicates everywhere. No owner set on half of them. I kept ignoring it because cleaning a CRM manually is the kind of task that makes you want to fake your own death.

Then I spent one afternoon with Claude Code, got it down to 73, and almost deleted two companies with active deals in the process.

Key Takeaway: Claude Code connected to HubSpot via MCP cleaned 450 companies down to 73 in one afternoon — catching two companies with active deals before deletion. The real win wasn’t the cleanup itself but making the CRM trustworthy again. When your CRM data is dirty, you stop using it, and every decision downstream suffers.

The CRM graveyard problem

Every founder I know has this. You start adding companies during a sales push, a client project, a conference. You import a CSV from somewhere. Your pipeline grows. Then you get busy actually doing the work and the CRM becomes a place where data goes to die.

The numbers look fine on the surface. “I have 450 companies.” Cool. But 30% are duplicates. Another 20% are dead leads from 2023 you never officially closed. Several have no contact attached. Some have no deal, no note, no anything — just a company name floating in the void.

When your CRM is that dirty, you stop trusting it. And when you stop trusting it, you stop using it properly. It becomes a vanity metric instead of a tool.

I was there.

The approach: Claude Code + HubSpot MCP

I want to be clear about what this is and what it isn’t. This isn’t a fancy AI product. No dashboard. No SaaS. No magic button.

Claude Code runs in the terminal. You connect it to HubSpot via MCP — Model Context Protocol, which is basically a way to plug tools into the AI so it can actually read and write your data. HubSpot has a public MCP integration. You set it up once, and then you can just… talk to your CRM.

That’s it. A CLI and a conversation.

What the AI actually did, step by step

I gave it a simple brief: clean the CRM. Here’s what it ran through, in order:

Step 1 — Pull all companies. Fetched all 450 records, summarized the state: missing owners, missing contacts, deal associations, last activity dates. I could see the full mess laid out for the first time. Not a fun view, but a necessary one.

Step 2 — Check for duplicates. Cross-referenced company names, domains, and contact overlap. Found a stack of duplicates. Merged them in one pass.

Step 3 — Verify deal associations. Before flagging anything for deletion, it checked each company against open and closed deals. This is where things got interesting.


The save. I had a batch of companies queued up to delete. Low activity, no recent notes, looked dead. Claude stopped and flagged two of them: “These have open deals in pipeline. Are you sure you want to delete?”

No. I definitely did not.

I had completely forgotten about those deals. If I’d deleted them manually — which I would have, moving fast — I’d have wiped the deal history too. Real pipeline, gone.

That one moment probably paid for every hour I’ve spent learning to use this tool.


Step 4 — Enrich missing data. Companies with gaps (no industry, no size, no owner) got flagged and set where inferable from context. Owner assigned on everything. No more orphaned records.

Step 5 — Delete the junk. After the deal check: 83 more companies removed in a second pass. Old outreach contacts that went nowhere, conference leads that were never real prospects, imported records forgotten in the void. Gone.

The result

MetricBeforeAfter
Companies in CRM45073
Data quality (est.)~35%90%+
Records with owner~50%100%
Duplicate clustersDozens0
Time spentOne afternoon

After the cleanup, I ran a separate pass on contacts. Enriched 804 of them through Dropcontact, reviewed 300 manually, and pulled out 28 Italian targets worth reaching out to right now.

That list is actually usable because the underlying data is clean. Before this, I wouldn’t have trusted a list pulled from that CRM. Now I do.

What actually changed

The obvious thing: the CRM is clean. But the less obvious thing is that I trust it again.

I was avoiding opening HubSpot because I knew what was in there. Now I check it. I update it. It’s a real tool again, not a data graveyard I pretend doesn’t exist.

Also — and I’ll be honest here, because I didn’t fully expect this — having the AI walk through the logic out loud made me realize how many decisions I was making on gut feel instead of data. “This company looks dead.” Yeah, but does it have an open deal? I didn’t know. Now the system checks before I act.

The honest take

This is grunt work. It’s not sexy. Nobody writes Medium posts about cleaning their CRM.

But if you haven’t cleaned yours in more than 6 months, your pipeline numbers are fiction. You’re making decisions based on data you know is wrong and pretending it’s fine. The 450 companies I had weren’t a pipeline. They were noise with a HubSpot subscription.

The tool here isn’t the point. Claude Code, some other AI, doesn’t matter. The point is that this class of work — repetitive, logic-heavy, data-intensive — is exactly what breaks down when it’s purely manual. You get tired. You skip steps. You almost delete two companies with active deals.

AI as ops teammate. Not AI as chatbot.

The framing that changed how I use these tools: not “what can AI write?” but “what does AI never get tired of checking?”

CRM cleanup is the answer. It’s exactly the kind of work that breaks down when it’s purely manual — repetitive, logic-heavy, high-stakes if you get it wrong. You get tired. You skip steps. You almost delete two companies with active deals.


The setup: Claude Code + HubSpot’s public MCP integration. You configure it once, and then you can talk to your CRM from the terminal. That’s it.


Frequently Asked Questions

What is MCP (Model Context Protocol) and how does it connect to HubSpot?

MCP is a protocol that lets AI tools read and write data from external services. HubSpot has a public MCP integration — you configure it once, and Claude Code can access your CRM data directly from the terminal. No dashboard, no third-party app. It reads companies, contacts, deals, and properties through the HubSpot API.

Can Claude Code delete or modify CRM records automatically?

It can, but in this workflow every destructive action required my confirmation. Claude flagged records for deletion and I approved or rejected each batch. That’s how it caught the two companies with active deals — it checked deal associations before suggesting deletion, not after.

How long does a full CRM cleanup take with AI?

For this account (450 companies, 800+ contacts), the full cleanup took one afternoon — roughly 3 hours. That includes pulling all data, identifying duplicates, checking deal associations, enriching missing fields, and deleting dead records. A manual cleanup of the same scope would take a full week, minimum.

How often should you clean your CRM?

If you haven’t cleaned it in 6+ months, your pipeline numbers are probably fiction. I’d recommend a quarterly deep clean (company-level audit, duplicate check, dead record removal) and a monthly quick pass (check owner assignments, close stale deals, verify contact enrichment). The AI makes the deep clean fast enough to do monthly.