Twitter Scraper - Search Tweets by Keyword avatar

Twitter Scraper - Search Tweets by Keyword

Pricing

from $1.08 / 1,000 results

Go to Apify Store
Twitter Scraper - Search Tweets by Keyword

Twitter Scraper - Search Tweets by Keyword

Search Twitter (X) by keyword, hashtag or advanced operators like from:, since: and min_faves:, and export every matching tweet. Each row has the text, time, likes, reposts, replies, views, author and media. Run many searches at once and sort by latest or top.

Pricing

from $1.08 / 1,000 results

Rating

0.0

(0)

Developer

ToolzerHub

ToolzerHub

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Twitter Scraper — Search Tweets by Keyword

Search Twitter (X) by keyword, hashtag or advanced operator and export every matching tweet — text, timestamp, language, likes, reposts, replies, quotes, bookmarks, views, author and attached media — as one row per tweet.

Give it one query or fifty. Each runs in turn, newest first or most engaged first, until you hit your cap or the results run out.

Input

FieldTypeDefaultWhat it does
searchQuerieslist of text—Required. One or more searches. Operators go inside the text.
sortlatest / toplatestlatest is newest first. top is the most engaged first.
maxItemsinteger100Caps the whole run, across every query. 0 means no limit.
{
"searchQueries": ["from:openai", "openai lang:en"],
"sort": "top",
"maxItems": 100
}

Operators you can put in a query:

OperatorMatches
from:handleTweets written by that account
"exact phrase"The phrase, word for word
#hashtagTweets carrying the hashtag
lang:enTweets X detected as English
min_faves:100Tweets with at least 100 likes
since:2026-10-01 until:2026-10-15A date window
-filter:repliesEverything except replies
(a OR b)Either term. Every ( needs its ).

Output

One row per tweet.

FieldWhat it holds
id, urlThe tweet's ID and its link on x.com
text, langWhat it says, and the language X detected
created_atPublish time, ISO 8601 UTC
like_count, reply_count, repost_count, quote_count, bookmark_count, view_countThe six counters, as they read when the tweet was fetched
author_handle, author_name, author_id, author_followers_count, author_is_blue_verifiedThe author, flattened for spreadsheets
authorThe author's full profile record
media, hashtags, mentions, urls, card, article, placePhotos, videos and GIFs, hashtags, mentioned accounts, links with their destinations, link card, attached article, tagged place
is_reply, in_reply_to_post_id, in_reply_to_handle, conversation_idWhere the tweet sits in a thread
quoted_post, reposted_postThe tweet it quotes, or the original it reposts
input_queryThe query that found it, so several searches can share one dataset
{
"id": "2110399768232898915",
"url": "https://x.com/zerohedge/status/2110399768232898915",
"text": "*OPENAI COMPUTING CHIEF TO DEPART: WSJ",
"lang": "en",
"source": "Twitter for iPhone",
"created_at": "2026-10-14T15:58:08.000Z",
"like_count": 881,
"reply_count": 39,
"repost_count": 57,
"quote_count": 28,
"view_count": 175617,
"bookmark_count": 52,
"is_reply": false,
"in_reply_to_post_id": null,
"in_reply_to_user_id": null,
"in_reply_to_handle": null,
"conversation_id": "2110399768232898915",
"is_pinned": null,
"hashtags": [],
"author_id": "18856867",
"author_handle": "zerohedge",
"author_name": "zerohedge",
"author_followers_count": 3432237,
"author_is_blue_verified": true,
"input_query": "openai lang:en"
}

The author, media, quoted_post, reposted_post and the other nested fields are cut from this example to keep it short. They are in every row.

Pricing

You pay for each tweet saved. A tweet that is skipped is never charged.

PlanPer 1,000 tweets
Free$2.00
Bronze$1.69
Silver$1.38
Gold and above$1.08

Each run also carries a $0.00005 start charge. The Free plan covers the first 50 rows you save with this Actor; after that you need a paid plan.

Questions

Why did I get fewer tweets than maxItems? A query stops when X stops returning pages for it or returns an empty one. Broad queries get cut off well before they run dry. Split them into date windows — since: and until: — and give each its own entry in searchQueries.

Does maxItems apply per query or to the whole run? The whole run, in the order you list the queries. A busy first query can use the entire budget. Put the one you care about first, or run the queries separately.

What do latest and top change? latest walks back from the newest tweet and goes as far as X lets it. top ranks by engagement and usually ends sooner. Use latest for monitoring and top for "what did people react to".

A row's text starts with "RT @". Where is the full tweet? In reposted_post. On a repost, text is X's shortened form. A quote tweet keeps its own text, and the tweet it quotes sits in quoted_post.

What happens to a query X rejects? It is skipped, and the log says why — an unbalanced parenthesis is one cause. Other queries in the list still run. If every query is rejected, the run fails with that reason and nothing is charged.

Can I run this from code or on a schedule? Yes. Any Apify client works, and Apify's scheduler can run it hourly or daily:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("toolzerhub/twitter-scraper").call(
run_input={"searchQueries": ["from:openai"], "maxItems": 50}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["created_at"], row["text"])

Are the counters exact? They are live numbers. Two runs a few minutes apart will disagree on likes and views. That is drift, not a fault.

ActorUse it when
Twitter Tweets ScraperYou want one account's own timeline rather than a search
Twitter Comments ScraperYou already have a tweet and want the replies under it
Twitter Profile ScraperYou need the full profile behind an author_handle
Twitter Followers ScraperYou want the accounts that follow an author

Support

Questions, bugs, or feature requests: contact@toolzerhub.com

Browse the rest: apify.com/toolzerhub