The Scalelist phone enrichment API returns a person’s mobile number from their name and company, or from a work email you already have. Send POST /api/v1/phone/find for one person or POST /api/v1/phone/bulk for up to 100. You pay 20 credits per mobile found and nothing when no number is found.
- A phone number found for 87% of the North American list in our 8-provider benchmark, and for 73% to 85% in the other three regions
- 20 credits per mobile found, 0 on a miss, which is about 0.65 USD per mobile on the 20,000-credit plan
- Single or bulk: one lookup per call, or 100 per task with webhook delivery and safe retries
Test the phone enrichment API on your own contacts: 20 free credits cover your first mobile found
Get your API keyNeed the email too? The email finder API takes the same name and company.
What is a phone enrichment API?
A phone enrichment API is an endpoint that takes what you know about a business contact, such as a name and company or a work email, and returns their mobile phone number. Developers also call it a mobile number API or a phone number enrichment API.
It is not a number-validation API, which checks a number you already hold. It looks for the mobile, the line a person answers themselves; our guide to direct dials, mobiles and switchboards shows why that decides who picks up. Scalelist finds and verifies contact details on demand rather than serving a pre-compiled list.
How the phone enrichment API works
The phone enrichment API works in three steps: you say who the person is, Scalelist finds the number, and the mobile comes back for 20 credits. When no number is found, you pay 0.

What to send for the best match
POST /api/v1/phone/find needs one identity signal: a known email, or a name plus a company. The optional fields cost nothing extra and cut wrong-person matches.
| Input | Enough on its own? | Send it when |
|---|---|---|
email | Yes | You have a signup, an inbound lead or a CRM contact with an address |
first_name or full_name, plus company_domain or company_name | Yes, as a pair | Your list has names and companies but no email |
job_title | No, optional | Two people share a name at the same company |
city | No, optional | The same name appears in several regions |
custom | No | You want your record ID back with the result |
full_name is split on the first space, so “Mary Ann Lopez” becomes first name Mary and last name Ann Lopez. Send first_name and last_name separately when your CRM stores them that way.
Two differences from the email endpoint matter in code. /phone/find accepts an email as input, and it has no webhook_url or sync field. For asynchronous delivery, send a bulk task, even for five records.
Phone enrichment API examples: curl, Python and JavaScript
Every call sends the X-Api-Key header and a JSON body. The first two examples look up one fictional contact: Marcus Reyes, VP of Operations at Brightwater Pallet Co. in Toledo, Ohio.

