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.

Test the phone enrichment API on your own contacts: 20 free credits cover your first mobile found

Get your API key

Need 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.

Phone enrichment API flow: send a work email or a name and company, Scalelist finds the mobile, 20 credits when found and 0 when no number is found.
You pay at the last step only, and only when a mobile comes back.

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.

Phone enrichment API curl example: POST /api/v1/phone/find with X-Api-Key, name Marcus Reyes, company domain, job title, city and a custom CRM ID.
Job title and city are optional, but they are what separates two people with the same name.

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.

Bulk phone enrichment API example: POST /api/v1/phone/bulk with an Idempotency-Key, a webhook_url and two lookups, returning 202 with taskId, status queued and total 2.
Mix inputs in one task: a name and domain for one row, just a work email for the next.

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
Phone enrichment API cost per mobile found by Scalelist plan: 1.16 USD at 500 credits, 0.98, 0.89, 0.80, 0.70, down to 0.65 USD at 20,000 credits.
Because misses are free, this is your real price per usable mobile, whatever your hit rate.

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.

Phone enrichment API benchmark by region: Scalelist found a phone number for 87% in North America, 85% in Latin America, 75% in APAC and 73% in EMEA.
Phone numbers were found for more than 70% of the list in every region we tested.

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

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
Phone enrichment API comparison: Scalelist 1.16 USD per mobile and 87% found in North America; Prospeo 24.5 cents, LeadMagic 9.9 cents, Apollo 20.8 cents, Findymail 49 cents.
Scalelist costs the most per mobile; the gap it closes is in EMEA and APAC, where the others return far fewer numbers.

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 it

FAQ

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