# Threads Comments & Replies Scraper & API: Any Post (`quarra/threads-replies-scraper`) Actor

Every reply Threads shows for public posts, without login: text, likes, replies, author, date, media, nested replies if you want, and how many you got against the reply counter. Paste post links or share links; new replies only on a schedule.

- **URL**: https://apify.com/quarra/threads-replies-scraper.md
- **Developed by:** [Quarra Labs](https://apify.com/quarra) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 replies

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Threads Replies Scraper: Comments of Any Post

Paste Threads post links and get their replies: text, author, likes, replies, reposts, date, media, language, and the
post they answer. Nested replies if you want them. No login, no cookies, no account. Export as JSON, CSV or Excel, or
read it through the Apify API.

- **All the replies Threads serves**, newest first or in the site's order, with no cap unless you set one: 1,805
  replies to a large post in 87 seconds on Apify in our tests.
- **Coverage you can check**: for each post, the run says how many replies it got against the counter Threads shows
  (Threads hides some replies from logged-out visitors).
- **Nested replies**: replies to replies, with their depth.
- **Only new replies on a schedule**: name a watch (`watchName`) and each scheduled run returns and charges only the
  replies it has not delivered before.

**$2.50 per 1,000 replies**, less on the Scale and Business plans, plus $0.005 per run. Posts that fail, duplicates
and replies removed by your filters are not charged.

### Quick start

1. Paste post links into **Post URLs, share links or codes**, one per line.
2. Set **Max replies per post** (0 = all the replies Threads serves).
3. Click **Start** and read the replies in the run's **Output** tab.

Through the API:

```json
{
  "postUrls": ["https://www.threads.com/@zuck/post/Dd1MqfcG0aH"],
  "maxItems": 0,
  "replySort": "RECENT",
  "includeNestedReplies": true
}
```

Like any Apify Actor, it can be scheduled, connected to webhooks, Make, Zapier, n8n, or called by AI agents through
Apify's MCP server.

### Output

One record per reply. A real reply (October 11, 2026, some fields left out):

```json
{
  "type": "post",
  "id": "4005673190625979762",
  "code": "DeXAos9kS1y",
  "url": "https://www.threads.com/@katdombrovska/post/DeXAos9kS1y",
  "author": { "username": "katdombrovska", "fullName": "Kate Dombrovska", "isVerified": false },
  "text": "Hundreds of millions of businesses and half of them just want the phone to stop ringing during dinner.",
  "createdAt": "2026-10-11T15:44:36Z",
  "likeCount": 0,
  "replyCount": 0,
  "repostCount": 0,
  "isReply": true,
  "replyToUsername": "zuck",
  "depth": 1,
  "languageGuess": "en",
  "source": "postReply",
  "parentPost": {
    "id": "3996155940894885511",
    "url": "https://www.threads.com/@zuck/post/Dd1MqfcG0aH",
    "text": "We believe superintelligence will create significant new opportunities for all people and businesses. …",
    "likeCount": 2706,
    "replyCount": 2637
  },
  "input": "https://www.threads.com/@zuck/post/Dd1MqfcG0aH",
  "scrapedAt": "2026-10-11T18:51:40Z"
}
```

| Field | What it holds |
|---|---|
| `text`, `hashtags`, `mentions`, `links` | the reply, and what it tags or links to |
| `likeCount`, `replyCount`, `repostCount`, `quoteCount` | the counters Threads shows on the reply |
| `replyToUsername`, `depth` | who it answers, and 1 for a direct reply, 2 and more for nested ones |
| `parentPost` | the post you asked for: text, author, counters |
| `mediaType`, `mediaUrls` | text, image, video or carousel, and the media links |
| `languageGuess` | the reply's language, detected on its text |

The run summary is the `OUTPUT` record of the run's key-value store. For each post it gives `coverage`: replies counted
by Threads, direct replies collected, and the percentage.

### Inputs

- **Post URLs, share links or codes**: `https://www.threads.com/@zuck/post/Dd1MqfcG0aH` (with `/media` or `?xmt=…`
  too), threads.net links, share links from the app, the bare code `Dd1MqfcG0aH`, or a post's numeric id. Up to 1,000
  per run.
- **Max replies per post**: exact cap for each post; 0 = all the replies Threads serves. Left empty: 100.
- **Reply order**: newest first (the longest list, and the one a watch follows), the site's order, or both merged.
- **Include nested replies**.
- **Filters**: languages, minimum likes. Removed replies are not charged.
- **Watch name**: for scheduled runs, only new replies.

### Pricing

Pay per event:

| Event, per 1,000 | Free and Starter | Scale | Business and above |
|---|---|---|---|
| Reply | $2.50 | $2.00 | $1.75 |
| Run start, per run | $0.005 | $0.005 | $0.005 |

Not charged: posts that fail, error records, duplicates, replies removed by a filter, replies already delivered to a
watch. Set **Maximum cost per run** in the run options and the run stops cleanly before going over it.

### Limits

- Threads does not serve a logged-out visitor all the replies it counts (hidden, restricted or deleted ones). We
  measured 72% of the counter on a post with 2,502 replies. The run reports the coverage of each post.
- View counts are not shown on replies.

### FAQ

**Do I need a Threads or Instagram account?** No account and no cookies. Platform costs are included in the price.

**Can I follow the replies to a launch or an announcement?** Yes. Set **Watch name** and schedule the Actor: the first
run delivers the replies Threads shows today, later runs only the new ones. A run with nothing new costs only the
$0.005 start.

**Is it legal?** It collects public replies any logged-out visitor can see, without an account. Meta's terms and
privacy law (GDPR in the EU) apply to how you use the data.

### Related tools from Quarra

- [Threads Scraper](https://apify.com/quarra/threads-scraper): posts, full post history, replies, profiles and search
  in one Actor.
- [Threads Search Scraper](https://apify.com/quarra/threads-search-scraper): posts and accounts by keyword.
- [Reddit Scraper](https://apify.com/quarra/reddit-scraper): posts, comment trees, search and users.

# Actor input Schema

## `postUrls` (type: `array`):

Modes postDetails and postReplies. Any post link works: https://www.threads.com/@zuck/post/Dd1MqfcG0aH (with /media or ?xmt=… too), threads.net, /t/CODE, share links from the app (https://www.threads.com/share/…), the bare code Dd1MqfcG0aH, or the numeric post id (the id field of the output). Up to 1,000 per run.

## `mode` (type: `string`):

posts = an account's posts (full history); profiles = profile by username; accountReplies / accountReposts = an account's Replies / Reposts tab; postDetails = posts by URL; postReplies = every reply to a post; search = posts by keyword; accountSearch = accounts matching a keyword. Each mode reads one list: usernames, postUrls or searchQueries. If left out, the mode follows the list you fill (usernames -> posts, postUrls -> postDetails, searchQueries -> search).

## `maxItems` (type: `integer`):

Exact cap for EACH post (not per run); 0 = every reply Threads serves. Left empty: 100. With watchName it caps the NEW replies of each run. You pay only for the rows you receive.

## `replySort` (type: `string`):

Mode postReplies. RECENT (newest first) returns the longest list and is the one watchName follows over time; TOP follows the order of the site; ALL merges both without duplicates (about 1% more).

## `includeNestedReplies` (type: `boolean`):

Mode postReplies: also return replies to replies that Threads shows in each thread (depth 2 and more).

## `languages` (type: `array`):

Keep only posts in these languages (ISO 639-1: en, es, fr, ja, zh, ko, pt…; three-letter codes, English names and "en,fr" are accepted; jp, cn, kr are read as ja, zh, ko). Uses the label Threads sends, otherwise a language detector on the text (field languageGuess). About 96% of real English posts are kept, under 0.4% of other languages let through. Posts with fewer than two words cannot be judged and are removed. Removed posts are not charged.

## `minLikes` (type: `integer`):

Keep only replies with at least this many likes. Removed replies are not charged.

## `watchName` (type: `string`):

For scheduled runs (e.g. brand-mentions). The first run delivers and charges a baseline (what Threads shows today); later runs return and charge only what is new. A target added later gets its own baseline, charged as usual. Mode profiles has no baseline: the first run returns every profile, later runs only those that changed (bio, links, badge, privacy, followers moved 1% and 5+). One name per schedule.

## `proxyConfiguration` (type: `object`):

Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.threads.com/@zuck/post/Dd1MqfcG0aH"
  ],
  "mode": "postReplies",
  "maxItems": 50,
  "replySort": "RECENT",
  "includeNestedReplies": false,
  "languages": [
    "en"
  ],
  "minLikes": 10,
  "watchName": "competitor-posts",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items: posts, replies or profiles, one per row, same fields in every mode.

## `summary` (type: `string`):

OUTPUT record: per-input status and errors, reply coverage, new vs already seen (watchName), removed by filters, charged events.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postUrls": [
        "https://www.threads.com/@zuck/post/Dd1MqfcG0aH"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/threads-replies-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postUrls": ["https://www.threads.com/@zuck/post/Dd1MqfcG0aH"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/threads-replies-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postUrls": [
    "https://www.threads.com/@zuck/post/Dd1MqfcG0aH"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/threads-replies-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quarra/threads-replies-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Z3KMIj0GTzPAKjgOC/builds/cJfitzGjIwSeH7AUU/openapi.json
