Use Case

Clean your CRM in one command

B2B contact data decays 25-30% per year. People change jobs, emails bounce, companies merge or shut down. Your CRM is full of ghosts — stale records that waste SDR time, break routing rules, and corrupt forecasts.

Why CRM data rots

B2B contact data decays 25-30% per year. People change jobs. Emails bounce. Companies merge or shut down. Your CRM fills up with stale records that break routing rules and waste SDR time.

The most cost-effective way to keep your CRM clean: run background agents that check job changes daily, validate emails, and flag stale records automatically.

How to clean your CRM

Step 1: Export your contacts

Pull a segment from HubSpot, Salesforce, or Attio as a CSV. Include email, name, company, and any fields you want to validate.

Step 2: Run a pilot cleanup

Tell Claude Code
Take this CSV of 5,000 HubSpot contacts. Re-enrich via waterfall. Validate every email. Flag anyone whose job title changed. Deduplicate by email + LinkedIn URL. Start with 50 as a pilot.

Claude Code reads your Deepline skills and runs:

deepline enrich --input crm-export.csv --with-waterfall email --with 'validate=leadmagic_email_validation' --rows 0:49

Step 3: Review what Deepline flags

For each contact, the output shows:

  • Email status: valid, catch-all, or bounced
  • Job change: new title and company if detected
  • Duplicate cluster: other records that match this person

Step 4: Run the full list

Tell Claude Code
Looks good. Run the full list.

Claude Code continues:

deepline enrich --input crm-export.csv --with-waterfall email --with 'validate=leadmagic_email_validation'

Step 5: Write back to CRM

Tell Claude Code
Write the cleaned data back to HubSpot.

Claude Code runs the upsert:

deepline enrich --input output.csv --with hubspot_batch_upsert_objects --payload '{"object_type":"contacts","id_property":"email"}'

Only changed fields update. Good data stays untouched.

What gets flagged

IssueHow Deepline detects it
Bounced emailLeadMagic or IPQualityScore validation
Job changeTitle/company mismatch vs. current LinkedIn profile
Duplicate recordSame email or LinkedIn URL across rows
Stale firmographicsCompany size, funding, or industry changed

Cost breakdown

Database sizeCreditsManaged mode cost
500 contacts250~$25
5,000 contacts2,500~$250
50,000 contacts25,000~$2,500

Compare to ZoomInfo Enrich at $15K/yr or manual spot-checks at 40+ hours per quarter.

Who uses this

  • RevOps leads responsible for data quality
  • Ops teams running quarterly hygiene before board reporting
  • Sales managers tired of reps calling people who left 6 months ago

Deploy background agents for ongoing cleanup

Instead of quarterly manual cleanups, deploy background agents that run daily:

Tell Claude Code
Deploy this as a background agent that checks job changes daily. Send me a Slack message with a summary of changes and let me approve before writing back to HubSpot.

Claude Code deploys:

deepline workflows deploy crm-cleanup --trigger cron --schedule "0 8 * * *" --notify slack

Background agents research accounts across multiple providers, detect job changes, validate emails, and surface changes for your approval - all without manual exports.

Common questions

Frequently Asked Questions

1Does this overwrite good data?+

No. Deepline only updates fields where it found newer information. If a field is blank in the enrichment, the original value stays.

2What CRMs are supported?+

HubSpot, Salesforce, and Attio have native integrations. For others, export/import via CSV.

3How do I handle duplicates?+

Deepline clusters them for review. You decide which record to keep.

CRM cleanup flow: export, enrich, validate, flag, write back

Try this yourself

Install the CLI and run this use case in under 5 minutes.