Twitter (X) List Scraper - Tweets, Authors & Engagement
Pricing
Pay per event
Twitter (X) List Scraper - Tweets, Authors & Engagement
Scrape every tweet from any X (Twitter) list timeline. Returns full text, engagement, author profile and media. Cheaper at $0.30/1k tweets, failed runs never charged. Export JSON/CSV/Excel or deliver straight to Notion.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
⚡ Twitter (X) List Scraper — Tweets from Any X List
Pull every tweet from any X (Twitter) List timeline — at a fraction of the price of the big providers. Point it at a list id or URL and get back the full tweet text plus every engagement metric — likes, retweets, replies, quotes, bookmarks and views — with author, media, hashtags and mentions. Export to JSON, CSV or Excel, call it from the API, or have results delivered straight to Notion. Just $0.30 per 1,000 tweets — pay only for tweets actually returned.
X gates List timelines behind a login — there is no keyless path. This actor scrapes them the same way every paid provider does: with a rotating pool of logged-in account cookies. You bring throwaway-account cookies; the actor handles rotation, back-off and delivery.
Why this scraper wins
- 💸 Cheaper — $0.30 / 1,000 tweets, billed per tweet actually returned. Empty or failed runs cost nothing.
- 🔁 Account-pool rotation — paste several throwaway-account cookies; the actor rotates them automatically on rate-limit (
429) or bad-account errors, exactly like the paid services. - 🧹 Clean, flat output — one tidy record per tweet, ready for spreadsheets, dashboards or LLM pipelines. No raw nested GraphQL soup.
- 🔂 Auto-dedupe — the same tweet is never returned (or charged) twice in a run, even across multiple lists.
- 🛡️ Residential by default — ships with Apify residential proxy preset to protect your accounts and keep success rates high.
- 📬 Built-in delivery — optionally push every run straight into Notion via Apify connectors, with zero extra code.
- 🚦 Honest errors — if X blocks, rate-limits or a list is inaccessible, you get a clear diagnostic row (
BLOCKED,NO_RESULTS, …) instead of silent emptiness.
What you can scrape
| Mode | Input | Notes |
|---|---|---|
| List by id | listIds (the number in x.com/i/lists/<id>) | Scrape one or many lists in a single run |
| List by URL | startUrls (https://x.com/i/lists/<id>) | List id is parsed out of the URL automatically |
⚠️ Requires a logged-in account cookie for real data (no keyless way exists)
X requires a logged-in session for Lists — every provider scrapes these with pools of logged-in accounts. This actor does the same with your cookies.
Keyless demo mode: run it without any cookies and it returns one clearly-labeled
_sampletweet (free, never charged) so you can preview the exact output shape before adding accounts. Add yoursessionCookiesto scrape the real tweets in a list.
How to get the cookie (1 minute):
- Log in to x.com in your browser (use a throwaway account you don't mind risking).
- Press F12 → Application tab → Cookies →
https://x.com. - Copy the values of
auth_tokenandct0. - Paste into
sessionCookiesasauth_token=XXXX; ct0=YYYY— add several accounts (one per line) for more throughput; the actor rotates them.
Throwaway accounts get rate-limited/flagged over time — add a few and top them up occasionally (same as the paid services do).
Input
listIds— X list ids (e.g.34179516). One or many.startUrls— or paste full list URLs (https://x.com/i/lists/34179516); the id is extracted for you.sessionCookies(required for real data) — one or more logged-in account cookies, formatauth_token=XXXX; ct0=YYYY, one per line. The actor rotates across them on rate-limit. Leave empty to get a labeled sample tweet (demo mode).maxItems— cap the number of tweets (default100, max5000). You pay per tweet.proxyConfiguration— Residential strongly recommended (and the default) to protect accounts; datacenter IPs hit X's limits faster.notionConnector/notionParentId— optional, deliver results to a Notion data source.
Output (one record per tweet)
{"id": "1789000000000000000","url": "https://x.com/nasa/status/1789000000000000000","text": "We're going back to the Moon. 🌙","createdAt": "Mon May 13 14:02:11 +0000 2024","lang": "en","replyCount": 312,"retweetCount": 1840,"likeCount": 21500,"quoteCount": 96,"bookmarkCount": 410,"viewCount": 1230000,"isReply": false,"isRetweet": false,"isQuote": false,"conversationId": "1789000000000000000","hashtags": ["Artemis"],"mentions": [],"urls": [],"media": [{ "type": "photo", "url": "https://pbs.twimg.com/media/xxx.jpg" }],"author": {"id": "11348282","userName": "NASA","name": "NASA","verified": true}}
Pricing
$0.30 per 1,000 tweets (pay-per-result). You are only charged for tweets actually returned — failed or empty runs cost nothing.
FAQ
Why do I need account cookies? X requires a logged-in session to view List timelines — there is no keyless route. Every paid List scraper does the same; this actor just lets you bring (and rotate) your own throwaway accounts.
How many accounts should I add? One works for small runs. For sustained volume add 3–5 throwaway accounts so the pool can rotate when X rate-limits an account.
Where do I find the list id? It's the number in the list URL: x.com/i/lists/34179516 → 34179516. You can also just paste the full URL in startUrls.
Why residential proxy? X rate-limits datacenter IP ranges quickly and is harsher on accounts behind them. Residential keeps success rates high and protects your cookies.
It returned a diagnostic row — why? That's the actor telling you exactly what happened (e.g. BLOCKED, NO_RESULTS) instead of failing silently. Check your cookies are valid and the list is accessible, then retry.