X (Twitter) Profile Data Scraper — Bio, Followers, Verified
Pricing
from $5.00 / 1,000 account resolveds
X (Twitter) Profile Data Scraper — Bio, Followers, Verified
Get X (Twitter) profile data by handle, URL or user ID — bio, location, website, follower and following counts, join date, verification type. Bulk profile lookup, no tweets fetched, no login, no cookies, no API key. Charged only for profiles actually returned.
Pricing
from $5.00 / 1,000 account resolveds
Rating
0.0
(0)
Developer
Nicholas Cheng
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
X (Twitter) Profile Data Scraper
Give it a list of handles, get one clean profile record per account. No tweets, no timelines — just the account data: bio, location, website, follower and following counts, join date and verification type. No login, no cookies, no API key, no proxy configuration.
You are charged only for profiles that actually came back. A suspended, deleted, or misspelled handle produces an explanatory row and costs nothing.
| Input | X / Twitter handles, profile URLs, or numeric user IDs |
| Output | One profile row per account, 40+ fields |
| Price | $0.005 per profile — the same on every Apify plan |
| Tweets | Not fetched. This Actor is the profiles-only mode of the X (Twitter) Profile & Tweets Scraper; use that one when you also want timelines |
What you get
{"itemType": "profile","userId": "11348282","userName": "NASA","url": "https://x.com/NASA","name": "NASA","description": "There's space for everybody. ✨","website": "https://www.nasa.gov","location": "Pale Blue Dot","createdAt": "2007-12-19T20:20:32.000Z","followers": 92359333,"following": 63,"tweetsCount": 76410,"mediaCount": null,"isVerified": true,"isBlueVerified": true,"verifiedType": "Government","verifiedSince": null,"parodyCommentaryFanLabel": null,"affiliatesCount": 74,"isProfessional": false,"isProtected": false,"profilePicture": "https://pbs.twimg.com/profile_images/….jpg"}
The fields that usually decide whether an account is what it claims to be come straight from X's own account metadata — nothing here is guessed or generated:
| Field | Why it matters |
|---|---|
verifiedType | Government, Business, or blank — separates official accounts from paid blue checks |
verifiedSince | Exact timestamp the account was verified |
parodyCommentaryFanLabel | X's mandatory label for parody / commentary / fan accounts |
affiliatesCount | How many sub-accounts a business account has under it |
createdAt | Account age, the cheapest signal against a freshly minted account with bought followers |
tipjar | Bitcoin, Ethereum, PayPal, Venmo, Cash App, Patreon handles the account has published |
Plus the standard set: description, descriptionUrls (expanded, not t.co), website, location, followers, following, tweetsCount, mediaCount, favouritesCount, professionalCategory, birthdate, isProtected, profilePicture (full resolution), coverPicture.
Since X rebuilt its web app in October 2026, some of these are no longer sent to logged-out visitors and come back as null: verifiedSince, verifiedReason, isIdentityVerified, parodyCommentaryFanLabel, professionalCategory, tipjar, mediaCount, favouritesCount, canDm, hasGraduatedAccess. They stay in the output so existing pipelines keep working; nothing is filled in by guesswork.
Input
{"twitterHandles": ["nasa", "openai", "nytimes"],"startUrls": [{ "url": "https://x.com/elonmusk" }],"userIds": ["11348282"]}
| Option | Notes |
|---|---|
twitterHandles | With or without @. Pass as many as you like — they are all resolved in one run |
startUrls | Any x.com/<handle> or twitter.com/<handle> URL, as copied from a browser |
userIds | Numeric IDs, immune to username changes |
maxItems | Hard cap on rows for the run, to bound spend on a large list |
Handles, URLs and IDs are merged and de-duplicated, so a messy list pasted from a spreadsheet is fine.
Pricing
$0.005 per profile, on every Apify plan — Free, Bronze, Silver, Gold, Platinum, Diamond. Check the Pricing tab: all six columns are identical. That is worth checking on any Actor you compare, including this one, because the price a listing advertises in its title is not always the price a free-plan run pays.
One thousand profiles cost $5. There is no per-run minimum; a run that returns one profile costs $0.005.
What you are not charged for
| What happens here | |
|---|---|
| Accounts that do not exist | Suspended, deleted, or misspelled handles produce one row marked chargedForThis: false. Nothing is billed. |
| Empty or placeholder rows | If the profile did not come back, no profile row is written. There are no filler rows. |
| The free plan | Same code path, same fields, same limits. No demo mode, no row cap, no fields blanked out for free users. |
What this Actor cannot do
- No tweets. This is the profiles-only mode. For tweets, filters, incremental runs and single-tweet lookup use the X (Twitter) Profile & Tweets Scraper — same code, same prices, one more event.
- No followers or following lists. X does not expose them to logged-out clients.
- No keyword search. Same restriction.
- Protected accounts return their profile (marked
isProtected: true) — that part is public.
How it stays working
In October 2026 X rebuilt its web app: profile pages are now rendered on X's servers with the data embedded in the page. This Actor reads that embedded data directly — one page per account, no login, no API key, no guest token, no browser. It is plain parsing with no language model in the data path, so your output cannot drift between runs.
Integrating
curl -X POST "https://api.apify.com/v2/acts/nick.cheng~x-profile-data/run-sync-get-dataset-items?token=<TOKEN>" \-H 'Content-Type: application/json' \-d '{"twitterHandles":["nasa","openai"]}'
Official clients exist for JavaScript and Python, and results export as JSON, CSV, or Excel.