Phone Number Decoder API avatar

Phone Number Decoder API

Pricing

Pay per event

Go to Apify Store
Phone Number Decoder API

Phone Number Decoder API

Find every business phone for any domain. Classifies by country (NANP CA/US disambiguated), line type (landline / mobile / toll-free), purpose label (sales / support / billing / press / office / fax), and confidence tier. 31 countries.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Phone Number Decoder API — find every business phone for any domain

A phone number lookup API that takes a domain and returns every business phone Google has indexed, classified by country (US vs CA disambiguated via NANP area code), line type (landline / mobile / toll-free), purpose label (sales / support / billing / press / office / fax / general), and confidence tier. Covers 31 countries (full EU + UK + US + CA) with country-specific local-format regex packs for the 17 most common.

This is the missing layer between scraping every company's contact page (which fails on the 80% of pages that render numbers as images or JS) and paying for a B2B contact-data vendor (CARFAX-style pricing, $$$). Three orthogonal Google queries per domain — directory listings, the brand's own contact page, and customer-service brand mentions — fan out in parallel, then a multi-pass regex pipeline extracts and normalizes every phone to E.164 form.

What you get

  • E.164 normalization — every phone in canonical +CCNNNNNNNNN form, regardless of how it was rendered in the source ((0)20 224 2424, 020-224-2424, +31202242424 all collapse to one record)
  • Country resolution — ISO 2-letter country code, with NANP CA/US disambiguation via 52 known Canadian area codes (+1 416 ... correctly tagged CA, +1 805 ... stays US)
  • Line-type classificationlandline, mobile, toll_free, or unknown based on per-country mobile/toll-free prefix lookup
  • Purpose label inferencesales, support, billing, press, office, fax, or general from a 200-char text-context window with multilingual keyword matching (EN/NL/DE/FR/ES/IT/SE/PL)
  • URL-path fallback/support, /klantenservice, /kundenservice, /contact-us paths automatically labelled when text context is empty
  • Source attribution — every URL where the number was surfaced, deduplicated
  • Confidence tierhigh for multi-source confirmation, medium for single-source, low for likely-personal mobile (single-source mobile with label=general)
  • IT canonicalization+39 0775 770011 and +39 775 770011 correctly dedup to one record while preserving the leading 0 in the displayed form

Why use a phone number lookup instead of scraping pages

Contact-page scraping is fragile. About 30% of business contact pages render phones as images (anti-scrape defence). Another 20% load phones via JavaScript that fires after a page-view event. About 10% fragment phones across regional subsidiary pages that don't link back to the parent domain. A naive scraper that just curls the homepage misses most of the signal.

Google has already indexed the same data from business directories (KvK, BBB, Trustpilot, Yelp, Google Business Profile), local newspapers, partner vendor pages, and the brand's own SEO-friendly pages. This actor harvests all of it in 3 parallel SERP queries per domain. The fan-out gives a 3-5× improvement over single-query approaches — empirically validated.

Input

FieldTypeRequiredDefaultNotes
domainstringyeshema.nlBare host like coolblue.nl or patagonia.com. No scheme, no path
countrystringnonlISO 2-letter country hint. Drives which local-format regex pack fires for numbers without +CC
languagestringnonlGoogle UI language (hl)
filter_personalbooleannotrueWhen true, single-source mobile + label=general gets demoted to confidence=low and flagged
hitsbooleannofalseInclude raw SERP results per route in the output

Output

One dataset item per unique phone. Example for domain=hema.nl, country=nl:

{
"domain": "hema.nl",
"country_hint": "nl",
"phone": "+31203114411",
"raw": "020 311 4411",
"country": "NL",
"type": "landline",
"label": "support",
"sources": [
"https://www.hema.nl/klantenservice",
"https://www.trustpilot.com/review/hema.nl"
],
"source_count": 2,
"confidence": "high",
"warning": null,
"phone_rank": 1,
"total_results": 28,
"duration_seconds": 0.34,
"errors": []
}

Multi-phone domains return multiple items. A large brand can yield 7-14 phones across multiple countries when multi-country directory listings surface alongside the brand's own contact page.

Use cases

Outbound sales prospecting. When the SDR has a TAM list of 5000 NL/BE/DE company domains, calling this actor per domain returns the canonical sales/support line plus the office HQ number. The label=sales keyword match across EN/NL/DE/FR helps target the right inbox; the type=landline filter excludes likely personal mobiles. Pair with filter_personal=true to auto-flag the inevitable founder-mobile leaks that appear in business directories.

Compliance and KYC verification. When an onboarding form has a "what's your business phone?" field, the actor lets you verify the customer-supplied number matches at least one Google-indexed source for their domain. A confidence-high match across 2+ public sources is a strong signal; a confidence-low single-source mobile is a flag for additional checks.

