X/Twitter Keyword & Hashtag Tweet Search
Pricing
from $0.49 / 1,000 results
X/Twitter Keyword & Hashtag Tweet Search
Search X (Twitter) by keyword, phrase or hashtag and get tweet text, author, engagement metrics, media and language. Every row says which keyword found it. No login required.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Nimbryxo-studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Security
Limited permissionsShare
Give this actor a list of keywords, phrases or hashtags and it pulls back matching X (formerly Twitter) posts — full text, engagement counts, media and the author who wrote each one. No sign-in, cookies or developer credentials needed; it reads the same public search results any visitor sees.
What this actor does
- Runs each entry in
keywordsas its own independent search, so a single job can cover several unrelated topics at once. - Targets up to 1,000 posts per keyword via
maxTweets; how many actually come back depends on how much volume that keyword has on X. - Lets you sort by
Top(most engagement) orLatest(newest first), and narrow by language, a date window, retweets/replies, verification, media presence, and minimum like/retweet/reply counts. - Stamps every row with
searchTermso a multi-keyword run stays easy to split apart afterward. - Emits a one-line
statusrecord for a keyword that returns nothing, rather than leaving you guessing why a keyword is missing from the dataset. - Drops any field with no data for that post — you will never see
null, an empty string, or an empty array/object in the output.
Output per post
Core fields on every post record: id, url, text, createdAt, language (when X reports one), and searchTerm.
Engagement comes through replyCount, retweetCount, likeCount, quoteCount, bookmarkCount, and viewCount, plus a computed engagementRate — (likes + retweets + replies + quotes) ÷ followers — included only once the author's follower count is known and nonzero.
Post-type context: isReply, isRetweet, isQuote, isNoteTweet, and, for replies, conversationId, inReplyToTweetId, inReplyToUserId, inReplyToUsername, parentTweet (a nested summary of the post being replied to, when available).
Entities parsed out of the text: hashtags, mentions, urls, cashtags.
Attachments and extras, when present: media (one entry per photo/video/GIF with type, url, previewImageUrl, pixel dimensions, durationSeconds, viewCount, altText, variants), quotedTweet / quotedTweetId, poll, card, possiblySensitive, withheldInCountries, place, postedFrom, isEdited, editControl (edit history metadata), newsActionType.
The author rides along as a nested author object — id, username, name, bio, followers, isBlueVerified, verified, profileImageUrl, and more.
Every post closes with type: "post" and collectedAt.
Sample record
{"type": "post","id": "1923456789012345678","url": "https://x.com/i/status/1923456789012345678","text": "Just shipped a new feature after three weeks of testing. Feels good. #buildinpublic","createdAt": "2026-06-02T09:15:00+00:00","language": "en","searchTerm": "buildinpublic","replyCount": 34,"retweetCount": 112,"likeCount": 1870,"quoteCount": 9,"bookmarkCount": 265,"viewCount": 54300,"isReply": false,"isRetweet": false,"isQuote": false,"hashtags": ["buildinpublic"],"author": {"id": "1092834756","username": "makerjane","name": "Jane Builds","followers": 18400,"isBlueVerified": false},"collectedAt": "2026-06-02T10:03:41+00:00"}
Output per status row
When a keyword comes back empty, the actor pushes exactly one record carrying type: "status", status, message, searchTerm (which keyword it's reporting on), and collectedAt — a signal, not a silent zero.
Input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array | – | Required. Words, phrases, hashtags or full search queries; each runs separately. |
maxTweets | integer | 20 | Target number of posts per keyword (1–1000). |
maxItems | integer | – | Same as maxTweets — use whichever name you prefer. |
searchType | string | Top | Top for the most engaged posts, Latest for newest-first. |
sort | string | – | Same as searchType. |
language | string | Any language | Restrict to one of 40 common X language codes, e.g. en, es, ja. |
dateFrom | date | – | Earliest post date to include. |
dateTo | date | – | Latest post date to include. |
excludeRetweets | boolean | false | Drop retweets/reposts, keep only original posts. |
excludeReplies | boolean | false | Drop replies, keep only top-level posts. |
onlyVerifiedUsers | boolean | false | Keep only posts from verified accounts. |
onlyImages | boolean | false | Keep only posts containing at least one image. |
onlyVideos | boolean | false | Keep only posts containing at least one video or GIF. |
minimumLikes | integer | – | Floor on like count. |
minimumRetweets | integer | – | Floor on retweet count. |
minimumReplies | integer | – | Floor on reply count. |
proxyConfiguration | object | – | Optional; useful for large or repeated runs from the same IP. |
startDate / endDate | string | – | Older aliases for dateFrom / dateTo (YYYY-MM-DD). |
Example: two unrelated topics in one run
{"keywords": ["apify", "web scraping"],"maxTweets": 50}
Example: live brand-mention watch
{"keywords": ["#YourBrand", "\"your brand\""],"searchType": "Latest","language": "en","maxTweets": 200,"excludeRetweets": true,"excludeReplies": true}
Example: top posts in a date window, above an engagement floor
{"keywords": ["artificial intelligence"],"maxTweets": 500,"minimumLikes": 100,"minimumRetweets": 20,"dateFrom": "2026-01-01","dateTo": "2026-06-30"}
Use cases
- Brand monitoring — catch new mentions of a product, campaign or handle as they post.
- Trend and topic tracking — measure how a subject's volume and engagement shift over weeks or months.
- Breaking-news watch — pair
Latestwith a tight date range to follow a fast-moving story. - Content research — surface the highest-engagement posts around a theme for inspiration.
- Academic or policy research — assemble a dataset of public discourse on a topic, language or time period.
- Competitor comparison — run several competing keywords side by side and compare volume and engagement.
FAQ
Do I need an X account or developer credentials? No — there's no credential field in the input at all. The actor reads what any logged-out visitor can already see on X's own search.
How many posts will I actually get per keyword?
Up to maxTweets, but that's a ceiling, not a promise. A trending keyword might fill close to 500 rows; an obscure one may return only a handful, because that's genuinely all X's search surface has for it.
Why did I get a different count on a second identical run? X's logged-out search doesn't expose stable, full pagination, and what it surfaces can shift between requests. If you need more rows, try again or narrow the date window rather than assuming something broke.
Should I use Top or Latest?
Latest for anything time-sensitive — breaking news, live mentions, a campaign in progress. Top when you want the posts with the strongest engagement regardless of when they went up.
Is a proxy required? No, it's optional. Add one mainly if you're running large or frequent jobs from the same IP and want extra headroom against rate limiting.
How current is the data? Fully live — each run queries X at the moment it executes. Put the actor on a schedule for ongoing monitoring.
How do I get the results into another tool? Pull the dataset from the run page or the Apify API, wire up a webhook, or connect it to Zapier, Make, Google Sheets, or similar no-code tools.
Is this affiliated with X? No. This is an independent, third-party actor that reads publicly available X search results.