Why CRM data rots
B2B contact data decays measurably each 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
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
Claude Code continues:
deepline enrich --input crm-export.csv --with-waterfall email --with 'validate=leadmagic_email_validation'
Step 5: Write back to CRM
Claude Code runs the upsert:
deepline enrich --input output.csv \
--with '{"alias":"upsert","tool":"hubspot_batch_upsert_objects","payload":{"object_type":"contacts","id_property":"email","inputs":[{"id":"{{email}}","properties":{"email":"{{email}}","firstname":"{{first_name}}","lastname":"{{last_name}}"}}]}}'
Only changed fields update. Good data stays untouched.
What gets flagged
| Issue | How Deepline detects it |
|---|---|
| Bounced email | LeadMagic or IPQualityScore validation |
| Job change | Title/company mismatch vs. current LinkedIn profile |
| Duplicate record | Same email or LinkedIn URL across rows |
| Stale firmographics | Company size, funding, or industry changed |
Cost breakdown
| Database size | Credits | Managed mode cost |
|---|---|---|
| 500 contacts | 250 | ~$25 |
| 5,000 contacts | 2,500 | ~$250 |
| 50,000 contacts | 25,000 | ~$2,500 |
Compare to bundled-platform alternatives 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:
Claude Code applies the workflow definition; cron schedule and Slack notifications are configured in the dashboard:
deepline workflows apply --payload '{"name":"crm-cleanup","trigger":{"type":"cron","schedule":"0 8 * * *"},"steps":[/* enrich + validate + writeback */]}'
# Configure recurring runs and Slack notifications via the dashboard at /workflows
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.
Try this yourself
Install the CLI and run this use case in under 5 minutes.