Claude skill
Enrich any CSV
Look at the user's spreadsheet, choose the Ravn tool that matches the columns they have and the data they want, map columns to tool fields, and run it with a dry run, a 10-row sample and then the full file. The user gets their original file back with rw_* columns added.
Install
One command.
Installs into ~/.claude/skills for Claude Code. In Claude, upload the downloaded file under Settings → Capabilities → Skills.
npx ravn skill install enrich-csv
When to use
- "Add emails to this list", "fill in company size", "check these phone numbers".
- Any CSV where each row is one person, company, email, domain, phone or IP.
- Prefer a more specific skill (such as verify-email-list) when one fits.
Before you start
- Check the connection:
npx ravn whoami(free). Note lookups left this window. - Know the cost model. Every tool costs one lookup per row and misses are free. The people, company and carrier tools (
reverse_email_lookup,linkedin_to_best_email,linkedin_to_business_email,domain_to_company,phone_to_carrier) run on your own provider account — add a key withravn keys add pdl(ortwilio); if a tool returns 403provider_key_required, stop and tell the human to add their key. Ravn's own checks (validate_email,validate_phone,scrape_website,search_business_email_by_name,ip_to_company) need no key. - Read the header row and the first few rows yourself before picking a tool.
Steps
- Pick the tool from what the row has and what the user wants: - Email, wants a verdict:
validate_email,--column Email. - Name + company domain, wants an email:search_business_email_by_name,--map name=Name,company=Website(or--map first_name=First,last_name=Last,company=Website). - Email, wants title and company:reverse_email_lookup,--column Email. - LinkedIn URL, wants an email:linkedin_to_best_emailorlinkedin_to_business_email,--column LinkedIn. - Domain, wants firmographics:domain_to_company,--column Domain. - Domain, wants site contacts and tech:scrape_website,--column Domain. - Phone, wants format and line type:validate_phone,--map phone=Phone,country=Country. - IP, wants company:ip_to_company,--column IP. - Choose
--columnwhen the tool needs one field (it fills the tool's first input field). Choose--map field=Column,...when it needs two or more, or when you want to be explicit. Column names are case-sensitive and must match the header exactly; quote the whole--mapvalue if a column name has spaces. - Run the dry run. Nothing is called.
npx ravn enrich leads.csv --tool search_business_email_by_name --map name=Name,company=Website --dry-run
- The dry run shows how many lookups the full file will use; show the user the estimate before going further.
- Run a sample and show the user the new columns.
npx ravn enrich leads.csv --tool search_business_email_by_name --map name=Name,company=Website --limit 10 --out sample.csv
- Run the full file. Progress saves every 25 rows; rerun the same command to resume, or add
--restartto start over.
npx ravn enrich leads.csv --tool search_business_email_by_name --map name=Name,company=Website --out leads.enriched.csv
- If the user wants a second pass (for example verify the emails you just found), run
enrichagain on the output file with the new column, such as the found email. Rename the first pass'srw_*columns first (for examplerw_emailtofound_email, then--column found_email), because a second pass writes its ownrw_*columns and the names would clash.
Output
Every original column is kept. Added columns:
rw_status:ok,not_found,errorordropped.rw_error: the error code on failed or dropped rows.rw_verdict: the email verdict (valid,invalid,risky,unknown) for tools that return one.rw_<field>for every other result field, for examplerw_email,rw_risk_score,rw_title,rw_industry. Nested values are stored as JSON text.
Without --out, the file is saved as <file>.enriched.csv.
Rules
- Remove anyone who opted out or asked not to be contacted before you enrich. See /privacy#optout.
- If the enriched list is for outreach, drop invalid and risky emails before anything is sent.
- No FCRA uses: never enrich to decide credit, employment, insurance or housing.
- On a 429
fair_use_exhaustedor a 403provider_key_requiredthe run stops and remaining rows are markeddropped. Stop and tell the human; do not retry in a loop.
Example prompt
I've got a CSV of 400 leads with First, Last and Company Website. Can you add work emails and tell me how many you found?
More skills
Install them all with npx ravn skill install --all.