X/Twitter Phone Number Scraper avatar

X/Twitter Phone Number Scraper

Pricing

from $5.99 / 1,000 results

Go to Apify Store
X/Twitter Phone Number Scraper

X/Twitter Phone Number Scraper

X/Twitter Phone Number Scraper extracts publicly available phone numbers and contact details from X (Twitter) profiles and posts. Collect profile data, usernames, bios, websites, and phone numbers for lead generation, market research, outreach campaigns, and business prospecting.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

ScrapeVanta

ScrapeVanta

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Twitter Phone Number Scraper — Validated X / Twitter Phone Numbers with Line Type and Profile

Search X / Twitter for publicly listed phone numbers, validate and classify every one, and get the X / Twitter profile behind it.

The important question a scraped number has to answer is not "is it a number" — it is can I text this, and who picks up.


What it does

1. Every number is classified before you see it

The previous version formatted whatever it found into E.164 and pushed it. An unallocated number, a toll-free switchboard and a mobile you can text all arrived looking identical. Now each one carries:

FieldWhat it tells you
isValidWhether the number falls inside a range the country has actually allocated
isPossibleWhether the digit count merely fits — a number can be possible and not valid
numberTypemobile, fixed line, toll free, premium rate, VoIP, shared cost, pager…
isMobileWhether it is a mobile
isTextableWhether you can send an SMS to it — you cannot text a landline
isSwitchboardNumberToll-free, premium and shared-cost lines reach an organisation, not a person
countryCode, countryCallingCodeWhere the number is registered
geographicAreaThe city or region, where the numbering plan is geographic
carrierNameThe operator, where that is published
timeZonesWhen it is reasonable to call
phoneConfidence0–100 usability score

Four formats are returned for every number: phoneE164, phoneNational, phoneInternational and phoneRfc3966, so it drops into a dialler, a CRM or an SMS platform without reformatting.

All of this runs offline. The numbering-plan metadata ships with the Actor — no API key, no quota, no per-lookup cost, and no third-party service seeing your lead list.

2. One line counted once

De-duplication works on the canonical E.164 form, so +1 415 555 2671 and (415) 555-2671 are recognised as the same line. The summary reports how many duplicates were removed.

3. The X / Twitter profile behind each number

Each result links to a X / Twitter page. That link is parsed into platformName, profileHandle, profileType and a canonical profileUrl, so you know whose number you have — not just that one exists.

4. Filter for the list you can actually use

  • mobileNumbersOnly — drop landlines
  • textableNumbersOnly — mobile and VoIP, the ones that receive SMS
  • excludeSwitchboardNumbers — drop toll-free and premium-rate
  • keepOnlyCountries — restrict by country code
  • minimumConfidence — drop weak numbers

Every filter drops numbers whose status could not be established, rather than assuming they qualify. An unknown line type is not evidence of a mobile.


Input

The search options are unchanged — keywords, country, location and result limits — with these added:

FieldTypeDefaultDescription
validateNumbersbooleantrueValidate and classify every number
validNumbersOnlybooleantrueDrop numbers that fit no numbering plan
mobileNumbersOnlybooleanfalseDrop landlines
textableNumbersOnlybooleanfalseKeep only numbers that can receive SMS
excludeSwitchboardNumbersbooleanfalseDrop toll-free and premium rate
minimumConfidenceinteger0Drop numbers scoring below this
keepOnlyCountriesarrayTwo-letter country codes
defaultRegionCodestringRegion for numbers without a country prefix
includeResultSnippetbooleantrueKeep the text the number was found in
emitRunSummarybooleantrueAppend the aggregate record

Example input

{
"keywords": ["plumber"],
"maxPhoneNumbers": 200,
"validateNumbers": true,
"textableNumbersOnly": true,
"excludeSwitchboardNumbers": true
}

Output

One phoneLead record per number, then an optional summary.

{
"recordType": "phoneLead",
"platform": "X / Twitter",
"phoneE164": "+14155552671",
"phoneNational": "(415) 555-2671",
"phoneInternational": "+1 415-555-2671",
"phoneRfc3966": "tel:+1-415-555-2671",
"numberType": "fixed line or mobile",
"isValid": true,
"isMobile": true,
"isTextable": true,
"isSwitchboardNumber": false,
"countryCode": "US",
"countryCallingCode": "+1",
"geographicArea": "San Francisco, CA",
"carrierName": null,
"timeZones": ["America/Los_Angeles"],
"phoneConfidence": 95,
"platformName": "X / Twitter",
"profileHandle": "@somebusiness",
"profileType": "profile",
"profileUrl": "https://twitter.com/somebusiness",
"searchKeyword": "plumber",
"sourceUrl": "https://twitter.com/somebusiness",
"foundAt": "2026-08-12T09:00:00"
}

The summary reports totals, duplicates removed, how many were valid, mobile, textable and switchboard, plus breakdowns by line type and country and the top areas and carriers.


Common use cases

  • SMS campaignstextableNumbersOnly is the difference between a list that works and one that silently fails on every landline.
  • Cold callingtimeZones tells you when it is reasonable to dial, and geographicArea gives you local context.
  • Lead qualificationisSwitchboardNumber separates a person's mobile from a company switchboard.
  • CRM enrichment — four formats mean no reformatting before import.
  • Territory planning — the country and area breakdowns show where a niche's businesses actually are.
  • List hygiene — run with validation on to see what share of a keyword's results are unallocated numbers before committing to a campaign.

Notes and limits

  • Validity is not reachability. A valid number fits the country's numbering plan; it is not a promise that somebody answers. Nothing short of dialling establishes that, and this Actor does not dial.
  • fixed line or mobile is a real answer, not a failure. In several countries — the United States among them — mobile and landline ranges are not separated, so libphonenumber cannot distinguish them. Those numbers are treated as textable, which is the useful assumption, but it is an assumption.
  • Carrier data is patchy by country. Some numbering authorities publish it, many do not, so carrierName is often null even for a perfectly valid number.
  • Geographic area only exists where numbering is geographic. Mobile ranges in most countries carry no location, so geographicArea is null for them — that is correct, not missing data.
  • This searches a public search engine for pages on X / Twitter. It reads what is publicly indexed and does not sign in.
  • Number portability means a carrier lookup reflects the original allocation, which may no longer be the operator serving the line.
  • Contact data about identifiable people is personal data. Calling and texting are separately regulated — TCPA, GDPR, PECR and national do-not-call registers all apply, and complying with them is the operator's responsibility.

Local development

pip install -r requirements.txt
python -m tests.test_numbers # runs offline
apify run