X (Twitter) Replies Scraper - Tweet Replies, No Login avatar

X (Twitter) Replies Scraper - Tweet Replies, No Login

Pricing

from $3.50 / 1,000 x/twitter reply scrapeds

Go to Apify Store
X (Twitter) Replies Scraper - Tweet Replies, No Login

X (Twitter) Replies Scraper - Tweet Replies, No Login

Export public replies to X (Twitter) posts from tweet URLs or IDs. Each reply row has text, author profile (followers, bio, verified), likes, views, bookmarks, language and conversation IDs. Sort by relevance, recency or likes and resume big exports with a saved cursor. No login or cookies.

Pricing

from $3.50 / 1,000 x/twitter reply scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

22

Total users

4

Monthly active users

14 days ago

Last modified

Share

What is X (Twitter) Replies Scraper?

X (Twitter) Replies Scraper exports the public replies to any X (Twitter) post, with no login or cookies. Give it tweet URLs or numeric tweet IDs (up to 50 per run) and get one dataset row per reply: reply text, time, language, the replying account (followers, bio, verified), and likes, views, retweets, quotes and bookmarks.

Sort replies by Relevance, Recency or Likes, keep only replies with enough likes or in one language before you are charged, and resume large exports with the cursor saved in RUN_SUMMARY.nextCursors.

What you getFields
ReplyreplyId, replyUrl, text, createdAt, language, conversationId, inReplyToTweetId, source
Replying accountauthorUsername, authorName, authorId, authorUrl, authorVerified, authorFollowers, authorFollowing, authorBio, authorProfileImageUrl
EngagementlikeCount, replyCount, retweetCount, quoteCount, viewCount, bookmarkCount
Contenthashtags, mentions, urls, mediaUrls
ContextparentTweetId, parentTweetUrl, rankingMode, position, page, scrapedAt

Best fit

  • Launch and campaign reviews: read what people replied to an announcement.
  • Brand monitoring: pull the newest replies to your posts every day with rankingMode: "Recency".
  • Social listening and sentiment: export reply text with language and author reach for analysis.
  • Lead research: find engaged accounts with large followings in a conversation.
  • AI agents: one call returns flat reply rows ready for summarising.

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 community manager wants the most-liked replies to a product announcement before the weekly review. She enters the post URL, sets rankingMode: "Likes", minLikes: 5 and maxReplies: 200. Low-signal replies are skipped and not charged. She sorts the export by likeCount, reads the top themes in text, and checks authorFollowers to spot influential voices.

Input

FieldTypeDefaultDescription
tweetUrlsarrayrequiredTweet URLs (https://x.com/OpenAI/status/2065225362544726371) or numeric tweet IDs, up to 50.
rankingModestringRelevanceRelevance, Recency (newest first) or Likes (most liked first).
maxRepliesinteger100Total reply rows saved and charged across all tweets (1–5000).
minLikesinteger0Keep only replies with at least this many likes. Skipped replies are not charged.
languagestringemptyKeep only replies in one language, as a two-letter code such as en.
maxPagesPerTweetinteger10How deep to follow each conversation (1–100).
startCursorstringemptyContinue a previous run from RUN_SUMMARY.nextCursors.
dedupeRepliesbooleantrueSkip duplicate replies across pages and tweets.
{
"tweetUrls": ["https://x.com/OpenAI/status/2065225362544726371"],
"rankingMode": "Likes",
"maxReplies": 200,
"minLikes": 5,
"language": "en"
}

Output

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

{
"parentTweetId": "2065225362544726371",
"parentTweetUrl": "https://x.com/OpenAI/status/2065225362544726371",
"rankingMode": "Relevance",
"position": 1,
"replyId": "2099602156332429431",
"replyUrl": "https://x.com/example_user/status/2099602156332429431",
"text": "@OpenAI Please also enable the ability to buy a usage reset.",
"createdAt": "2026-09-14T20:52:17.000Z",
"language": "en",
"conversationId": "2065225362544726371",
"authorUsername": "example_user",
"authorName": "Example User",
"authorUrl": "https://x.com/example_user",
"authorVerified": false,
"authorFollowers": 80,
"authorFollowing": 26,
"replyCount": 0,
"retweetCount": 0,
"quoteCount": 0,
"likeCount": 2,
"viewCount": 34,
"bookmarkCount": 0,
"mentions": ["openai"],
"source": "Twitter for iPhone",
"page": 1,
"scrapedAt": "2026-10-12T06:53:21.824Z"
}

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), counts, replies skipped by filters, and nextCursors for resuming.

Pricing

Pay per event, with Apify platform usage included. You pay the x-reply-scraped event once for each reply saved to the dataset, plus the small apify-actor-start event. Replies skipped by minLikes, language or dedupe are not charged, and maxReplies is a hard cap on reply events. See the Pricing tab for current event prices.

Use with AI agents (MCP)

Actor identity: khadinakbar/x-twitter-replies-scraper.

Get the 100 most-liked English replies to https://x.com/OpenAI/status/2065225362544726371 and summarise the main requests people make.

{ "tweetUrls": ["https://x.com/OpenAI/status/2065225362544726371"], "rankingMode": "Likes", "maxReplies": 100, "language": "en" }

Read OUTPUT.outcome first. VALID_EMPTY means the post has no matching public replies; PARTIAL means some rows were saved and RUN_SUMMARY.nextCursors lets you continue. replyUrl links each row back to X.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/x-twitter-replies-scraper').call({
tweetUrls: ['https://x.com/OpenAI/status/2065225362544726371'],
rankingMode: 'Recency',
maxReplies: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems({ clean: true });
console.log(items.map((r) => [r.authorUsername, r.likeCount, r.text]));

Best results

  • Use Likes for the strongest replies, Recency for monitoring and Relevance for X's default order.
  • Start with maxReplies: 50 to check a conversation, then raise it.
  • Add minLikes and language to pay only for replies you will use.
  • For very large threads, save RUN_SUMMARY.nextCursors and pass it as startCursor in the next run with the same tweet and ranking mode.

Builder's note

I built this for workflows that start from one known post. I found that most buyers want a few hundred strong replies, not every one-word reaction, so I added the like and language filters before billing: you pay only for rows that pass.

FAQ

Do I need an X account or cookies?

No. The Actor reads public reply data only.

Why did I get fewer replies than the post shows?

X hides some replies (for example from limited or deleted accounts) from public view. The Actor saves the public replies it can read; raise maxPagesPerTweet to follow the conversation deeper.

Can I continue a big export?

Yes. Copy the cursor from RUN_SUMMARY.nextCursors into startCursor and run again with the same tweet and ranking mode.

Does it return nested replies?

It follows the reply conversation of each post. Use inReplyToTweetId and conversationId to rebuild threads.

Responsible use

This Actor collects publicly available X (Twitter) replies. Use the data 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.