X Tweet Engagement Scraper - Replies, Quotes & Retweeters avatar

X Tweet Engagement Scraper - Replies, Quotes & Retweeters

Pricing

from $3.20 / 1,000 x engagement items

Go to Apify Store
X Tweet Engagement Scraper - Replies, Quotes & Retweeters

X Tweet Engagement Scraper - Replies, Quotes & Retweeters

Collect replies, quote tweets and retweeters of up to 50 X (Twitter) posts in one run. Every row is tagged with engagementType and its parent tweet, and carries author followers, bio, verification and tweet metrics. Rank by relevance, recency or likes. No login or cookies.

Pricing

from $3.20 / 1,000 x engagement items

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

36

Total users

5

Monthly active users

17 days ago

Last modified

Share

What is X Tweet Engagement Scraper?

X Tweet Engagement Scraper collects the public replies, quote tweets and retweeters of X (Twitter) posts in one run, with no login or cookies. Give it up to 50 tweet URLs or IDs and get one flat dataset where every row is tagged with engagementType (reply, quote or retweet) and its parent tweet, plus the engaging account's followers, bio and verification, and tweet metrics for replies and quotes.

Use it when you want the whole response to a post in one table: the conversation (replies), the commentary (quotes) and the amplification (retweeters).

What you getFields
Row type and contextengagementType, parentTweetId, parentTweetUrl, position, rankingMode, page, scrapedAt
Reply or quote tweettweetId, tweetUrl, text, createdAt, language, conversationId, quotedTweetId, source
Engaging accountauthorUsername, authorName, authorId, authorUrl, authorVerified, authorFollowers, authorFollowing, authorBio, authorProfileImageUrl
Metrics (replies and quotes)likeCount, replyCount, retweetCount, quoteCount, viewCount, bookmarkCount
Contenthashtags, mentions, urls, mediaUrls

Retweeter rows carry the account fields only, because a retweet has no text of its own.

Best fit

  • Launch post-mortems: see who replied, who quoted and who reposted an announcement.
  • Giveaway and campaign audits: export everyone who engaged with a post.
  • Influencer discovery: sort all engagers by authorFollowers, or keep only large accounts with minAuthorFollowers.
  • Sentiment work: read reply and quote text side by side.

Which X (Twitter) Actor should I use?

This Actor is part of a family of public X (Twitter) Actors that share the same no-login approach and similar row fields. Pick the one that matches your job:

Practical scenario

A social media manager reviews a launch post the morning after. She runs the post URL with all three engagement types, rankingMode: "Likes" and minAuthorFollowers: 1000. The dataset groups cleanly by engagementType: the top replies to answer, the quote tweets that framed the launch, and the larger accounts that reposted it. She exports the sheet and flags accounts for follow-up.

Input

FieldTypeDefaultDescription
tweetUrlsarrayrequiredTweet URLs or numeric IDs, up to 50.
engagementTypesarrayall threeAny of reply, quote, retweet.
rankingModestringRelevanceOrder for replies and quotes: Relevance, Recency or Likes.
maxItemsinteger100Total rows saved and charged across all tweets and types (1–5000).
minLikesinteger0Keep only replies and quotes with at least this many likes. Retweeter rows are not affected.
minAuthorFollowersinteger0Keep only rows from accounts with at least this many followers.
maxPagesPerTypeinteger3How deep to page each engagement type (1–50).
dedupeItemsbooleantrueSkip duplicate rows across pages and tweets.
{
"tweetUrls": ["https://x.com/OpenAI/status/2065225362544726371"],
"engagementTypes": ["reply", "quote", "retweet"],
"rankingMode": "Likes",
"maxItems": 300,
"minAuthorFollowers": 1000
}

Output

One dataset row per engagement item. Sample reply row (account anonymised; other values from a real export):

{
"engagementType": "reply",
"parentTweetId": "2065225362544726371",
"parentTweetUrl": "https://x.com/OpenAI/status/2065225362544726371",
"position": 2,
"tweetId": "2087037525978132826",
"tweetUrl": "https://x.com/example_user/status/2087037525978132826",
"text": "@OpenAI Clearly forgot this",
"createdAt": "2026-08-11T04:44:56.000Z",
"language": "en",
"conversationId": "2065225362544726371",
"authorUsername": "example_user",
"authorName": "Example User",
"authorUrl": "https://x.com/example_user",
"authorVerified": false,
"authorFollowers": 480,
"authorFollowing": 1921,
"replyCount": 0,
"retweetCount": 0,
"quoteCount": 0,
"likeCount": 2,
"viewCount": 40,
"bookmarkCount": 0,
"mentions": ["openai"],
"source": "Twitter for iPhone",
"rankingMode": "Relevance",
"page": 1,
"scrapedAt": "2026-10-12T06:52:15.818Z"
}

Each run also writes OUTPUT and RUN_SUMMARY to the default key-value store with an outcome (COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT or UPSTREAM_FAILED), countsByType, rows skipped by filters and nextCursors.

Pricing

Pay per event, with Apify platform usage included. You pay the engagement-item event once for each row saved to the dataset (reply, quote or retweeter), plus the small apify-actor-start event. Rows skipped by minLikes, minAuthorFollowers or dedupe are not charged, and maxItems is a hard cap on engagement events. See the Pricing tab for current event prices.

Use with AI agents (MCP)

Actor identity: khadinakbar/x-tweet-engagement-scraper.

Get replies, quote tweets and retweeters of https://x.com/OpenAI/status/2065225362544726371 from accounts with large followings, then list the most influential reactions.

{ "tweetUrls": ["https://x.com/OpenAI/status/2065225362544726371"], "minAuthorFollowers": 5000, "maxItems": 200 }

Group rows by engagementType. Read OUTPUT.outcome and OUTPUT.countsByType first; VALID_EMPTY means the post had no matching public engagement.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/x-tweet-engagement-scraper').call({
tweetUrls: ['https://x.com/OpenAI/status/2065225362544726371'],
engagementTypes: ['quote', 'retweet'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems({ clean: true });
console.log(items.map((r) => [r.engagementType, r.authorUsername, r.authorFollowers]));

Best results

  • Pick only the engagementTypes you need so maxItems is spent on useful rows.
  • Use rankingMode: "Likes" to surface the strongest replies and quotes first.
  • Add minAuthorFollowers for influencer-focused exports; skipped rows are free.
  • For very deep single-type exports (thousands of replies), the dedicated replies or quotes Actors above add a resume cursor.

Builder's note

I built this because most engagement reviews need all three views of the same post, and stitching three exports together by hand is slow. I designed one flat schema with an engagementType column so the rows sort, filter and pivot cleanly in a spreadsheet.

Continue the workflow

FAQ

Do I need an X account or cookies?

No. The Actor reads public engagement data only.

Why do retweeter rows have no text?

A retweet repeats the original post, so the row describes the account that retweeted it.

Can I collect engagement for several posts at once?

Yes, up to 50 tweet URLs or IDs per run. parentTweetId tells you which post each row belongs to.

How are replies and quotes ordered?

By rankingMode: Relevance (X's default), Recency or Likes. Retweeters keep X's own order.

Responsible use

This Actor collects publicly available X (Twitter) engagement data. Use it in line with X's terms, privacy law and your own data policies, especially when handling personal profile data. This Actor is not affiliated with or endorsed by X Corp.