Twitter (X) Search Scraper - Tweets by Keyword, $0.40/1k
Pricing
Pay per event
Twitter (X) Search Scraper - Tweets by Keyword, $0.40/1k
Scrape X (Twitter) search by keyword or advanced query (from:, min_faves:, filter:media, date ranges). Returns full text, engagement, author and media. Export JSON, CSV, Excel or Notion. $0.40 per 1,000 tweets ($0.0004 each) plus a $0.00005 run-start fee. Failed runs are free.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
44
Total users
22
Monthly active users
2 hours ago
Last modified
Categories
Share
⚡ Twitter (X) Search Scraper - Tweets by Keyword
⚡ Scrape X (Twitter) SEARCH results by keyword/query (supports from:, min_faves:, filter:media, date operators). Runs out of the box — no API key to register, no cookie to go and find. Returns full text, engagement, author, media. Export JSON/CSV/Excel or deliver to Notion. Pay per tweet.
The login is handled for you
X only serves search to a signed-in session. This is not a fingerprinting or an address problem and no proxy fixes it: the same request that returns a full profile without any credentials returns nothing at all for a search. So the Actor carries a built-in session, and a run needs nothing from you but a query.
The built-in session is shared, and X counts its limits per account rather than per caller. Under heavy concurrent use it will throttle, and a run can then come back short or with a BLOCKED diagnostic row explaining why. That is the honest trade for not having to set anything up. If you are pulling at volume, or you simply do not want your throughput to depend on how busy the Actor is, put your own cookie in sessionCookies and the run uses only yours — a rate limit nobody else draws on.
How to get your own cookie (1 minute):
- Log in to x.com in your browser (a throwaway account is fine, and a sensible choice).
- Press F12 → Application tab → Cookies →
https://x.com. - Copy the values of
auth_tokenandct0. - Paste into
sessionCookiesasauth_token=XXXX; ct0=YYYY— one account per line; several lines are rotated, and one going quiet does not stop the run.
Cookies age out: an account that gets rate-limited or challenged is dropped for the rest of the run and the next one is used. If nothing usable is left, the run still succeeds — it returns one clearly labelled
_samplerow so you can see the output shape, and no per-tweet fee is charged for it.
Input
| Field | Default | Notes |
|---|---|---|
searchTerms | — | One or more X search queries. Advanced operators work as they do on x.com: from:, to:, min_faves:, min_retweets:, filter:media, -filter:replies, lang:, quoted phrases. |
sort | Latest | Latest (newest first) or Top (X's relevance ranking). |
maxItems | 100 | 1–5,000 tweets per run. This is your spend cap — you are charged per tweet returned. |
since / until | — | YYYY-MM-DD date bounds, applied to the query. |
onlyVerifiedUsers | false | Keep only tweets from verified authors. |
sessionCookies | — | Optional. Runs work without it. One auth_token=…; ct0=… pair per line to get a rate limit no other run shares; several lines are rotated. Stored as a secret. |
proxyConfiguration | Apify Proxy (datacenter / rented static) | Leave it alone unless you have your own proxy servers. The Actor goes out through rented static addresses with rotating Apify datacenter as the fallback; neither is billed per gigabyte, so neither adds to your cost. Metered groups (RESIDENTIAL) are not offered and are swapped for datacenter if requested. Your own servers in proxyUrls are used exactly as given. |
notionConnector / notionParentId | — | Optional direct delivery of the results into a Notion data source. |
Output
One row per tweet, deduplicated by tweet id across all your search terms:
id, url, text (the full note-tweet body when it is a long post, not the truncated version), createdAt, lang, replyCount, retweetCount, likeCount, quoteCount, bookmarkCount, viewCount, isReply, isRetweet, isQuote, conversationId, inReplyToId, inReplyToUser, hashtags, mentions, urls (expanded, not t.co), and media — each media entry with its type, image url and, for videos, the highest-bitrate MP4 variant.
Every row also carries a nested author object: id, userName, name, description, followersCount, friendsCount, statusesCount, verified, isBlueVerified, location, profileImageUrl and the account's own createdAt. That means you do not need a second profile-scraping run to know who posted — the follower count and bio come back attached to the tweet.
Counts are null rather than 0 when X does not expose them. When a search returns nothing, you get a single NO_RESULTS diagnostic row explaining that the cookies may be invalid or locked, instead of a silent empty dataset.
Pricing
$0.40 per 1,000 tweets ($0.0004 each), plus $0.00005 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for tweets actually returned.
Diagnostic rows, the labelled _sample row, and runs that return nothing are never charged the per-tweet fee; an empty run costs the $0.00005 start fee alone. A full 5,000-tweet run costs $2.00. The nested author object and all media variants are included at that price — there is no enrichment surcharge.
Scheduled change: from 19 August 2026 the run-start fee becomes $0.001. The per-tweet price of $0.0004 is unchanged.
Proxy traffic is included — the Actor uses only flat-rate egress (rented static addresses, Apify datacenter), so there is no per-gigabyte bandwidth surcharge on top of the per-tweet price above.