# Threads Search & Replies Scraper (`scraper_guru/threads-search-replies-scraper`) Actor

Scrape public Threads posts, profiles, keyword pages, replies, likes, timestamps, media, and author data for social listening and market research.

- **URL**: https://apify.com/scraper\_guru/threads-search-replies-scraper.md
- **Developed by:** [LIAICHI MUSTAPHA](https://apify.com/scraper_guru) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Threads Search & Replies Scraper

Scrape public Threads posts, profiles, keyword pages, replies, likes, timestamps, media URLs, and author data for social listening, creator research, sentiment analysis, and AI datasets.

Threads is still a fresh social channel, which makes it interesting for marketers, founders, researchers, and automation builders. This Actor helps you collect public Threads conversations before the market becomes as crowded as Instagram, TikTok, or X.

### Features

- Scrape public Threads profile pages
- Scrape direct Threads post URLs
- Scrape public Threads keyword/search pages
- Extract posts, replies, and profile records where available
- Capture usernames, display names, bios, verification status, and follower counts when exposed
- Capture post text, timestamps, likes, replies, reposts, quotes, media URLs, and canonical URLs
- Use embedded JSON and network payload extraction before falling back to DOM parsing
- Scroll pages to load more public content
- Export structured data to JSON, CSV, Excel, XML, RSS, or API

### Use Cases

**Brand monitoring**
Track public Threads conversations around your brand, competitors, products, or industry keywords.

**Social listening**
Collect posts and replies around topics such as AI tools, ecommerce products, SaaS, creator economy, local businesses, or launches.

**Creator research**
Monitor creator profiles, posting patterns, engagement signals, and content themes.

**Market research**
Find user complaints, feature requests, buying intent, product comparisons, and language people use in public conversations.

**AI datasets**
Build structured social media datasets for sentiment analysis, topic modeling, trend detection, and LLM evaluation.

### Input

| Field | Type | Default | Description |
|---|---:|---:|---|
| `startUrls` | array | `@zuck` profile | Threads profile, post, or search URLs |
| `profiles` | array | `["zuck"]` | Usernames without `@` |
| `searchQueries` | array | empty | Keywords or phrases to search |
| `maxItems` | integer | `50` | Maximum dataset records |
| `includeReplies` | boolean | `true` | Include reply records when detected |
| `includeProfiles` | boolean | `true` | Include profile metadata records |
| `scrollRounds` | integer | `4` | How many times to scroll each page |
| `delayMs` | integer | `1000` | Delay between page actions |
| `proxyConfiguration` | object | disabled | Optional proxy settings |
| `failOnEmpty` | boolean | `false` | Fail the run when no records are found |

### Ready-to-Run Examples

#### Monitor public creator profiles

```json
{
  "profiles": ["zuck", "threads"],
  "maxItems": 50,
  "includeProfiles": true,
  "includeReplies": true,
  "scrollRounds": 4
}
```

#### Track brand and topic mentions

```json
{
  "searchQueries": ["AI automation", "CRM software", "newsletter growth"],
  "maxItems": 100,
  "includeProfiles": true,
  "includeReplies": true,
  "scrollRounds": 5
}
```

#### Scrape direct Threads URLs

```json
{
  "startUrls": [
    {
      "url": "https://www.threads.net/@zuck"
    }
  ],
  "maxItems": 25,
  "includeReplies": true,
  "scrollRounds": 2
}
```

### Output

Each dataset item is a profile, post, or reply record.

```json
{
  "recordType": "post",
  "sourceType": "profile",
  "sourceUrl": "https://www.threads.net/@zuck",
  "query": null,
  "postId": "123456789",
  "threadId": null,
  "code": "ABC123",
  "username": "zuck",
  "profileUsername": "zuck",
  "displayName": "Mark Zuckerberg",
  "text": "Example Threads post text",
  "url": "https://www.threads.net/@zuck/post/ABC123",
  "likeCount": 12000,
  "replyCount": 340,
  "repostCount": 88,
  "quoteCount": 14,
  "takenAt": "2026-09-13T10:30:00.000Z",
  "isReply": false,
  "parentPostId": null,
  "parentUsername": null,
  "mediaUrls": [],
  "scrapedAt": "2026-09-13T11:00:00.000Z",
  "extractionMethod": "embedded-json"
}
```

### How to Use

1. Add Threads profile URLs, usernames, or search queries.
2. Keep `maxItems` and `scrollRounds` small for the first run.
3. Start the Actor.
4. Open the Dataset tab.
5. Export the records or connect the Actor to a workflow, webhook, schedule, or API.

### API Example

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('scraper_guru/threads-search-replies-scraper').call({
  searchQueries: ['AI automation', 'CRM software'],
  maxItems: 100,
  includeReplies: true,
  scrollRounds: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

### Pricing

This Actor uses pay-per-event pricing. You pay per dataset result, plus a tiny Actor start event.

For cost control:

- Start with `maxItems: 25`
- Use one or two profiles/search queries first
- Increase `scrollRounds` only when you need more content
- Use scheduled runs for monitoring instead of very large one-off crawls

### Notes and Limitations

Threads is a Meta-owned, JavaScript-heavy platform. Public pages can change, and some content may require login or may not be available in public HTML. This Actor extracts public content only and uses multiple parsing strategies to stay resilient.

Use this Actor responsibly for public data, and respect Threads' terms, privacy expectations, and applicable laws.

### FAQ

**Can this scrape private Threads profiles?**
No. It is designed for public Threads pages only.

**Does it need a Threads login?**
No login is required for the default public-page workflow, but Meta may limit what logged-out users can see.

**Can it scrape replies?**
Yes, when replies are present in the public page data or loaded browser responses.

**Can I monitor keywords daily?**
Yes. Save the input as an Apify Task and schedule it daily or weekly.

**Why did some fields return null?**
Threads does not expose every field on every page. The Actor keeps nullable fields so exports remain consistent.

**Can I use this for AI training data?**
Yes, for public content where your use case complies with platform terms and privacy expectations.

Built by [LIAICHI MUSTAPHA](https://apify.com/scraper_guru).

# Actor input Schema

## `startUrls` (type: `array`):

Threads profile URLs, post URLs, or search URLs to scrape.

## `profiles` (type: `array`):

Public Threads usernames without @. Example: zuck, instagram, threads.

## `searchQueries` (type: `array`):

Keywords or phrases to search on Threads.

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

Maximum number of posts, replies, or profile records saved to the dataset.

## `includeReplies` (type: `boolean`):

When possible, collect reply/comment records from post pages and embedded page data.

## `includeProfiles` (type: `boolean`):

Save profile metadata records when profile data is detected.

## `scrollRounds` (type: `integer`):

Number of times to scroll each page to load more public content.

## `delayMs` (type: `integer`):

Polite delay between browser actions in milliseconds.

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

Optional proxy settings. Direct access is used by default.

## `failOnEmpty` (type: `boolean`):

Stop with an error when no records are extracted. Useful for monitoring scheduled runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.threads.net/@zuck"
    }
  ],
  "profiles": [
    "zuck"
  ],
  "searchQueries": [],
  "maxItems": 25,
  "includeReplies": true,
  "includeProfiles": true,
  "scrollRounds": 2,
  "delayMs": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "failOnEmpty": false
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset with extracted Threads posts, replies, and profile records.

## `stats` (type: `string`):

Run summary, target stats, extraction counts, and warnings.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.threads.net/@zuck"
        }
    ],
    "profiles": [
        "zuck"
    ],
    "searchQueries": [],
    "maxItems": 25,
    "scrollRounds": 2,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraper_guru/threads-search-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 = {
    "startUrls": [{ "url": "https://www.threads.net/@zuck" }],
    "profiles": ["zuck"],
    "searchQueries": [],
    "maxItems": 25,
    "scrollRounds": 2,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scraper_guru/threads-search-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 '{
  "startUrls": [
    {
      "url": "https://www.threads.net/@zuck"
    }
  ],
  "profiles": [
    "zuck"
  ],
  "searchQueries": [],
  "maxItems": 25,
  "scrollRounds": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scraper_guru/threads-search-replies-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraper_guru/threads-search-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/yCrVReS9cFFP5QePM/builds/9a0lgn9wjIpUnZwL5/openapi.json
