Phone Number Enrichment & Validator — Bulk Reverse Lookup avatar

Phone Number Enrichment & Validator — Bulk Reverse Lookup

Pricing

from $1.00 / 1,000 number validateds

Go to Apify Store
Phone Number Enrichment & Validator — Bulk Reverse Lookup

Phone Number Enrichment & Validator — Bulk Reverse Lookup

Bulk phone validator + US reverse lookup in one actor. Every number: valid/invalid, E.164, country, region, carrier, line type — 100% offline. Opt-in US enrichment adds the owner: name, age, emails, other phones, addresses, relatives. Pay per match, misses free. JSON/CSV/API.

Pricing

from $1.00 / 1,000 number validateds

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Phone Enrichment logo

Two tools in one actor. Feed it a list of phone numbers and it validates every one 100% offline — valid/invalid, E.164, country, region, carrier, line type — no login, no network, no ban risk. Then, for US numbers, flip on owner enrichment and each number is reverse-looked-up into the person behind it: name, age, emails, other phone numbers, current and past addresses (with coordinates), relatives and associates. Bulk, not one-number-at-a-time. You pay per matched owner — misses are free.

InputRow emitted
Any phone number (E.164 or local + default country)One validated row — E.164, country, region, carrier, line type
A valid US number, with enrichOwner onThe same row plus an owner object — name, age, emails, addresses, relatives

100% offline validation. The optional US owner lookup runs through the actor's own residential unblocker — no API key, no account, no per-lookup cost to you.

Why Use This Actor?

  • Validate the whole list for almost nothing. Offline libphonenumber validation is deterministic and network-free, so you can clean tens of thousands of numbers per run at ~$1 / 1,000 — no rate limits, no proxies, no risk.
  • Then turn US numbers into people. Owner enrichment resolves a US number to a full person record: fullName, age, emails[], otherPhones[], currentAddress (with lat/long), pastAddresses[], relatives[], associates[].
  • Bulk — not one number per run. Other reverse-lookup actors make you launch a separate run for every single number. This one takes a whole list and processes it in parallel.
  • Pay per match, misses are free. The owner-enrichment charge fires only when a real person is resolved. A number that doesn't come back costs you nothing — so a cold or wrong list never runs up a bill.
  • No keys, no accounts. Both the offline validator and the US reverse lookup run inside the actor. Nothing to sign up for.
  • Clean, consistent rows. Every field that doesn't resolve comes back null/empty rather than missing, so your CSV/JSON schema is stable for import.

Overview

The actor runs in two stages, and the second is opt-in:

  • Validate (always, offline). Every number is parsed with Google's libphonenumber metadata (bundled) — is it a real, assigned number for its country, what line type (mobile / fixed / VoIP / toll-free), which region and carrier, and its canonical E.164 form. This never touches the network.
  • Enrich US owner (opt-in). When enrichOwner is on, each valid US 10-digit number is reverse-looked-up to the person behind it. Non-US numbers are validated and passed through untouched; US numbers that don't resolve are emitted (unless you filter them out) but never charged.

A realistic note on coverage: US reverse lookup resolves numbers that appear in public people-search records — strong for landlines and long-held mobile numbers, thinner for brand-new or heavily-private numbers. Because misses are free, an unresolved number never costs you anything.

Supported Inputs

  • phoneNumbers — an array of numbers, one per entry. E.164 (+15558675309) is best; local numbers work with defaultCountry.
  • phoneNumbersText — paste a whole column (newline / comma / semicolon separated). Merged and de-duplicated with the array.
  • defaultCountry — ISO country (e.g. US) used to parse numbers that don't start with +.

Use Cases

WhoWhat they use it for
Lead-gen & salesClean a raw phone list, then enrich US numbers into named contacts with emails and addresses for outreach.
Skip tracing / collectionsResolve a US number to the current person, their other numbers, and current + past addresses.
Fraud & identity checksConfirm a number is a real, assigned line of the expected type, and see who it's associated with.
CRM hygieneBulk-validate stored numbers (drop invalid/garbage), attach carrier + line type, and hydrate US records.
Data teamsOne actor for validation + enrichment instead of stitching a validator and a reverse-lookup API together.

How It Works

How Phone Enrichment works

  1. Input — an array, a pasted column, or a CSV of numbers in any format (punctuation is stripped). Thousands per run.
  2. Validate (offline) — each number → valid/invalid, E.164, country + calling code, line type, region and carrier, computed entirely from bundled metadata.
  3. Enrich US owner (opt-in) — each valid US number is reverse-looked-up to the person: name, age, emails, other phones, current + past addresses with coordinates, relatives and associates.
  4. Export — one flat row per number, streamed to the dataset: JSON, CSV, Excel, or the Apify API.

