What you get
The work email endpoint returns at most one address for one person. It is not a ranked list. We make the ranking decision so you do not have to.
Only an address at the person's current employer qualifies, and only one we can stand behind. An address at a former employer is never returned, and neither is an address nobody has tested.
| Field | What it is | Example |
|---|---|---|
success | Whether the call worked | true |
data | The address object, or null when none qualifies | { ... } |
data.email | The work address | "jane.doe@acme.com" |
data.status | verified, catch_all_valid or catch_all | "verified" |
data.verified_batch_date | Date of the verification run, or null | "2026-09-14" |
data: null is a 200, not a 404. It means no address qualifies. It does not mean the person has no work email. The response has no meta object.
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 id on a people-search row at meta.source_ids.person_id. person_id is the same field. |
Send exactly one. Both, or neither, is a 400. The key needs the enrich scope. You cannot look a person up by name, or by name plus company domain. Search by domain first, then send the contact_id back.
About one person in five has no LinkedIn URL. For those, contact_id is the only key that works.
Three ways to run it
In the app
Yes, emails are exportable. The Exports page at app.leadocean.io has email_N_address, email_N_type, email_N_status and email_N_verified_date in its column picker, with 3 addresses per person by default. Filter with emailType set to work and emailStatus set to verified. The page shows the record price before you start and gives you a CSV. An export is 1 record per row.
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 docs show this shape, here with a placeholder address:
{
"success": true,
"data": {
"email": "jane.doe@acme.com",
"status": "verified",
"verified_batch_date": "2026-09-14"
}
}POST with a JSON body works too. Developer detail is in Find Work Email API.
From an AI agent
There is no separate work email tool. Use leadocean_get_lead with reveal_email set to true. It takes linkedin_url, email, phone or person_id and returns every contact point we hold. Try: "Enrich linkedin.com/in/jane-doe with reveal_email and give me the current work email and its status." You pick the work address from the list yourself. Setup is in Find Work Email over MCP. The Find Work Email skill wraps the steps, and there are walkthroughs for Windsurf and VS Code.
What it costs
One call is 1 record. A call that returns data: null also costs 1 record. A 404, where we hold nothing for the person at all, costs nothing. Rejected requests (429, 402, 503) are never metered.
The price is not reported per call on this endpoint. Read GET /v1/usage to see it.
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 people. That is up to 10,000 records, found or null. Free covers the first 1,000 once. On Pro the month is $499 whatever the count.
Asking whether a person has a deliverable work email is free. A people-search row carries has_email, email_status and email_type, and sizing a search with count=true and limit=1 spends nothing. Filter first, then look up only the people who have one.
Coverage
LeadOcean holds 693M people, and 366M of them have an email (measured 2026-09-23). The dataset is refreshed monthly. The work endpoint returns a subset of those: current-employer addresses that are verified, catch_all_valid or catch_all.
Accuracy and limits
- Three statuses only.
verifiedmeans our own verifier sent to the address and it accepted.catch_all_validmeans a catch-all domain where we confirmed the mailbox exists.catch_allmeans the domain accepts everything, so no test can confirm the address either way. - No refund for bounces. Read
statusbefore you send. Treatcatch_allas a risk you choose to take. - The date is a batch. A whole verification run shares one date. A null date means the check was not ours. It does not mean the address is unverified.
- Null is not a 404. Retry them differently. A null will not change on a retry.
- Same record everywhere. This endpoint and
/v1/people/enrichresolve to the same cached record. - 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 not in our data, 503 store unreachable and never billed.
- Gaps. No name lookup. No mailbox type or per-address timestamp. The agent tool returns every contact point, not just one.
FAQ
Can I find a work email by name and company?
No. There is no name lookup. Search by title and company domain, then send the row's contact_id to the endpoint.
Why did I get null?
No work address at the current employer met the bar. Untested addresses and former-employer addresses are left out on purpose. The call still costs 1 record.
Is a work email better than a personal one?
For outreach, yes. It reaches someone at their current employer and can be verified. See work email vs personal email, or find a personal email when no work address qualifies.
Is this included in the free plan?
Yes. Free has the same API and MCP server as Pro, with 1,000 records spent once. Each lookup uses 1. The Enrichments hub lists the other lookups.
Find your first work email free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →