Phone Number OSINT Lookup — Carrier, Country & Footprint avatar

Phone Number OSINT Lookup — Carrier, Country & Footprint

Pricing

from $26.00 / 1,000 phone scanneds

Go to Apify Store
Phone Number OSINT Lookup — Carrier, Country & Footprint

Phone Number OSINT Lookup — Carrier, Country & Footprint

Reverse phone number lookup for any international number: validate the format, identify country, region and carrier, and get ready-made footprint search links across social, reputation and disposable-number sites. Open-source PhoneInfoga engine. No API keys, bulk input, JSON/CSV.

Pricing

from $26.00 / 1,000 phone scanneds

Rating

0.0

(0)

Developer

Daniel Carter

Daniel Carter

Maintained by Community

Actor stats

0

Bookmarked

385

Total users

37

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Phone Number OSINT — Carrier, Country & Footprint (PhoneInfoga)

Investigate a whole list of phone numbers and discover each one's carrier, country, line type, time zone, risk profile, and online footprint across social media, reputation sites, and disposable-number providers — powered by phoneinfoga (GPL-3.0) plus offline libphonenumber analysis (Apache-2.0).

Legal Disclaimer: This Actor is an unofficial integration of phoneinfoga and is not affiliated with, endorsed by, or sponsored by the original phoneinfoga project or its maintainers. It returns publicly available information only and stores no personal data. Use responsibly and only on numbers you have authorization to investigate.


What does this Actor do?

This Actor wraps the open-source OSINT tool phoneinfoga to investigate phone numbers in bulk — up to 200 per run — and returns structured intelligence for each one:

  • Validate & normalize the number (E.164, international, national and RFC3966 formats)
  • Identify the line type — mobile, fixed line, VoIP, toll-free, premium rate, shared cost, pager, UAN, voicemail
  • Identify country, carrier, region and time zone via offline libphonenumber data
  • Judge it in one line — every row carries a headline verdict, riskFlags, a riskLevel, and an smsCapable call
  • Detect OVH-owned ranges (European VoIP) — useful for fraud / scam-call investigation
  • Generate 30+ Google footprint search links across social media (Facebook, Twitter/X, LinkedIn, Instagram, VK), disposable-number sites, reputation databases, and individual lookup services
  • Summarise the batch — one free summary row with country and line-type distribution

Built for fraud investigators, security researchers, journalists, KYC teams, and developers who need automated phone-number reconnaissance backed by a proven open-source OSINT framework.

Free plan vs paid plan

Free Apify planPaid Apify plan
Numbers scanned per runThe first 1 you enterUp to 200
Verdict row per number (validity, line type, carrier, risk, footprint links)FullFull
Per-scanner rows (where that event is active)One of each scanner kind for the runEvery scanner that answered, for every valid number
What stayed lockedCounted in the final free-plan-preview row: numbers not scanned, per-scanner rows held back, estimated paid priceNothing locked

The free limit is a plan limit, not an error: the run finishes SUCCEEDED and the status message says how much stayed locked.


Why use this Actor?

  • ★ Backed by phoneinfoga — the de-facto open-source phone OSINT tool (16,500+ GitHub stars)
  • Zero API keys required — works out of the box for free, no-auth scanners (local, googlesearch, OVH)
  • Structured JSON output — ready for Apify datasets, webhooks, or downstream pipelines
  • Privacy-first design — public information only, no personal data stored beyond the run dataset
  • Schedulable — set up recurring monitoring via Apify Scheduler
  • API & MCP access — call via REST API, MCP, or Apify Console

How to use this Actor

  1. Open the Actor in Apify Console and click Try for free
  2. Paste your phone numbers in international format (e.g., +14155551234, +821012345678) — one or many
  3. Check the legal disclaimer box (disclaimerAck: true)
  4. Start the Actor — a 3-number batch finishes in a few seconds; the engine starts once and is reused for the whole list
  5. Download results from the Output tab as JSON, CSV, or Excel

Input

FieldTypeDescriptionDefault
phoneNumbersarrayNumbers to investigate, in international format. Up to 200 per run[]
numberstringSingle-number alternative, kept for existing API integrations—
defaultRegionstringISO 3166-1 alpha-2 code used to read numbers with no country code (e.g. US, KR)""
dedupebooleanCollapse numbers that normalise to the same E.164 valuetrue
disclaimerAckbooleanConfirm authorized & lawful usetrue
scannersstringComma-separated scanners to run. Empty = all free/no-key (local,googlesearch,ovh)""

Example input:

{
"phoneNumbers": [
"+14155551234",
"+33679368229",
"+821012345678"
],
"defaultRegion": "",
"dedupe": true,
"disclaimerAck": true,
"scanners": ""
}

