# Threads Scraper — Search, Profiles, Posts & Replies (No Login) (`fafa_data/threads-scraper-reliable`) Actor

Scrape public Threads posts by keyword, profile or post URL, with replies. Clear status per target, monitoring mode for new posts only, and you only pay for results delivered.

- **URL**: https://apify.com/fafa_data/threads-scraper-reliable.md
- **Developed by:** [Fafa KUAS](https://apify.com/fafa_data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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?

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 Scraper — Search, Profiles, Posts & Replies (No Login)

Scrape **public Threads posts** by keyword, profile or post URL — including **replies** — without a Threads account, cookies or API key.

Built for reliability: every search term, profile and post gets a **clear status** in the run report, so you never get an empty dataset without knowing why. And you **only pay for results that are delivered**.

### What you can do

- 🔎 **Search Threads** by keyword, phrase or hashtag (top or recent)
- 👤 **Scrape profiles**: latest posts plus profile details (bio, followers, verification, links)
- 💬 **Scrape posts and their replies** from any post URL
- 🧵 **Go beyond the logged-out limit**: turn on *Also collect replies* to open each post found and collect its replies
- 🔔 **Monitor a brand or topic**: *only new posts* mode skips everything earlier runs already returned — schedule it daily and get fresh mentions only
- 📅 **Filter by date**: keep only posts published after a given day

### Why this Threads scraper

| | This Actor |
|---|---|
| Login, cookies or API key | Not needed |
| Status per search / profile / post | ✅ `ok`, `not_found`, `blocked`, `login_wall` |
| Pay only for delivered results | ✅ |
| Retries with fresh sessions on soft blocks | ✅ |
| Monitoring (new posts only) | ✅ |
| Replies with parent / reply labels | ✅ |

### Input example

```json
{
  "searchTerms": ["nike", "#ai"],
  "usernames": ["zuck"],
  "postUrls": ["https://www.threads.com/@zuck/post/C8abc123"],
  "sort": "recent",
  "includeReplies": true,
  "maxPostsPerTarget": 50,
  "maxResults": 300
}
```

### Output example

```json
{
  "postId": "3456789012345678901",
  "code": "C8abc123",
  "url": "https://www.threads.com/@zuck/post/C8abc123",
  "text": "Big update today #ai",
  "createdAt": "2026-10-20T14:03:11.000Z",
  "likeCount": 12873,
  "replyCount": 941,
  "repostCount": 312,
  "quoteCount": 40,
  "isReply": false,
  "hashtags": ["ai"],
  "mentions": [],
  "images": ["https://..."],
  "videos": [],
  "author": { "username": "zuck", "fullName": "Mark Zuckerberg", "isVerified": true },
  "relation": "result",
  "source": { "type": "search", "value": "#ai" },
  "scrapedAt": "2026-10-21T08:00:00.000Z"
}
```

`relation` tells you what each row is: `result` (search), `post` (profile post or the requested post), `parent` (the post it answers) or `reply`.

The **run report** (key-value store, record `OUTPUT`) lists every target with its status and counts, plus the profile details collected.

### Good to know

- Threads shows logged-out visitors only part of its content (about 20–25 posts per search or profile). Turn on **Also collect replies** to collect much more around the same topic.
- Residential proxies are used by default: Threads blocks datacenter IPs.
- Only public data is collected. Use the data in line with applicable laws (including GDPR) and Threads' terms.

### Use cases

Brand and competitor monitoring · social listening · trend and hashtag research · influencer discovery · sentiment analysis · datasets for AI and research.

### Pricing

Pay per result: you are charged for each post delivered to your dataset — not for failed pages, skipped duplicates or posts filtered out by date.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords, phrases or hashtags to search on Threads (one per line).

## `usernames` (type: `array`):

Threads usernames or profile URLs, e.g. zuck or https://www.threads.com/@zuck

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

Threads post URLs. The post and its replies are returned.

## `sort` (type: `string`):

Top or most recent posts for search terms.

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

Opens each post found by search or on a profile and collects its replies. This is how you get far more than the ~20-25 posts Threads shows to logged-out visitors.

## `maxPostsToExpand` (type: `integer`):

When replies are on: how many posts per search term or profile are opened to read their replies.

## `maxRepliesPerPost` (type: `integer`):

Maximum number of replies collected for each post.

## `maxPostsPerTarget` (type: `integer`):

Maximum number of posts collected for each search term or profile.

## `maxResults` (type: `integer`):

Hard cap for the whole run. You are charged only for results delivered.

## `postedAfter` (type: `string`):

Optional date (YYYY-MM-DD). Older posts are skipped and not charged.

## `onlyNew` (type: `boolean`):

Skip posts already returned by earlier runs with the same monitor name. Schedule the Actor daily to get only fresh posts about a brand or topic.

## `monitorName` (type: `string`):

Use a different name for each topic you monitor.

## `maxConcurrency` (type: `integer`):

How many pages are loaded at the same time. Keep it low to avoid blocks.

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

Residential proxies are strongly recommended: Threads blocks datacenter IPs.

## Actor input object example

```json
{
  "searchTerms": [
    "artificial intelligence"
  ],
  "sort": "top",
  "includeReplies": false,
  "maxPostsToExpand": 10,
  "maxRepliesPerPost": 50,
  "maxPostsPerTarget": 50,
  "maxResults": 200,
  "onlyNew": false,
  "monitorName": "default",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

One item per Threads post or reply delivered.

## `report` (type: `string`):

Status and counts for every target, and profile details collected.

# 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 = {
    "searchTerms": [
        "artificial intelligence"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fafa_data/threads-scraper-reliable").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 = {
    "searchTerms": ["artificial intelligence"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fafa_data/threads-scraper-reliable").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 '{
  "searchTerms": [
    "artificial intelligence"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call fafa_data/threads-scraper-reliable --silent --output-dataset

```

## MCP server setup

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

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/eDGuhnw5QGCixVJCv/builds/5aHO70kRGifvwZrrP/openapi.json
