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.
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.
- / 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. - / 02
Dry-run the file
Add
--dry-runto see how many rows will be checked before anything is spent. Remove obvious duplicates first: each address you send costs a lookup. - / 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. - / 04
Sort by verdict
Keep
validwith grade A or B. Dropinvalidand anything graded D or F. Look atriskyrows by reason:catch_all_domainanddisposable_domainneed different decisions. - / 05
Decide on unknowns
An
unknownmeans 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. - / 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.
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 size | Free (1,000 total) | Ravn ($24/mo, 10,000 included) |
|---|---|---|
| 800 addresses | Fits, 200 left over | Included |
| 5,000 addresses | Not enough | Included |
| 40,000 addresses | Not enough | 10,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.
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.
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 →