Multi-country brand intelligence. Querying domain=ikea.com&country=nl discovers NL, BE, LU, and US toll-free lines in a single call. The country dispatch table covers 31 countries including all EU + UK + NANP. For multinationals with regional subsidiary phones, the actor surfaces every country's office line as a separate dataset item with the resolved country code.

Reputation monitoring and customer service routing. For a brand monitoring tool that wants to know which support line customers actually call, the label=support filter combined with source_count ranking surfaces the line that appears across the most directory listings — usually the canonical customer-facing number, not the unstaffed corporate switchboard. The confidence=high tier means 2+ independent retailers confirmed it.

How it compares

SourceCoverageOutputAuth
Contact-page scraping~30-40% of domains (fails on image/JS-rendered pages)Single page only; no cross-source dedupNone
B2B vendor (ZoomInfo, Lusha, Cognism)ComprehensiveSpec sheet per contact, with emailPaid subscription per credit
Google Knowledge PanelWhatever Google chose to surfaceOne number per brandNone, but limited
This actor31-country regex; 3 parallel SERP routes4-14 phones per brand with country/type/label/source attributionNone

This actor is for when you need MULTIPLE phones per domain with classification, not for when you need a single "official" number (use the brand's own contact page directly for that). For email + LinkedIn enrichment, a paid B2B vendor still wins.

Pricing

Pay-per-event — one charge per phone successfully extracted. A multi-phone brand that returns 8 dataset items charges 8 events. A run with no matches charges nothing. The actor-start fee is a token charge to cover Apify compute overhead.

Limits and gotchas

  • APAC, ME, LATAM, AF not covered. The 31-country dispatch covers EU + UK + US + CA. Phones with +CC outside that set still parse via Pass 1 (international regex) but the country field comes back as ?. Add to COUNTRY_INFO when business need arises.
  • Personal mobiles in directories. Setting filter_personal=false keeps them at medium confidence instead of demoting to low. Default behavior flags single-source mobile + label=general as likely personal.
  • NANP CA/US disambiguation is area-code based. All 52 known Canadian area codes (as of the 2026 NANPA registry) are checked. New area codes added by Canada are rare (a few per decade); update the CANADIAN_AREA_CODES set when they appear.
  • Captcha retries are per-route, not global. Each of the 3 SERP routes retries once independently. If 2 routes succeed and 1 captcha-blocks, you still get most of the signal — the errors array reports the failing route.
  • IT leading-0 canonicalization is asymmetric. +39 0775 770011 and +39 775 770011 collapse to one dedup key, but the displayed phone field always retains the leading 0 (correct for IT fixed-line). Every other EU country drops the national-prefix 0 in international form.
  • Toll-free without +1. US toll-free numbers shown as 8XX-NNN-NNNN (no country code) only catch via the local-format US regex when country=us is passed. Without the hint, they parse but get tagged generically.
  • ? country signals an unknown CC. If you see ? in production, the international regex matched a +CC not in the dispatch table. Add the country code to COUNTRY_INFO to enable resolution.

FAQ

Can I look up phone numbers without an API key? Yes. This actor calls Google's public index through a private SERP gateway. You don't pass any directory credentials, no B2B vendor subscription, no Google Business Profile access. Just the domain.

How does the actor handle Canadian vs US numbers? Both use NANP (+1), so the country code alone doesn't disambiguate. The actor checks the first 3 digits of the local portion against a 52-entry set of known Canadian area codes (NANPA 2026 registry). Match → country=CA. No match → defaults to US. Caribbean NANP states (Bahamas, Jamaica) currently fall through as US by default; extend the lookup if granular disambiguation matters.

What's the difference between confidence tiers? high = 2+ independent SERP results surfaced the same phone. medium = 1 source surfaced it. low = filtered down from medium because it's a mobile number, single-source, with no purpose context — almost always a personal number leaked into a business directory. Pass filter_personal=false to keep those at medium.

Why are there 3 parallel SERP queries? Each query has a distinct purpose: Route 1 (-site:domain) finds third-party directory listings that index the brand. Route 2 (site:domain) finds the brand's own contact page. Route 3 (broad brand query) catches Knowledge Panel and GMB-surfaced numbers. Empirically the 3-route fan-out yields 3-5× more phones per domain than a single query.

Can the actor find phones for any domain? NL/BE/DE/FR/UK domains hit ~95% of the time with 3-10 phones each. Nordics (SE/NO/DK/FI) ~80%. CA/US ~90% — requires the leading +1 or canonical 10-digit format. APAC/MENA/LATAM coverage is limited; without +CC the international regex passes but country may resolve to ?.

  • VIN Decoder — decode any 17-character VIN into year/make/model + recalls + safety
  • ISBN Decoder — find every edition of a book from title + author
  • Backlinks Checker — domain link profile and per-link records