X Tweet Scraper | From $0.15/1K Tweets | Pay-Per Result
Pricing
from $0.00015 / tweets
X Tweet Scraper | From $0.15/1K Tweets | Pay-Per Result
Rising starScrape X (Twitter) tweets at scale from $0.15/1K on paid Apify plans. Paste tweet, profile, search, or list URLs. 50+ advanced filters. Batch lookup. No start fee. No query fee. No API key. No rate limits. Built by Xquik.
Pricing
from $0.00015 / tweets
Rating
4.0
(8)
Developer
Xquik
Maintained by CommunityActor stats
17
Bookmarked
1.5K
Total users
578
Monthly active users
2.5 hours
Issues response
5 hours ago
Last modified
Share
Scrape X (Twitter) tweets at scale from $0.15 per 1,000 tweets on paid Apify plans - a premium, cookieless tweet scraper on Apify Store. No API key needed, no rate limits, no login required, no start fee, no query fee. Built by Xquik.
What does X Tweet Scraper do?
X Tweet Scraper extracts tweets, engagement metrics, author profiles, and media from X (formerly Twitter) using advanced search syntax with 50+ filters. It returns structured JSON data ready for analysis, monitoring, or integration into your pipeline.
Why choose this actor first?
- Best value for flexible tweet scraping - $0.15 per 1,000 paid-plan rows, no start fee, no query fee, and no separate single-tweet URL fee
- No forced 50-result or single-use restrictions - scrape 1 tweet, 10 tweets, up to 10,000 tweet IDs, profile timelines, search results, list timelines, replies, quotes, threads, retweeters, favoriters, articles, profile media, or profile likes
- One actor instead of a tool maze - small lookups, large backfills, URL extraction, search monitoring, and engagement scraping all use the same Actor
- Budget-safe by design - duplicates are removed before billing, empty runs produce only 1 diagnostic row, and Apify spend limits drive the maximum billable rows
- Built for real exports - nested JSON for developers, flat CSV-friendly fields for analysts, source attribution for multi-query runs
What can this scraper do?
- Scrape tweets from an X list - paste a list URL like
https://x.com/i/lists/123456and get every tweet from its members via the dedicated list path - Bulk X profile scraper - pass an array of usernames like
["elonmusk", "nasa"]to scrape many timelines in one run - X URL tweet extractor - paste any mix of tweet, profile, search, or list URLs into Start URLs and the scraper figures out what you want
- Advanced X search - full X search syntax with 50+ filters (user, date, location, media, engagement)
- Batch tweet lookup - fetch up to 10,000 tweets by ID in one run (batched in chunks of 100 transparently)
- Engagement and thread modes - use explicit
modevalues for replies, quotes, thread context, retweeters, favoriters, articles, profile media, and profile likes - Multiple search terms - run many queries in a single Actor run, with the matching search term attached to each result
- Combined Latest + Top sort - run both X search modes and deduplicate for maximum coverage
- CSV-friendly flat output - set
outputPreset: "flat"to add top-level author fields, tweet URLs, and media URL arrays while keeping nested data
What data can X Tweet Scraper extract?
| Field | Description |
|---|---|
id | Tweet ID |
text | Full tweet text (including Note Tweets up to 25k chars) |
createdAt | X native timestamp string |
likeCount | Number of likes |
retweetCount | Number of retweets |
replyCount | Number of replies |
quoteCount | Number of quote tweets |
viewCount | Number of views |
bookmarkCount | Number of bookmarks |
lang | Tweet language |
url | Direct link to tweet |
tweetUrl | Flat output tweet URL alias |
twitterUrl | Flat output twitter.com-formatted URL |
author | Full author profile (username, followers, etc.) |
authorUsername | Flat output author handle |
authorFollowers | Flat output author follower count |
media | Attached images, videos, GIFs |
mediaUrls | Flat output media URLs |
imageUrls | Flat output image URLs |
videoUrls | Flat output video URLs |
entities | Hashtags, URLs, mentions |
displayTextRange | X display text range when available |
contentDisclosure | Disclosure metadata when available |
isLimitedReply | Whether replies are limited |
isNoteTweet | Whether this is a Note Tweet (long-form post) |
isQuoteStatus | Whether this tweet quotes another tweet |
isReply | Whether this tweet is a reply |
quoted_tweet | Quoted tweet object (if quote tweet) |
conversationId | Thread/conversation ID |
resultType | Row type for rich rows, engagement rows, and diagnostics |
sourceTweetId | Source tweet ID for article and engagement modes |
article | Structured article data in mode: "article" |
Why scrape X (Twitter)?
- Sentiment analysis - track brand perception in real time
- Competitor monitoring - see what your competitors post, how it performs, who engages
- Market research - spot trending topics, rising accounts, emerging niches
- Lead generation - find prospects from conversations in your industry
- Academic research - build datasets for trend analysis, social-network studies, NLP training
- Content curation - discover top-performing content and influential voices
- Crisis monitoring - catch mentions of your brand, product, or keywords as they happen
All run on Apify's platform with built-in scheduling, webhooks, API access, integrations (Make, n8n, Zapier), proxy rotation, and dataset export in JSON, CSV, Excel, or HTML.
How much does it cost to scrape tweets?
| Results | Paid-plan cost |
|---|---|
| 1,000 | $0.15 |
| 10,000 | $1.50 |
| 100,000 | $15.00 |
| 1,000,000 | $150 |
You pay for rows written to your dataset from $0.15 per 1,000 rows on paid Apify plans. No subscriptions, no hidden fees, no start fee. The Apify Console run checkout shows the authoritative price for your account tier before the run starts.
- No start or query events - starting the Actor is free, search queries are free, profile URLs are free, list URLs are free, and single tweet lookups do not carry a separate URL fee
- Never charged for duplicates - the actor deduplicates across pages before writing
- One diagnostic row per empty run - when a run produces no tweets (no
input, invalid input, or zero matches for your query), the actor writes a
single structured row that explains why, so you always know what happened.
This costs $0.00015 per empty run on paid plans (0.015 cents). Diagnostic rows
carry a
statusfield (no-input,invalid-input, orzero-output) and are easy to filter out withdataset.filter(r => !r.status).
How do I use X Tweet Scraper to scrape tweet data?
1. Paste URLs directly
Paste any mix of tweet, profile, search, or list URLs:
{"startUrls": ["https://x.com/elonmusk/status/1846987139428634858","https://x.com/nasa","https://x.com/search?q=AI%20lang%3Aen","https://x.com/i/lists/1442216750565797889"],"maxItems": 500}
Tweet URLs are looked up in batches of up to 100. Profile URLs auto-route to the
fast user-timeline path. Search URLs extract the query. List URLs route
through the dedicated list path, which is usually much faster than a generic
list: search. Mix any combination. maxItems is a global cap across all
pasted URLs.
2. Bulk handles
Shorthand for many from:username searches:
{ "twitterHandles": ["elonmusk", "nasa", "openai"], "maxItems": 100 }
Each handle routes through the fast user-timeline path. Usernames can be passed
with or without the @ prefix.
3. Search tweets
Set the Search Terms field to one or more queries:
{"searchTerms": ["from:elonmusk AI", "#bitcoin lang:en"],"maxItems": 1000,"queryType": "Latest"}
Plain account backfills with date windows, such as
from:elonmusk since:2026-01-01 until:2026-01-02, route through timeline mode
instead of generic search. That path follows the account timeline, applies the
date window, and avoids X top-search ranking gaps. maxItems is a global cap
across all search terms in the run.
4. Lookup tweets by ID
{ "tweetIds": ["1846987139428634858", "1858743654778892784"], "maxItems": 100 }
Aliases accepted for the same lookup include tweetId, tweetIDs, tweets,
postIds, lookupPostIds, tweetUrls, and postUrls.
5. Explicit engagement, thread, and article modes
Use mode when you want one route, regardless of other input fields:
{ "mode": "replies", "replyTweetIds": ["1846987139428634858"], "maxItems": 100 }
Supported explicit modes: tweet, tweets, search, profileTweets,
profileReplies, profileMedia, profileLikes, listTweets, article,
replies, quotes, thread, retweeters, and favoriters.
Article rows include resultType: "article", sourceTweetId, article, and
optional author. Engagement user rows include resultType: "user",
sourceTweetId, and engagementMode.
6. Flat CSV output
Keep the default nested JSON for full fidelity, or add spreadsheet-friendly columns:
{ "searchTerms": ["from:nasa moon"], "maxItems": 100, "outputPreset": "flat" }
Flat output keeps author and media unchanged and also adds top-level fields
such as authorUsername, authorName, authorFollowers, tweetUrl,
twitterUrl, mediaUrls, imageUrls, and videoUrls.
7. Advanced filters
Combine user, date, location, media, and engagement filters:
{"twitterContent": "AI","from": "elonmusk","since": "2026-01-01_00:00:00_UTC","until": "2026-03-01_00:00:00_UTC","lang": "en","filter:media": true,"min_faves": 1000,"maxItems": 500}
Set queryType: "Latest + Top" to run both X search modes and deduplicate -
gives you roughly 1.5x to 2x more unique tweets per generic search query. Top
is relevance-ranked and is not exhaustive. Set includeSearchTerms: true to
attach the matching query as a searchTerm field on every result tweet, useful
when running multiple searchTerms in one run.
You can also pass competitor-friendly aliases such as query, searchQuery,
urls, profileUrls, usernames, maxResults, max_results, resultsLimit,
numberOfTweets, maxPosts, and max_posts.
Top supported search operators
| Operator | Example | Purpose |
|---|---|---|
from: | from:elonmusk | Only tweets by this user |
to: | to:OpenAI | Only replies to this user |
@ | @nasa | Tweets mentioning this user |
list: | list:123456 | Tweets from list members |
lang: | lang:en | Filter by language |
since: / until: | since:2026-01-01 | Date range |
min_faves: | min_faves:100 | Engagement threshold |
min_retweets: | min_retweets:50 | Retweet threshold |
filter:media | filter:media | Only tweets with media |
filter:videos | filter:videos | Only tweets with video |
filter:images | filter:images | Only tweets with images |
filter:links | filter:links | Only tweets with links |
filter:replies | filter:replies | Only reply tweets |
filter:quote | filter:quote | Only quote tweets |
filter:blue_verified | filter:blue_verified | Only Premium users |
For the full operator list, see Twitter Advanced Search.
Input
See the Input tab for the complete list of options. All fields are optional
except at least one of: startUrls, twitterHandles, listIds, tweetIds,
searchTerms, twitterContent, or their documented aliases.
Common patterns:
- Single tweet by URL - paste the tweet URL into Start URLs
- User timeline - paste the profile URL or add the username to X Handles
- Account date backfill - use
from:user since:YYYY-MM-DD until:YYYY-MM-DDas a Search Term. The actor routes this to timeline mode for better coverage - Entire X list - paste the list URL into Start URLs
- Advanced search - combine
twitterContentwith filters likefrom:,since:,min_faves:,filter:media
The scraper auto-routes list URLs to the dedicated list path, which is usually
faster than generic list:ID search.
Output
Each tweet is a JSON object with full metadata:
{"id": "1846987139428634858","text": "The future of AI is...","createdAt": "Sun Mar 15 12:00:00 +0000 2026","retweetCount": 500,"replyCount": 120,"likeCount": 5000,"quoteCount": 80,"viewCount": 1200000,"bookmarkCount": 300,"lang": "en","url": "https://x.com/elonmusk/status/1846987139428634858","author": {"id": "44196397","username": "elonmusk","name": "Elon Musk","followers": 180000000,"verified": true},"media": [{ "type": "photo", "url": "https://..." }],"entities": {"hashtags": [{ "text": "AI" }],"urls": [],"user_mentions": []},"isNoteTweet": false,"isQuoteStatus": false,"isReply": false,"conversationId": "1846987139428634858"}
Export as JSON, CSV, Excel, or HTML from the Apify dataset.
Tips & advanced options
- Control spend - set Apify max total charge to cap run cost. Leave
maxItemsempty for maximum rows within that budget, or setmaxItemswhen you want fewer tweets. - API budget cap - set
maxTotalChargeUsdin the Apify API, or Max cost per run in Console. Apify exposes that limit to the Actor asACTOR_MAX_TOTAL_CHARGE_USD, and the Actor turns it into the maximum billable row count. - Faster results - pass
tweetIdsfor known tweets (batched at 100 per call) or paste a profile URL (auto-routes to the fast user-timeline path). - Attribution - set
includeSearchTerms: truewhen running many queries to tag each result with its source search term. - Maximum coverage - set
queryType: "Latest + Top"to run both X search modes and deduplicate, giving you 1.5x to 2x more unique tweets per generic search query. Use account timeline mode forfrom:userdate backfills. - Real-time monitoring - for ongoing monitoring, use the Xquik API webhooks or streaming endpoints. They cost less than repeated actor runs for watch-style workloads.
Use cases
- Sentiment analysis - track brand perception across tweets
- Market research - monitor competitors and industry trends
- Lead generation - find prospects from social conversations
- Academic research - collect datasets for trend analysis
- Content curation - discover top-performing content and influencers
Why X Tweet Scraper vs other tweet scrapers?
Most X/Twitter actors can scrape tweets. The difference is what happens when you need small jobs, mixed URL types, threads, quotes, replies, lists, predictable pricing, and clean output in one run.
| User need | X Tweet Scraper | Common top-actor tradeoff |
|---|---|---|
| Paid-plan result price | from $0.15 / 1,000 | About $0.15 to $0.40 / 1,000 |
| Start fee | None | Some add an Actor Start event |
| Query fee | None | Some charge about $0.016 per query |
| Single tweet URL fee | None | Some charge about $0.05 per URL |
| Query minimum | No 50-tweet minimum | Some require 50+ tweets per query |
| Demo-style 10-row cap in actor | No | Some free modes cap runs at 10 rows |
| Tweet/profile/search/list URLs | Yes | Usually yes |
| Batch tweet lookup | Yes, up to 10,000 IDs | Often separate or restricted |
| Replies, quotes, threads | First-class modes | Often separate or restricted |
| Retweeters and favoriters | First-class modes | Often separate or unavailable |
| Account date-window backfills | Timeline routing supported | Often relies only on search ranking |
| Dedicated X list timeline mode | Yes | Often generic search/list handling |
| Combined Latest + Top coverage | Yes | Varies |
| Flat CSV-friendly output | Yes | Varies |
| Empty run diagnostics | 1 structured row | Often silent empty datasets |
| Apify spending limit handling | Stops when limit is reached | Varies |
| Full X automation suite | Yes, Xquik API + webhooks | Usually standalone scraping only |
Always check each Actor's Pricing tab before running because Apify Store pricing can change.
Public issue patterns this actor is designed to avoid
We reviewed public X/Twitter actor listings, READMEs, and issue tabs on Apify. Common user complaints include 10-row demo caps, 50-result query requirements, single-tweet restrictions, reply/conversation limitations, confusing empty datasets, date-window search gaps, and extra query fees. X Tweet Scraper handles those points directly:
- No start or query fee - users pay only for delivered result rows and the single diagnostic row on empty runs.
- Small jobs are valid - fetch 1 tweet, 10 tweets, a thread, or a batch of IDs without a 50-result minimum.
- Rich modes are built in - replies, quotes, threads, retweeters, favoriters, articles, profile media, and profile likes live in one actor.
- Backfills use the right route - plain
from:user since:... until:...searches route through timeline pagination instead of relying only on generic search ranking. - Empty runs are explainable - no input, invalid input, and zero matches return a structured diagnostic row.
- Budgets stop cleanly - the Actor respects Apify spend limits and stops
writing rows when the run budget is reached. Leave
maxItemsempty to let the run return as many rows as the spend cap allows.
Is it legal to scrape X (Twitter)?
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
If this scraper saves you time, a short review on the Apify Store helps other users find it. Thanks!
Need more than scraping?
Xquik is a full X automation platform with 40+ tools, a REST API, webhooks, and an MCP server for AI agents.
- API Documentation - full REST API with 70+ endpoints
- Search Tweets API - the endpoint powering this Actor
- Batch Tweets API - fetch up to 100 tweets by ID
- User Tweets API - get a user's timeline
- MCP Server - connect X data to AI agents (Claude, GPT, etc.)
- Webhooks - real-time event delivery
- GitHub - source code and issue tracker
FAQ
Do I need an X API key? No. This scraper uses its own infrastructure. No login or credentials required.
Is there a rate limit? No. Scrape as much as you need.
How fast is it? Typically 20-50 tweets per second depending on query complexity.
What search operators are supported? X advanced search operators such as from, to, mentions, date ranges, engagement filters, media filters, geo filters, and more.
Can I use the Apify API to run this? Yes. See the API tab for integration examples in Python, JavaScript, cURL, and more.
Can I schedule recurring scrapes? Yes. Use Apify's built-in scheduling to run this Actor on a cron.
Where do I report issues? Open an issue on GitHub or use the Issues tab on this Actor's page.
Can I get a custom solution? Yes. Visit xquik.com or check the API docs for direct API access with more endpoints and features.