Enrichment

Look up a person's current job title and company

One person in, the role they hold now out. 1 record per person found. A miss costs nothing.

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

Current role is not a separate endpoint. It is the contact_current_experiences block on the person record, so one enrichment call returns it.

What you get

A person enrichment returns one leadocean.person.v1 record. The current role sits in contact_data.contact_current_experiences[]: the title, the employer and the facts about both. Values we do not hold come back as null, never guessed.

FieldWhat it isExample
job_titleThe title as written"Head of Sales"
job_title_detailsThe normalised form of the title"Head Of Sales"
job_senioritySeniority of the role"director"
job_functions[]Department of the role"Sales & Business Development"
company_nameCurrent employer"Acme"
company_domainEmployer website"acme.com"
company_industryEmployer industry"Manufacturing"
company_employeesEmployer headcount240
start and end datesWhen the role began, and ended if it did"2024-03-01"
current flagWhether the role is the live onetrue
contact_data.has_emailWhether we hold an address for the persontrue

The record also carries a still-at-company status, so you can judge whether the role is current before you act on it. The spec types the experience objects loosely, and the docs describe the keys above in prose, so read a real response before you hard-code names.

What you send

InputRequiredNote
linkedin_urlOne of fourLinkedIn profile URL. Unambiguous, so use it when you have it.
emailOne of fourA work email. Returns the person behind it.
phoneOne of fourA number in any common format.
person_idOne of fourThe id on a people-search row at meta.source_ids.person_id. Reaches the one person in five with no LinkedIn URL.
reveal_emailNoDefault false. Adds emails and phones. Not needed for the role.

Send exactly one identifier. Two is a 400. There is no lookup by name and company: search by company domain first, then send the person_id back.

Three ways to run it

In the app

Yes, current role is exportable. The Exports page at app.leadocean.io has current_job_title, current_company_name, current_company_domain, current_start_date, current_job_level, current_job_functions and contact_still_at_company_status in its column picker. The first three and the start date are on the search row, so the search preset needs no enrich scope. It shows the record price before you start and gives you a CSV.

With the API

bash
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"linkedin_url":"https://www.linkedin.com/in/jane-doe"}'

A hit returns success: true, the person in data and meta.credits: 1. The current role is in data.contact_data.contact_current_experiences. GET works too, with the same fields as query parameters. Developer detail is in Current Role API.

From an AI agent

The MCP tool is leadocean_get_lead. It takes linkedin_url, email, phone or person_id and returns the same record. Try: "Look up this LinkedIn profile and tell me their current title, employer and whether they are still at the company." Setup is in Current Role over MCP.

What it costs

One lookup is 1 record, with or without reveal_email. A 404, meaning we hold nothing for that person, costs nothing. Rejected requests (429, 402, 503) are never metered either.

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 and 9,200 are found. 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.

For a whole list, export instead. A bulk export row is one record whatever columns it carries, and the docs call bulk the cheaper way to enrich.

Coverage

LeadOcean holds 693M people, measured September 2026. Of those, 366M have an email and 166M have a phone. Enrichment returns contact points, so it needs a person we hold some for. A search row with has_email and has_phone both false has nothing to return by any identifier.

Check those two flags on the search row before you spend a record. A small number of contactable rows still return a 404, which is also free.

Accuracy and limits

  • Nulls are honest. A field we do not hold is null, and an empty role means we do not have one.
  • Check the date. Every record carries meta.fetched_at, and the dataset is refreshed monthly. A title can be a month behind a job change.
  • Use the still-at-company status. An email at a former employer is typed work_other and is the most likely to bounce.
  • No work history here. The MCP docs say resume_data comes back empty from the current source. Enrichment carries the current role, not past jobs.
  • Role-based inboxes. A shared address like info@ gets the status role. Read the role-based email address entry before you send.
  • 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 give no hit rate for the current role field and no accuracy figure for titles.

FAQ

How do I find someone's current job title?

Send their LinkedIn profile URL, work email, phone or person_id to POST /v1/people/enrich. Read contact_current_experiences in the response. It costs 1 record.

Can I look up a job title by name and company?

No. There is no name lookup. Search by company domain and title keywords, then send the person_id from the row to the enrich endpoint. The hub lists the other lookups on Enrichments.

Does a lookup that finds nobody use my records?

No. A 404 costs nothing. You pay 1 record for each person you receive.

Is the job title lookup on the free plan?

Yes. Free has the same API and MCP server as Pro, with 1,000 records spent once. Each lookup uses 1.

Look up your first 1,000 job titles free

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

Get your free API key →