The legacy single-number form still works exactly as before:

{ "number": "+14155551234", "disclaimerAck": true }

Invalid input ends the run as SUCCEEDED with a notice row; the run start fee is still charged.

Output

One structured dataset item per phone number. Rows carrying a noticeCode are status rows, not results (summary, no-input, disclaimer-not-acknowledged, targets-truncated, charge-limit-reached, billing-unavailable) — skip them when parsing programmatically.

{
"input": "+14155551234",
"valid": true,
"possible": true,
"e164": "+14155551234",
"international": "+1 415 555 1234",
"localFormat": "(415) 555-1234",
"national": "(415) 555-1234",
"rfc3966": "tel:+14155551234",
"country": "US",
"countryName": "United States",
"countryCode": 1,
"region": "San Francisco, CA",
"carrier": null,
"lineType": "FIXED_LINE_OR_MOBILE",
"numberType": "FIXED_LINE_OR_MOBILE",
"numberTypeLabel": "fixed line or mobile",
"timezones": ["America/Los_Angeles"],
"smsCapable": true,
"riskFlags": [],
"riskLevel": "none",
"invalidReason": null,
"headline": "+1 415 555 1234 — valid United States fixed line or mobile (San Francisco, CA), America/Los_Angeles, safe to SMS, 45 footprint links",
"ovhFound": false,
"ovhCity": null,
"ovhNumberRange": null,
"ovhZipCode": null,
"searchLinkCount": 45,
"searchLinks": [
{ "category": "social_media", "dork": "site:facebook.com intext:\"4155551234\"...", "url": "https://www.google.com/search?q=..." },
{ "category": "reputation", "dork": "site:whocalled.us ...", "url": "https://www.google.com/search?q=..." }
],
"scannersRun": ["local", "googlesearch", "ovh"],
"scannerErrors": {},
"scannedAt": "2026-06-05T12:34:56.789Z",
"disclaimer": "Public information only..."
}

You can download the dataset in JSON, HTML, CSV, or Excel.


Data fields

FieldFormatDescription
inputtextRaw input as provided
headlinetextOne-line verdict for this number
validbooleanWhether number passes E.164 validation
possiblebooleanWhether the length is plausible for that numbering plan
e164textCanonical E.164 representation
internationaltextPretty international format
localFormat / nationaltextCountry-local format
rfc3966texttel: URI form
countrytextISO country code (e.g., US, KR, FR)
countryNametextFull country name (e.g., United States)
countryCodenumberNumeric country code (e.g., 1, 82, 33)
regiontextGeographic area of the number range (e.g., San Francisco, CA)
carriertextCarrier name when available from offline data
lineType / numberTypetextMOBILE, FIXED_LINE, VOIP, TOLL_FREE, PREMIUM_RATE, …
numberTypeLabeltextSame, in plain English
timezonesarrayIANA time zones for the number range
smsCapablebooleantrue / false, or null when the plan cannot tell
riskFlagsarraypremium-rate, voip, shared-cost, toll-free, ovh-voip-range, not-possible, invalid-for-region, country-mismatch, unparseable
riskLeveltextnone, low, medium, high
invalidReasontextWhy a number failed, in plain English
ovhFoundbooleanWhether number belongs to an OVH Telecom range
ovhCity / ovhNumberRange / ovhZipCodetextOVH range metadata
searchLinkCountnumberCount of footprint search links generated
searchLinksarrayGoogle search links across 5 categories (social_media, disposable_providers, reputation, individuals, general)
scannersRunarrayScanners that were executed
scannerErrorsobjectPer-scanner errors (empty when all succeeded)
scannedAtdateISO timestamp

Scanner-layer rows (additional, once priced)

For each valid number, this Actor also writes one extra row per scanner that answered (rowType: "scanner-result"), e.g. one row for local, one for googlesearch, one for ovh. This is on top of — not instead of — the full verdict row above, and only charges once the scanner-result event below is on the live price list. A scanner that failed (its own error or ours) writes no scanner row and is not charged; its error stays in the verdict row's scannerErrors.

{ "rowType": "scanner-result", "input": "+14155551234", "e164": "+14155551234",
"scanner": "googlesearch", "status": "ok", "result": { "...": "..." }, "error": null }

Pricing

Run start fee — from 10 September 2026: $0.010 is charged once per run, when the run starts — including a run whose input is rejected. Existing per-result prices are unchanged.