curl
curl -X POST https://api.scalelist.com/api/v1/phone/find \ -H "X-Api-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"first_name": "Marcus", "last_name": "Reyes", "company_domain": "brightwaterpallet.com", "job_title": "VP of Operations", "city": "Toledo", "custom": {"crm_id": "0035e00042"}}'
Python
import requests resp = requests.post( "https://api.scalelist.com/api/v1/phone/find", headers={"X-Api-Key": "YOUR_API_KEY"}, json={ "full_name": "Marcus Reyes", "company_name": "Brightwater Pallet Co.", "job_title": "VP of Operations", "custom": {"crm_id": "0035e00042"}, }, timeout=60, ) resp.raise_for_status() print(resp.json())
JavaScript (Node 18+), from a work email only
const res = await fetch("https://api.scalelist.com/api/v1/phone/find", { method: "POST", headers: { "X-Api-Key": "YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ email: "dana.whitfield@northwindfab.com", custom: { signup_id: "su_48213" }, }), }); if (!res.ok) throw new Error(`Scalelist returned ${res.status}`); console.log(await res.json());
What comes back
A found mobile costs 20 credits and a lookup with no number costs 0. Your custom object comes back verbatim, so the number lands on the right record.
The API reference does not publish the response schema for /phone/find yet, so log one full response on a contact whose mobile you know before you map fields. Store the lookup date with every result, misses included.
Bulk phone enrichment API: 100 lookups per task
For more than a handful of records, send POST /api/v1/phone/bulk. One task holds 1 to 100 lookups with the same fields as a single call, and answers at once.

- 202 at once: the response carries
taskId,status: "queued"andtotal. - Results when ready: posted to your
webhook_urlwhen the batch finishes, or read withGET /api/v1/phone/bulk?job_id=<taskId>. You can do both. - Safe retries: repeat the same
Idempotency-Keyand body within 24 hours and you get the original 202 back, with no duplicate task and no extra credits. - Durable: tasks in progress are re-queued automatically if the server restarts.
This Python sketch splits a CRM export into tasks of 100 and gives each one a stable idempotency key, so a network error never double-bills a batch.
import requests BULK_URL = "https://api.scalelist.com/api/v1/phone/bulk" def submit_phone_tasks(contacts, webhook_url, run_id="backfill-2026-09-28"): """contacts: dicts with first_name, last_name, company_domain, crm_id.""" task_ids = [] for start in range(0, len(contacts), 100): batch = contacts[start:start + 100] body = { "webhook_url": webhook_url, "requests": [ { "first_name": c["first_name"], "last_name": c["last_name"], "company_domain": c["company_domain"], "custom": {"crm_id": c["crm_id"]}, } for c in batch ], } headers = {"X-Api-Key": "YOUR_API_KEY", "Idempotency-Key": f"{run_id}-{start // 100}"} resp = requests.post(BULK_URL, headers=headers, json=body, timeout=30) if resp.status_code == 402: raise RuntimeError("Not enough credits to start this batch") resp.raise_for_status() task_ids.append(resp.json()["taskId"]) return task_ids
The reference documents four errors for bulk phone tasks: 400 idempotency_key_invalid (bad header format), 400 idempotency_key_reused (same key, different body), 401 (missing or unknown key) and 402 (not enough credits to start the batch). The Scalelist API hub lists every endpoint and its errors.
What a mobile costs on each plan
A mobile costs 20 credits, and only when one is found, so your price per usable mobile is set by your plan, not by your hit rate.
| Credits per month | Price per month | Mobiles it covers | Cost per mobile found |
|---|---|---|---|
| 500 | 29 USD | 25 | 1.16 USD |
| 1,000 | 49 USD | 50 | 0.98 USD |
| 2,000 | 89 USD | 100 | 0.89 USD |
| 5,000 | 199 USD | 250 | 0.80 USD |
| 10,000 | 349 USD | 500 | 0.70 USD |
| 20,000 | 649 USD | 1,000 | 0.65 USD |

A list where 60% of lookups find a number costs the same per mobile as one where 90% do, because misses cost 0. There is no per-seat price and no annual contract. Yearly billing gives 2 months free, unused credits roll over up to 2x your monthly allocation while subscribed, and custom plans start above 20,000 credits. Compare every Scalelist plan.
Does the phone enrichment API work outside the US?
Yes. In our benchmark, Scalelist found a phone number for 87% of the North American list, 85% in Latin America, 75% in APAC and 73% in EMEA.

These are found rates from our own test, published with the raw data, not accuracy rates. Our mobile coverage by country study goes deeper. Before you commit volume, run 100 of your own records per region.
What teams build with the phone enrichment API
- Speed to lead: a signup form posts the work email to
/phone/find. When a mobile comes back, the rep gets “Dana Whitfield, Northwind Fabrication, +1 555 0142” in Slack, ready to call. - Call blocks: the night before a call block, a job sends the day’s accounts to
/phone/bulkand loads the numbers into the dialer. See how to send mobiles to your dialer. - Clay tables: an HTTP API column calls
/phone/findfor each row; the Clay API guide walks through the setup. - Call when email is shaky: check addresses first with the email verification API, then call the contacts whose email comes back Risky.
- Email and mobile in one pass: the contact enrichment API pattern fills both fields on the same record.
No code? The Scalelist Mobile Finder runs the same lookups on a CSV in the app, and the Zapier app has a Mobile Finder action. Every other connector, from HubSpot to your sequencer, is on the integrations page.
Phone enrichment APIs compared
Scalelist has the highest price per mobile of the five phone enrichment APIs below. What the price buys is coverage, especially outside North America. Prices come from each vendor’s pricing page, found rates from our benchmark.
| API | Credits per mobile | Cost per mobile, entry plan (monthly) | Charged on a miss | Phone found: NA / EMEA / APAC |
|---|---|---|---|---|
| Scalelist | 20 | 1.16 USD (29 USD for 500) | No | 87% / 73% / 75% |
| Prospeo | 10 | 24.5 cents per user (49 USD for 2,000) | No | 75% / 39% / 44% |
| LeadMagic | 5 | 9.9 cents (99 USD for 5,000) | No | 64% / 8% / 16% |
| Apollo.io | 8 | 20.8 cents per seat (65 USD for 2,500) | No, for Apollo’s own data | 50% / 63% / 8% |
| Findymail | 10 | 49 cents (49 USD for 1,000) | No | 32% / 12% / none returned |

- Choose LeadMagic or Prospeo when your list is mostly US and price per mobile matters most. LeadMagic describes its coverage as strongest in the US.
- Choose Apollo when your team already works in Apollo. Its API delivers phone numbers to a webhook after the main response.
- Choose Findymail for email-first work: it returns no phone numbers for contacts in the European Union.
- Choose Scalelist when you call outside the US, or want people search, verified emails and mobiles behind one key, all charged only when found.
For emails, company data and people search side by side, read our B2B data API comparison.
Send your first lookups and see how many of your contacts come back with a mobile
Get 20 credits to test itFAQ
What is a phone enrichment API?
A phone enrichment API is an endpoint that returns a business contact’s mobile number from what you already know, such as a name and company or a work email. You call it from your code, a CRM job or a tool like Clay to add callable numbers to records, one lookup at a time or in bulk.
How much does the Scalelist phone enrichment API cost?
20 credits per mobile found, and 0 when no number is found. That is 1.16 USD per mobile on the 500-credit plan (29 USD a month) and about 0.65 USD on the 20,000-credit plan (649 USD). New accounts get 20 free credits, no credit card required, which covers one mobile found.
What do I need to send to find a mobile number?
Either a known work email on its own, or a name plus a company. Send first_name or full_name with company_domain or company_name. Add job_title or city when the name is common; the reference says both disambiguate same-name matches. A custom object returns your record ID with the result.
Can I enrich phone numbers in bulk?
Yes. POST /api/v1/phone/bulk takes 1 to 100 lookups per task and answers at once with a task ID. Results go to your webhook_url when the batch finishes, or you poll GET /api/v1/phone/bulk?job_id=. An Idempotency-Key header makes retries safe for 24 hours, and a 402 tells you before the batch starts that credits are short.
Does the phone enrichment API work outside the US?
Yes. In our benchmark, Scalelist found a phone number for 87% of the North American list, 85% in Latin America, 75% in APAC and 73% in EMEA. Those are found rates on our lists, so test a sample of your own records in each region before you send volume.
Is the Scalelist phone enrichment API GDPR compliant?
Scalelist operates under the GDPR and Singapore’s PDPA, with a Data Processing Agreement, Standard Contractual Clauses and a published sub-processor list. Contact data you submit is never added to Scalelist’s database. You still need a lawful basis to call the people you find. Details are in the Scalelist trust center.
Sources
- Scalelist API reference (OpenAPI 3.0.3)
- Prospeo: pricing, how credits work
- LeadMagic: pricing, mobile finder
- Findymail: pricing, phone finder
- Apollo.io: pricing, people enrichment API, how data requests work
- 47 U.S.C. § 227 (TCPA), Cornell Legal Information Institute
- FCC Declaratory Ruling FCC 24-17 on AI-generated voices