Enrichment

Find a work email from a LinkedIn profile

One person in, one current work address out, or null. 1 record per call, including a call that finds nothing.

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

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.

FieldWhat it isExample
successWhether the call workedtrue
dataThe address object, or null when none qualifies{ ... }
data.emailThe work address"jane.doe@acme.com"
data.statusverified, catch_all_valid or catch_all"verified"
data.verified_batch_dateDate 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

InputRequiredNote
linkedin_urlOne of the twoA personal profile URL, linkedin.com/in/...
contact_idOne of the twoThe 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

bash
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:

json
{
  "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. verified means our own verifier sent to the address and it accepted. catch_all_valid means a catch-all domain where we confirmed the mailbox exists. catch_all means the domain accepts everything, so no test can confirm the address either way.
  • No refund for bounces. Read status before you send. Treat catch_all as 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/enrich resolve 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 →