# Enrich Any CSV with Contact and Company Data — Ravn

Canonical: https://askravn.com/skills/enrich-csv

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.
[Download SKILL.md](https://askravn.com/skills/enrich-csv/SKILL.md) [Start free](https://askravn.com/#start)

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 with `ravn keys add pdl` (or `twilio`); if a tool returns 403 `provider_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_email` or `linkedin_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 `--column` when 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 `--map` value 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 `--restart` to 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 `enrich` again on the output file with the new column, such as the found email. Rename the first pass's `rw_*` columns first (for example `rw_email` to `found_email`, then `--column found_email`), because a second pass writes its own `rw_*` columns and the names would clash.

## Output

Every original column is kept. Added columns:

- `rw_status`: `ok`, `not_found`, `error` or `dropped`.
- `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 example `rw_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](https://askravn.com/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_exhausted` or a 403 `provider_key_required` the run stops and remaining rows are marked `dropped`. 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](https://askravn.com/skills)
Install them all with `npx ravn skill install --all`.
- [Enrich and Score an Inbound LeadUse when a new sign-up or form fill arrives with just an email and someone wants to know who it is, what company, and whether it fits the ICP..](https://askravn.com/skills/enrich-inbound-lead)
- [Enrich a Conference Attendee ListUse when someone has a conference or trade show attendee list with names and companies and wants verified emails and job titles for follow-up..](https://askravn.com/skills/event-attendee-enrichment)
- [Find Decision Makers at Target CompaniesUse when someone has a list of target company domains and needs the actual buyers at each one, with titles and verified work emails..](https://askravn.com/skills/find-decision-makers)
- [Find Someone's Work Email by NameUse when someone needs one person's work email from their name and company, found from the company's own address pattern and then checked..](https://askravn.com/skills/find-work-email)
- [Hashed Email Audience for Meta and Google AdsUse when someone wants to upload their own customer list to Meta or Google Ads as a hashed audience, verifying emails first and hashing locally..](https://askravn.com/skills/hashed-email-audience)
- [Clean and Enrich a HubSpot Contacts ExportUse when someone exports HubSpot contacts and wants them verified, gaps filled and a clean file ready to re-import without creating duplicates..](https://askravn.com/skills/hubspot-export-cleanup)
