---
name: ravn-linkedin-to-email
description: Use when someone has LinkedIn profile URLs and wants a verified email for each person, work email first, via your own data provider.
title: LinkedIn Profile URL to Verified Email — Ravn
---
# 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.

## 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_email` when only work emails are acceptable (B2B outreach). Use `linkedin_to_best_email` when a personal address is an acceptable fallback.

## Before you start

1. Check the connection: call `get_account` with `{}` or run `npx ravn whoami`.
2. `linkedin_to_business_email` and `linkedin_to_best_email` 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 the user which tool fits: work only, or best available. If unsure, default to `linkedin_to_business_email`.
4. Check the URLs look like profiles. The tools accept `linkedin.com/in/...`, `linkedin.com/pub/...` and `linkedin.com/company/...` URLs; anything else is rejected as `invalid_input`.

## Steps

1. Clean the URLs locally: trim spaces, remove tracking query strings, and drop duplicates.
2. One person over MCP:

```json
{ "linkedin_url": "https://www.linkedin.com/in/janedoe" }
```

3. Up to 100 at once over MCP:

```json
{ "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.

```bash
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`, `error` or `dropped`.
- `rw_email`, `rw_verdict` (`valid`, `risky` or `unknown`), `rw_risk_score`, `rw_validated_at`, `rw_type`.
- `rw_full_name` and `rw_linkedin_url` to 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](https://askravn.com/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_exhausted` or a 403 `provider_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.
