Twitter (X) List Scraper - Tweets, Authors & Engagement avatar

Twitter (X) List Scraper - Tweets, Authors & Engagement

Pricing

Pay per event

Go to Apify Store
Twitter (X) List Scraper - Tweets, Authors & Engagement

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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

ModeInputNotes
List by idlistIds (the number in x.com/i/lists/<id>)Scrape one or many lists in a single run
List by URLstartUrls (https://x.com/i/lists/<id>)List id is parsed out of the URL automatically

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 _sample tweet (free, never charged) so you can preview the exact output shape before adding accounts. Add your sessionCookies to scrape the real tweets in a list.

How to get the cookie (1 minute):

  1. Log in to x.com in your browser (use a throwaway account you don't mind risking).
  2. Press F12Application tab → Cookieshttps://x.com.
  3. Copy the values of auth_token and ct0.
  4. Paste into sessionCookies as auth_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, format auth_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 (default 100, max 5000). 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/3417951634179516. 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.