X/Twitter Phone Number Scraper
Pricing
from $5.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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:
| Field | What it tells you |
|---|---|
isValid | Whether the number falls inside a range the country has actually allocated |
isPossible | Whether the digit count merely fits — a number can be possible and not valid |
numberType | mobile, fixed line, toll free, premium rate, VoIP, shared cost, pager… |
isMobile | Whether it is a mobile |
isTextable | Whether you can send an SMS to it — you cannot text a landline |
isSwitchboardNumber | Toll-free, premium and shared-cost lines reach an organisation, not a person |
countryCode, countryCallingCode | Where the number is registered |
geographicArea | The city or region, where the numbering plan is geographic |
carrierName | The operator, where that is published |
timeZones | When it is reasonable to call |
phoneConfidence | 0–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 landlinestextableNumbersOnly— mobile and VoIP, the ones that receive SMSexcludeSwitchboardNumbers— drop toll-free and premium-ratekeepOnlyCountries— restrict by country codeminimumConfidence— 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:
| Field | Type | Default | Description |
|---|---|---|---|
validateNumbers | boolean | true | Validate and classify every number |
validNumbersOnly | boolean | true | Drop numbers that fit no numbering plan |
mobileNumbersOnly | boolean | false | Drop landlines |
textableNumbersOnly | boolean | false | Keep only numbers that can receive SMS |
excludeSwitchboardNumbers | boolean | false | Drop toll-free and premium rate |
minimumConfidence | integer | 0 | Drop numbers scoring below this |
keepOnlyCountries | array | — | Two-letter country codes |
defaultRegionCode | string | — | Region for numbers without a country prefix |
includeResultSnippet | boolean | true | Keep the text the number was found in |
emitRunSummary | boolean | true | Append 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 campaigns —
textableNumbersOnlyis the difference between a list that works and one that silently fails on every landline. - Cold calling —
timeZonestells you when it is reasonable to dial, andgeographicAreagives you local context. - Lead qualification —
isSwitchboardNumberseparates 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 mobileis 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
carrierNameis oftennulleven for a perfectly valid number. - Geographic area only exists where numbering is geographic. Mobile ranges in most countries carry no location, so
geographicAreaisnullfor 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.txtpython -m tests.test_numbers # runs offlineapify run