This Actor is priced per number scanned:

  • $0.05 per phone number written to the dataset (Pay-per-Event) — a batch of 10 numbers costs $0.50
  • Every number that comes back with a verdict is charged, valid or invalid.
  • Paid Apify plans get the store's plan discounts on every event: Bronze 20%, Silver 35%, Gold and above 48%. An "invalid" verdict is the answer you asked for, and it is the one that stops a wasted call or SMS.
  • Batch summary and status rows are not charged. A run that produced no verdict because of its input (empty input, disclaimer not acknowledged) is charged the run start fee only and ends SUCCEEDED with a notice row
  • Duplicate numbers that normalise to the same E.164 value are collapsed before charging, so you never pay twice for the same line
  • Standard Apify platform compute is also consumed (~$0.001–0.005 per run)
  • scanner-result — $0.01 per scanner row (once priced, see above) — an additional layer, on top of the $0.05 verdict row, for each scanner that answered on a valid number (typically 2–3 scanners: local, googlesearch, ovh for French numbers). Not charged for invalid numbers, since no scanner runs against them, nor for a scanner that failed.
  • Maximum charge per run: each row is handed over and then charged, one at a time. When the run reaches the maximum charge you set, it scans no further numbers, adds a charge-limit-reached notice row (never charged) saying how many were not scanned, and finishes SUCCEEDED. If the Apify charging API itself stops answering (three charge calls failing in a row, or ten in one run), the run likewise stops early with a billing-unavailable notice row (never charged) rather than return rows it cannot bill; run again for the rest.

Free plan: each run scans the first number (full verdict row) and, where the scanner-result event is active, shows one per-scanner row of each scanner kind. Paid Apify plans receive the full result set. Every free-plan run ends with a free-plan-preview notice row (never charged) — it is a plan limit, not an error. It counts the numbers left unscanned and the per-scanner rows held back, and gives an estimated list-price total for the whole input (an estimate, not a quote).

New Apify users receive free monthly credits to get started.


Tips & Advanced Options

  • Multiple numbers: just paste them all into phoneNumbers — up to 200 per run, and the phoneinfoga engine starts once for the whole batch
  • Filter before you act: smsCapable == true before an SMS campaign, riskLevel in ("medium","high") before a dialler campaign
  • Mixed-country lists: set defaultRegion to the country the list is supposed to be from; anything else is flagged country-mismatch
  • Specific scanners only: pass scanners: "local,ovh" to skip googlesearch link generation
  • CSV export: the searchLinks array unwinds nicely when you select CSV export — one row per link
  • Integration: connect to Slack/Discord/webhooks via Apify Integrations to alert on suspicious carrier matches

FAQ, Disclaimers & Support

This Actor returns publicly available information only — number-format parsing (offline libphonenumber), OVH's public REST API (no auth), and Google search links you could type yourself. It does not:

  • Bypass any authentication
  • Scrape private profiles or paywalled databases
  • Store personal data beyond the dataset for the run
  • Reverse-lookup any database that requires opt-in consent

However, you remain solely responsible for ensuring your use complies with:

  • Local privacy laws (GDPR, CCPA, PIPA, etc.)
  • The Terms of Service of any site you subsequently visit via the generated search links
  • Anti-stalking / anti-harassment statutes in your jurisdiction

Only investigate numbers you are authorized to investigate (your own, those of consenting parties, or those covered by a legitimate fraud-prevention / KYC / journalism mandate).

This Actor is an UNOFFICIAL integration of phoneinfoga, released under the GNU General Public License v3.0. It is NOT affiliated with, endorsed by, or sponsored by the original phoneinfoga project or its authors. The phoneinfoga binary is executed as a separate process; this Actor's wrapper code is not a derivative work in the GPL sense. See LICENSE-NOTICE.md in the source for details. The Actor author provides this tool for legitimate security research, fraud prevention, journalism, and authorized investigations only. Users are solely responsible for ensuring their use complies with applicable laws. The author accepts no liability for misuse.

What about numverify / Google Custom Search scanners?

phoneinfoga supports additional scanners (numverify, googlecse) that require your own API keys. To protect users from accidental third-party charges and to keep data flow under your direct control, this Actor enables only the free no-auth scanners by default. Power users who need numverify or googlecse can install phoneinfoga locally and run it with their own credentials.

Known Limitations

  • carrier is often empty for non-mobile numbers (libphonenumber limitation)
  • OVH lookup is meaningful for European VoIP numbers; returns found: false for most others
  • Google search link generation does not execute the queries — you visit the links to view results
  • Very common number patterns may return many false-positive matches when you follow the links

Support

  • Found a bug? Open an issue in the Issues tab
  • Need a custom OSINT solution? Contact via the Apify platform

⭐ Love it? Leave a Review

Your honest rating helps fraud investigators and security researchers discover this Actor.

Works well with

Every run of this Actor also returns these suggestions in the nextSteps field of its summary row.