# Threads Scraper & API: Posts, Profiles, Search & Replies (`vero-api/threads-scraper`) Actor

Scrape Meta Threads (threads.com / threads.net) without login: posts and comments with likes, reposts, quotes, shares, images and videos; profiles with follower counts and bios; keyword and hashtag search with date filters. Export JSON, CSV or Excel. $1.50 per 1,000 posts.

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

## Pricing

from $1.50 / 1,000 threads posts

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 & API — scrape Meta Threads posts, profiles, hashtags, and replies

Threads Scraper exports public data from Meta's Threads app (threads.com, formerly threads.net): posts from any profile, keyword and hashtag search results, single posts with their replies, and profile details like follower counts and bios. Every post comes with its full text, likes, replies, reposts, quotes, shares, images, videos, links, and author — ready for analysis, monitoring, lead generation, or your own app. No Threads account, no cookies, no setup, and just $1.50 per 1,000 posts.

### What is Threads Scraper?

Threads Scraper is an unofficial Threads API. Give it usernames, search terms, or post links, and it returns clean, structured Threads data you can download as JSON, CSV, or Excel, or read straight from your code. Use it as a:

- **Threads profile scraper** — followers, bio, bio links, verified badge, and every post a profile ever published.
- **Threads post scraper** — full text, publish time, likes, replies, reposts, quotes, and shares for each post.
- **Threads search scraper** — every post that mentions a keyword, brand, or name, going back as far as you need.
- **Threads hashtag scraper** — posts for any hashtag or topic, like `#marketing` or `#AI`.
- **Threads comments scraper** — the replies under any post, with who replied to whom.
- **Threads image and video downloader** — direct links to every photo, carousel slide, and video.

### What you can do

- **Scrape whole profiles** — every post back to the account's very first, plus followers, bio, bio links, and topics.
- **Search any keyword or hashtag** — get hundreds or thousands of matching posts, not just the first screen of results.
- **Pull a post with its replies** — the post, the author's follow-up posts, and the conversation underneath.
- **Filter by date** — pick a date range, or use a period like "7 days" to get only fresh posts on every scheduled run.
- **Mix everything in one run** — usernames, search terms, and post links side by side, with every post delivered once.

### Why use it

- **No login, ever.** Nothing to sign in to, no cookies to copy, no account to risk.
- **Deep results.** Full profile histories and search results that keep going far past what Threads shows on one screen.
- **Complete engagement data.** Likes, replies, reposts, quotes, and shares on every post.
- **Low price.** $1.50 per 1,000 posts and $2.50 per 1,000 profiles.
- **Fair billing.** A post found twice is charged once, the run stops exactly at your spending limit, and usernames or links that don't exist cost nothing.
- **Fast.** Around 900 posts a minute: 100 posts in about 15 seconds, 1,000 in about a minute.

### Use cases

- **Brand and competitor monitoring** — track what people say about your brand, product, or competitors on Threads, every day.
- **Influencer research** — compare follower counts and engagement across creators before you reach out.
- **Trend and topic research** — collect everything posted about a topic in a given week or month.
- **Social listening and sentiment analysis** — feed post text into your own AI or analytics pipeline.
- **Content strategy** — find which posts in your niche get the most likes, reposts, and replies.
- **Lead generation** — find people and businesses talking about the problem your product solves.
- **Academic and market research** — build clean datasets of public conversation on any subject.

### What Threads data can you extract?

| Posts and replies | Profiles |
|---|---|
| Post text and link | Username and profile link |
| Publish date and time | Display name |
| Likes, replies, reposts, quotes, shares | Follower count |
| Images, carousel slides, and videos | Bio and bio links |
| Links and @mentions in the post | Verified badge |
| Topic tag | Private or public |
| Author username, name, ID, verified badge | Profile picture |
| Reply-to post and user | Profile topics |
| Quoted post (link, author, text) | |
| Pinned and edited flags | |

### How to scrape Threads

1. Add usernames, search terms, or post links (any mix).
2. Set how many posts you want from each, and a date range if you like.
3. Click **Start**, then download your results as JSON, CSV, Excel, or HTML — or send them straight to your tools.

### Input example

```json
{
  "profiles": ["zuck", "https://www.threads.com/@mosseri"],
  "searchQueries": ["ChatGPT", "#marketing"],
  "postUrls": ["https://www.threads.com/@threads/post/Der2ivSmjg2"],
  "maxPosts": 200,
  "maxReplies": 100,
  "onlyPostsWithKeyword": true,
  "postedAfter": "30 days"
}
```

