# Threads Scraper - Posts, Likes & Replies (`thirdwatch/threads-scraper`) Actor

Scrape public posts from any Meta Threads (threads.net / threads.com) profile. Get post text, like counts, timestamps, author details, media URLs, and thread links via the public guest GraphQL API. No login, API key, or proxy needed.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper

> Scrape public posts and like counts from any [Meta Threads](https://www.threads.com) profile — no login or API key required.

### What you get

Turn any public Threads handle into clean, structured dataset rows. For each profile you point it at, this actor returns that account's most recent public posts with the post text, like count, timestamp, author details, attached media URLs, and a direct link to each post. Scrape one handle or a batch of handles in a single run. No Threads account, password, or API key needed.

### Output fields

| Field | Description |
|-------|-------------|
| `username` | The profile handle that was scraped |
| `text` | The post text / caption |
| `like_count` | Number of likes on the post |
| `reply_count` | Number of replies (not available — see Limitations) |
| `repost_count` | Number of reposts (not available — see Limitations) |
| `quote_count` | Number of quotes (not available — see Limitations) |
| `taken_at` | Post timestamp (Unix epoch seconds) |
| `taken_at_iso` | Post timestamp (ISO 8601, UTC) |
| `author` | Author object: `{ username, full_name, is_verified, pk }` |
| `media` | List of attached media as `{ type: image \| video, url }` |
| `code` | Threads short code for the post |
| `pk` | Numeric post id |
| `thread_url` | Direct URL to the post on Threads |

### Example output

```json
{
  "username": "mosseri",
  "text": "We're rolling out the ability to see who liked your post right from the activity tab. Should be live for everyone over the next few weeks.",
  "like_count": 8421,
  "reply_count": null,
  "repost_count": null,
  "quote_count": null,
  "taken_at": 1718900400,
  "taken_at_iso": "2026-06-20T14:20:00Z",
  "author": {
    "username": "mosseri",
    "full_name": "Adam Mosseri",
    "is_verified": true,
    "pk": "95561"
  },
  "media": [
    {
      "type": "image",
      "url": "https://scontent.cdninstagram.com/v/t51.2885-15/example.jpg"
    }
  ],
  "code": "C8aBcDeFgHi",
  "pk": "3401928374650192837",
  "thread_url": "https://www.threads.com/@mosseri/post/C8aBcDeFgHi"
}
````

### Input parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `username` | string | One of these two | A single profile handle, with or without `@` (e.g. `zuck` or `@mosseri`). |
| `usernames` | array | One of these two | A list of handles to scrape in one run. Use this **or** `username`. |
| `maxResults` | integer | No | Maximum posts to return per profile. Default `25`. The public feed exposes roughly the 25 most-recent posts, so higher values are capped to what is available. |

Single profile:

```json
{
  "username": "zuck",
  "maxResults": 25
}
```

Batch of profiles:

```json
{
  "usernames": ["zuck", "mosseri"],
  "maxResults": 25
}
```

### Use cases

- **Social & comms teams:** Monitor competitor, brand, or executive accounts and archive what they post publicly on Threads.
- **Growth & creator teams:** Track which public posts earn the most likes so you can learn what resonates and benchmark against peers.
- **Researchers & analysts:** Build post-level datasets from public profiles for trend analysis, content studies, or feeding downstream enrichment.
- **Brand-monitoring pipelines:** Pull recent public posts from a watchlist of handles on a schedule to spot mentions, announcements, and emerging topics.

### Limitations

Read this before you buy — it scopes exactly what this actor does and does not return:

- **Recent posts only.** It returns roughly a profile's **25 most-recent public posts**. There is no public pagination on this feed, so `maxResults` is effectively capped at what the profile exposes — this is **not** a full historical archive of every post an account has ever made.
- **Like counts only for engagement.** Each post comes back with a reliable `like_count`. The `reply_count`, `repost_count`, and `quote_count` fields are returned as `null` — Threads does not expose those numbers on the public feed this actor reads. The fields are kept in the output so your schema stays stable if Threads ever exposes them.
- **No keyword or hashtag search.** You scrape by profile handle. Searching Threads by keyword or hashtag requires a logged-in account and is intentionally not supported.
- **Public profiles only.** Private or restricted accounts return no posts.

### Compared to alternatives

| | Threads Scraper (Thirdwatch) | igview-owner / threads-search-scraper |
|---|---|---|
| Input | Profile handle(s) | Keyword / search query |
| Best for | Monitoring and archiving specific accounts | Discovering posts across Threads by topic |
| Login required | No | Often requires account / session cookies |
| Output | Post text, like count, author, media, timestamps, direct links | Search-result posts |

If you already know **which accounts** you want to follow, this actor is the simpler, no-login option — point it at the handles and get clean rows back. If instead you need to **search Threads by keyword or hashtag**, a search-based scraper such as `threads-search-scraper` is the better fit. Many teams run both: search to discover accounts, then this actor to monitor them over time.

### FAQ

**Do I need a Threads or Instagram account?**
No. It reads only public profile data — no login, password, or API key.

**Can I scrape multiple profiles in one run?**
Yes. Use the `usernames` field with a list of handles. Each handle returns up to `maxResults` posts.

**Can I search Threads by keyword or hashtag?**
No. This actor works by profile handle only. Keyword/hashtag search on Threads is gated behind a logged-in account.

**Can I get the full post history of an account?**
No. You get roughly the 25 most-recent public posts per profile, not a complete archive.

**Why are reply, repost, and quote counts empty?**
Threads does not expose those numbers on the public profile feed, so they are returned as `null` rather than guessed. See Limitations.

**Can I scrape private accounts?**
No. Only public profiles return posts.

***

Built by [Thirdwatch](https://thirdwatch.dev). Looking for more social data? See our other Thirdwatch scrapers on the Apify Store for Instagram, TikTok, and X / Twitter.

Last verified: 2026-06

# Actor input Schema

## `username` (type: `string`):

The Threads profile handle to scrape, with or without the leading '@' (e.g. 'zuck' or '@mosseri'). Scrapes the public posts on that profile.

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

Optional list of profile handles to scrape in one run. Use this OR the single 'username' field. Each handle returns up to maxResults posts.

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

Maximum number of posts to return per profile. The public guest feed returns roughly the 25 most recent posts; values above that are capped to what the feed exposes.

## Actor input object example

```json
{
  "username": "zuck",
  "usernames": [],
  "maxResults": 25
}
```

# Actor output Schema

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

No description

# 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 = {
    "username": "zuck",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/threads-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 = {
    "username": "zuck",
    "maxResults": 25,
}

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

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

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

```

## CLI example

```bash
echo '{
  "username": "zuck",
  "maxResults": 25
}' |
apify call thirdwatch/threads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thirdwatch/threads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Threads Scraper - Posts, Likes & Replies",
        "description": "Scrape public posts from any Meta Threads (threads.net / threads.com) profile. Get post text, like counts, timestamps, author details, media URLs, and thread links via the public guest GraphQL API. No login, API key, or proxy needed.",
        "version": "1.0",
        "x-build-id": "A6Qvoc4J1Id50QzRZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thirdwatch~threads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thirdwatch-threads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/thirdwatch~threads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thirdwatch-threads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/thirdwatch~threads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thirdwatch-threads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "username": {
                        "title": "Threads Username",
                        "type": "string",
                        "description": "The Threads profile handle to scrape, with or without the leading '@' (e.g. 'zuck' or '@mosseri'). Scrapes the public posts on that profile."
                    },
                    "usernames": {
                        "title": "Threads Usernames (batch)",
                        "type": "array",
                        "description": "Optional list of profile handles to scrape in one run. Use this OR the single 'username' field. Each handle returns up to maxResults posts.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results Per Profile",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of posts to return per profile. The public guest feed returns roughly the 25 most recent posts; values above that are capped to what the feed exposes.",
                        "default": 25
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
