ravn
Integrations · HubSpot

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.

Start free: 1,000 lookups Read the docs

Setup

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.

  1. / 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).

  2. / 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.

  3. / 03

    Dry-run, then enrich

    Run the commands below. --dry-run shows how many rows and what it will cost before anything is spent.

  4. / 04

    Import back

    Import the .enriched.csv as contacts, choose to update existing records matched on Email, and map rw_verdict and rw_risk_score to your new properties.

  5. / 05

    Act on it

    Build an active list where Email status is invalid and exclude it from marketing sends.

Commands

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
With Claude

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.

FAQ

Common questions.

All questions →

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.