Input Configuration

FieldTypeDescription
phoneNumbersarrayNumbers to validate / enrich, one per entry. E.164 preferred; local works with defaultCountry.
phoneNumbersTextstringPaste a column of numbers (newline / comma / semicolon separated). Merged + de-duplicated.
defaultCountrystringISO 3166-1 alpha-2 (e.g. US, GB) for numbers without a leading +.
includeGeoCarrierbooleanAttach region + carrier (offline). Default true.
onlyValidbooleanEmit only valid, assigned numbers — drops garbage/typos. Default false.
enrichOwnerbooleanTurn on US reverse-phone owner enrichment. Billed per match; misses free. Default false.
onlyMatchedbooleanWith enrichment on, emit only rows that resolved to a person. Default false.
enrichConcurrencyintegerParallel owner lookups (1–15). Default 5.
maxItemsintegerHard cap on numbers processed this run.
proxyobjectOptional override; leave empty to use the built-in residential unblocker.

Example input

{
"phoneNumbers": ["+12128675309", "+14155552671", "(512) 555-0143"],
"defaultCountry": "US",
"includeGeoCarrier": true,
"enrichOwner": true,
"onlyMatched": false
}

Output Overview

One flat JSON object per number. Validation fields are always present; the owner object and ownerMatched flag appear only when enrichOwner is on. Download as JSON, CSV, Excel, or via the Apify API.

Output Samples

Validation only (enrichOwner off):

{
"input": "+1 212-867-5309",
"valid": true,
"possible": true,
"e164": "+12128675309",
"international": "+1 212 867 5309",
"national": "(212) 867-5309",
"countryCode": "US",
"countryCallingCode": "+1",
"lineType": "FIXED_LINE_OR_MOBILE",
"region": "New York, NY",
"carrier": null,
"error": null,
"processedAt": "2026-07-23T18:20:00.000Z"
}

A valid US number enriched to its owner (enrichOwner: true) — illustrative shape:

{
"input": "+15125550143",
"valid": true,
"e164": "+15125550143",
"countryCode": "US",
"lineType": "FIXED_LINE_OR_MOBILE",
"region": "Austin, TX",
"ownerMatched": true,
"owner": {
"fullName": "Jordan Rivera",
"age": 44,
"emails": ["jordan.rivera@example.com"],
"otherPhones": ["(512) 555-0199"],
"currentAddress": {
"streetAddress": "123 Congress Ave", "addressLocality": "Austin",
"addressRegion": "TX", "postalCode": "78701",
"latitude": 30.2672, "longitude": -97.7431
},
"pastAddresses": [
{ "streetAddress": "456 Old Rd", "addressLocality": "Dallas", "addressRegion": "TX", "postalCode": "75201", "latitude": null, "longitude": null }
],
"relatives": [{ "name": "Alex Rivera", "profileUrl": "https://www.truepeoplesearch.com/find/person/…" }],
"associates": [{ "name": "Sam Doe", "profileUrl": "https://www.truepeoplesearch.com/find/person/…" }],
"profileUrl": "https://www.truepeoplesearch.com/find/person/…",
"source": "truepeoplesearch"
},
"processedAt": "2026-07-23T18:20:01.000Z"
}

A valid US number that didn't resolve — emitted (unless onlyMatched), and not charged for enrichment:

{
"input": "+12125550100",
"valid": true,
"e164": "+12125550100",
"countryCode": "US",
"ownerMatched": false,
"owner": null,
"processedAt": "2026-07-23T18:20:02.000Z"
}

Key Output Fields

Validation (always)

  • valid / possible — assigned number / well-formed for its country
  • e164 · international · national — canonical formats
  • countryCode · countryCallingCode · lineType · region · carrier

Owner enrichment (enrichOwner on)

  • ownerMatched — whether a person was resolved (the billing gate)
  • owner.fullName · owner.age · owner.emails[] · owner.otherPhones[]
  • owner.currentAddress (with latitude/longitude) · owner.pastAddresses[]
  • owner.relatives[] · owner.associates[] · owner.profileUrl · owner.source

Pricing

Pay-per-event — charged for results, not runtime:

EventWhen it firesRate
Number validatedOne number emitted to the dataset (validity, E.164, country, carrier, line type — offline).$0.001
US owner matchedThe opt-in reverse lookup resolves a US number to a real person. Never fires on a miss.$0.02
Actor startOnce per run.Free

A 1,000-number list with owner enrichment on and 300 US matches: 1,000 × $0.001 + 300 × $0.02 = $7.00, and every unresolved number is free. Validation-only runs are just $0.001/number.

