Twitter (X) Scraper
Pricing
from $0.40 / 1,000 scraped tweets
Twitter (X) Scraper
The best Apify Twitter (X) scraper. It offers a variety of filter options without needing any account credentials.
Pricing
from $0.40 / 1,000 scraped tweets
Rating
0.0
(0)
Developer
Maxime
Actor stats
0
Bookmarked
19
Total users
7
Monthly active users
a day ago
Last modified
Categories
Share
Find Twitter/X posts and track conversations around your topic
Twitter Scraper helps you search Twitter/X for public posts about a topic, brand, person, or trend, so you can find the posts that matter and follow the conversation around them.
Start with the prefilled Exact phrase, keep Maximum items at 10, and review matching posts in minutes.
- ✅ Flexible post discovery - combine phrase, word, author, hashtag, list, date, language, and engagement filters in one run.
- ✅ Conversation context included - keep quoted-post context and reply relationships when X exposes them, so each match is easier to review.
- ✅ Search-mode control - choose newest-first latest results or X top-search ordering depending on how you want to track the conversation.
- ✅ Small first run - one search filter plus a low
Maximum itemscap is enough to test the search before you widen it. - ✅ Partial-result guardrail - later-page failures can still return rows already collected.
🏆 Benefits
- 🔁 Turn manual Twitter/X searching into a repeatable export you can hand to analysts, founders, or ops workflows.
- 🔗 Keep canonical post URLs and IDs so your team can review, join, or dedupe results later.
- 🧠 Feed raw text, timestamps, authors, and engagement counts into your own scoring, alerts, or AI prompts.
- 💬 Preserve quoted-post and reply-to context when X exposes it, so downstream review keeps more conversation context.
- 🛟 Keep useful rows even when a later page fails, instead of losing everything from the run.
🚀 Quick start
- Open the Input tab and keep
Exact phraseas the prefilledopenai, or replace it with your own phrase. - Keep
Include original posts,Include quote posts, andInclude replieson. LeaveInclude repostsoff unless you also want reposts without added text. - Leave
Use top searchoff for newest-first results, keep the date fields empty unless you need a time window, and setMaximum itemsto10for a small first run. - Run the actor, then review the dataset rows in the finished run or through the API.
⚙️ Features
- 🔎 Runs one search across exact phrases, required words, optional words, excluded words, accounts, mentions, hashtags, list scope, date bounds, language, post IDs, and engagement thresholds.
- 🧾 Emits one raw post contract with text, author identity, timestamps, engagement metrics, media URLs, hashtags, quoted-post fields, and reply-to fields.
- 🧭 Switches between latest-style results and X top-search ordering.
- 🎛️ Lets you include or exclude original posts, reposts, quote posts, and replies.
- 🩹 Keeps rows even when some X fields are unavailable.
- 📚 Keeps dataset order aligned with the selected search mode.
📊 Output
See the full Output tab for the complete contract.
Example
{"postId": "2042296046009626989","postUrl": "https://x.com/OpenAI/status/2042296046009626989","postText": "Our existing $200 Pro tier still remains our highest usage option. And as a thank you to our existing Pro users on the $200 tier, we’re extending our 2x Codex usage promo (until May 31st) and we’ve reset your Codex rate limits (yes, again).","postDateTime": "2026-04-09T17:38:16.000Z","authorHandle": "OpenAI","authorDisplayName": "OpenAI","authorAvatarUrl": "https://pbs.twimg.com/profile_images/1885410181409820672/ztsaR0JW_normal.jpg","nbLikes": 5231,"nbReposts": 291,"nbReplies": 366,"nbViews": 765606,"nbBookmarks": 440,"imageUrls": [],"videoUrls": [],"hashtags": [],"quotedPostId": "2042295688323875316","quotedPostText": "We’re updating our ChatGPT Pro and Plus subscriptions to better support the growing use of Codex.\n\nWe’re introducing a new $100/month Pro tier. This new tier offers 5x more Codex usage than Plus and is best for longer, high-effort Codex sessions. \n\nIn ChatGPT, this new Pro tier still offers access to all Pro features, including the exclusive Pro model and unlimited access to Instant and Thinking models.\n\nTo celebrate the launch, we’re increasing Codex usage for a limited time through May 31st so that Pro $100 subscribers get up to 10x usage of ChatGPT Plus on Codex to build your most ambitious ideas.","quotedAuthorHandle": "OpenAI","replyToHandle": null,"replyToPostId": null}
Params
| Field | Type | Description |
|---|---|---|
postId | string or null | X post ID when available. |
postUrl | string or null | Canonical X post URL when available. |
postText | string or null | Raw post text. |
postDateTime | string or null | Post timestamp in ISO 8601 format. |
authorHandle | string or null | Author handle without @. |
authorDisplayName | string or null | Author display name. |
authorAvatarUrl | string or null | Author avatar image URL. |
nbLikes | number or null | Like count. |
nbReposts | number or null | Repost count. |
nbReplies | number or null | Reply count. |
nbViews | number or null | View count. |
nbBookmarks | number or null | Bookmark count. |
imageUrls | string[] | Image media URLs from the post. |
videoUrls | string[] | Video media URLs from the post. |
hashtags | string[] | Hashtags extracted from the post. |
quotedPostId | string or null | Quoted post ID when the result quotes another post. |
quotedPostText | string or null | Quoted post text when available. |
quotedAuthorHandle | string or null | Quoted post author handle when available. |
replyToHandle | string or null | Replied-to handle when the post is a reply. |
replyToPostId | string or null | Replied-to post ID when available. |
🛠️ Input
Example
{"fromUsers": ["OpenAI"],"language": "en","shouldUseTopSearch": true,"startDate": "2026-03-15","maxNbItemsToScrape": 10}
Params
| Param | Type | Description | Default / empty behavior |
|---|---|---|---|
includePhrase | string | Exact contiguous phrase that must match. | Empty means unused. |
includeWords | string[] | All listed words must be present somewhere in the post. | Empty means unused. |
optionalWords | string[] | Any listed words may be present. | Empty means unused. |
excludeWords | string[] | Exclude posts containing these words. | Empty means unused. |
mentions | string[] | Require posts that mention these handles. Do not include @. | Empty means unused. |
fromUsers | string[] | Require posts from these handles. Do not include @. | Empty means unused. |
hashtags | string[] | Require these hashtags. Do not include #. | Empty means unused. |
toUsers | string[] | Require posts addressed to these handles. Do not include @. | Empty means unused. |
quotedPostId | string | Return posts that quote this X post ID. | Empty means unused. |
shouldIncludeOriginalPosts | boolean | Keep original posts in the output. | Defaults to true. |
shouldIncludeReposts | boolean | Keep reposts without added text in the output. | Defaults to false. |
shouldIncludeQuotePosts | boolean | Keep quote posts in the output. | Defaults to true. |
shouldIncludeReplies | boolean | Keep replies in the output. | Defaults to true. |
postType | all / link / text | Restrict the search to all posts, link posts, or text-only posts. | Defaults to all. |
shouldUseTopSearch | boolean | Use X top search instead of latest-style search. | Defaults to false. |
startDate | string | Only include posts on or after this ISO 8601 or YYYY-MM-DD value. | Empty searches from 30 days before run start. |
endDate | string | Only include posts on or before this ISO 8601 or YYYY-MM-DD value. | Empty leaves the upper bound open. |
language | string | Restrict the search to a language code such as en. | Empty means unused. |
list | string | Restrict the search to an X list ID. | Empty means unused. |
maxId | string | Only include posts at or before this X post ID. | Empty means unused. |
sinceId | string | Only include posts after this X post ID. | Empty means unused. |
minLikes | integer | Only include posts with at least this many likes. | Empty means unused. |
minReplies | integer | Only include posts with at least this many replies. | Empty means unused. |
minRetweets | integer | Only include posts with at least this many reposts. | Empty means unused. |
maxNbItemsToScrape | integer | Maximum number of dataset rows to emit. | Defaults to 0, which keeps all collected rows after filtering and ordering. |
shouldIncludePromotedPosts | boolean | Keep promoted search results in the output. | Defaults to false. |
Important
- You must provide at least one positive selector:
includePhrase,includeWords,optionalWords,mentions,fromUsers,hashtags,toUsers,quotedPostId, orlist. - At least one of
shouldIncludeOriginalPosts,shouldIncludeReposts,shouldIncludeQuotePosts, orshouldIncludeRepliesmust staytrue. - Latest mode emits newest-first results. Top mode preserves X top-search ordering.
maxNbItemsToScrape: 0keeps all collected rows after filtering and ordering.- You only provide search filters. Account rotation and proxy selection stay managed inside the actor.
🔍 Error handling
- Invalid input combinations fail before any Twitter/X requests start. This includes runs with no positive selector or runs with all four content-type switches turned off.
- If the actor cannot initialize the required Apify residential proxy path, the run fails before sending live Twitter/X traffic.
- When Twitter/X rejects or exhausts one internal account, the actor rotates to another account and retries the page when possible.
- If the first search page cannot be completed with any account, the run fails with a clear error.
- If a later page fails after rows were already collected, the run still finishes successfully with partial results and a concise status message explaining the early stop.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Other actors
- Reddit Scraper - Search Reddit posts and comments to track conversations around a topic or brand.
- Product Hunt Scraper - Turn Product Hunt launches into lead-ready rows with optional website enrichment.
- Website Emails Scraper - Turn any list of websites into one row per discovered contact email.
- Uneed Scraper - Collect Uneed launches with maker links, ranks, and optional website emails.
- Tiny Startups Scraper - Export Tiny Startups listings with promoted-listing control and optional email enrichment.
- TinySeed Scraper - Scrape the TinySeed portfolio into company rows with descriptions and optional website emails.
Made with ❤️ by Maxime Dupré