ravn
Claude skill

Email addresses to LinkedIn profiles

Look up the person behind each email address: their LinkedIn profile URL, and optionally their full business profile (title, seniority, company). Use the lighter tool when only the URL is needed and the fuller one when the user wants context.

Download SKILL.md Start free

Install

One command.

Installs into ~/.claude/skills for Claude Code. In Claude, upload the downloaded file under Settings → Capabilities → Skills.

npx ravn skill install email-to-linkedin-profile

When to use

  • The user has a list of customers or sign-ups and wants their LinkedIn profiles to connect or research.
  • "Who are these people?" for a batch of emails.
  • Use email_to_linkedin when only the URL is needed. Use reverse_email_lookup when the user also wants title, company and location.

Before you start

  1. Check the connection: call get_account with {} or run npx ravn whoami.
  2. email_to_linkedin and reverse_email_lookup need your own provider key connected — run ravn keys add pdl first; these tools run on your own provider account. If a tool returns 403 provider_key_required, stop and tell the human to add their key. Every call is one lookup; misses are free.
  3. Ask which output the user needs. Both tools are one lookup per call, so if there is any chance they want title or company, reverse_email_lookup gives more for the same cost.

Steps

  1. Clean the list locally: trim, lowercase, remove duplicates and obvious junk.
  2. Optional but useful for big lists: run validate_emails first (ours, 1 lookup each) and skip addresses that are invalid or disposable. Those rarely match a real profile.
{ "emails": ["jane@acme.com", "sam@brightpath.io"] }
  1. URL only, one address:
{ "email": "jane@acme.com" }

email_to_linkedin returns email, linkedin_url and full_name. 4. Full profiles, up to 100 per call over MCP:

{ "emails": ["jane@acme.com", "sam@brightpath.io"] }

reverse_email_lookup returns one item per address with its own status and a result holding full_name, title, headline, seniority, city, state, country, industry, linkedin_url, company and last_updated_at. Its business_email is re-verified. 5. A CSV with the CLI: dry run, sample, full.

npx ravn enrich customers.csv --tool email_to_linkedin --column Email --dry-run
npx ravn enrich customers.csv --tool email_to_linkedin --column Email --limit 10 --out sample.csv
npx ravn enrich customers.csv --tool email_to_linkedin --column Email --out with-linkedin.csv

Swap in --tool reverse_email_lookup for full profiles. The dry run shows how many lookups the run will use. 6. Check the match. If full_name clearly does not fit the name the user already has for that row, flag it as match_check: review rather than trusting it. 7. Free-provider addresses (Gmail and similar) match less often. Say so in the summary rather than retrying.

Output

The CSV keeps every original column and adds:

  • rw_status: ok, not_found, error or dropped.
  • For email_to_linkedin: rw_email, rw_linkedin_url, rw_full_name.
  • For reverse_email_lookup: rw_full_name, rw_title, rw_seniority, rw_city, rw_state, rw_country, rw_industry, rw_linkedin_url, rw_company (JSON), rw_last_updated_at.
  • match_check where you flagged a name mismatch.

Summary: emails in, profiles found, match rate for work versus free-provider addresses, and lookups used.

Rules

  • Ravn does not scrape LinkedIn; profiles come from your own data-provider account, and opted-out people are never returned. Do not try to find them another way. See /privacy#optout.
  • No FCRA uses: never look up applicants, tenants or candidates to decide credit, employment, insurance or housing.
  • Use profiles for business context and outreach only.
  • On a 429 fair_use_exhausted or a 403 provider_key_required, stop and tell the human.

Example prompt

Here's a CSV of our 300 paying customers' emails. Find their LinkedIn profiles and job titles so our CS team knows who they're talking to.