What you get
The work email endpoint takes a LinkedIn profile URL and returns one address, or data: null. It only returns an address at the person's current employer whose status is verified, catch_all_valid or catch_all. An address at a former employer is never returned, and neither is one nobody has tested. So null means "none that qualify", not "no email exists".
| Field | What it is | Example |
|---|---|---|
data.email | The one best current work address | "jane.doe@acme.com" |
data.status | Deliverability of that address | "verified" |
data.verified_batch_date | The verification run that checked it, or null | "2026-09-14" |
There is no meta object on this endpoint. The price and the throttle state are not in the body: read GET /v1/usage for spend, and the X-Quota-State header for a throttle.
What you send
| Input | Required | Note |
|---|---|---|
linkedin_url | One of the two | A personal profile URL, linkedin.com/in/.... |
contact_id | One of the two | The numeric person_id from a people-search row. person_id is the same field. |
Send exactly one. Sending both, or neither, is a 400. About one person in five has no LinkedIn URL, and contact_id is the only key that reaches them. The key needs the enrich scope, which Free keys have. There is no lookup by name and company: search by company domain first, then use the 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. Its columns include email_1_address and email_1_status, but the docs describe no way to feed it a list of LinkedIn URLs. For a list, call the API or use an agent.
With the API
curl -s "https://api.leadocean.io/v2/people/email/work?linkedin_url=https://www.linkedin.com/in/jane-doe" \
-H "x-api-key: $LEADOCEAN_API_KEY"The response has the shape the docs show, with placeholder values:
{
"success": true,
"data": { "email": "jane.doe@acme.com", "status": "verified", "verified_batch_date": "2026-09-14" }
}POST with a JSON body works too. Code for Python and Node is in LinkedIn to Email API.
From an AI agent
The MCP server has no tool named for work email. Use leadocean_get_lead, pass linkedin_url and set reveal_email to true. It returns the full person record with every email and phone we hold, for 1 record. Try: "Get the work email for this LinkedIn profile and tell me its status." Setup is in LinkedIn to Email over MCP.
What it costs
One call is 1 record. A 200 that comes back with data: null still costs 1 record. A 404, where we hold nothing for that person, 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 send 10,000 LinkedIn URLs, and say 9,200 match a person while 800 are 404s. That is 9,200 records, and the 800 misses cost nothing. 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). The dataset is refreshed monthly, and each record carries its own fetched_at date. The docs publish no match rate for LinkedIn-to-email, so test a sample of your own list before a large run.
Checking whether someone has an email first is free. A people-search row carries has_email and email_status flags, and sizing a search with count=true and limit=1 spends nothing.
Accuracy and limits
- Only qualifying addresses.
verifiedmeans our own verifier sent to the address and it accepted.catch_all_validis a confirmed mailbox on a catch-all domain.catch_allmeans the domain accepts everything, so no test can confirm it either way. - A null date is not a red flag.
verified_batch_date: nullmeans the check was not ours. It does not mean the address is unverified. - Other statuses. The enrich endpoint and the MCP tool can return any of 13 values, including
risky,role,derived,untested,invalid,disposable,spam_trapandabuse. Do not send to the last four. - No refund for bounces. Read the status before you send.
- Personal addresses. They have their own endpoint and no status field. See find a personal email.
- 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 held, 503 store unreachable and never billed.
- Gap. The docs describe no batch version, so a list means one call per URL.
FAQ
How does a LinkedIn URL become an email?
The URL is only the key. LeadOcean looks up the person it holds under that URL and returns the current work address that passes its status rule.
What if the profile URL returns null?
Null means no address at their current employer passed the status rule. You paid 1 record for the lookup. To see every address we hold, call leadocean_get_lead or GET /v1/people/enrich with reveal_email, same price.
Can I go the other way, from email to LinkedIn?
Yes. The reverse endpoint takes an email and returns the person and their profile URL. See email to LinkedIn. To compare tools, read the best LinkedIn email finders.
Does it work for people with no LinkedIn URL?
Yes, with contact_id. Search for the person, take meta.source_ids.person_id from the row and send it as contact_id.
Find your first work email from a LinkedIn URL free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →