Enrichment

Find a personal email from a LinkedIn profile

One person in, every personal address we hold and do not know to be bad. 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 personal email endpoint returns a list of webmail and similar addresses for one person. It is a list because a person can hold several, and none outranks the others the way a current work address does. An empty array means we hold none.

There is no status field, on purpose. We have never verified a personal address, so nearly all of them would read "untested". Instead the filter is applied for you: invalid, spam_trap, abuse, disposable, risky and role addresses are withheld.

FieldWhat it isExample
dataThe list of addresses, empty when we hold none[ ... ]
data[].emailA personal address we do not know to be bad"jane.doe@example.com"
data[].verified_batch_dateThe date of the verification run that confirmed it, or nullnull

A whole batch shares one date, so verified_batch_date is not a timestamp for a single address. 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. Sending both, or neither, is a 400. You cannot look a person up by name, or by an email or phone you already hold. That is what the reverse endpoint is for. The key needs the enrich scope.

About one person in five has no LinkedIn URL. For those, search first and send the contact_id back.

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, email_N_verified_date, email_N_priority and email_N_score in its column picker. The default is 3 addresses per person. The page shows the record price before you start and gives you a CSV. To aim at personal addresses, filter with emailType set to personal.

With the API

bash
curl -s -G "https://api.leadocean.io/v2/people/email/personal" \
  --data-urlencode "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@example.com", "verified_batch_date": null }
  ]
}

The quota state rides in the X-Quota-State and X-RateLimit-Limit headers. Developer detail is in Find Personal Email API.

From an AI agent

There is no separate personal 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, emails and phone numbers both. Try: "Enrich linkedin.com/in/jane-doe with reveal_email and list any personal email addresses." Setup is in Find Personal Email over MCP.

What it costs

One call is 1 record. A call that finds nothing also costs 1 record. A 404, where we hold no record 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 not. Free covers the first 1,000 once. On Pro the month is $499 whatever the count.

Asking whether a person has an email at all is free. A people-search row carries has_email and email_type, and sizing a search with count=true and limit=1 costs nothing.

Coverage

LeadOcean holds 693M people, and 366M of them have an email (measured 2026-09-23). The endpoint cannot tell you how many of those are personal.

The free leadocean_count_leads tool can give a floor. On 2026-09-30 it counted 51,000,840 people whose best email is personal, excluding invalid, spam_trap, abuse, disposable, risky and role addresses. Someone whose best email is a work address can still hold a personal one, so the true figure is higher.

Accuracy and limits

  • Nothing here is tested. In a measurement of 154 personal addresses on 2026-09-21, 149 were untested. Our verifier has never tested a personal address. Verify before you send.
  • Withheld is not the same as clean. Known-bad addresses are dropped. Everything else is returned as is.
  • It is one lookup. This endpoint and /v1/people/enrich resolve to the same cached record. A person looked up once is answered from cache by both.
  • 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.
  • Gap. The docs publish no mailbox type for each address and no per-address date. You get the address and a batch date, nothing else.

FAQ

Is a personal email better than a work email for outreach?

Use a work address first. It reaches someone at their current employer and can be verified. Keep personal addresses for people with no deliverable work address. Our comparison is in work email vs personal email.

Can I find a personal email by name and company?

No. There is no name lookup. Search by title and company domain first, then send the contact_id from the row to the endpoint.

Does it return a status like verified or catch_all?

No. The work email endpoint returns a status. The personal endpoint does not, because a field that reads the same word almost every time is noise. Bad addresses are withheld instead.

Is a personal email lookup 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 personal email free

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

Get your free API key →