reply_extractor
for saved files with a defined result cap. Scrape Twitter replies through the
live API when an application needs current pages. Send reply authors, text,
media, and engagement counts downstream. Route rows to moderators, CRMs,
warehouses, queues, or agents.
When to use this workflow
Spreadsheet export
Use
reply_extractor plus CSV or XLSX export when analysts need reply rows.App ingestion
Use
reply_extractor plus paginated JSON results for queues, CRMs, or warehouses.Moderation queue
Use the direct replies API plus JSON Lines rows before storing, hiding, labeling, or routing replies.
Latest page
Use
GET /x/tweets/{id}/replies when you only need the newest reply page.Cost control
Estimate the target tweet first, then set
resultsLimit on create
requests to cap the run.Data you get
Reply exports include base user fields, reply tweet fields, engagement counts, and metadata when available.Reply author
User ID, username, display name, follower count, verified state, and profile image.
Reply tweet
Tweet ID, tweet text, and tweet created time.
Engagement
Likes, reposts, replies, quotes, views, and bookmarks.
Metadata
Language, source app, and conversation ID.
GET /extractions/{id} returns job, results, hasMore, and nextCursor. Each reply row includes xUserId, xUsername, xDisplayName, tweetId, tweetText, tweetCreatedAt, createdAt, and optional enrichmentData fields such as likeCount, replyCount, repostCount, quoteCount, viewCount, bookmarkCount, conversationId, lang, and source.
End-to-end reply export handoff
Store one checkpoint that carries the target tweet through estimate, job creation, JSON pagination, and file export:Estimate checkpoint
Keep
estimatedResults, creditsRequired, creditsAvailable, allowed,
and source with targetTweetId; source is replyCount when the tweet
count lookup succeeds.Job checkpoint
Store the returned job
id, status, and poll_path; do not expect reply rows in the create response.Cursor checkpoint
Store
page_cursor, next_cursor, and has_more for JSON page loops, then pass nextCursor back as after.Export checkpoint
Store the chosen CSV, JSON, or XLSX
export_paths and the normalized reply fields sent downstream.Step 1: Estimate replies and credits
CallPOST /extractions/estimate before scraping. reply_extractor requires
targetTweetId. The estimate uses the tweet’s current replyCount, even when
you plan to cap the created job.
allowed, estimatedResults, creditsRequired,
creditsAvailable, and source. A successful tweet count lookup sets source
to replyCount. Set resultsLimit on the create request
when you want a smaller sample or hard run cap; final rows and credits can be
lower than the estimate.
Step 2: Run the reply extraction
Create the job with the sametoolType, targetTweetId, and optional resultsLimit.
reply_extraction_id; keep target_tweet_id and results_limit with the audit record. Do not wait for totalResults or createdAt in the create response; those fields arrive from GET /extractions/{id}.
Step 3: Poll job status
PollGET /extractions/{id} until the job is completed or failed.
limit up to 1,000 and pass nextCursor as after until hasMore is false.
Step 4: Export CSV, JSON, or XLSX
File exports do not charge credits after job creation. Savexquik-replies.jsonl for queue replay or warehouse loads, xquik-replies.json for app ingestion, xquik-replies.csv for CRM import, and xquik-replies.xlsx for analyst handoff.
Saved export JSON Lines handoff
Use this afterformat=json when a warehouse, queue, CRM, or AI agent needs one reply per line with stable field names.
Direct replies API
UseGET /x/tweets/{id}/replies when you need a paginated API response instead of a stored extraction job.
tweets, has_next_page, and next_cursor. Pass next_cursor back as cursor to fetch the next page. It costs 1 credit per tweet returned.
Use sinceTime and untilTime as Unix timestamps in seconds when a moderation queue, CRM sync, or agent only needs replies from a specific window.
Copy-ready workflow: replies to moderation queue
Use this direct API workflow when you need the latest reply pages as JSON Lines before deciding what to store, hide, label, or route. Each row maps the API response into stable downstream fields:handoff_source, parent_tweet_id, reply_tweet_id, reply_text, reply_author_id, reply_author_username, reply_author_name, reply_author_followers, reply_author_verified, reply_author_profile_picture, created_at, in_reply_to_id, conversation_id, engagement counts, bookmark_count, is_note_tweet, tweet_source, media_urls, and cursor fields.
resultsLimit caps.
Choose the right reply output
These frequently asked questions explain how to export replies. Preserve the original tweet, author, cursor, and engagement context.How do replies differ from quote tweets?
Replies stay within conversation threads beneath the original tweet. Quote tweets create separate posts with added commentary. Store the original tweet ID with every reply row. Use the Quote Tweets API for quote tweets. Never merge both result sets without a field that identifies their relationship type.Why can public replies be missing?
X can rank replies instead of showing them chronologically. It can also place probable spam behind an extra control. Protected, deleted, and hidden replies have separate visibility rules. Review the official X reply guidance. For API exports, follow every cursor and store each confirmed page. Treat a424 replies_incomplete response as evidence against complete coverage.
How should a support team moderate reply rows?
Keep reply text, author ID, username, creation time, and engagement counts. Route uncertain rows to a human review queue. Add sentiment or spam labels with your own classifier. Xquik does not return a sentiment verdict. CSV keeps spreadsheet review user friendly. JSON preserves nested media and author fields.When should I use the live replies API?
Use the Twitter reply API when an application needs the latest cursor page. It returns reply tweets, authors, engagement counts, media, and the next cursor. Continue untilhas_next_page is false. New replies can arrive during pagination. Store each reply tweet ID and remove duplicate IDs downstream.
When should I run a saved reply extraction?
Choosereply_extractor for stored files and reviewable jobs. Estimate the parent tweet first. Then create one capped or uncapped extraction. Poll the returned job ID until completion. File conversion adds no credit charge.
Which file format should I choose?
Choose CSV for CRM imports and spreadsheet filters. Choose XLSX for analyst handoffs that require workbook tools. Choose JSON for applications that preserve nested reply fields. Convert JSON to JSON Lines when queues or warehouses need one reply per record.How do I resume an interrupted reply export?
Persist the target tweet ID, extraction ID, current cursor, next cursor, and page index. Resume a saved job throughGET /extractions/{id}. Resume live pagination with the last confirmed next_cursor. Never advance the checkpoint before storing its reply rows.
How should I validate exported replies?
Each reply contributes to the conversation under the parent tweet. Check that every row has a reply tweet ID and parent tweet ID. Preserve author IDs separately from usernames because usernames can change. Keep tweet creation times in UTC. Compare the returned rows with the estimate only for planning. The parentreplyCount can change and does not guarantee the final export size.
Cost and failure handling
Estimate is free. Areply_extractor job costs 1 credit per result. Direct GET /x/tweets/{id}/replies calls cost 1 credit per returned tweet. Available credits can reduce the returned page size. File exports do not charge credits after job creation.
Respect the read rate limit on live Twitter API pages. Use the parent reply count only for estimates. Treat returned reply rows as the source of truth.
Handle common errors before retrying:
400 invalid tweet ID
Status
400. Error invalid_tweet_id. Use a numeric tweet ID.401 unauthenticated
Status
401. Error unauthenticated. Send a valid x-api-key.402 billing or credits
Status
402. Errors no_subscription, subscription_inactive, no_credits, or insufficient_credits. Subscribe, add credits, or lower resultsLimit.429 rate limit
Status
429. Error rate_limit_exceeded. Wait for retryAfter or the Retry-After header.424 or 502 upstream unavailable
Status
424 or 502. Error x_api_unavailable. Retry with exponential backoff.Handoff checklist
Spreadsheet
Export
format=csv to xquik-replies.csv or format=xlsx to xquik-replies.xlsx.App ingestion
Export
format=json to xquik-replies.json, convert it to xquik-replies.jsonl, or paginate GET /extractions/{id}.Cost control
Set
resultsLimit on create calls when you need a smaller run.New reply alerts
Create an account or keyword monitor with
tweet.reply events.