X Tweet Engagement Scraper - Replies, Quotes & Retweets
Pricing
from $6.00 / 1,000 x engagement items
X Tweet Engagement Scraper - Replies, Quotes & Retweets
Scrape all engagement on any X (Twitter) post — replies, quote tweets, and retweeters — with author, follower & metric fields. No cookies. MCP-ready.
Pricing
from $6.00 / 1,000 x engagement items
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
19
Total users
5
Monthly active users
5 days ago
Last modified
Categories
Share
This Apify Actor is built for analysts, operators, and AI agents that start from a specific X post and need its public engagement in one run. It accepts tweet URLs or numeric tweet IDs and returns one dataset record per engagement item, with each row meaning one reply, one quote tweet, or one retweeter. The most useful fields are engagementType, the parent tweet reference, engagement text when present, author identity and profile fields, engagement counts, ranking mode, provider provenance, and scrape timestamps. The outcome is a normalized dataset for review, export, or downstream automation through Apify and Apify MCP.
Best fit and connected workflows
Use this Actor when your workflow begins with a known X post and you want the public conversation and amplification around that post in a single structured result set.
It fits well for:
- reply review, when you want the public responses under one tweet
- quote analysis, when you want commentary attached to the source post
- amplification review, when you want the retweeter list and author profile fields
- agent workflows in Apify MCP, where one tool call can return structured engagement records
X Tweet Engagement Scraper - Replies, Quotes & Retweets is designed as a focused workflow.
Practical scenario
Maya, a social media manager, has the URL of a launch tweet and wants to review public engagement around it. She supplies the tweet URL, keeps all engagement types enabled, and leaves ranking on Relevance. The dataset returns rows with engagementType, authorUsername, authorName, authorFollowers, authorVerified, text, and likeCount for replies and quotes, plus author-only rows for retweeters. Maya can sort by author size, read the commentary, and decide which accounts to flag for follow-up.
Input
This Actor accepts an array of tweet URLs or numeric IDs. One input can include up to 50 tweet targets.
| Field | Type | Required | Description |
|---|---|---|---|
tweetUrls | array | Yes | Tweet URLs or numeric IDs for the X posts whose engagement you want to collect. Default example: https://x.com/OpenAI/status/2065225362544726371. |
engagementTypes | array | No | Choose any of reply, quote, and retweet. Defaults to all three. Retweet rows contain author fields only because a retweet carries no text. |
rankingMode | string | No | Reply and quote ranking: Relevance, Recency, or Likes. Defaults to Relevance. |
maxItems | integer | No | Caps total dataset rows across all tweets and types. Defaults to 100 and supports up to 5000. |
maxPagesPerType | integer | No | Pagination depth per engagement type per tweet. Defaults to 3 and supports up to 50. |
includeRaw | boolean | No | Adds the raw provider object to each dataset row for debugging or custom parsing. |
dedupeItems | boolean | No | Skips duplicate engagement across pages and tweets. Defaults to true. |
Valid focused JSON example:
{"tweetUrls": ["https://x.com/OpenAI/status/2065225362544726371"],"engagementTypes": ["reply","quote","retweet"],"rankingMode": "Relevance","maxItems": 20,"maxPagesPerType": 3,"includeRaw": false,"dedupeItems": true}
Output
The main output is a dataset of X engagement records. Each row is a flat object with a parent tweet reference, an engagement type discriminator, author and post fields, and execution provenance.
| Field | Type | Description |
|---|---|---|
engagementType | string | reply, quote, or retweet. |
parentTweetId | string | Tweet ID supplied as input. |
parentTweetUrl | string | Canonical URL for the tweet whose engagement was scraped. |
position | integer | 1-based position within the run after normalization and dedupe. |
tweetId | string | X status ID of the reply or quote tweet. Null for retweets. |
tweetUrl | string | Canonical URL of the reply or quote tweet. Null for retweets. |
text | string | Reply or quote text, including expanded long-form note text when available. Null for retweets. |
createdAt | string | ISO timestamp when the reply or quote tweet was posted. |
language | string | Language code returned by X. |
conversationId | string | Conversation root ID returned by X. |
quotedTweetId | string | For quote tweets, the ID of the tweet being quoted. |
authorUsername | string | Engaging account's X handle without @. |
authorName | string | Engaging account's display name. |
authorId | string | Numeric X user ID of the engaging account. |
authorUrl | string | Canonical X profile URL of the engaging account. |
authorVerified | boolean | Whether the engaging account is verified when available. |
authorFollowers | integer | Follower count of the engaging account. |
authorFollowing | integer | Following count of the engaging account. |
authorBio | string | Public profile bio of the engaging account. |
authorProfileImageUrl | string | Profile image URL of the engaging account. |
replyCount | integer | Reply count attached to the engagement item when available. |
retweetCount | integer | Retweet count attached to the engagement item when available. |
quoteCount | integer | Quote count attached to the engagement item when available. |
likeCount | integer | Like count attached to the engagement item when available. |
viewCount | integer | View count attached to the engagement item when available. |
bookmarkCount | integer | Bookmark count attached to the engagement item when available. |
hashtags | array[string] | Hashtags parsed from the engagement item. |
mentions | array[string] | Mentions parsed from the engagement item. |
urls | array[string] | URLs parsed from the engagement item. |
mediaUrls | array[string] | Media URLs parsed from the engagement item. |
source | string | Posting client or app source when available. |
rankingMode | string | Ranking requested for replies and quotes in this run. |
provider | string | Provider used for the result. |
providerPage | integer | Provider page number within this run. |
scrapedAt | string | ISO timestamp when the record was emitted. |
raw | object | Raw provider item, included only when includeRaw is enabled. |
Illustrative JSON record:
{"engagementType": "quote","parentTweetId": "2065225362544726371","parentTweetUrl": "https://x.com/OpenAI/status/2065225362544726371","position": 1,"tweetId": "2065226000000000000","tweetUrl": "https://x.com/example/status/2065226000000000000","text": "A short quote tweet with commentary.","createdAt": "2026-01-15T12:34:56.000Z","language": "en","conversationId": "2065225362544726371","quotedTweetId": "2065225362544726371","authorUsername": "example","authorName": "Example User","authorId": "123456789","authorUrl": "https://x.com/example","authorVerified": true,"authorFollowers": 12000,"authorFollowing": 340,"authorBio": "Public profile bio","authorProfileImageUrl": "https://pbs.twimg.com/profile_images/example.jpg","replyCount": 4,"retweetCount": 18,"quoteCount": 2,"likeCount": 31,"viewCount": 900,"bookmarkCount": 1,"hashtags": ["example"],"mentions": ["openai"],"urls": ["https://example.com"],"mediaUrls": ["https://pbs.twimg.com/media/example.jpg"],"source": "X for iPhone","rankingMode": "Relevance","provider": "SociaVault","providerPage": 1,"scrapedAt": "2026-01-15T12:35:10.000Z"}
How it works
The Actor uses a server-side public-data provider, so it runs without X login or cookies from you. It fetches engagement for each supplied tweet, paginates each engagement type with provider cursors up to maxPagesPerType, normalizes the provider payload into the flat dataset schema, deduplicates rows when enabled, and writes the final records to the Apify dataset.
Replies and quote tweets are returned as tweet objects with text and metrics. Retweets are returned as user objects with author fields only, because a retweet carries no text. Run summary data is written to the key-value store under OUTPUT and RUN_SUMMARY.
Pricing
X Tweet Engagement Scraper - Replies, Quotes & Retweets uses Pay per event pricing together with Apify platform usage. The primary charged event is one X engagement item for each public engagement row saved to the dataset. There is also a one-time Actor start event. Apify platform usage is billed separately according to the live execution settings and platform usage model.
A simple example written in words: if a run saves one hundred engagement rows, the event-based part of the execution includes one hundred X engagement item events, plus the single start event. For current pricing details and the live cost view for this Actor, check the Pricing tab on the Actor page.
Use with AI agents (MCP)
This Actor is available through Apify MCP as a tool for retrieving structured X engagement data from a specific tweet target. The exact Actor identity is khadinakbar/x-tweet-engagement-scraper.
Tool description: given tweet URLs or IDs, it returns normalized public engagement records for replies, quote tweets, and retweeters, with provenance fields for downstream reasoning.
A realistic MCP prompt:
Scrape public engagement for this X post and return replies, quote tweets, and retweeters as structured records. Keep the output normalized, include author fields, and use the default relevance ranking for replies and quotes.
Output interpretation:
engagementTyperoutes each row to reply, quote, or retweet handlingparentTweetUrlandparentTweetIdpreserve provenanceauthorUsername,authorName, andauthorFollowersprovide author contexttextand metrics are present for replies and quotesprovider,providerPage, andscrapedAthelp trace where a row came from
Scope and pagination guidance:
tweetUrlskeeps the tool focused on a known postmaxPagesPerTypesets the depth per engagement typemaxItemssets the total row cap and the billing cap for saved engagement items
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const input = {tweetUrls: ['https://x.com/OpenAI/status/2065225362544726371'],engagementTypes: ['reply', 'quote', 'retweet'],rankingMode: 'Relevance',maxItems: 20,maxPagesPerType: 3,includeRaw: false,dedupeItems: true,};const run = await client.actor('khadinakbar/x-tweet-engagement-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Loaded ${items.length} dataset items`);console.log(items);
Best results and outcome guidance
Use one tweet target when you want a clear engagement snapshot for a single post. Use multiple tweet URLs when you want to compare engagement across a small set of posts in one run. Keep engagementTypes aligned with the analysis goal: replies for discussion, quotes for commentary, retweets for amplification, or all three for a full engagement view. Raise maxPagesPerType when you want deeper public pages per type, and use maxItems to set the total row cap.
Continue the workflow
- Then use 🐦 X (Twitter) Tweet Scraper | Search, Hashtags, Profiles & URLs to extend X Tweet Engagement Scraper - Replies, Quotes & Retweets research with a complementary content contract.
- Then use X Twitter Profile Scraper - Public Profile Details to extend X Tweet Engagement Scraper - Replies, Quotes & Retweets research with a complementary enrichment contract.
Design note
I found that retweet rows are schema-distinct from reply and quote rows: tweetId, tweetUrl, and text are described as null for retweets, while the author fields remain available. That contract detail makes engagementType especially important for downstream parsing.
FAQ
Can this Actor collect engagement for more than one X post?
Yes. Pass up to 50 tweet URLs or IDs in tweetUrls, and the Actor will collect engagement for each supplied post in one run.
Which engagement types are available?
The input supports reply, quote, and retweet. The default input collects all three.
How are replies and quotes ordered?
Use rankingMode to choose Relevance, Recency, or Likes for replies and quotes. The retweeter list is unaffected by that setting.
What if I only need replies?
The current workflow is focused on engagement around a post. A replies-only workflow is referenced in the broader actor family in the current README history.
What if I need tweet content rather than engagement?
The current README history references a tweet-content workflow for URL or ID-based tweet retrieval.
What if I need profile or follower workflows?
The current README history references profile and follower workflows for account-centric collection.
Responsible use
This Actor processes publicly available X data through a third-party public-data provider. Use the output in a way that respects X terms, applicable privacy rules, and local data-protection requirements. When working with personal data, keep your use aligned with your lawful basis, retention policy, and the context in which the data was collected.