Enrichment

Find a LinkedIn profile from an email address

One email in, the person who holds it out. 1 record per call. A call that matches nobody is a 404 and costs nothing.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

What you get

The reverse endpoint takes an email address and returns the person who holds it: their LinkedIn URL, name, job title and company. It also echoes the address back with its own type, status and check date. It returns the identity, not the full profile. For the rest, call the enrich endpoint, which costs the same and reads the same cached record.

FieldWhat it isExample
person_idThe record the answer came from"1234567"
person_group_idThe person, across duplicate records"1234567"
linkedin_urlThe LinkedIn profile URL, or null"https://www.linkedin.com/in/jane-doe"
full_nameTheir name"Jane Doe"
job_titleTheir current title"Finance Manager"
company_nameTheir current employer"Acme"
company_domainThe employer's domain"acme.com"
matchedThe email as the record holds it, with type, status and check date{ "email": "jane.doe@acme.com", "status": "verified", "type": "work" }
matched_in_recordWhether the record lists the exact address you senttrue

The identity fields and matched can be null. About one person in five has no LinkedIn URL, so linkedin_url can come back empty on a real match.

What you send

InputRequiredNote
emailOne of the twoThe address to look up.
phoneOne of the twoA number in any common format. Same endpoint, same price.

Send exactly one. The key needs the enrich scope. There is no lookup by name and company. Search by company domain first, then enrich by person_id.

Three ways to run it

In the app

Not for this lookup. The Exports page at app.leadocean.io is a filter builder with a column picker, a price preview and a CSV download. profile_url is one of its columns, but the docs describe no way to feed it a list of emails. For a list, call the API or use an agent.

With the API

bash
curl -s -G "https://api.leadocean.io/v2/people/reverse" \
  --data-urlencode "email=jane.doe@acme.com" \
  -H "x-api-key: $LEADOCEAN_API_KEY"

The response has the shape the docs show. The values here are placeholders:

json
{
  "success": true,
  "data": {
    "person_id": "1234567",
    "person_group_id": "1234567",
    "linkedin_url": "https://www.linkedin.com/in/jane-doe",
    "full_name": "Jane Doe",
    "job_title": "Finance Manager",
    "company_name": "Acme",
    "company_domain": "acme.com",
    "query":   { "email": "jane.doe@acme.com" },
    "matched": { "email": "jane.doe@acme.com", "status": "verified",
                 "verified_batch_date": "2026-09-14", "type": "work" },
    "matched_in_record": true
  },
  "meta": { "source": "leadocean", "schema": "leadocean.contact.reverse.v2",
            "stability": "stable", "credits": 1 }
}

Developer detail is in Email to LinkedIn API.

From an AI agent

The MCP server has no tool named for reverse lookup. Use leadocean_get_lead and pass email. It takes a work email, returns the full person record, and counts as 1 record. Try: "Find the LinkedIn profile for jane.doe@acme.com and tell me her title." Setup is in Email to LinkedIn over MCP. The LinkedIn to email MCP page covers the opposite direction.

What it costs

One call is 1 record. A call that finds a person costs 1. A 404, where nobody holds the address, costs nothing. Rejected requests (429, 402, 503) are never metered.

Free gives you 1,000 records, one-off, no card. Pro is $499 a month, flat, with no per-record price, inside fair use. See pricing.

Worked example: you look up 10,000 emails. That is at most 10,000 records, fewer for every address nobody holds. Free covers the first 1,000 once. On Pro the month is $499 whatever the count.

Coverage

LeadOcean holds 693M people, and 366M of them have an email (measured 2026-09-23). That is a little over half. An address outside that set returns a 404, which is free. The docs publish no match rate for reverse lookups, so test a sample of your own list before you commit a large run.

Accuracy and limits

  • A match is evidence, not proof. matched_in_record: false means we matched the person on your email upstream, but the record does not list that exact address. It does not mean nobody was found. No person at all is a 404.
  • Check matched.status. It carries the deliverability status of the address you sent. See the status values in the Linkedin to email page.
  • linkedin_url can be null. Roughly one person in five has none. Keep person_id and use it to enrich.
  • Records can duplicate. The same person may come back under different person_id values. Compare person_group_id, never look it up.
  • Rate limit. 100 requests per second per key, on every plan. A 429 carries Retry-After.
  • Errors. 400 validation, 401 bad key, 403 missing scope, 404 nobody holds it, 503 store unreachable and never billed.
  • Gap. The docs describe no batch version of this endpoint, so a list means one call per address.

FAQ

Can I find a LinkedIn profile from a personal email?

The reverse endpoint takes an email address and the docs do not limit it to work addresses, and matched.type labels the address you sent. The MCP tool takes a work email. The docs publish no match rate per type, so test a sample.

Does it cost anything when nobody is found?

No. A 404 costs nothing. A 200 that comes back with empty fields still costs 1 record.

Can I go the other way, from LinkedIn to email?

Yes. Send a LinkedIn URL to the work email endpoint. See LinkedIn to email, and compare tools in the best LinkedIn email finders.

Can I look up a whole list of emails?

One call per address, at up to 100 a second per key. Free covers 1,000 lookups once. Pro is $499 a month. See the Enrichments hub for the other lookups.

Find your first LinkedIn profile from an email free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →