# Tweet Replies Scraper (X / Twitter) (`sfoln/x-post-replies`)

Scrape the replies to any public X (Twitter) post: text, date, author, likes, reposts, views, media, hashtags and links, one JSON row per reply. Paste post URLs or IDs; 20–200 newest replies per post. $0.70 per 1,000 replies; posts without replies are free.

- Family: Social media data
- Categories: Social media, News, Lead generation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Tweet Replies Scraper (X / Twitter) (sfoln/x-post-replies)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/x-post-replies.json
- MCP: https://mcp.apify.com?tools=sfoln/x-post-replies
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~x-post-replies/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~x-post-replies/runs

Tweet Replies Scraper (X / Twitter) gets the replies to any public X (Twitter) post as clean, flat records: reply text, timestamp, author (handle, name, followers, blue check), likes, reposts, replies, quotes, views, bookmarks, media links, hashtags, mentions and links. Paste post URLs or IDs and receive one dataset row per reply: ideal for audience sentiment, customer-feedback mining, community management, campaign monitoring and LLM training/evaluation sets.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| X reply (`x-reply`) | $0.0007 | $0.70 / 1,000 | Charged once per reply delivered to the dataset. Per-post summary rows are free. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~x-post-replies/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"posts":["1846987139428634858"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/x-post-replies"
    }
  }
}
```

Example prompt: Get the 100 newest replies to https://x.com/jack/status/20 and summarize the overall sentiment and the most common themes.

## Input

Paste X (Twitter) post URLs or ids. The Actor returns the replies to each post (newest first), one dataset record per reply, plus one summary record per post.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `posts` (required) | array | — | Post URLs or ids: x.com / twitter.com status URLs or numeric post ids, one per line. Use the first post of a thread (the upstream returns replies to thread roots). Accounts on the Apify free plan can process up to 10 posts per run. |
| `maxRepliesPerPost` | integer | `20` | Max replies per post: How many of the most recent replies to return per post (20–200). Replies are fetched in pages of ~20, so the minimum is one page. |
| `maxItems` | integer | `1000` | Max posts: Safety cap on the number of posts processed in this run. |
| `concurrency` | integer | `3` | Concurrency: Posts processed in parallel (1–5). |
| `itemTimeoutSecs` | integer | `300` | Per-post time limit (seconds): Stop paginating a post after this long; rows already delivered are kept. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified TwitterAPI.io payload to each record under `raw` (larger output). |

Example input:

```json
{
  "posts": [
    "1846987139428634858"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The input item this record corresponds to. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan (result rows are always ok) |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: Pay-per-event event charged for this record. |
| `source` | string | Source: Upstream data source (twitterapi = TwitterAPI.io). |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: code / message when status is not ok. |
| `warnings` | array | Warnings: Non-fatal notes (e.g. stopped early). |
| `recordType` | string | Row type: reply (one per reply, charged) \| post-summary (one per input post, free). |
| `parentTweetId` | string | null | Parent post id: The input post these replies belong to. |
| `id` | string | null | Post id: Numeric post (tweet) id as a string. |
| `url` | string | null | URL: Link to the post on x.com. |
| `text` | string | null | Text: Full post text. |
| `createdAt` | string | null | Created at: ISO 8601 creation time. |
| `lang` | string | null | Language: Language code detected by X. |
| `postedVia` | string | null | Posted via: Client app used to post. |
| `authorHandle` | string | null | Author handle: Author's handle without @. |
| `authorId` | string | null | Author id: Author's numeric user id. |
| `authorName` | string | null | Author name: Author display name. |
| `authorFollowers` | integer | null | Author followers: Author follower count at fetch time. |
| `authorIsBlueVerified` | boolean | null | Author blue verified: Author has a blue check. |
| `likes` | integer | null | Likes: Like count. |
| `retweets` | integer | null | Reposts: Repost (retweet) count. |
| `replies` | integer | null | Replies: Reply count. |
| `quotes` | integer | null | Quotes: Quote count. |
| `views` | integer | null | Views: View count (null when X does not report it). |
| `bookmarks` | integer | null | Bookmarks: Bookmark count. |
| `isReply` | boolean | Is reply: Post is a reply. |
| `inReplyToId` | string | null | In reply to post: Parent post id. |
| `inReplyToUserId` | string | null | In reply to user id: Parent author id. |
| `inReplyToHandle` | string | null | In reply to handle: Parent author handle. |
| `conversationId` | string | null | Conversation id: Root post id of the thread. |
| `isRetweet` | boolean | Is repost: Post is a repost. |
| `retweetedTweetId` | string | null | Reposted post id: Original post id for reposts. |
| `isQuote` | boolean | Is quote: Post quotes another post. |
| `quotedTweetId` | string | null | Quoted post id: Quoted post id. |
| `hashtags` | array | Hashtags: Hashtags without #. |
| `mentions` | array | Mentions: Mentioned handles without @. |
| `urls` | array | Links: Expanded links in the post. |
| `media` | array | Media: Photos / videos: type, url, videoUrl (best MP4), expandedUrl. |
| `mediaCount` | integer | Media count: Number of attached media items. |
| `tweetId` | string | null | Input post id: Parsed post id (summary rows). |
| `repliesReturned` | integer | null | Replies returned: Replies delivered for this post (summary rows). |
| `pagesFetched` | integer | null | Pages fetched: Upstream pages fetched (summary rows). |
| `stopReason` | string | null | Stop reason: limit \| end \| budget \| deadline \| empty_pages \| max_pages \| error (summary rows). |

Example record:

```json
{
  "input": "https://x.com/elonmusk/status/1846987139428634858",
  "recordType": "reply",
  "parentTweetId": "1846987139428634858",
  "id": "1846990000000000001",
  "url": "https://x.com/jane_dev/status/1846990000000000001",
  "text": "@elonmusk great point #space",
  "createdAt": "2024-10-18T09:30:00.000Z",
  "lang": "en",
  "postedVia": "Twitter for iPhone",
  "authorHandle": "jane_dev",
  "authorId": "1458000000000000000",
  "authorName": "Jane",
  "authorFollowers": 812,
  "authorIsBlueVerified": false,
  "likes": 4,
  "retweets": 0,
  "replies": 1,
  "quotes": 0,
  "views": 230,
  "bookmarks": 0,
  "isReply": true,
  "inReplyToId": "1846987139428634858",
  "inReplyToUserId": "44196397",
  "inReplyToHandle": "elonmusk",
  "conversationId": "1846987139428634858",
  "isRetweet": false,
  "retweetedTweetId": null,
  "isQuote": false,
  "quotedTweetId": null,
  "hashtags": [
    "space"
  ],
  "mentions": [
    "elonmusk"
  ],
  "urls": [],
  "media": [],
  "mediaCount": 0,
  "status": "ok",
  "charged": true,
  "chargedEvent": "x-reply",
  "source": "twitterapi",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Tweet Thread Context API – Replies & Author](https://www.sfoln.com/actors/x-post-context.md) (`sfoln/x-post-context`)
- [Tweet Lookup API – Tweets by ID or URL](https://www.sfoln.com/actors/x-posts-lookup.md) (`sfoln/x-posts-lookup`)
- [Twitter Mentions Scraper (X)](https://www.sfoln.com/actors/x-user-mentions.md) (`sfoln/x-user-mentions`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
