X (Twitter) Reply Scraper | $0.15/1K Replies | Pay-Per Result
Pricing
from $0.00015 / replies
X (Twitter) Reply Scraper | $0.15/1K Replies | Pay-Per Result
Scrape X (Twitter) replies, comments, conversations & profile reply timelines for $0.15 per 1,000 rows on paid Apify plans. Bulk URLs or IDs. Nested replies. Filters run before billing. No start fee. No query fee. No X login. Built by Xquik. Not affiliated with X Corp.
Pricing
from $0.00015 / replies
Rating
5.0
(4)
Developer
Xquik
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
16 minutes ago
Last modified
Share
Scrape X (Twitter) replies for $0.15 per 1,000 delivered rows on paid Apify plans. Paste post URLs, Tweet IDs, profile URLs, or usernames. Export direct replies, nested conversations, authors, engagement, entities, and media URLs. No X login, cookies, proxy, or API key is required. Apify's pricing box remains authoritative before each run. Built by Xquik.
Filters run before dataset writes. You pay only for delivered rows.
Xquik is an independent third-party service. Not affiliated with X Corp. "Twitter" and "X" are trademarks of X Corp.
What Does This Twitter Reply Scraper Do?
X Reply Scraper collects public replies and comment conversations. It handles single posts, bulk URL lists, Tweet IDs, and user reply timelines.
Use it for sentiment analysis, customer feedback, community research, reply ranking, lead discovery, moderation review, and conversation datasets.
Competitive Reply Scraper Features
- Automatic completeness fallback detects incomplete reply pages. It then uses conversation search.
- 4 collection strategies support auto, direct replies, conversation search, and full thread context.
- Direct and nested replies preserve parent IDs, root IDs, and depth.
- Bulk inputs accept mixed post URLs, Tweet IDs, profiles, and usernames.
- Profile reply timelines collect public posts from With Replies tabs.
- 4 sort modes preserve relevance or sort latest, oldest, or most liked.
- 25+ filters cover text, author, language, engagement, media, and dates.
- Filter before billing removes unwanted rows before dataset writes.
- 3 detail levels provide compact, full, or raw source snapshots.
- CSV-friendly output flattens author fields and media URL arrays.
- Field naming controls preserve source, camelCase, or snake_case names.
- Source attribution links every result to its input target.
- Continuation cursors support controlled backfills and scheduled runs.
- Spend-safe diagnostics write exactly 1 actionable row for empty runs.
- Agent-ready schemas describe inputs, replies, reports, and cursors.
- No credentials required avoids X passwords, cookies, and session tokens.
Quick Start
The initial form targets a verified public conversation. It returns up to 25 full, flat rows across at most 10 pages. Auto mode recovers from empty direct reply results. All reply depths, deduplication, and source attribution stay on.
Scrape Replies From a Post URL
{"startUrls": [{ "url": "https://x.com/OpenAI/status/2082577277246972300" }],"maxItems": 100}
Scrape Replies From Tweet IDs
{"tweetIds": ["2082577277246972300", "2083148725367783580"],"maxItemsPerTarget": 100,"maxItems": 200}
Collect the Full Nested Conversation
{"tweetIds": ["2082577277246972300"],"collectionStrategy": "conversationSearch","scope": "all","maxDepth": 5,"sort": "oldest","maxItems": 500}
Scrape a User's Reply Timeline
{ "usernames": ["OpenAI", "apify"], "maxItemsPerTarget": 100, "maxItems": 200 }
Filter Replies Before Billing
{"tweetIds": ["2082577277246972300"],"anyWords": ["API", "agent", "developer"],"excludeWords": ["airdrop", "giveaway"],"lang": "en","minLikes": 2,"minViews": 100,"verifiedOnly": true,"maxItems": 200}
Export Flat CSV-Friendly Rows
{"tweetIds": ["2082577277246972300"],"outputMode": "full","outputPreset": "flat","fieldStyle": "camelCase","maxItems": 100}
Sample values are illustrative. Responses reflect source data at run time.
AI Agent & MCP Readiness
Run this Actor through Apify MCP, API clients, x402, or Skyfire.
- Limited permissions protect unrelated Apify account data.
- Pay-per-event billing supports deterministic result-based costs.
- Standby mode stays disabled for agentic-payment compatibility.
- Typed schemas expose replies, run reports, and continuation cursors.
- Bounded defaults prevent accidental unbounded agent runs.
- Stable
camelCaseandsnake_casemodes simplify tool chaining. - Diagnostic rows include a status, message, and recovery action.
- Run reports include exact outcomes, stop reasons, and charge estimates.
Use this bounded input for autonomous workflows:
{"tweetIds": ["2082577277246972300"],"collectionStrategy": "auto","scope": "all","outputMode": "compact","fieldStyle": "camelCase","maxItems": 100}
Agents should process outputs in this order:
- Read
repliesfrom the default dataset. - Check
resultTypebefore using a row as reply data. - Follow
nextActionwhen a diagnostic row appears. - Inspect
runReport.results.completionReasonafter every run. - Reuse
continuationCursorsfor intentionally page-limited runs.
Set maxItems on every autonomous call. Also set Apify's maximum run cost. The
smaller limit controls the billed result count.
This design satisfies Apify's technical eligibility requirements for agentic
payments. Apify controls final allowsAgenticUsers availability.
Reply Targets & Input Aliases
Use the primary fields below.
| Input | Purpose |
|---|---|
startUrls | Mixed X post and profile URLs |
tweetIds | Numeric post IDs |
usernames | Public profile reply timelines |
profileUrls | Profile URL alias |
tweetUrls | Tweet URL alias |
postUrls | Post URL alias |
screenname | Single username alias |
startCursor | Resume one target from a saved source cursor |
Compatibility aliases accept common competitor inputs:
- URL aliases:
urls,tweetUrls,postUrls,profileUrls - ID aliases:
conversationIds,postIds,ids,tweetId,id - Username aliases:
twitterHandles,screenname - Global limit aliases:
maxResults,max_results,resultsLimit,maxReplies - Per-target aliases:
maxRepliesPerTweet,maxCommentsPerPost - Search alias:
useSearch - Nested reply aliases:
includeNestedReplies,includeRepliesOfReplies - Original post alias:
includeOriginalTweet - Output aliases:
outputVariant,includeRaw
Malformed or unsupported targets do not fail the Actor. The run returns an actionable diagnostic when no valid targets remain.
Coverage Strategies
Auto Complete
Use collectionStrategy: "auto" for most jobs. The Actor starts with the direct
reply route. If X reports incomplete coverage, it switches to conversation_id
search.
Filtered auto runs use conversation search immediately. This avoids incomplete direct pages when filters hide source rows.
Direct Reply Endpoint
Use collectionStrategy: "replies" to force X's reply timeline. This keeps the
source ordering and supports cursors.
Conversation Search
Use collectionStrategy: "conversationSearch" for broad conversation coverage.
The Actor searches by conversation_id:<Tweet ID>.
Full Thread Context
Use collectionStrategy: "thread" to read the source conversation context. Set
includeOriginalPost: true to keep the root post as depth 0.
Direct & Nested Reply Controls
Use scope to choose the result shape.
| Value | Result |
|---|---|
direct | Keep depth 1 replies |
nested | Keep replies to replies at depth 2+ |
all | Keep every available direct and nested reply |
Use maxDepth to bound nesting. Parent links may be absent when X omits a
conversation ancestor. The Actor preserves the best available depth.
Sorting
Use sort with these values:
relevancepreserves X source orderlatestsorts newest firstoldestsorts oldest firstlikessorts highest like count first
The sortBy and queryType compatibility aliases remain supported.
Reply Filters
All supported filters run before dataset writes.
Text & Entity Filters
| Input | Behavior |
|---|---|
exactPhrase | Require one exact phrase |
anyWords | Require at least 1 word or phrase |
excludeWords | Remove matching words or phrases |
keywordInclude | Alias merged with anyWords |
keywordExclude | Alias merged with excludeWords |
hashtags | Require at least 1 hashtag |
cashtags | Require at least 1 cashtag |
mentioning | Require an @mention |
Author & Language Filters
| Input | Behavior |
|---|---|
fromUser | Keep one reply author |
toUser | Keep replies addressed to one username |
lang | Keep one X language code |
verifiedOnly | Require any public verification signal |
blueVerifiedOnly | Require X Premium verification |
excludeOriginalAuthor | Remove source-author self-replies |
Engagement Filters
Use minLikes, minReplies, minRetweets, minQuotes, minViews, and
minBookmarks. The minFaves alias maps to minLikes.
Media & Time Filters
- Set
hasMediaOnly: truefor replies with public media. - Set
mediaTypetoany,image,video,gif, orlink. - Set
sincefor an inclusive start timestamp. - Set
untilfor an exclusive end timestamp. - Use
sinceTimeanduntilTimeas compatibility aliases.
Limits, Billing & Continuation
maxItems limits delivered rows across the run. maxItemsPerTarget limits each
post or profile. maxPagesPerTarget bounds source pagination.
The Actor removes duplicates before billing. Set dedupeAcrossTargets: false to
preserve duplicate rows from different targets.
After a page-limited run, read next-cursors from the default key-value store.
Pass one cursor through startCursor to continue that target.
Output Fields
Every full reply row can include these core fields:
| Field | Description |
|---|---|
id | Reply ID |
text | Reply text |
fullText | Long-form reply text |
createdAt | Reply timestamp |
lang | X language code |
url | Direct reply URL |
conversationId | X conversation ID |
inReplyToId | Immediate parent ID |
inReplyToUserId | Parent author ID |
inReplyToUsername | Parent username |
likeCount | Likes |
replyCount | Child replies |
retweetCount | Reposts |
quoteCount | Quotes |
viewCount | Views |
bookmarkCount | Bookmarks |
author | Available public author metadata |
media | Images, videos, GIFs, and variants |
entities | Hashtags, cashtags, mentions, and URLs |
quoted_tweet | Quoted post when available |
retweeted_tweet | Reposted post when available |
Full rows also preserve available source metadata. This includes isNoteTweet,
isReply, isLimitedReply, isQuoteStatus, source, type,
displayTextRange, contentDisclosure, article, bookmarked, card,
communityNote, edit, favorited, grokAnalysisButton, grokImageEditable,
isTranslatable, noteTweet, place, possiblySensitive,
possiblySensitiveEditable, previousCounts, quickPromoteEligibility,
retweeted, and viewState.
Conversation fields make flat rows reconstructable:
rootTweetIdparentReplyIddepthisDirectReplyisOriginalPostsourceTweetIdsourceTargetsourceUrlresultTypeschemaVersion_schema_version
Author Metadata
The nested author object preserves available public fields. These can include
id, username, name, description, followers, following, verified,
isBlueVerified, isVerified, verifiedType, location, url, createdAt,
profilePicture, coverPicture, profileBannerUrl, statusesCount,
mediaCount, favouritesCount, protected, canDm, hasCustomTimelines,
isTranslator, withheldInCountries, possiblySensitive, pinnedTweetIds,
isAutomated, automatedBy, unavailable, unavailableReason,
affiliatesHighlightedLabel, businessAccountAffiliatesCount, canMediaTag,
creatorSubscriptionsCount, followRequestSent, hasGraduatedAccess,
hasHiddenSubscriptionsOnProfile, highlightsInfo, identityVerification,
isProfileTranslatable, notificationsEnabled, parodyCommentaryFanLabel,
profileDescriptionLanguage, profileImageShape, profileInterstitialType,
profileSortEnabled, profileTranslatorType, superFollowEligible,
superFollowedBy, superFollowing, communityRole, viewerFollowedBy,
viewerFollowing, viewerBlockedBy, viewerBlocking, viewerLiveFollowing,
viewerMuting, and profile_bio.
Flat output adds authorId, authorUsername, authorName, authorFollowers,
authorFollowing, and authorVerified.
Media Metadata
Media objects can include id, type, mediaUrl, url, displayUrl,
expandedUrl, altText, width, height, durationMillis, sizes,
videoVariants, aspectRatio, mediaKey, allowDownload,
availabilityStatus, faceRects, focusRects, indices, monetizable, and
availability fields.
Flat output adds mediaUrls.
Output Modes
Compact
Set outputMode: "compact" for analysis-ready fields. This reduces dataset
width while preserving text, conversation, author, engagement, and media.
Full
Set outputMode: "full" to preserve every supported public field.
Raw
Set outputMode: "raw" to add a sanitized source snapshot under raw.
Nested or Flat
The default flat layout keeps nested objects and adds table-ready author
fields. Set outputPreset: "nested" to omit the added flat fields.
Field Naming
Set fieldStyle to source, camelCase, or snake_case. The Actor avoids
overwriting colliding source keys.
Diagnostic Rows
Every started run writes at least 1 default dataset row unless its charge limit blocks all rows.
Successful data rows use resultType: "reply". Non-data exits write exactly 1
row with resultType: "diagnostic" and an actionable fix.
Every outcome writes run-report, including no-input and invalid-input exits.
Possible statuses include:
no-inputinvalid-inputreplies-incompletezero-outputabortedunexpected-error
Filter diagnostics with:
const replies = dataset.filter((row) => row.resultType !== 'diagnostic');
How Much Does It Cost?
On paid Apify plans, Xquik's intended listing price is
$0.15 per 1,000
delivered rows. This equals $0.00015 per row. The live
Apify pricing box is authoritative before every run.
The free plan can use a separate anti-abuse tier. Check the live pricing box for your plan. Do not use free-tier anti-abuse pricing for paid-plan cost comparisons.
Xquik charges only default dataset rows. No separate start, URL, query, pagination, filter, or proxy fee applies.
Each data row and the single possible diagnostic row is billable. The run report separates delivered rows from the estimated row charge.
Apify platform usage follows the pricing box shown for your account.
Public Task Examples
Choose from 50 public tasks with bounded inputs and useful dataset views. Each task stays editable before you run it.
Examples cover:
- reply sentiment datasets
- customer feedback collection
- nested thread reconstruction
- most-liked reply ranking
- launch and event reaction research
- verified-author reply discovery
- media reply collection
- multilingual conversation research
- public profile reply timelines
- CSV and RAG exports
- continuation cursor workflows
Agent-focused examples include:
- Collect replies for AI agents
- Build an X reply RAG dataset
- Archive replies for LLM processing
- Extract reply leads for CRM
API Example
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_API_TOKEN>' });const run = await client.actor('xquik/x-reply-scraper').call({tweetIds: ['2082577277246972300'],collectionStrategy: 'auto',scope: 'all',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("xquik/x-reply-scraper").call(run_input={"tweetIds": ["2082577277246972300"],"collectionStrategy": "auto","scope": "all","maxItems": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
cURL
curl "https://api.apify.com/v2/acts/xquik~x-reply-scraper/run-sync-get-dataset-items" \-X POST \-H "Authorization: Bearer <APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"tweetIds":["2082577277246972300"],"maxItems":100}'
Automation & Integrations
Run the Actor through Apify schedules, webhooks, API clients, Make, Zapier, n8n, Google Sheets, cloud storage, or the Apify MCP server.
Eligible agent workflows can also use x402 or Skyfire.
Xquik also provides 47 dashboard tools and 128 REST operations. This Actor remains a focused reply collection surface.
Responsible Use
Collect only public data. Follow applicable laws and platform rules.
Reply datasets can contain personal data. Choose a lawful purpose. Minimize retention. Protect exports. Honor deletion and access requests where required.
The Actor does not bypass protected accounts. It does not request customer X passwords, session cookies, or authentication tokens.
FAQ
Do I Need an X Login or API Key?
No. Do not paste X credentials into Actor input.
Can It Scrape Nested Replies?
Yes. Set scope: "all" or scope: "nested". Use maxDepth to bound depth.
Why Did Auto Mode Switch to Search?
X can report an incomplete direct reply page. Auto mode then uses conversation search.
Can I Scrape a User's Replies?
Yes. Pass usernames, twitterHandles, screenname, or profile URLs.
Can I Sort by Likes or Date?
Yes. Use likes, latest, oldest, or relevance.
Can I Exclude Spam Before Billing?
Yes. Use excludeWords, author filters, engagement limits, and media filters.
Can I Resume a Large Conversation?
Yes. Read next-cursors, then pass one cursor through startCursor.
Does It Download Media Files?
No. It returns public media URLs and metadata. This controls storage costs.
Does It Run Custom JavaScript From Input?
No. The Actor does not execute untrusted mapping code.
What Happens When No Reply Matches?
The Actor writes exactly 1 diagnostic row with a suggested fix.
Which Export Formats Work?
Use Apify's JSON, JSONL, CSV, Excel, XML, RSS, or HTML exports.
Where Can I Report an Issue?
Use the Actor Issues tab. Include the public target, input, and run ID. Never include passwords, tokens, cookies, or private data.