| Field | What it does |
|---|---|
| **Profiles** | Usernames or profile links. You get one profile row plus the profile's posts, newest first. |
| **Search terms** | Keywords or hashtags. You get matching posts from across Threads. |
| **Post links** | Single posts. You get the post, the author's follow-ups, and its replies. |
| **Max posts per profile or search term** | How many posts you want from each. Set to 0 to get profile details only. |
| **Max replies per post** | How many replies you want under each post link. Set to 0 to get just the post. |
| **Only posts that mention the search term** | Keeps search results on topic: every word of your term must appear in the post. |
| **Posted after / Posted before** | Limits profiles and searches to a date range. Accepts a date or a period like "7 days". |

### What you get

One row per post, plus one row per profile. A post looks like this:

```json
{
  "type": "post",
  "id": "4011539774855329846",
  "code": "Der2ivSmjg2",
  "url": "https://www.threads.com/@threads/post/Der2ivSmjg2",
  "text": "The season is heating up, and so is the conversation. Introducing Team Threads: your go-to lineup for game-day hot takes and commentary. 🏈\n\nMeet the starting lineup of commentators and join the conversation!",
  "createdAt": "2026-10-19T18:00:28.000Z",
  "username": "threads",
  "userId": "63082166531",
  "fullName": "Threads",
  "isVerified": true,
  "profilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/696068532_17966595924102532_922885636998957794_n.jpg?…",
  "likeCount": 667,
  "replyCount": 92,
  "repostCount": 45,
  "quoteCount": 19,
  "shareCount": 41,
  "mediaType": "image",
  "images": ["https://scontent-iad6-1.cdninstagram.com/v/t51.82787-15/856692928_17993584434102532_675624457789199092_n.jpg?…"],
  "videos": [],
  "links": [],
  "mentions": [],
  "topic": "NFL Threads",
  "isReply": false,
  "replyToPostId": null,
  "replyToUsername": null,
  "quotedPost": null,
  "isPinned": false,
  "isEdited": false,
  "source": "@threads"
}
```

A profile looks like this:

```json
{
  "type": "profile",
  "id": "63082166531",
  "username": "threads",
  "url": "https://www.threads.com/@threads",
  "fullName": "Threads",
  "bio": "▓ Come see what everyone’s talking about 💬",
  "bioLinks": [],
  "followerCount": 6965920,
  "isVerified": true,
  "isPrivate": false,
  "profilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/696068532_17966595924102532_922885636998957794_n.jpg?…",
  "topics": ["WNBA Threads", "NBA Threads", "NFL Threads", "Book Threads", "Music Threads"],
  "source": "@threads"
}
```

Replies carry `replyToPostId` and `replyToUsername`, so you can rebuild every conversation. Quote posts carry the quoted post's ID, link, author, and text. Every row says in `source` which profile, search term, or post link it came from. The Output tab has ready-made **Posts**, **Profiles**, and **Media** tables.

### How much does it cost to scrape Threads?

You pay only for the results you get — no subscriptions, no surprises.

| What you get | Price |
|---|---|
| 1,000 posts or replies | $1.50 |
| 1,000 profiles | $2.50 |
| Each run | $0.001 to start |

A few examples:

- A profile's last 100 posts: about **$0.15**.
- 1,000 posts mentioning your brand: about **$1.50**.
- Follower counts for 500 creators: about **$1.25**.

A post found twice (say, by two search terms) is delivered and charged once, and the run stops exactly at your spending limit. Apify's free plan includes monthly credit, so you can try it at no cost.

### Threads Scraper vs. the official Threads API

Meta's official Threads API needs a developer app, access tokens, and approval, and centers on accounts you manage. Threads Scraper works on any public profile, post, or search right away: paste a username or keyword and get data in seconds. You also get full profile histories and search results going back to Threads' launch in 2023.

### Integrations

Send Threads data anywhere with Apify's built-in integrations: Google Sheets, Slack, Zapier, Make, n8n, Airbyte, webhooks, and more. Schedule the actor with "Posted after: 1 day" to get a fresh feed of new posts every morning, delivered to your spreadsheet or Slack channel.

### Run it from your code or AI assistant

