LinkedIn profile URLs to verified emails
Turn a list of LinkedIn profile URLs into verified email addresses. Ravn matches each URL against your own data provider (it never scrapes LinkedIn) and returns only addresses that passed its own check.
One command.
Installs into ~/.claude/skills for Claude Code. In Claude, upload the downloaded file under Settings → Capabilities → Skills.
npx ravn skill install linkedin-to-email
When to use
- The user has saved profile URLs from a search, a spreadsheet or a CRM field and wants emails.
- One URL or a list of hundreds.
- Use
linkedin_to_business_emailwhen only work emails are acceptable (B2B outreach). Uselinkedin_to_best_emailwhen a personal address is an acceptable fallback.
Before you start
- Check the connection: call
get_accountwith{}or runnpx ravn whoami. linkedin_to_business_emailandlinkedin_to_best_emailneed your own provider key connected — runravn keys add pdlfirst; these tools run on your own provider account. If a tool returns 403provider_key_required, stop and tell the human to add their key. Every call is one lookup; misses are free.- Ask the user which tool fits: work only, or best available. If unsure, default to
linkedin_to_business_email. - Check the URLs look like profiles. The tools accept
linkedin.com/in/...,linkedin.com/pub/...andlinkedin.com/company/...URLs; anything else is rejected asinvalid_input.
Steps
- Clean the URLs locally: trim spaces, remove tracking query strings, and drop duplicates.
- One person over MCP:
{ "linkedin_url": "https://www.linkedin.com/in/janedoe" }
- Up to 100 at once over MCP:
{ "linkedin_urls": ["https://www.linkedin.com/in/janedoe", "https://www.linkedin.com/in/samlee"] }
The response is one item per URL with its own status (ok or not_found) and result. 4. A CSV with the CLI: dry run, sample, full. The --column fills the linkedin_url field.
npx ravn enrich profiles.csv --tool linkedin_to_business_email --column LinkedIn --dry-run npx ravn enrich profiles.csv --tool linkedin_to_business_email --column LinkedIn --limit 10 --out sample.csv npx ravn enrich profiles.csv --tool linkedin_to_business_email --column LinkedIn --out with-emails.csv
The dry run shows how many lookups the run will use. 5. Read each hit: email, status (the email verdict), risk_score, validated_at and type (business or personal). Invalid addresses are never returned. 6. For risky results (catch-all domains), tell the user they are lower confidence. 7. For misses, if the CSV has the person's name and company domain, you can try search_business_email_by_name instead. That is ours, 1 lookup, and needs no provider key.
Output
The CSV keeps every original column and adds:
rw_status:ok,not_found,errorordropped.rw_email,rw_verdict(valid,riskyorunknown),rw_risk_score,rw_validated_at,rw_type.rw_full_nameandrw_linkedin_urlto confirm the match.
Summary: URLs in, emails found, split by business and personal, verdict counts, and lookups used.
Rules
- Only use personal emails where the user has a lawful reason to contact someone at a personal address; for cold B2B outreach prefer
linkedin_to_business_email. - People who opted out are removed from the data and will not be returned. Do not try other routes to reach them. See /privacy#optout.
- Leave risky and unknown results out of any automated send.
- No FCRA uses: never look up candidates, tenants or applicants to decide credit, employment, insurance or housing.
- On a 429
fair_use_exhaustedor a 403provider_key_required, stop and tell the human.
Example prompt
I've got 150 LinkedIn URLs in a sheet (column "Profile") of people I met at events. Get me their work emails, and only ones you're confident in.
More skills
Install them all with npx ravn skill install --all.