Identity resolution is the process of deciding which records, from which systems, belong to the same real person. It turns three half-filled contacts into one profile you can act on.
Key takeaways
- Identity resolution answers one question: are these two records the same person, or two people?
- Deterministic matching uses exact keys such as a work email or a LinkedIn URL. It is precise but misses records that lack the key.
- Probabilistic matching scores near matches on name, company and title. It finds more links and makes more mistakes.
- In B2B, the person key matters more than the device or cookie. LeadOcean returns a record key (
person_id), a person key (person_group_id) and reverse lookup by email or phone.
What it is
Identity resolution is the process of matching records from different sources to a single person, then keeping that link stable over time.
The records can come from a CRM, a web form, a webinar list, a support tool or a purchased file. Each one holds a different slice of the same buyer: a personal email here, a work email there, a phone number somewhere else.
Without resolution, those slices look like separate people. A rep emails the same contact twice. Lead scoring splits one buyer's activity across three rows. Routing sends the account to the wrong owner.
Consumer marketing uses the term for cookies, device IDs and ad profiles. B2B teams use it for contacts and accounts. The goal is the same: one record per person, linked to one company.
How it works
The process has five steps, and every tool that claims to do it follows some version of them.
- Collect. Pull records from every system that holds prospect data: CRM, forms, events, support, enrichment.
- Standardize. Lowercase emails, strip tracking parameters from URLs, format phones to one pattern, and normalize company names. Matching on messy values fails quietly.
- Match. Compare records. Exact matches on a strong key link records at once. Near matches get a similarity score.
- Resolve. Link records above your confidence line to one profile and assign a persistent ID. Send low-scoring pairs to a human or leave them apart.
- Maintain. Re-run as data changes. People switch jobs, domains change, and a merge that was right last year can be wrong now.
A worked example
Take a fictional buyer, Jane Doe, at acme.com. Three records exist.
- The CRM has
jane.doe@acme.com, title "Head of Sales". - A webinar list has a personal webmail address and the same name.
- A sales rep keyed in a LinkedIn URL and the number +1 415 555 0133.
Matching on email links nothing, because the three emails differ. Matching on name alone is risky, since many people share a name. A reverse lookup of the work email returns the person who holds it, with a person_group_id. Enriching the LinkedIn URL returns the same person_group_id, so the records collapse into one.
The strong keys did the work. The name only confirmed it.
Identity resolution vs identity verification
People mix these up because both touch emails and phones. They answer different questions.
| Identity resolution | Identity verification | |
|---|---|---|
| Question answered | Do these records describe the same person? | Is this contact point valid and deliverable? |
| Input | Two or more records | One email or phone |
| Output | A link and a persistent ID | A status such as verified, risky or invalid |
| Failure mode | Wrong merge, or a missed duplicate | Bounce, or a good address dropped |
| Typical use | Deduplicate a CRM, stitch a lead | Decide whether to send |
| LeadOcean field | person_group_id, reverse lookup | email_status |
Entity resolution is the wider term. It covers companies, products and places as well as people. B2B work needs both: person matching to avoid duplicates, and account matching to know which company a person belongs to.
When it matters
Deduplicating a CRM
Duplicates waste rep time and distort reporting. Resolution finds the pairs, picks a surviving record and keeps the link. Start with exact email matches, then review fuzzy name and company pairs by hand.
Stitching inbound leads to known accounts
A form fill with a personal email carries no company. Resolution ties it to a person and an account, so routing and scoring treat it as a buyer from a target company, not an isolated lead.
Combining a purchased list with your own data
Two lists rarely share a clean key. Resolve on work email first, then LinkedIn URL, then phone. Check each source's email status before you trust a match, since a stale address can link to the wrong person.
Catch-all domains
On a catch-all domain, the server accepts any address, so an email can look valid and still not belong to a real mailbox. A match on such an address is weaker evidence. See the catch-all domains guide before you treat these emails as strong keys.
How LeadOcean handles it
LeadOcean does not run a matching engine or merge records in your CRM. It has no rep workspace, sequencer, dialer or CRM. It supplies the keys and lookups that make your own matching reliable.
The calls map to the steps like this:
- Resolve by email or phone:
/v2/people/reversetakes anemailor aphone, never both, and returns the person who holds it. It costs one record, including when it finds nobody. - Enrich by any strong key:
POST /v1/people/enrichtakes exactly one oflinkedin_url,email,phoneorperson_id. A person we hold nothing for is a 404 and costs nothing. - Record key: a people-search row carries
person_idatmeta.source_ids.person_id. Send it back to enrich that exact record. - Person key:
person_idnames a record, and one person can come back under differentperson_ids through different contact points. Compareperson_group_idinstead: two records that share it are the same person. - Link people to companies:
GET /v1/companies/{domain}/peoplelists the people we hold at a domain, up to 10,000 rows. - Read the confidence: each email carries an
email_statusfrom a list of 13 values, so you can weight a match by how good the address is.
Here is a reverse lookup, then an enrichment by the person_id it returns. Store the person_group_id from each answer for matching. Replace the placeholder email with your own.
curl "https://api.leadocean.io/v2/people/reverse?email=jane.doe@acme.com" \
-H "x-api-key: $LEADOCEAN_API_KEY"
curl "https://api.leadocean.io/v1/people/enrich?person_id=PERSON_ID&reveal_email=true" \
-H "x-api-key: $LEADOCEAN_API_KEY"The database holds 693M people and 63M companies (measured September 2026), refreshed monthly. Each record carries its own fetched_at date, so you can see how fresh a match is.
The free plan gives 1,000 records, one-off, with no card. Pro is $499 a month, flat. See pricing.
FAQ
What is the difference between identity resolution and entity resolution?
Entity resolution matches any kind of record: people, companies, products or locations. Identity resolution is the people case. In B2B you usually need both, so contacts attach to the right company.
What is the difference between deterministic and probabilistic matching?
Deterministic matching links records that share an exact key, such as a work email. Probabilistic matching scores near matches on fields like name and company. Use deterministic matching first and probabilistic matching to fill gaps, with a human check on risky merges.
Does identity resolution need cookies?
No. Cookie and device matching is the consumer version. B2B matching runs on first-party keys: work email, phone, LinkedIn URL and an account domain. Those keys come from the buyer or from systems you control.
Which key is best for matching B2B contacts?
A verified work email is the strongest default, because it is unique to one person at one company. A LinkedIn URL is a close second and survives job changes. Phone is useful as a tiebreaker.
Can LeadOcean merge my CRM duplicates?
No. LeadOcean returns the person behind an email, phone or LinkedIn URL, with a person_group_id you can compare across lookups. Your CRM or data tool does the merge. This is not legal advice on how to handle personal data in your region.
Match your records to one person on 1,000 free records
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →