🐦 Twitter (X) User Scraper
Pricing
from $3.99 / 1,000 results
🐦 Twitter (X) User Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraply
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
13 days ago
Last modified
Categories
Share
Scrape public Twitter / X user profiles, followers, following counts and retweeter networks at scale — no login or API key required. Powered by the Apify platform with built-in auto proxy escalation, live result streaming and a smart fallback strategy for blocked requests.
⚡ Get clean, structured user data straight from
x.com— verified status, follower/following counts, bio, location, account age, profile pictures, banners, professional badges, and an enrichedaboutpayload.
✨ Why this actor
| Other scrapers | 🐦 This actor | |
|---|---|---|
| Login required | Often | ❌ Never (optional) |
| Block handling | Manual | ✅ Auto direct → datacenter → residential |
| Live results | ❌ End-of-run only | ✅ Streamed per-user |
| Pricing | Subscription | 💸 Pay-per-event |
| Outputs | Single dataset | 📦 Dataset + per-section KVS files |
🚀 Key features
- 🔗 Bulk URLs — paste a list of profile URLs or plain usernames.
- 🌐 No-proxy by default — automatically escalates to Apify DATACENTER then RESIDENTIAL proxies (with 3 retries) only when X blocks the connection.
- 📡 Live streaming — every captured user is pushed to the dataset immediately, so a crash mid-run never wipes your progress.
- 🪪 Rich profile mode — toggle
🪪 Include rich 'about' profileto fetch verification info, profile image shape, account creation source, etc. - 👻 Unavailable users — optionally surface suspended / protected accounts.
- 📚 Per-section output — each input URL writes its own grouped JSON file
to the run’s key-value store, plus a combined
OUTPUTkey.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
🔗 startUrls | array | – | Profile URLs or @usernames. Bulk supported. |
🔁 getRetweeters | bool | true | Capture retweeters / related users from the timeline. |
👥 getFollowers | bool | true | Include follower count on each record. |
🤝 getFollowing | bool | true | Include friends (following) count. |
🪪 getAbout | bool | true | Enrich with verification / account metadata. |
👻 includeUnavailableUsers | bool | false | Surface suspended / protected accounts. |
🎯 maxItems | int | 100 | Cap users collected per source URL. |
⏱️ requestDelay | number | 1.0 | Float seconds between pagination requests. |
🔐 authToken | string (secret) | – | Optional X auth_token cookie. |
🛡️ csrfToken | string (secret) | – | Optional X ct0 cookie. |
🌐 proxyConfiguration | object | direct | Defaults to no proxy. Overrides auto-escalation. |
Example input
{"startUrls": ["https://twitter.com/elonmusk","https://x.com/openai"],"getRetweeters": true,"getFollowers": true,"getFollowing": true,"getAbout": true,"includeUnavailableUsers": false,"maxItems": 100,"requestDelay": 1.0,"proxyConfiguration": { "useApifyProxy": false }}
📤 Output
Each record is pushed live to the default dataset.
{"inputSource": "https://twitter.com/elonmusk","type": "user","userName": "elonmusk","url": "https://x.com/elonmusk","twitterUrl": "https://twitter.com/elonmusk","id": "44196397","name": "Elon Musk","isVerified": true,"hasNftAvatar": false,"profilePicture": "https://pbs.twimg.com/profile_images/.../m8mdWZCG_normal.jpg","coverPicture": "https://pbs.twimg.com/profile_banners/44196397/1774145451","description": "https://t.co/dDtDyVssfm","location": "","followers": 239969983,"following": 1332,"protected": false,"createdAt": "Tue Jun 02 20:12:29 +0000 2009","statusesCount": 102639,"mediaCount": 4489,"favouritesCount": 227779,"listedCount": 169028,"about": {"accountBasedIn": "","locationAccurate": false,"profileImageShape": "Circle","avatarUrl": "https://pbs.twimg.com/profile_images/.../m8mdWZCG_normal.jpg","usernameChangeCount": "0","accountCreatedAt": "Tue Jun 02 20:12:29 +0000 2009","accountSource": "","verifiedSince": "-156836000000000"}}
The run also writes a per-section JSON to the key-value store
(source_01_elonmusk.json, source_02_openai.json, …) and a combined
OUTPUT.json that mirrors the legacy grouped-by-name format.
🚀 How to use (Apify Console)
- Log in at https://console.apify.com → Actors.
- Open 🐦 Twitter (X) User Scraper.
- Paste your profile URLs into 🔗 Profile URLs.
- Pick which networks / fields you want (
🔁,👥,🤝,🪪). - (Optional) Drop in an
authToken+csrfTokenfor tougher targets. - Hit Start.
- Watch the live log — it will tick
📥 @username — N followersper user. - Open the Dataset or Key-value store tab when the run completes.
- Export to JSON / CSV / XLSX.
🤖 Use via API
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": ["https://twitter.com/elonmusk"],"maxItems": 50}'
🎯 Best use cases
- 🧠 Audience research — analyze who is engaging with a brand or person.
- 📈 Influencer discovery — find creators by exploring a competitor's retweeter / quoter graph.
- 🏷️ Lead generation — extract bios and external links from prospects.
- 🛡️ Brand safety — monitor verified status changes on managed accounts.
💸 Pricing
This actor uses Apify's pay-per-event (PPE) model:
| Event | When it fires |
|---|---|
apify-actor-start | Once at run start (synthetic; Apify covers the first 5s). |
row_result | One charge per user record written to the default dataset. |
- No data → no charge. If a source fails or returns nothing, no
row_resultevents are emitted, so you are not billed for empty runs. - Skipped unavailable users and the per-section KVS mirror copies are not chargeable events — only successful default-dataset writes are.
- When your spend cap (
ACTOR_MAX_TOTAL_CHARGE_USD) is reached, the actor stops pushing further items and exits cleanly — never with a failed-run.
Configure the row_result event's USD price (and any tiered discounts) in
Apify Console → Actor → Publication → Monetization.
❓ FAQ
Do I need an X account?
No. The actor runs in guest mode out of the box. You can paste an
auth_token + ct0 for harder cases — both stay encrypted in Apify Secrets.
Why does the first run take a few seconds? The actor warms up by fetching the X web client bundle so it can stay in sync with the latest GraphQL schema. After that, throughput is steady.
How do you handle rate limits?
On a block we escalate proxies (direct → datacenter → residential) and
rotate residential IPs up to three times before failing the source.
Will protected / suspended accounts appear?
Only if you enable 👻 includeUnavailableUsers. They are tagged with
isUnavailable: true and an unavailableReason.
🛟 Support & feedback
- 🐞 Issues — open a ticket on the Apify Store actor page.
- 💬 Questions / feature requests — ping the maintainer via Apify chat.
⚖️ Legal
Data is collected only from publicly available profile information.
End users are responsible for compliance with applicable laws (GDPR, CCPA),
the X Terms of Service and robots.txt.
Built with ❤️ for the Apify platform.