Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Twitter (X) List Scraper icon

Twitter (X) List Scraper

Scrape every tweet from an X (Twitter) list. Get full text, likes, retweets, views, hashtags, media and author. No login. $0.40 per 1,000 tweets.

169 runs on Apify $0.0004 per tweet ($0.4 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust listIds, startUrls, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per tweet = $0.4 per 1,000

You are charged forWhenPrice
Tweet scrapedCharged per tweet returned from the X list timeline.$0.0004

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.

Inputs

FieldWhat it doesType
listIdsX list ids (the number in x.com/i/lists/{id}).array
startUrlsOr paste list URLs (https://x.com/i/lists/34179516).array
maxItemsHard cap on tweets returned across every list. You are charged per tweet, so this is also your budget for the run.integer
maxRunSecondsHard wall-clock limit for this run. When it is reached the Actor stops paging and returns everything collected so far, which is complete and correct, it does not fail. Lower it if you want a fast partial answer; raise it for big lists.integer
notionConnectorOptional Notion delivery.string
notionParentIdOptional Notion data-source id.string
sessionCookiesOptional. Supply your own account cookie here and the run uses your account. In Chrome, logged in to x.com: F12 -> Application -> Cookies -> https://x.com, and copy auth_token and ct0. Paste one account per line as 'auth_token=XXXX; ct0=YYYY'. Several lines means several accounts, rotated. The cookie is never printed to the run log, but it is saved with the run input like any other field, so use a throwaway account.array

What you get

A structured dataset — each result includes fields like:

textlikeCountretweetCountcreatedAturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

Twitter List Scraper - Every Tweet From an X List

A curated X list is a ready-made feed. This pulls its timeline with text, author, likes, retweets, views and media. No login and no API key from you.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Threads Scraper iconSocial Media Scrapers

Threads Scraper

Scrape public Threads profiles and recent posts with no login. Rows carry bios, followers, post text, likes, timestamps and media URLs. $0.40 per 1,000 rows.

1 use cases

Facebook Pages Scraper iconSocial Media Scrapers

Facebook Pages Scraper

Scrape public Facebook Page names, handles, likes, talking-about counts and verified badges. Up to 10 Pages per run. No login needed from you.

Ready to run — no setup

LinkedIn Profile Posts Scraper iconSocial Media Scrapers

LinkedIn Profile Posts Scraper

Scrape LinkedIn profile posts with no login: post text, author, image, publish time and URL. $0.90 per 1,000 posts, flat on every plan.

1 use cases

LinkedIn Company Posts Scraper iconSocial Media Scrapers

LinkedIn Company Posts Scraper

Scrape public posts from any LinkedIn company page: post text, reactions, comments and URLs. No login or cookies. $0.90 per 1,000 posts.

Ready to run — no setup

LinkedIn Post Comments Scraper iconSocial Media Scrapers

LinkedIn Post Comments Scraper

Scrape public LinkedIn post comments: text, author name, profile URL, reactions. No login or cookie. Up to 10 per post. $0.60 per 1,000 comments.

1 use cases

RedNote Scraper iconSocial Media Scrapers

RedNote Scraper

Scrape public RedNote (Xiaohongshu) notes: description, author, likes, collects, comments, shares and images. No login. $0.90 per 1,000 notes.

Ready to run — no setup

See all Social Media Scrapers →

Twitter (X) List Scraper: every tweet posted into a curated X list

Point it at an X list and you get one flat row per tweet: full text, likes, retweets, replies, quotes, bookmarks and views, with hashtags, media links and the author's profile attached. A list someone else curated is a ready-made feed, and this turns it into a table.

Worth knowing first: X only serves a list timeline to a signed-in session, so this runs signed in. You do not need an account of your own for that. Every run also has a wall-clock limit, and when it runs out the tweets collected so far are kept and returned rather than thrown away.

InputX list ids, or x.com/i/lists/ links
OutputOne row per tweet
Ceiling5,000 tweets per run, plus a run-time limit you set
Account neededNone from you, unless you want to use your own
Price$0.40 per 1,000 tweets, flat on every plan

📋 What Twitter (X) List Scraper does

Each list is read newest-first and paged through until it runs out of tweets, hits your maxItems, or reaches maxRunSeconds.

The list id is the number in the URL: x.com/i/lists/34179516 is list 34179516. Paste the id or the whole link, whichever is quicker. Several lists in one run are fine, and a tweet that appears in two of them is delivered once and charged once.

The run-time limit is the part people miss. It defaults to 240 seconds, and hitting it is a normal ending, not a failure: paging stops, everything already collected is yours, and a PARTIAL row goes into the dataset so you know it stopped early. Raise it for a busy list, lower it when you only want a quick look at the top.

Retweets, replies and quotes all come through, flagged so you can filter them out yourself rather than having that decision made for you.

📥 What you give it

{
  "listIds": ["34179516"],
  "maxItems": 500,
  "maxRunSeconds": 300
}
FieldDefaultWhat it is
listIdsnoneThe numbers from x.com/i/lists/<id>. The form opens with one filled in as an example, which is a starting point rather than a default.
startUrlsnoneOr paste whole list links. Mix them with listIds freely.
maxItems100Hard cap on tweets across every list, up to 5,000. You pay per tweet, so this is the run's budget.
maxRunSeconds240Wall-clock limit, between 30 and 900. Reaching it stops paging and returns what it has.
sessionCookiesnoneOptional. Your own X account, as auth_token=XXXX; ct0=YYYY, one per line, for a rate limit nobody else is drawing on. It is never printed to the log, but it is saved with the run input like any other field, so use a throwaway account.
proxyConfigurationApify's defaultLeave it alone. It is there for people who need the run to leave through servers they already pay for.
notionConnector, notionParentIdnoneOptional. Write each tweet into a Notion database as well as the dataset.

📤 What you get back

A real row from a real run, with the author's bio cut short:

{
  "ok": true,
  "charged": true,
  "id": "2096637550337155498",
  "url": "https://x.com/RepAdamSmith/status/2096637550337155498",
  "text": "Looking forward to this year's Apple Cup as the UW Huskies take on the WSU Cougs at Husky Stadium. May the best team in Washington win (Go Dawgs!) https://t.co/egUSbdL7tq",
  "createdAt": "Sun Sep 06 16:32:00 +0000 2026",
  "lang": "en",
  "replyCount": 0,
  "retweetCount": 0,
  "likeCount": 0,
  "quoteCount": 0,
  "bookmarkCount": 0,
  "viewCount": null,
  "isReply": false,
  "isRetweet": false,
  "isQuote": false,
  "conversationId": "2096637550337155498",
  "inReplyToId": null,
  "inReplyToUser": null,
  "hashtags": [],
  "mentions": [],
  "urls": [],
  "media": [{ "type": "photo", "url": "https://pbs.twimg.com/media/HRYNHLDa8AAU6fL.jpg" }],
  "author": {
    "id": "58928690",
    "userName": "RepAdamSmith",
    "name": "Rep. Adam Smith",
    "description": "Proudly serving Washington State's 9th District. ...",
    "followersCount": 46954,
    "friendsCount": 2026,
    "statusesCount": 13142,
    "verified": true,
    "isBlueVerified": true,
    "location": "Washington's 9th District",
    "profileImageUrl": "https://pbs.twimg.com/profile_images/1046859374055047169/OrFwOGl6_normal.jpg",
    "createdAt": "Tue Jul 21 21:31:55 +0000 2009"
  }
}
FieldWhat it is
text, createdAt, langThe tweet as posted, X's own timestamp format, and the language X tagged it with.
viewCountImpressions. It is null when X does not report them for that tweet, as in the row above.
isReply, isRetweet, isQuoteWhat kind of tweet it is, so you can filter the list down yourself.
conversationId, inReplyToId, inReplyToUserEnough to rebuild a thread out of a set of rows.
hashtags, mentions, urlsPulled out of the text as arrays.
mediaOne entry per photo or video, with a direct link.
authorThe posting account: handle, name, bio, counts, location, avatar and join date, as X reported them at read time. location is empty when the account never set one.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itBilled
A tweetok: true and an idyes
The sample row_sample: trueno
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data. The charged field separates real rows from sample and diagnostic rows, and is not a receipt.

PARTIAL means the run-time limit was reached: the tweets above it are complete and correct, there are simply fewer than the list holds. NO_RESULTS means nothing came back for that list, usually because the id is wrong or the list is private. BLOCKED means it could not be read on this run. BAD_INPUT means no usable list id was supplied.

One thing worth knowing about NO_RESULTS: a single awkward answer from X ends that list where it stands, so if a list you know is public and busy comes back empty, run it again before concluding the id is wrong.

The Overview table shows five columns: text, likeCount, retweetCount, createdAt and url. The author block, viewCount and replyCount are not among them, so open a row or download the JSON for the full picture. The sample row's text says in as many words that it is a sample, but the counts beside it are made up, so filter on _sample rather than trusting a table scan.

▶️ How to run it

1. Open the list on X and copy the number out of the address bar. 2. Open Twitter (X) List Scraper and click Try for free. 3. Paste the id into List IDs, or the whole link into List URLs. 4. Set Max tweets and, for a busy list, raise Max run seconds. 5. Click Start, then download the dataset as JSON, CSV or Excel.

💰 How much does it cost?

$0.40 per 1,000 tweets. Flat on every Apify plan, no volume tiers.

You pay per tweet delivered. The sample row, diagnostic rows, and the second copy of a tweet that appeared in two of your lists are not charged. maxItems is the ceiling on what a run can spend, so set it deliberately while you are testing.

💡 What people use it for

  • Turning a hand-curated industry list into a daily feed, without following any of the accounts.
  • Watching a competitor's own public list to see who they consider worth reading.
  • Building a dataset from a conference or event list while it is active.
  • Media monitoring, where someone else has already done the work of deciding who matters.

🚧 What it does not do

  • Private lists are unreadable, and so are deleted ones. You get a diagnostic row instead.
  • No list membership. This returns the tweets posted by members, not the roster of who is in the

list.

  • Newest-first only, with no way to start from an older point in the timeline.
  • viewCount is null on plenty of tweets, because X does not report it for all of them.
  • 5,000 tweets per run, and a wall-clock limit on top of that.

🧭 Which X scraper do you need?

If you wantUse
Everything posted into a curated listThis one
Tweets matching a keyword or an advanced queryTwitter (X) Search Scraper
Specific tweets, or one profile's timelineTweet Scraper
Profile records for handles you already haveTwitter Profile Scraper
Who follows an accountX Followers Scraper

❓ Questions people ask

Where do I find the list id? In the URL. Open the list on X and take the number from x.com/i/lists/34179516, or paste the whole address into startUrls.

Do I need an X account or an API key? Neither. The cookie field is optional and only worth filling in if you want a rate limit of your own.

Why did my run stop before maxItems? Either the list ran out of tweets or the run-time limit was reached. A PARTIAL row tells you which, and what you got is still complete and correct.

Can I scrape a private list I am a member of? Only by supplying that account's own cookies. Without them the list is not visible.

Is scraping X legal? This reads public tweets only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes. Use Apify's scheduler, or start it from the API and read the dataset when it finishes.

🆘 If something breaks

Open the Issues tab on the actor page. Include the list id and the run ID, and paste any errorCode you got back, since that usually says what happened straight away.