What makes this different

CapabilityOne-per-run reverse lookupsValidation-only actorsThis actor
Bulk (many numbers per run)✗ (one per run)
Offline validation (E.164, carrier, line type)
US owner: name, age, emails, other phonespartial
Current + past addresses with coordinates
Relatives + associates
Pay only on a match (misses free)sometimesn/a

Notes & limitations

  • Owner enrichment is US-only. Non-US numbers are validated and passed through; enrichment is skipped for them (never charged).
  • Validation is offline and definitive; enrichment depends on public records. A valid US number that isn't in public people-search data returns ownerMatched: false — and isn't billed.
  • Not a live-carrier HLR ping. Line type and carrier come from libphonenumber metadata (the number's assigned range), not a real-time network query — so there's no cost, rate limit, or ban risk.
  • Enrichment throughput is bounded by enrichConcurrency (default 5) since it's network-bound; validation alone runs much faster.

🤖 For AI Agents & LLM Apps

Purpose: bulk phone validation (offline) + opt-in US reverse-phone owner enrichment, in one actor.

Minimal tested input:

{ "phoneNumbers": ["+12128675309"], "enrichOwner": true }

Output fields (flat, per number): always input, valid, possible, e164, international, national, countryCode, countryCallingCode, lineType, region, carrier. With enrichOwner: ownerMatched (boolean) and owner (object with fullName, age, emails[], otherPhones[], currentAddress{…,latitude,longitude}, pastAddresses[], relatives[], associates[], profileUrl, source) — owner is null on a miss.

Billing: number-validated $0.001 per emitted row; owner-matched $0.02 fires ONLY when ownerMatched is true (US match); actor-start free. Enrichment misses are never billed.

Agent-relevant behaviors: set onlyValid: true to drop garbage, onlyMatched: true to keep only enriched US contacts; enrichment is US-only and skipped for other countries; results stream to the default dataset; input accepts a pasted blob via phoneNumbersText; no API keys required.

FAQ

Do I need an API key or account? No. Offline validation and the US reverse lookup both run inside the actor.

Is validation a live network check? No — it's 100% offline (Google's libphonenumber). That's why it has no rate limit, no cost per number beyond the tiny event fee, and can't get anything banned. It answers "is this a real, assigned number and what kind of line," not "is the handset switched on right now."

Am I charged for numbers that don't resolve to a person? No. The owner-matched charge fires only when a real person comes back. Misses — and all non-US numbers — are free of the enrichment charge.

Which countries does owner enrichment cover? US numbers. Everything else is validated and passed through without enrichment.

Can I validate without enriching? Yes — leave enrichOwner off (the default) and you get a fast, cheap, offline validation run.

What formats can I paste? Anything — +1 (212) 867-5309, 212.867.5309, +12128675309. Punctuation is stripped; set defaultCountry for numbers without a country code.

What export formats are supported? JSON, CSV, Excel, XML, JSONL, or the Apify API — plus Make, Zapier, n8n, webhooks and scheduling.

Support

Additional Services

  • International owner enrichment beyond the US (via a provider key)
  • Custom fields, filters, or export formats for your workflow
  • Private or dedicated actors for high-volume or compliance-sensitive use

Reach out via the Issues tab or email.

Explore More Scrapers

Browse my other Apify actors on my profile: memo23 on Apify.

⚠️ Disclaimer

This actor validates phone numbers offline and, for US numbers, retrieves publicly available people-search information — the same data any visitor can look up on public reverse-phone directories. It does not access private data, bypass authentication, or scrape gated content.

You are responsible for how you use the data you collect. Reverse-lookup and contact data is regulated: use it in compliance with applicable laws (including the FCRA, GDPR, TCPA, CAN-SPAM, CCPA and other privacy, consumer-reporting, and anti-spam regulations) and any contractual obligations. This data may not be used for FCRA-covered purposes such as eligibility for credit, employment, insurance, or housing. Finding a person's contact information does not constitute consent to contact them — ensure your outreach complies with the relevant laws in your jurisdiction. Do not use this tool to facilitate spam, harassment, stalking, or any violation of privacy.

SEO Keywords

phone number validator, bulk phone validation, phone enrichment, reverse phone lookup, phone number lookup, reverse phone number, us reverse phone lookup, caller id lookup, skip tracing, skip trace, phone to name, phone owner lookup, e164 validator, carrier lookup, line type lookup, mobile or landline, phone number verification, bulk phone checker, phone number cleaner, crm phone hygiene, lead enrichment, contact enrichment, people search api, find person by phone, phone osint, phone number osint, validate phone numbers bulk, phone data enrichment, neuralverge alternative