# 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
- **Features:** Limited permissions
- **Stats:** 3 total users, 3 monthly users, 96.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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.
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 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, hashtags, 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, emails from the bio, verified badge, and the profile's posts back to its very first one.
- **Threads post scraper** — full text, publish time, likes, replies, reposts, quotes, and shares for each post.
- **Threads search scraper** — posts that mention a keyword, brand, or name, top or newest first, 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** — posts 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.
- **Choose the order** — top posts first for research, or newest first for monitoring.
- **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.
- **Find contacts** — email addresses written in bios and posts come in their own column, ready for outreach.
- **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.
- **Clear results.** When the run ends, its status line sums up what you got, like "Done: 100 posts and 1 profile."

### 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, with the emails they share in posts and bios.
- **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 | Emails in the bio |
| Hashtags and topic tag | Verified badge |
| Emails written in the post | 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,
  "searchSort": "top",
  "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. |
| **Search order** | `top` gives the most relevant posts first, `recent` gives the newest posts first. |
| **Only posts that mention the search term** | Keeps search results on topic: every word of your term must appear in the post, as a word or the start of one (`shoe` also finds "shoes"). |
| **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": [],
  "hashtags": [],
  "emails": [],
  "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": [],
  "emails": [],
  "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. `hashtags` lists the hashtags written in a post, and `emails` lists any email addresses written in a post or a profile's bio. Every row says in `source` which profile, search term, or post link it came from. The Output tab has ready-made **Posts**, **Profile details**, 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,
  searchSort: 'recent',
  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.default_dataset_id).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?** Their full history, back to the account's first post, at about 900 posts a minute. For accounts with many thousands of posts, give the run a longer timeout under **Run options**.

**Do I get every part of a long thread?** A profile scrape gives each post with its first three follow-ups. For a longer thread, add the post's link under "Post links": you get the post with its follow-ups, plus its replies.

**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.

**Can I get the newest posts first?** Yes. Set "Search order" to **Recent** and search results arrive newest first, which is ideal for monitoring. **Top** (the default) starts with the most relevant posts.

**Why are some posts missing from my search?** By default you only get posts that mention every word of your search term, so results stay on topic. A word counts when it stands alone or starts a longer word: "shoe" finds "shoes", but "AI" doesn't find "said". 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. Terms like `C#` keep their `#`.

**Can I get emails from Threads profiles and posts?** Yes. Every row has an `emails` column with the addresses written in the post or, for a profile, in its bio. Add usernames under "Profiles" with "Max posts" set to 0 to collect just profile details and bio emails.

**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 "Search order" to **Recent** and "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, under "Inputs we couldn't read" in the Output tab.

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

**Is Threads Scraper made by Meta?** No. Threads Scraper is an independent tool. It is not affiliated with, endorsed by, or sponsored by Meta or Threads.

### More tools from us

- [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.
- [Email Validator](https://apify.com/vero-api/email-validator) — check which emails you collected are real and deliverable.

# 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.

## `searchSort` (type: `string`):

Pick Top to get the most relevant posts first, or Recent to get the newest posts first. Applies to search terms.

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

Keep only posts that mention every word of your search term, as a word or the start of one (so <code>shoe</code> also finds "shoes"). 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,
  "searchSort": "top",
  "onlyPostsWithKeyword": true
}
```

# Actor output Schema

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

One row per post or reply (type "post": url, text, createdAt, username, likeCount, replyCount, repostCount, quoteCount, shareCount, images, videos, hashtags, emails) and one row per profile (type "profile": username, followerCount, bio, bioLinks, emails).

## `failedInputs` (type: `string`):

Usernames, search terms, or post links that couldn't be read in full, each as { input, reason }. An empty list when every input worked.

# 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/JJVrDIw5GSyvvgMz5/openapi.json
