X (Twitter) Profile Data Scraper — Bio, Followers, Verified
Pricing
from $0.30 / 1,000 tweet scrapeds
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 and date. Bulk profile lookup, no tweets fetched, no login, no cookies, no API key. Charged only for profiles actually returned.
Pricing
from $0.30 / 1,000 tweet scrapeds
Rating
0.0
(0)
Developer
Nicholas Cheng
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 hours 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, verification type and when it was verified. 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": 22581,"isVerified": true,"isBlueVerified": true,"verifiedType": "Government","verifiedSince": "2023-04-01T18:22:05.000Z","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.
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 nulls in place of data. |
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
X rotates the internal query identifiers its own web app uses. This Actor reads them from X's live frontend at runtime and caches them for six hours; if a call is rejected it re-reads them and retries once. No login is used anywhere, which is why it is not exposed to the account-ban failures that take login-based scrapers offline.
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.