Twitter Profile Scraper - $0.14/1k, No API Key
Pricing
Pay per event
Twitter Profile Scraper - $0.14/1k, No API Key
Two requests to X, neither carrying an account: the one naming a handle returned the full profile, the one running a search returned an empty 404. This stays on the answering side. One flat row per handle: followers, following, posts, name, bio, verification. $0.14/1k plus a $0.001 run start.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
36
Total users
13
Monthly active users
2 days ago
Last modified
Categories
Share
Twitter (X) Profile Scraper — bulk profile lookup
Two requests to X, sent in the same second with no account behind either: the one naming a handle came back with the full profile, the one running a search came back an empty 404. Profiles are the half of X that stays open, and that is the half this works on. One flat row per account: follower count, following count, total posts, display name, bio and verification status. Built for bulk. Hand it a hundred handles and it works through them in a single run.
No account, no API key, no cookie. A profile is a public shareable page and X serves it to a plain guest token, so nothing is asked of you.
What you get
{"ok": true,"url": "https://x.com/NASA","id": "11348282","userName": "NASA","name": "NASA","description": "Making the seemingly impossible, possible. ✨","followersCount": 92343680,"friendsCount": 118,"statusesCount": 74170,"verified": true,"isBlueVerified": true,"location": null,"profileImageUrl": null,"createdAt": null}
Follower and post counts move by the hour, so read the numbers above as an example of the shape rather than as current data.
friendsCount is X's own name for the following count. verified is true for legacy verification
or X Premium; isBlueVerified splits out the Premium part.
Read this before you plan around it: location, profileImageUrl and createdAt are in the
row, but on the endpoint this actor reads they currently come back null. Don't build a pipeline
that depends on them. Everything else in the row above is populated.
Handles that are suspended, deleted or never existed produce an uncharged NOT_FOUND row rather
than a silent gap, so you can tell "no such account" apart from "the scrape failed".
Input
{"twitterHandles": ["nasa", "elonmusk", "apify"]}
| Field | Notes |
|---|---|
twitterHandles | Usernames with or without @. Mix freely with startUrls. |
startUrls | Profile URLs, e.g. https://x.com/nasa. |
sessionCookies | Optional and normally pointless — leave it empty. An auth_token=…; ct0=… pair from your own logged-in x.com is used only as a fallback if the keyless route is refused outright. Stored as a secret. |
proxyConfiguration | Leave it alone. The run rotates its own exit addresses and hops as soon as one is throttled, because X counts its guest limit per address. None of it is metered by the gigabyte. Set it only to route through proxy servers you already pay for. |
notionConnector / notionParentId | Optional: write each profile into a Notion database as well as the dataset. |
Limits
- Public profiles only. Protected accounts return the public shell — name, handle, bio, counts — and nothing behind the lock.
- No posts. This returns the profile, not its timeline. For tweets use the Tweet Scraper; for keyword search use the Twitter Search Scraper.
- No follower lists. It returns the follower count, not the accounts themselves.
- Duplicate handles in one run are collapsed and billed once.
Billing
$0.00014 per profile ($0.14 per 1,000), plus $0.001 when a run starts. Same price on every Apify plan, with no volume tiers and no minimum.
You're charged only for profiles that come back with data. Suspended, deleted, not-found and blocked handles produce diagnostic rows and cost nothing beyond the start fee.


