X (Twitter) Replies Scraper
Pricing
$0.01 / 1,000 replies
X (Twitter) Replies Scraper
Collect public replies from X posts you provide by URL or ID. Choose direct replies or deeper surfaced conversation coverage, then get reply text, source links, author details, engagement, dates, language, and public media references when available.
Pricing
$0.01 / 1,000 replies
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
💬 Collect public X replies from known posts
Researchers, marketers, and developers can use this X (Twitter) reply scraper with public post URLs or IDs they already have. It saves structured reply rows with reply text, source links, conversation context, available author details, engagement counts, publish time, language, and public media references. This turns known public conversations into data you can review or use in another workflow. It does not find source posts by keyword, profile, or timeline.
Use it to:
- Collect public replies from a supplied post with Twitter Replies Scraper.
- Pull reply text into a dataset with Tweet Reply Scraper.
- Save replies from X post URLs or IDs with Scrape Twitter Replies.
- Review deeper conversation coverage with Scrape X Replies.
- Keep reply links and author details together with Twitter Reply Scraper.
🧾 Reply rows with source context
Each saved row represents one public reply found for a supplied X post. The row keeps the reply ID, text, and link together with the source post. When X exposes them, it also includes parent reply and conversation details, public author fields, engagement counts, publish time, language, and media links with their types.
Only public data that X surfaces is available. The Actor does not promise every reply in a large conversation, and it does not download media files.
▶️ Run a public X reply collection
- Add one or more public X post URLs or post IDs.
- Choose Direct replies or Deeper conversation.
- Set Maximum reply records, or leave it empty to return all available replies until the source is exhausted.
- Run the Actor and open the default dataset.
The selected conversation depth applies to every supplied post in the run. Use a direct post URL or ID when you already know the source. This Actor does not discover source posts from keywords, profiles, or timelines.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
postUrlsOrIds | string[] | Lists one or more public X post URLs or post IDs. Each value identifies one source post. |
conversationDepth | string | Chooses direct replies or deeper surfaced conversation coverage for each source post. |
maxItems | integer (optional) | Stops after this many reply records. Leave it empty to return all available replies until the source is exhausted. |
Example input
This is the public input from a successful current-beta run:
{"postUrlsOrIds": ["https://x.com/apify/status/2093346503326626183"],"conversationDepth": "direct","maxItems": 5}
Use an empty Maximum reply records field when you want all available replies until the source is exhausted. The field is an optional work limit, not a fixed source maximum.
🧾 Output
Run output
| Field | Type | What it does |
|---|---|---|
dataset | string (URL) | Opens the collected reply rows in the default dataset. |
Dataset row
Every dataset row has the same shape. Optional values are omitted when X does not expose them.
| Field | Type | What it does |
|---|---|---|
id | string (required) | The stable X post ID of the reply. |
text | string (required) | The reply text exposed by X. |
url | string (optional) | A public URL for opening the reply on X. |
sourcePost | object (required) | The public source post whose replies were collected. |
sourcePost.id | string (required) | The stable X post ID of the supplied source post. |
sourcePost.url | string (optional) | A public URL for opening the supplied source post on X. |
parentReply | object (optional) | The available reply that this reply directly follows. |
parentReply.id | string (required in object) | The stable X post ID of the parent reply. |
parentReply.url | string (optional) | A public URL for opening the parent reply on X. |
parentReply.text | string (optional) | The parent reply text when X exposes it. |
conversationId | string (optional) | The stable X conversation ID for the reply when X exposes it. |
author | object (optional) | Available public profile details for the reply author. |
author.handle | string (optional) | The author's X handle. |
author.name | string (optional) | The author's displayed name. |
author.profileUrl | string (optional) | A public URL for the author's X profile. |
author.avatarUrl | string (optional) | A public URL for the author's profile image. |
author.bio | string (optional) | The author's public profile bio. |
author.followersCount | integer (optional) | The follower count shown on the author's public profile. |
author.followingCount | integer (optional) | The number of accounts shown as followed by the author. |
author.verified | boolean (optional) | Whether the author's public profile is marked as verified. |
engagement | object (optional) | Engagement counts shown for the reply by X. |
engagement.likesCount | integer (optional) | The number of likes shown for the reply. |
engagement.repliesCount | integer (optional) | The number of replies shown for the reply. |
engagement.repostsCount | integer (optional) | The number of reposts shown for the reply. |
engagement.quotesCount | integer (optional) | The number of quote posts shown for the reply. |
engagement.bookmarksCount | integer (optional) | The number of bookmarks shown for the reply. |
engagement.viewsCount | integer (optional) | The number of views shown for the reply. |
publishedAt | date-time string (optional) | The time when the reply was published on X. |
language | string (optional) | The language reported for the reply by X. |
media | object[] (optional) | Public media references attached to the reply. |
media[].url | string (required in item) | The public URL of the attached media. |
media[].type | string (required in item) | The type reported for the attached media. |
Example dataset row
This complete row comes from the successful current-beta conversation run:
{"id": "2093346571664433347","text": "@maximehugodupre How he got started shipping on Apify ↓ https://t.co/TBRE7y2Aqs","url": "https://x.com/apify/status/2093346571664433347","sourcePost": {"id": "2093346503326626183","url": "https://x.com/apify/status/2093346503326626183"},"parentReply": {"id": "2093346536486748433","url": "https://x.com/apify/status/2093346536486748433","text": "@maximehugodupre Maxime has been building since 2025 ↓ https://t.co/RhNuiMAGmk"},"conversationId": "2093346503326626183","author": {"handle": "apify","name": "Apify","profileUrl": "https://x.com/apify","avatarUrl": "https://pbs.twimg.com/profile_images/2036008913192316928/yuW3cobE_normal.png","bio": "Thousands of Actors to automate your business, get real-time web data, and integrate your apps and agents. ➡️ https://t.co/rySkh8qnak • https://t.co/PiUfLvrTQ2 • https://t.co/x4G1meKY5i","followersCount": 16149,"followingCount": 300,"verified": false},"engagement": {"likesCount": 0,"repliesCount": 1,"repostsCount": 0,"quotesCount": 0,"bookmarksCount": 0,"viewsCount": 50},"publishedAt": "2026-08-28T14:34:49.000Z","language": "en","media": [{"url": "https://pbs.twimg.com/media/HQ0Pm0vXwAA_boL.png","type": "photo"}]}
💳 Pricing
This Actor uses pay-per-event pricing. The primary event is charged when one public reply is successfully collected and saved as a dataset row. The current price is shown in Apify's Pricing tab.
Use Maximum reply records to set an optional work limit. Leaving it empty returns all available replies until the source is exhausted.
🔌 Integrations
Open the default dataset in Apify or use the Apify API and dataset export tools to read the structured reply rows in another workflow.
❓ FAQ
What if the source post is private, deleted, suspended, age-restricted, or login-only?
Only public replies that X surfaces can be returned. An unavailable source may produce no reply rows, and the Actor does not bypass access limits.
Does deeper conversation coverage return every reply?
No. It can include deeper replies that X publicly surfaces, but it does not guarantee every reply in a large conversation.
What is the difference between Direct replies and Deeper conversation?
Direct replies collect replies to the supplied post. Deeper conversation can also include surfaced replies from the conversation around that post.
What happens when Maximum reply records is empty?
The Actor continues until the source is exhausted and returns all available replies it can collect. The source, not a fixed number in the schema, controls the available total.
Can I submit more than one source post?
Yes. Add one or more public X post URLs or IDs. The selected conversation depth applies to every source post in that run.
Does this Actor find posts by keyword or profile?
No. Submit the public post URLs or IDs you want to read. The Actor does not discover source posts by keyword, profile, or timeline.
Which author and engagement fields are included?
Each row can include the public author details and engagement counts that X exposes, along with publish time and language. Missing optional values are left out.
Does the Actor download reply media?
No. It returns public media URLs and media types when X exposes them. It does not download or store the media bytes.
Can I use it for change tracking across runs?
No. The Actor collects the public replies available for the supplied posts in that run. It does not provide historical monitoring, change tracking, or cross-run alerts.
📝 Changelog
v0.0 (21-09-2026)
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Twitter Scraper finds public X posts and profiles when you need to discover source posts before collecting replies.
- Twitter Media Scraper collects direct links for public images, videos, and GIFs attached to X posts.
- Twitter Retweet Checker checks whether submitted usernames retweeted submitted public posts.
- Twitter Article Scraper extracts public long-form X Articles from known post URLs or IDs.
- Twitter Screenshot Generator saves screenshots of known public X posts for reports or archives.
Made with ❤️ by Maxime Dupré