A cleaner CRM in one afternoon.
Export contacts to CSV, dedupe on lowercased email, run validate_email over what remains, and fill missing company fields with domain_to_company. Then import the file back with the dead contacts marked, not deleted.
Export, clean, import
Work on an export, never on the live CRM. Keep the CRM record ID in the file so the import matches rows back.
- / 01
Export with IDs
Export contacts with record ID, email, name, company and website columns. Save a copy of the untouched file.
- / 02
Dedupe first
Lowercase and trim every email, then merge rows that share one. This is free to do and every duplicate you remove is a lookup you do not spend. validate_emails also returns one verdict per unique address.
- / 03
Verify the emails
Run the CLI enrich command with validate_email. Use
--limit 50on a first run to check the output columns, then run the full file. - / 04
Fill company gaps
domain_to_company runs on your own People Data Labs key (
ravn keys add pdl). For rows with a website but no industry or size, run it on just those rows, and do not re-fetch fields you already trust. - / 05
Mark, do not delete
Add a field such as "email status" in your CRM and import the result into it. Suppress invalid and D or F grade contacts from sends. Deleting loses history you may need.
- / 06
Schedule a re-check
Contacts decay. Re-verify every quarter or before any large campaign.
Commands for the whole pass
# Check the output shape on 50 rows first npx ravn enrich contacts-deduped.csv --tool validate_email --column Email --limit 50 --out test.csv # Full run (resumes from the last saved row if interrupted) npx ravn enrich contacts-deduped.csv --tool validate_email --column Email --out contacts-verified.csv # Start again from row one instead of resuming npx ravn enrich contacts-deduped.csv --tool validate_email --column Email --restart --out contacts-verified.csv # Fill company fields for rows missing them npx ravn enrich missing-company.csv --tool domain_to_company --map domain=Website --out company-filled.csv # Or in Claude Here is my CRM export. Dedupe it on lowercased email and show me the merges. Then verify each unique email with Ravn and add status, grade and reason columns. Keep the Record ID column unchanged so I can import it back.
Worked example: 20,000 contacts
Say your export has 20,000 rows and deduping leaves 17,000 unique emails. Verification is one of our own checks: one lookup per address, no provider key needed.
- Free (1,000 lookups in total): enough to test a sample.
- Ravn ($24 a month, 10,000 included, then $1 per 1,000): 17,000 is the 10,000 included plus 7,000 at $1 per 1,000, so $7 on top of the plan.
Filling company fields uses one lookup per company found, on your own People Data Labs key (ravn keys add pdl), which bills you for the records. If 1,500 rows are missing company data across 600 distinct domains, dedupe the domains first and look up 600, not 1,500. Misses cost nothing.
Details on limits are on the fair use page. The email verification API and company enrichment API pages cover each tool.
Does Ravn connect to my CRM directly?
No, there are no native CRM apps. You export a CSV, run it through the CLI, and import it back, or call the REST API from your CRM's webhook or workflow step.
Will the CLI lose my other columns?
No. The enrich command keeps every column you had and adds rw_* columns next to them. It saves progress every 25 rows so a long run can stop and resume.
Should I delete invalid contacts?
Mark and suppress them instead. You keep the history of who they were and when they stopped working, and you can still find the person again at their new company if you need to.
Can I find who a bare email belongs to?
reverse_email_lookup returns a person record for an email if one exists, at one lookup per person matched, on your own People Data Labs key. It accepts up to 100 emails per call. See reverse email lookup.
More in use cases
Every page uses the same account, plan and tools. See pricing →