Enrichment

Find who owns a phone number

One number in, the person out. 1 record per match. A number nobody holds is a 404 and costs nothing.

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

What you get

Reverse phone lookup takes a phone number and returns the person who holds it: name, job title, company, company domain and LinkedIn URL. It also tells you how the number sits on that record. It returns an identity, not the full profile.

FieldWhat it isExample
person_idThe record the answer came from. Send it back as contact_id on other endpoints."1234567"
person_group_idThe person, across duplicate records"1234567"
linkedin_urlProfile URL"https://www.linkedin.com/in/jane-doe"
full_nameName"Jane Doe"
job_titleCurrent title"Finance Manager"
company_nameEmployer"Acme"
company_domainEmployer website"acme.com"
queryThe number you sent, normalised"+1 415 555 0133"
matchedThe number as the record holds it, with its own type, status and check date. Null if the record does not echo it back.see the note below
matched_in_recordTrue if the record lists the exact number you senttrue

The identity fields can be null when we hold nothing for them. A null in matched never means nobody was found. If nobody held the number, you get a 404.

What you send

InputRequiredNote
phoneOne of the twoA number in any common format.
emailOne of the twoAn address, for a reverse email lookup. Send phone or email, never both.

The key needs the enrich scope. Free keys have it. There is no lookup by name.

Three ways to run it

In the app

No. The Exports page at app.leadocean.io starts from filters and exports people, with phone columns per person. It does not take a list of numbers and return who holds them. Use the API or an agent for reverse lookups.

With the API

bash
curl -s -G "https://api.leadocean.io/v2/people/reverse" \
  --data-urlencode "phone=+1 415 555 0133" \
  -H "x-api-key: $LEADOCEAN_API_KEY"

The response has the shape the docs show, with placeholder values:

json
{
  "success": true,
  "data": {
    "person_id": "1234567",
    "person_group_id": "1234567",
    "linkedin_url": "https://www.linkedin.com/in/jane-doe",
    "full_name": "Jane Doe",
    "job_title": "Finance Manager",
    "company_name": "Acme",
    "company_domain": "acme.com",
    "query": { "phone": "+14155550133" },
    "matched": { "...": "..." },
    "matched_in_record": true
  },
  "meta": { "source": "leadocean", "schema": "leadocean.contact.reverse.v2", "stability": "stable", "credits": 1 }
}

matched echoes the number as the record holds it, with its type, status and check date. matched_in_record says whether the record lists the exact number you sent. The keys inside matched are shown as ... above, so read the contact docs for the full shape.

POST works too, with a JSON body. Developer detail is in Reverse Phone Lookup API.

From an AI agent

The MCP tool is leadocean_get_lead. It takes phone and answers who the number belongs to. It returns the full person record, not the thin identity above. Try: "Who is the person behind +1 415 555 0133? Give me title and company." Setup is in Reverse Phone Lookup over MCP.

leadocean_find_phone also accepts a number, but it answers the other question: what other numbers do we hold for this person.

What it costs

A hit is 1 record. A 404, where nobody holds the number, costs nothing. Rejected requests (429, 402, 503) are never metered. Over MCP, a leadocean_get_lead call that finds nobody also costs nothing.

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 run 10,000 numbers and 6,000 match a person. That is 6,000 records, and the 4,000 misses cost nothing. Free covers the first 1,000 once. On Pro the month is $499 whatever the count.

The identity is thin by design. Getting the full profile afterwards with POST /v1/people/enrich is the same price, so it is another record per person.

Coverage

LeadOcean holds 693M people, and 166M of them have a phone number (measured 2026-09-23). A reverse lookup can only answer for numbers in that set. Expect misses on a list of random numbers. The dataset is refreshed monthly.

Accuracy and limits

  • A match is evidence, not proof. Switchboards and reassignment mean one number can belong to several people over time. Check before you call.
  • The number carries its own metadata. matched holds the type, status and check date for that number. Read it before you trust the match.
  • matched_in_record: false is still a match. We matched the person on the number upstream, but their record does not list it.
  • Do-not-call is not answered. The v2 response omits dnc, and its absence is not clearance. Run your own DNC check.
  • No phone verification field in the docs. Unlike email, there is no email_status equivalent for numbers.
  • One record can mean two people. The same human can come back under different person_id values. Compare person_group_id.
  • 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 holds it, 503 store unreachable and never billed.

FAQ

Can I run a reverse phone lookup for free?

Yes, up to a limit. The free plan gives you 1,000 records, once, with an API key and no card. A hit uses 1 record and a 404 uses none.

What does a number with no match cost?

Nothing. A 404 means no person holds the number, and you pay only for records you receive. A 200 with matched_in_record: false still returns a person, so it is 1 record.

How is this different from the Find Phone Number endpoint?

Reverse starts from a number and returns the person. Find Phone Number starts from a person and returns their numbers. For the email version, see Reverse Email Lookup.

Can I get the person's email as well?

Not from this call. Reverse returns identity only. Take the person_id and enrich it for contact points. The Enrichments hub lists the other lookups, and the reverse email tools comparison covers the other direction.

Look up your first phone number free

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

Get your free API key →