Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics avatar

Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics

Pricing

from $0.0015 / tweet

Go to Apify Store
Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics

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

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

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.

Twitter (X) Scraper — Tweets, Search, Timelines & Full Metrics


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 viewCount and bookmarkCount. Many competing scrapers omit view and bookmark counts. Every full-fidelity record here carries likeCount, retweetCount, replyCount, quoteCount, bookmarkCount, and viewCount, plus derived totalEngagement and engagementRate.
  • Full advanced-search operators, applied server-side. Pass raw queries like from:OpenAI min_faves:1000 directly, 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. quotedTweet and retweetedTweet are fully normalized to the same schema.
  • Polls, X Articles, and cards. Structured poll (options, votes, end time), structured article (title, preview, cover image, blocks) for long-form X Articles, and a card reference.
  • type field (tweet / reply / retweet / quote) for drop-in parity with other popular tweet scrapers.
  • Keyword-monitoring mode. monitorMode + sinceLastRun keep a LAST_RUN marker 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

FieldTypeDescription
searchTermsarray<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.
hashtagsarray<string>Hashtags to search (with or without #). Each becomes its own search query.
rawQuerystringA single raw X advanced-search query, used verbatim (structured operators below are not appended to it).
tweetUrlsarray<string>Status URLs (https://x.com/<user>/status/<id>), resolved and looked up at full fidelity.
tweetIdsarray<string>Numeric tweet IDs to look up directly.
fromUsersarray<string>Handles (without @) whose recent tweets to pull via user-timeline.
toUserstringOnly tweets replying to this handle (compiled to to:; search — best with auth).
mentioningarray<string>Tweets mentioning these handles (search — best with auth).

Advanced-search operators (compiled into the query)

FieldTypeCompiles to
sinceDate / untilDatestring YYYY-MM-DDsince: / until:
sinceTime / untilTimeinteger (unix sec)since_time: / until_time: (more reliable)
sinceId / maxIdstringsince_id: / max_id:
langstringlang:
minFaves / minRetweets / minRepliesintegermin_faves: / min_retweets: / min_replies:
geocodestring lat,long,radiusgeocode:
near + withinRadiusstringnear: + within:
placeIdstringplace:

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

FieldTypeDefaultDescription
sortenumTopWhich results to return. Top gives tweets with real engagement numbers; Latest returns tweets posted seconds ago, whose counts are still zero. Also Photos, Videos.
maxTweetsPerTerminteger100Cap of tweets per query/term/timeline.
maxTotalTweetsinteger1000Global cap across all jobs in the run.
outputPresetenumfullRecord shape: full, compact, or csvFlat.
jqFilterstringOptional dot-path projection (e.g. .text).
monitorModebooleanfalseKeyword-monitoring run (pairs with sinceLastRun).
sinceLastRunbooleanfalseWith monitorMode: emit only tweets newer than the previous run.
authTokenstring (secret)Optional auth_token cookie from a logged-in x.com session — unlocks authenticated search at scale.
csrfTokenstring (secret)Optional ct0 cookie, required alongside authToken.
timelineFallbackbooleantrueKeep on. Lets a user timeline fall back to a secondary source if the main one fails.
fxSearchbooleantruePrimary real-time keyword search. Leave on.
serpFallbackbooleantrueKeep the secondary search path enabled for when the primary one is rate-limited. Leave on.
proxyConfigurationobjectRESIDENTIAL / USApify 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 derived totalEngagement and engagementRate.
  • Type & flags: type (tweet/reply/retweet/quote), isReply, isRetweet, isQuote, isPinned, possiblySensitive.
  • Threading: inReplyToId and inReplyToUsername on every record; conversationId and inReplyToUserId on 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[] with position/label/votes, totalVotes, durationMinutes, endDatetime, lastUpdated, votesAreFinal), article (title, previewText, coverImageUrl, blocks[]).
  • Geo: place, geo — published on tweet lookups and timelines; keyword-search records carry null.
  • 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), and metricsDegraded (true only on the rare degraded-fallback record where bookmark/quote/view are unavailable; false on 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 pullCost
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 + sinceLastRun on a schedule to pull only what's new.
  • Sentiment & trend research. Collect large, metric-rich datasets for topic, sentiment, and trend analysis, with viewCount/bookmarkCount giving 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/untilDate or sinceTime/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.



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.