Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics
Pricing
from $0.0015 / tweet
Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics
Scrape tweets by keyword, advanced query, hashtag, user timeline or tweet ID. Every tweet with views, bookmarks and the full author profile. No login, no API key.
Pricing
from $0.0015 / tweet
Rating
0.0
(0)
Developer
Yuliia Kulakova
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
X / Twitter Scraper — real-time keyword, advanced-query, timeline & tweet scraper, no login
Search X (Twitter) by keyword, hashtag or the full advanced-search grammar, scrape user timelines and individual tweets, and export every tweet with complete engagement metrics — including view count and bookmark count — as structured JSON or CSV. No login, no API key, no browser. Pay only for the results you get.

What it does
- Search tweets by keyword, hashtag, or a full X advanced-search query (
from:,to:,since:,until:,min_faves:,lang:,filter:*, and more). - Scrape user timelines — pull the recent tweets of any public account by handle.
- Look up individual tweets by URL or ID, hydrated to full fidelity.
- Capture full metrics on every record: likes, retweets, replies, quotes, bookmarks, and views — plus the complete author profile, media, polls, quoted/retweeted tweets, and X Articles.
- Monitor keywords across scheduled runs and emit only tweets that are new since the last run.
All of this runs without any X account or API key for standard use, through a resilient no-login backend with automatic residential-IP rotation.
Key features
- Real-time keyword search, no login. X gates its own search endpoint behind a logged-in session. This Actor gets your query executed server-side against X, so the full advanced-search operator grammar is honored by X itself — not stripped or re-applied client-side. Results are real-time and full-fidelity, with deep pagination.
- Complete metrics, including
viewCountandbookmarkCount. Many competing scrapers omit view and bookmark counts. Every full-fidelity record here carrieslikeCount,retweetCount,replyCount,quoteCount,bookmarkCount, andviewCount, plus derivedtotalEngagementandengagementRate. - Full advanced-search operators, applied server-side. Pass raw queries like
from:OpenAI min_faves:1000directly, or build them from structured inputs (minFaves,lang,sinceDate/untilDate,filterMedia,filterVerified, …). Operators are compiled into the query and executed by X. - Complete author object. Every tweet embeds the full author: handle, name, verification (
verified,blueVerified,verifiedType), follower/following/tweet counts, bio, location, avatar, banner, and more. - Nested quoted & retweeted tweets.
quotedTweetandretweetedTweetare fully normalized to the same schema. - Polls, X Articles, and cards. Structured
poll(options, votes, end time), structuredarticle(title, preview, cover image, blocks) for long-form X Articles, and acardreference. typefield (tweet/reply/retweet/quote) for drop-in parity with other popular tweet scrapers.- Keyword-monitoring mode.
monitorMode+sinceLastRunkeep aLAST_RUNmarker in the key-value store, so scheduled runs return only tweets newer than the previous run. - Pay-per-result pricing that undercuts competitors — roughly $0.15–$0.20 per 1,000 tweets versus ~$0.40 elsewhere, and
30x cheaper than the official X API ($5/1K). Empty and duplicate results bill nothing. - No-login by design. Automatic per-request IP rotation and layered fallbacks deliver results without credentials. An optional authenticated-session mode is available for the highest-volume jobs.
Input
Configure the run from the Apify Console UI or via the JSON input. All fields are optional — supply at least one query mode (searchTerms, hashtags, rawQuery, tweetUrls, tweetIds, fromUsers, …).
Query modes
| Field | Type | Description |
|---|---|---|
searchTerms | array<string> | One or more search queries. Each item accepts the full X advanced-search syntax (e.g. openai lang:en min_faves:100). Real-time & full-fidelity with no login. |
hashtags | array<string> | Hashtags to search (with or without #). Each becomes its own search query. |
rawQuery | string | A single raw X advanced-search query, used verbatim (structured operators below are not appended to it). |
tweetUrls | array<string> | Status URLs (https://x.com/<user>/status/<id>), resolved and looked up at full fidelity. |
tweetIds | array<string> | Numeric tweet IDs to look up directly. |
fromUsers | array<string> | Handles (without @) whose recent tweets to pull via user-timeline. |
toUser | string | Only tweets replying to this handle (compiled to to:; search — best with auth). |
mentioning | array<string> | Tweets mentioning these handles (search — best with auth). |
Advanced-search operators (compiled into the query)
| Field | Type | Compiles to |
|---|---|---|
sinceDate / untilDate | string YYYY-MM-DD | since: / until: |
sinceTime / untilTime | integer (unix sec) | since_time: / until_time: (more reliable) |
sinceId / maxId | string | since_id: / max_id: |
lang | string | lang: |
minFaves / minRetweets / minReplies | integer | min_faves: / min_retweets: / min_replies: |
geocode | string lat,long,radius | geocode: |
near + withinRadius | string | near: + within: |
placeId | string | place: |
Content toggles
filterMedia, filterImages, filterVideos, filterLinks, filterVerified, filterBlue, filterQuote, filterNativeRetweet (booleans → filter:*), plus includeReplies / includeRetweets / includeQuotes (default true; set false to exclude via -filter:*).
Controls
| Field | Type | Default | Description |
|---|---|---|---|
sort | enum | Top | Which results to return. Top gives tweets with real engagement numbers; Latest returns tweets posted seconds ago, whose counts are still zero. Also Photos, Videos. |
maxTweetsPerTerm | integer | 100 | Cap of tweets per query/term/timeline. |
maxTotalTweets | integer | 1000 | Global cap across all jobs in the run. |
outputPreset | enum | full | Record shape: full, compact, or csvFlat. |
jqFilter | string | — | Optional dot-path projection (e.g. .text). |
monitorMode | boolean | false | Keyword-monitoring run (pairs with sinceLastRun). |
sinceLastRun | boolean | false | With monitorMode: emit only tweets newer than the previous run. |
authToken | string (secret) | — | Optional auth_token cookie from a logged-in x.com session — unlocks authenticated search at scale. |
csrfToken | string (secret) | — | Optional ct0 cookie, required alongside authToken. |
timelineFallback | boolean | true | Keep on. Lets a user timeline fall back to a secondary source if the main one fails. |
fxSearch | boolean | true | Primary real-time keyword search. Leave on. |
serpFallback | boolean | true | Keep the secondary search path enabled for when the primary one is rate-limited. Leave on. |
proxyConfiguration | object | RESIDENTIAL / US | Apify proxy. Residential is strongly recommended for X. |
Input examples
1. Keyword search (top results)
{"searchTerms": ["openai"],"sort": "Top","maxTweetsPerTerm": 100,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }}
2. Advanced query — high-engagement tweets from a specific account
{"searchTerms": ["from:OpenAI min_faves:1000"],"sort": "Latest","maxTweetsPerTerm": 200}
The same query can be built from structured inputs instead of raw operators:
{"fromUsers": [],"searchTerms": ["gpt"],"minFaves": 1000,"lang": "en","sinceDate": "2026-08-01","filterMedia": true,"sort": "Top"}
3. User timelines
{"fromUsers": ["OpenAI", "sama"],"maxTweetsPerTerm": 50,"includeReplies": false}
Output
Every tweet is normalized to one unified schema regardless of source path. Results are pushed to the run's dataset and can be exported as JSON, CSV, Excel, or JSONL.
Trimmed sample record
{"id": "1839000000000000000","url": "https://x.com/OpenAI/status/1839000000000000000","twitterUrl": "https://twitter.com/OpenAI/status/1839000000000000000","text": "We're rolling out new features today. Here's what's new →","fullText": "We're rolling out new features today. Here's what's new →","createdAt": "2026-08-28T15:42:10.000Z","lang": "en","source": "Twitter Web App","likeCount": 4820,"retweetCount": 612,"replyCount": 388,"quoteCount": 141,"bookmarkCount": 1290,"viewCount": 512340,"isReply": false,"isRetweet": false,"isQuote": false,"type": "tweet","isPinned": false,"conversationId": null,"inReplyToId": null,"inReplyToUserId": null,"inReplyToUsername": null,"quotedTweet": null,"retweetedTweet": null,"hashtags": [],"mentions": [],"urls": [{ "url": "https://t.co/abc123", "expandedUrl": "https://openai.com/blog", "displayUrl": "openai.com/blog" }],"cashtags": [],"media": [{"type": "photo","url": "https://pbs.twimg.com/media/Gxxxxxxx.jpg","previewUrl": "https://pbs.twimg.com/media/Gxxxxxxx.jpg","altText": null,"duration": null}],"card": null,"poll": null,"article": null,"place": null,"geo": null,"possiblySensitive": false,"metricsDegraded": false,"author": {"id": "4398626122","handle": "OpenAI","name": "OpenAI","verified": false,"blueVerified": false,"verifiedType": "organization","followers": 4200000,"following": 12,"tweetCount": 3900,"favouritesCount": 120,"statusesCount": 3900,"mediaCount": 640,"listedCount": null,"createdAt": "2015-12-06T00:00:00.000Z","description": "Creating safe AGI that benefits all of humanity.","profileBio": "Creating safe AGI that benefits all of humanity.","location": "San Francisco, CA","protected": false,"avatarUrl": "https://pbs.twimg.com/profile_images/xxxx.jpg","bannerUrl": "https://pbs.twimg.com/profile_banners/xxxx","pinnedTweetIds": [],"entities": null},"totalEngagement": 5961,"engagementRate": 0.011634,"searchTerm": "openai","source_path": "search"}
Illustrative record showing the exact field names and structure produced by the normalizer; live values vary by tweet.
Field reference
- Identity & content:
id,url,twitterUrl,text,fullText,createdAt(ISO 8601),lang,source. - Metrics:
likeCount,retweetCount,replyCount,quoteCount,bookmarkCount,viewCount, plus derivedtotalEngagementandengagementRate. - Type & flags:
type(tweet/reply/retweet/quote),isReply,isRetweet,isQuote,isPinned,possiblySensitive. - Threading:
inReplyToIdandinReplyToUsernameon every record;conversationIdandinReplyToUserIdon tweet lookups and timelines. - Nested tweets:
quotedTweet,retweetedTweet(same schema, recursively). - Entities:
hashtags[],mentions[],urls[](expanded),cashtags[],media[](type,url,previewUrl,altText,duration). - Rich content:
card,poll(options[]withposition/label/votes,totalVotes,durationMinutes,endDatetime,lastUpdated,votesAreFinal),article(title,previewText,coverImageUrl,blocks[]). - Geo:
place,geo— published on tweet lookups and timelines; keyword-search records carrynull. - Author:
author{ id, handle, name, verified, blueVerified, verifiedType, followers, following, tweetCount, favouritesCount, statusesCount, mediaCount, listedCount, createdAt, description, profileBio, location, protected, avatarUrl, bannerUrl, pinnedTweetIds[], entities }. - Provenance:
searchTerm,source_path(which internal pipeline produced the record), andmetricsDegraded(trueonly on the rare degraded-fallback record where bookmark/quote/view are unavailable;falseon every full-fidelity record).
Output presets: full returns everything above. compact keeps id, url, text, createdAt, author handle, and core metrics. csvFlat flattens author and metric fields to a single level for clean CSV export.
Pricing
Pay-per-result — $1.50 per 1,000 tweets. You are billed only for tweets actually returned. Duplicates are removed before billing, and a run that returns nothing costs nothing.
That is roughly 3x cheaper than the official X API (~$5 per 1,000 posts), and every tweet arrives with the full engagement picture — including bookmarkCount and viewCount, which most alternatives omit entirely — plus the complete author profile, nested quoted tweets, and the advanced-search operator grammar executed server-side by X.
| What you pull | Cost |
|---|---|
| 1,000 tweets | $1.50 |
| 10,000 tweets for a sentiment dataset | $15 |
| A daily brand monitor returning ~200 new tweets/day | ~$9/month |
Use cases
- Brand & keyword monitoring. Track mentions of your brand, product, or campaign hashtag in real time, and use
monitorMode+sinceLastRunon a schedule to pull only what's new. - Sentiment & trend research. Collect large, metric-rich datasets for topic, sentiment, and trend analysis, with
viewCount/bookmarkCountgiving a fuller engagement picture than likes alone. - Competitor tracking. Follow competitor timelines (
fromUsers) and high-engagement posts (from:handle min_faves:...) to benchmark reach and messaging. - Lead & influencer discovery. Surface accounts posting about a topic, filter by engagement (
minFaves,minRetweets) or verification (filterVerified,filterBlue), and mine the embedded author profiles.
Honest limitations
- Keyword search is rate-limited at the source. The Actor rotates IPs on every request to keep results flowing, and standard jobs run real-time and full-fidelity. Under very heavy sustained volume it switches to a secondary path that trades freshness for reliability: fewer tweets per term (roughly 20–50), weighted towards older and more popular posts. Records from that path still carry full metrics.
- Optional authenticated-session mode for guaranteed high volume. For uninterrupted very-large jobs you can supply
authToken(auth_token) +csrfToken(ct0) cookies from a logged-in x.com session. This unlocks X's own search endpoint as the primary path (with the no-login paths as fallbacks). It is entirely optional — standard use needs no credentials. - ~3,200-result ceiling per query. X's native search returns at most roughly the 3,200 most recent results for any single query. This is a platform limit, not a limitation of this Actor. Split large jobs by date windows (
sinceDate/untilDateorsinceTime/untilTime) to page deeper. - Public data only. The Actor collects publicly available tweets and the public profile of their authors. Handling that data — including any personal data inside it — is your responsibility; see Legal below.
FAQ
Do I need an X (Twitter) account or an API key? No — not for standard use. Keyword search, user timelines, and tweet lookups all run without any login or API key. An authenticated session is optional and only needed for guaranteed uninterrupted very-large jobs.
Does it include view counts and bookmark counts?
Yes. Every full-fidelity record includes viewCount and bookmarkCount, which many other scrapers omit.
Can I use the full X advanced-search syntax?
Yes. Put a complete query in searchTerms or rawQuery (e.g. from:OpenAI min_faves:1000 lang:en), or build it from the structured operator fields. Operators are executed server-side by X.
How do I only get new tweets on each scheduled run?
Enable monitorMode and sinceLastRun. The Actor remembers the newest tweet of each run in its own named key-value store, keyed per query set, so scheduled runs return only what appeared since last time — and separate monitoring jobs never overwrite each other's position. A run that finds nothing new finishes successfully with zero rows and costs you nothing.
What proxy should I use? Leave the default. Proxies are configured automatically, and residential (US) is used where it matters.
What do I actually pay for? Only for tweets returned. Duplicates and empty runs cost nothing.
Support & feedback
Something not working? Open an issue on the Actor's Issues tab. Include the run ID and the input you used — that is usually enough to reproduce and fix it. X changes its internals often, and issues are how those changes get spotted quickly.
Missing a field or a filter? Issues are the right place for that too.
If this actor saved you time, a review on the Store page would mean a lot. Reviews are what keep a small independent actor visible next to the big ones.
Legal
Scraping X (Twitter) is contrary to X's Terms of Service, and this Actor collects public data only. Tweet text and author profiles are personal data under GDPR and CCPA — make sure you have a lawful basis for collecting them and honour deletion and opt-out requests. Any session cookies you choose to supply are your own responsibility. This Actor is not affiliated with or endorsed by X Corp.
Maintained by brilliant_gum.