ravn
Use case

Verify an email list before you hit send.

Run the list through validate_email with one CLI command, then send only to addresses graded valid with a risk score of A or B. Everything else gets a second look or gets dropped.

Start free: 1,000 lookups Read the docs

Playbook

From raw CSV to a send-ready list

You need the list as a CSV with one email per row. Every other column is kept.

  1. / 01

    Sign in once

    Run npx ravn login. You get a 6-digit code by email, and the key is saved to ~/.config/ravn. The free plan gives you 1,000 lookups to start, no card.

  2. / 02

    Dry-run the file

    Add --dry-run to see how many rows will be checked before anything is spent. Remove obvious duplicates first: each address you send costs a lookup.

  3. / 03

    Run the check

    The CLI adds rw_* columns with the status, risk score and reason for each row. It saves progress every 25 rows, so a dropped connection resumes where it stopped.

  4. / 04

    Sort by verdict

    Keep valid with grade A or B. Drop invalid and anything graded D or F. Look at risky rows by reason: catch_all_domain and disposable_domain need different decisions.

  5. / 05

    Decide on unknowns

    An unknown means the mailbox could not be checked. We never call an address valid if the mailbox was not checked. Send to these in a small batch first, or hold them back.

  6. / 06

    Send, then keep it fresh

    Re-verify before each big send if the list is more than a few months old. People change jobs and mailboxes close.

Run it

The exact commands

CLI for a file, REST for up to 1,000 addresses in one call, or plain English in Claude.

# CLI: verify a whole CSV, keep every column, add rw_* results
npx ravn login
npx ravn enrich list.csv --tool validate_email --column Email --dry-run
npx ravn enrich list.csv --tool validate_email --column Email --out verified.csv

# REST: up to 1,000 addresses per request, one verdict per unique address
curl https://api.askravn.com/v1/tools/validate_emails \
  -H "Authorization: Bearer $RAVN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails": ["jane@acme.com", "info@acme.com", "old.contact@example.org"]}'

# Claude (with the Ravn connector added)
Verify every address in the attached CSV with Ravn. Give me three lists:
send (valid, grade A or B), review (risky or unknown, with the reason),
and drop (invalid, or grade D or F). Do not change any other column.

What a list costs in lookups

Email verification is one of our own checks: one lookup per address from your plan, no provider key needed. Ravn is $24 a month with 10,000 lookups included, then $1 per 1,000, and a miss is free.

List sizeFree (1,000 total)Ravn ($24/mo, 10,000 included)
800 addressesFits, 200 left overIncluded
5,000 addressesNot enoughIncluded
40,000 addressesNot enough10,000 included + 30,000 at $1 per 1,000 = $30 extra

If you set a spending cap and reach it mid-file, the run stops cleanly and resumes when you raise it or the period renews. See pricing and fair use.

Reading the grades

What A to F means

Every verdict has a risk_score from A to F, built from a 0-100 score: A is 90 or more, B is 75 or more, C is 55 or more, D is 30 or more, and F is below that. The reason field says why, for example mailbox_exists, mailbox_not_found, no_mx or bad_syntax.

Flags such as role_account, free_provider and disposable are there so you can apply your own rules. A role address like info@ can be real and still be a poor fit for a personal campaign. The full field list is in the validate_email docs, and the email verification API page explains each check.

Before you reach out. Contact people only where you have a lawful basis, honour every opt-out, and never use this data for credit, employment, insurance or housing decisions (FCRA uses are forbidden by our terms). People who opt out at our opt-out page are never returned again. The full rules are on the compliance page.

FAQ

Common questions.

All questions →

How many addresses can I verify in one API call?

validate_emails takes up to 1,000 addresses per request and returns one verdict per unique address. For bigger files, use the CLI enrich command, which works through the file in batches and resumes if interrupted.

Should I send to catch-all addresses?

A catch-all domain accepts mail for any name, so no service can prove the mailbox exists. We mark these risky with the reason catch_all_domain. Send to them only if the contact came from a good source, and send in small batches.

Can I try it before signing up?

Yes. The free email verifier and the demo on the homepage check single addresses with no key. For a whole list, the free plan gives you 1,000 lookups with no card.

Does verifying an address send the person an email?

No. The check looks at the domain, its mail servers and, where enabled, asks the mail server whether the mailbox exists. Nothing is delivered to the person.

More in use cases

Every page uses the same account, plan and tools. See pricing →