Solutions Phone Number Enrichment
Phone number enrichment: verified mobiles
Send a LinkedIn profile URL, or a name and a company domain, and get back the mobile numbers we can verify for that person. Over 90% of Director+ profiles worldwide, anywhere in the world, and a lookup that finds nothing costs nothing.
curl -X POST https://api.reversecontact.com/v2/contact/phone \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.linkedin.com/in/janedoe"
}'
# or: "fullName" (or "firstName" + "lastName") + "companyDomain"// 200 OK: the job is created
{
"success": true,
"data": {
"status": "created",
"webhookId": "b8c9d0e1-f2a3-4b4c-5d6e-7f8091a2b3c4",
"pollUrl": "/v2/webhooks/b8c9d0e1-f2a3-4b4c-5d6e-7f8091a2b3c4"
},
"error": null
}
// Then, by polling or POSTed to your webhookUrl
{
"webhookId": "b8c9d0e1-f2a3-4b4c-5d6e-7f8091a2b3c4",
"data": [
{ "value": "+33612345678", "type": "mobile" }
]
}- of Director+ profiles worldwide
- >90%
- and direct lines, never switchboards
- Mobile
- P95, delivered asynchronously
- <10s
- credits when no number is found
- 0
Benefits
A number someone actually answers
Mobile numbers and direct lines, sourced through specialists in each country and validated before they reach you.
Mobiles, not switchboards
Mobile numbers and direct lines. A generic company number is worse than none: it costs a call and a credit for nobody to answer.
Specialists per country, one API
No single provider is good everywhere. We run a waterfall of country-specialised sources and orchestrate them behind one endpoint.
Validated before it reaches you
Every number goes through our own validation before it is returned. Credits are debited only when a lookup finds one.
Under the hood
Worldwide coverage is an orchestration problem
No single data provider is good everywhere. Rather than pick one and accept its weak countries, we run specialists per country behind one endpoint, and validate what they return before you see it. This is why the call is asynchronous: those layers need room to work, and a held-open request would let a timeout decide your result.
- 01IdentifyA LinkedIn URL resolves to one person exactly. A name with a company domain resolves through identity resolution first.
- 02WaterfallCountry-specialised providers are queried in order of how well each performs in that country, not in one global order.
- 03ValidateCandidate numbers go through our own checks: line type, format, and whether the number can lawfully be handed over.
- 04ReturnWhat survives validation reaches your webhook, or the poll endpoint, with its type. Nothing found means nothing billed.
Outcomes
Every lookup ends in a clear answer
A lookup returns the numbers it found, or a code that says why it found none. Only the first case is billed.
- Phone number foundOne entry per number, with its type20 credits
- phone-not-foundNo number for this personfree
- person-not-foundNo person matches the inputfree
- invalid-requestThe input is not an accepted formfree
- fetch-data-errorFailed on our side, safe to retryfree
Pricing model
No number? It's free.
Credits are debited only when at least one number is found. Coverage is highest on profiles with a professional online presence, so on thin profiles a lookup may come back empty: those cost you nothing, which makes it safe to run enrichment across a whole table.
- credits per lookup that finds a number
- 20
- credits when no number is found
- 0
Use cases
Where a direct line changes the outcome
A phone action in your product
Offer "find a mobile" inside your own tool at a cost you can model: empty lookups are never billed, so the unit economics hold.
CRM backfill, in the background
Walk the contacts missing a number and let your webhook write them back as they arrive. No connection held open per row.
Warehouse enrichment
Backfill phone coverage across a table from a scheduled job, with the same schema and the same outcome codes on every row.
Speed to lead
Enrich a high-intent form fill before it reaches routing, so the first call happens while the intent is still there.
Internal ops tooling
Give an internal tool one endpoint instead of contracts with a provider per country, and one credit model instead of several.
Recruiting and sourcing tools
Reach candidates who ignore email, from the profile URL your product already stores.
Process
How does it work?
One call, answered immediately with a job id. The number arrives by polling or webhook, typically in under 10 seconds at P95.
- 01
Send the identifiers
A LinkedIn URL, or a name + company domain. One POST to /v2/contact/phone.
- 02
We run the waterfall
The request returns a job id at once. Country specialists are queried, then every candidate number is validated.
- 03
Get the number, or nothing
Each number with its type, billed. Or a not-found code, free.
Testimonials
Trusted by data-driven teams
“Our data team built an internal ops product with Reverse Contact. It improved identity resolution across systems and provided a reliable people & company layer.”
Ethan CarterData Team, Gitpod“We use Reverse Contact as a trusted data provider for our product inside our RevOps workflows. It helps our customers unify CRM records and enrich missing context...”
David BrombergCEO, Lantern“Reverse Contact provided a reliable identity resolution layer for our product. The API is straightforward, outputs are consistent, and match quality is strong.”
Lucas PerretHead of Product, lemlistCompliance
Compliance-by-design. Built to be defensible.
Reverse Contact is designed to support GDPR/CCPA-aligned data practices. We maintain clear sourcing principles, respect data subject rights, and prioritize accuracy over guesswork. A number we cannot lawfully hand over is not returned at all.
- GDPR
- CCPA
FAQ
Frequently Asked Questions
Can't find the answer to your question? Reach out to us via the contact page.
What is phone number enrichment?
Adding a reachable phone number to a contact you already hold. You send an identifier you have, a LinkedIn profile URL or a name with a company domain, and the API returns the mobile numbers it can verify for that person.
What kind of numbers do you return?
Mobile numbers and direct lines. Never a switchboard, never a generic company number: a number nobody answers is worse than no number, because it costs a call and a credit.
What is the coverage?
Over 90% of Director+ profiles worldwide, measured on qualified profiles: people with an online presence on professional social networks. Coverage is lower on profiles with little public footprint, and a lookup that finds nothing is free, so a miss costs you only the request.
Why is the API asynchronous?
Not because it is slow. A lookup runs a waterfall of country-specialised providers, then our own validation before a number is returned. P95 is under 10 seconds. Answering asynchronously means those layers can do their work without your request being held open, and without a timeout deciding the result for you.
What inputs does it accept?
A LinkedIn profile URL, or a full name (or a first and a last name) with a company domain. The URL gives an exact match; the name and domain work when you have no URL.
How do I get the result?
The request answers at once with a webhook id. Poll the webhook endpoint with that id until the lookup has succeeded, with no public endpoint needed on your side, or pass a webhook URL and we post the numbers to it.
When am I charged?
20 credits when at least one number is found. A lookup that finds no number, no matching person, or fails on our side costs nothing. If a number is found but your webhook URL cannot receive it, the lookup is still billed: polling avoids that case.
Is this GDPR / CCPA compliant?
Yes. Compliance is built into how we source and process data, and a number we cannot lawfully hand over is not returned at all. Full documentation is available in our Trust Center.
The data layer behind your GTM engine
Access fresh people and company data through one API and power every enrichment, prospecting, and automation workflow.
- Profiles
- 1B+
- Refreshes / month
- 200M
- Response time (P95)
- 500ms