Clean HubSpot contacts with Ravn
Export your HubSpot contacts to CSV, run npx ravn enrich over the email column, and import the file back matched on email to update the records. If you use Claude with a HubSpot connector, adding Ravn lets Claude do the same job by conversation.
The export, enrich, import loop
Ravn has no native HubSpot app. This loop uses HubSpot’s own export and import, so nothing gets write access to your CRM.
- / 01
Create the properties first
In HubSpot settings, create contact properties to receive the results, for example Email status and Email risk score (single-line text works).
- / 02
Export contacts
From the contacts view, filter to the records you want (for example, never emailed) and export as CSV. Include the Email column.
- / 03
Dry-run, then enrich
Run the commands below.
--dry-runshows how many rows and what it will cost before anything is spent. - / 04
Import back
Import the
.enriched.csvas contacts, choose to update existing records matched on Email, and maprw_verdictandrw_risk_scoreto your new properties. - / 05
Act on it
Build an active list where Email status is
invalidand exclude it from marketing sends.
Enrich the HubSpot export
Column names must match your export exactly; HubSpot exports usually call it “Email”.
npx ravn login # How many rows, and what will it cost? npx ravn enrich hubspot-contacts.csv --tool validate_email --column Email --dry-run # Run it. Writes hubspot-contacts.enriched.csv with rw_* columns added npx ravn enrich hubspot-contacts.csv --tool validate_email --column Email # Contacts with a name and company website but no email npx ravn enrich no-email.csv --tool search_business_email_by_name \ --map name="Full Name",company="Company Domain Name" --out found.csv
The conversational route
If you have a HubSpot connector added in Claude, also add Ravn as a connector. Then ask, for example: “Pull the 50 newest contacts in HubSpot, verify their emails with Ravn, and set the Email status property on each.”
Claude reads from HubSpot through its connector, calls validate_emails on Ravn, and writes back through the HubSpot connector. Ravn itself never touches your CRM. This suits small batches; for thousands of contacts the CSV loop is quicker to check and cheaper in tokens.
The same idea finds missing emails with the email finder (our own check) or adds firmographics with company enrichment, which runs on your own provider key.
Will the import overwrite my contact owners or other fields?
Only the columns you map in the import are written. Map the rw_* columns to your new properties and leave the original columns unmapped or skipped.
Should I delete contacts marked invalid?
Exclude them from sends first and review. An invalid verdict with reason mailbox_not_found or no_mx is strong; risky on a catch-all domain is not proof the address is dead.
Is there a Ravn app in the HubSpot marketplace?
No. The CSV loop and the Claude route are the supported ways today, and both keep CRM write access with you.
What if the enrich run stops halfway?
It saves progress every 25 rows. Run the same command again and it picks up where it left off; add --restart only if you want to start over.
More in integrations
Every page uses the same account, plan and tools. See pricing →