Call it from JavaScript with the Apify client:

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('vero-api/threads-scraper').call({
  searchQueries: ['AI agents'],
  maxPosts: 500,
  postedAfter: '7 days',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'posts');
```

Or from Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("vero-api/threads-scraper").call(run_input={
    "profiles": ["zuck"],
    "maxPosts": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["type"], item.get("url"), item.get("likeCount"))
```

AI assistants such as Claude and ChatGPT can run it too, through the Apify MCP server: ask for "the latest Threads posts about AI agents" and the assistant runs the actor for you.

### FAQ

**Do I need a Threads or Instagram account?** No. The actor reads public Threads pages, so there is nothing to log in to.

**Is there a Threads API I can use instead?** Threads Scraper is the simplest Threads API: send a username, keyword, or post link through the Apify API and get JSON back. No developer app or approval needed.

**Does it work with threads.net links?** Yes. Links from threads.com and threads.net both work, as do short `/t/` links and links to a post's media page.

**How many posts can I get from a profile?** All of them — the actor pages back to the account's very first post.

**How deep does search go?** As deep as you need. Set "Max posts" to 1,000 or more and the actor keeps finding older matching posts, all the way back to Threads' launch in 2023.

**Why are some posts missing from my search?** By default you only get posts whose text contains every word of your search term, so results stay on topic. Turn off "Only posts that mention the search term" to also get related posts Threads matches for you.

**How do I scrape a Threads hashtag?** Enter it as a search term: `#marketing` or just `marketing` — both find the same posts.

**Can I scrape Threads comments?** Yes. Add the post link under "Post links" and set "Max replies per post". Each reply says which post and which user it answers.

**Can I download Threads videos and images?** Yes. Every post includes direct links to its images, carousel slides, and videos. The **Media** table in the Output tab lists them side by side.

**Can I get a Threads account's follower count?** Yes. Add usernames under "Profiles" and set "Max posts" to 0 to get just the profile details, including followers.

**How do I monitor Threads mentions of my brand?** Add your brand name as a search term, set "Posted after" to `1 day`, and schedule the actor to run daily. Connect Slack or Google Sheets to get new mentions automatically.

**Can I get only new posts each day?** Yes. Schedule the actor and set "Posted after" to `1 day`.

**Do I get view counts?** Threads doesn't show view counts publicly, so they aren't included. You get likes, replies, reposts, quotes, and shares on every post.

**Can I get private profiles?** You get a private profile's details, but its posts stay private.

**What if a username or link is wrong?** The run keeps going and you aren't charged for it. Every input that couldn't be scraped is listed, with the reason, in the run's FAILED_INPUTS record.

**What formats can I download?** JSON, CSV, Excel, XML, RSS, and HTML, or read the results through the Apify API.

### More social media scrapers

- [Instagram Posts Scraper](https://apify.com/vero-api/instagram-posts-scraper) — posts, captions, and engagement from Instagram.
- [Instagram Reels & Posts Downloader](https://apify.com/vero-api/instagram-reels-posts-downloader) — download Instagram reels, photos, and videos.
- [Telegram Channel Scraper](https://apify.com/vero-api/telegram-channel-scraper) — posts, views, and media from public Telegram channels.
- [YouTube Transcript Scraper](https://apify.com/vero-api/youtube-transcript-scraper) — captions and subtitles from YouTube videos in bulk.

# Actor input Schema

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

Usernames or profile links, like <code>zuck</code> or <code>https://www.threads.com/@zuck</code>. You get each profile's details and its posts, newest first.

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

Keywords or hashtags to search, like <code>ChatGPT</code> or <code>#marketing</code>. You get matching posts from across Threads, with no duplicates.

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

Links to single posts, like <code>https://www.threads.com/@threads/post/Der2ivSmjg2</code>. You get the post, the author's follow-ups, and its replies.

## `maxPosts` (type: `integer`):

How many posts you want from each profile and each search term. Set to 0 to get profile details only.

## `maxReplies` (type: `integer`):

How many replies you want under each post link. Set to 0 to get just the post.

## `onlyPostsWithKeyword` (type: `boolean`):

Keep only posts whose text contains every word of your search term. Turn off to also get related posts Threads finds for you.

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

Only posts from this date on — pick a date, or enter a period like <code>7 days</code> to get recent posts on every scheduled run.

## `postedBefore` (type: `string`):

Only posts up to and including this date.

## Actor input object example

```json
{
  "profiles": [
    "zuck"
  ],
  "searchQueries": [
    "ChatGPT"
  ],
  "maxPosts": 50,
  "maxReplies": 50,
  "onlyPostsWithKeyword": true
}
```

# 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 = {
    "profiles": [
        "zuck"
    ],
    "searchQueries": [
        "ChatGPT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vero-api/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 = {
    "profiles": ["zuck"],
    "searchQueries": ["ChatGPT"],
}

# Run the Actor and wait for it to finish
run = client.actor("vero-api/threads-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 '{
  "profiles": [
    "zuck"
  ],
  "searchQueries": [
    "ChatGPT"
  ]
}' |
apify call vero-api/threads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vero-api/threads-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/RtZNX3Xrrsnn8kYqE/builds/XxogVF7CiM1nmEqn8/openapi.json
