# Threads Scraper 💰$1/1K – Posts, Profiles, Search, No Login (`rt-solutions/threads-scraper`) Actor

Scrape Threads (Meta) without login: keyword search and hashtag posts, profiles with followers, bio and links, latest posts with likes, replies, reposts, quotes and shares, and post replies. $1 per 1,000 posts.

- **URL**: https://apify.com/rt-solutions/threads-scraper.md
- **Developed by:** [RT SOLUTIONS](https://apify.com/rt-solutions) (community)
- **Categories:** Social media, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 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 – posts, profiles, search & replies · $1 per 1,000 posts

Scrape **Threads** (by Meta) without an account, cookies or login: **keyword and hashtag search**, **profiles** with follower count, bio and links, their **latest public posts**, and **post replies**. Every post comes with **likes, replies, reposts, quotes, shares**, exact date, text, images, videos, links, mentions, hashtags and the topic tag.

**About half the price of the most popular Threads scrapers** — $1 per 1,000 posts, $2 per 1,000 profiles.

#### What is Threads Scraper?

Threads shows part of its content to visitors who are not logged in: search results, the latest posts of public profiles and post replies. This Actor reads exactly that — public pages only — and returns one clean row per post or profile in JSON, CSV or Excel. It **never logs in** and never goes past the "Continue with Instagram" wall, so your Instagram or Threads account is never involved.

It is built for **monitoring**: brand and competitor mentions, creators' latest posts and engagement, topics and hashtags — run it every hour or day to catch new posts as they appear.

#### What you can scrape

| Input | What you get |
|---|---|
| 🔎 Keywords or hashtags | Posts Threads shows for the keyword, plus the matching topic tag page (e.g. `marketing` → #Marketing). Multi-word phrases that Threads returns empty are retried as a hashtag (`ai agents` → `#aiagents`). |
| 👤 Usernames or profile URLs | Profile row (followers, verified, bio, bio links, profile tags, picture) + latest posts from the Threads, Replies, Media and Reposts tabs |
| 💬 Post URLs | The post with full stats + the replies Threads shows publicly |

Mix everything in one run. Duplicates are removed automatically.

#### What data can Threads Scraper extract?

**Posts and replies**

| Field | Example | Notes |
|---|---|---|
| `type` | `post` / `reply` | |
| `code`, `id`, `url` | `DfLnIF0F5Uo` | |
| `text` | `Happy Halloween, from the crew aboard the space station! 🎃🚀` | |
| `createdAt` | `2026-11-01T02:01:27.000Z` | Exact date and time |
| `likeCount`, `replyCount`, `repostCount`, `quoteCount`, `shareCount` | `16215`, `239`, `734`, `92`, `317` | `likeCount` is null when the author hides likes; `shareCount` is not always shown |
| `mediaType` | `text`, `image`, `video`, `carousel`, `repost` | |
| `images`, `videos` | URLs | Every image / video of the post (carousels included) |
| `links`, `mentions`, `hashtags` | | Extracted from the text and link previews |
| `topicTag` | `Space Threads` | The Threads topic tag of the post |
| `language` | `en` | Detected by Threads |
| `isReply`, `replyToUsername`, `parentPostUrl` | | For replies |
| `quotedPostUrl`, `repostedPostUrl`, `repostedBy` | | Quotes and reposts |
| `isPaidPartnership`, `isPinned` | | |
| `author` | `{username, fullName, id, isVerified, profileUrl, profilePicUrl}` | |
| `source`, `searchQuery`, `tag`, `profileUsername` | `search`, `tag`, `profile:media`… | Where the row came from |

**Profiles**: `username`, `fullName`, `id`, `url`, `followerCount`, `isVerified`, `isPrivate`, `biography`, `bioLinks` (`url`, `title`), `profileTags`, `profilePicUrl`.

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

| Apify plan | Posts and replies (per 1,000) | Profiles (per 1,000) |
|---|---|---|
| Free | **$1.00** | **$2.00** |
| Starter | $0.90 | $1.80 |
| Scale | $0.80 | $1.60 |
| Business and higher | $0.70 | $1.40 |

Warnings (unknown profile, deleted post, keyword with no public posts) are free. There is no start fee.

##### Real runs — 3 November 2026

| Job | Results | Run time | Price |
|---|---|---|---|
| Search `marketing`, `ai agents`, `nba` (100 max each) | 48 posts | 17 s | $0.048 |
| Profiles @nasa, @netflix, @nytimes, @espn, @mosseri, all four tabs | 5 profiles + 60 posts | 25 s | $0.070 |
| One post URL (@nasa Halloween post) + replies | 1 post + 6 replies | 5 s | $0.007 |

Every post had its like count, date and author. Profiles returned 10–15 posts each (what Threads shows logged-out across the four tabs). Followers on that day: NASA 12.8M, Netflix 8.6M, The New York Times 4.8M, ESPN 4.6M, Adam Mosseri 1.1M.

In that first run Threads returned nothing for the phrase `ai agents`; the hashtag fallback added the same day now returns posts for it (6 in our check).

##### Bulk example

Monitoring 30 brand keywords and 50 competitor profiles every day ≈ 30 × 20 + 50 × 12 posts + 50 profiles ≈ 1,250 results per day ≈ **$38/month** on the free plan — less if you skip the daily profile rows or some tabs.

#### Price compared with other Threads Actors — 31 October 2026

Main-event prices listed on the Apify Store that day:

| Actor | Monthly users (31 Oct) | Listed price per 1,000 |
|---|---|---|
| futurizerush/meta-threads-scraper | 1,947 | $2.50 |
| apify/threads-profile-api-scraper | 678 | $5.00 |
| igview-owner/threads-search-scraper | 468 | $20.00 |
| watcher.data/search-threads-by-keywords | 461 | $8.00 |
| automation-lab/threads-scraper | 446 | $5.00 per post |
| logical_scrapers/threads-post-scraper | 376 | $2.50 |
| lergassy/threads-scraper | 181 | $2.00 per post |
| **This Actor** | new | **$1.00 per post** |

#### Who this is not for

Be clear on what logged-out Threads shows:

- **You need a profile's full post history.** Threads shows only the latest posts to visitors who are not logged in (10–25 per profile across the four tabs). This Actor does not log in and does not go past that wall. For ongoing coverage, schedule it — new posts are collected as they appear.
- **You need hundreds of results for one keyword.** Threads shows about 20–40 posts per keyword (search + topic tag) to logged-out visitors. Add more keywords and hashtags instead.
- **You need followers / following lists.** Not visible without login.
- **You need private profiles.** You get the profile row and a warning; private posts are never collected.
- **You need view counts.** Not shown in the logged-out feed.

#### What's new

- **3 November 2026** — Hashtag fallback: multi-word phrases that Threads returns empty (`ai agents`) are retried as a hashtag (`#aiagents`). In-depth documentation with real runs.
- **2 November 2026** — Empty search pages are retried twice with a new IP before warning (Threads sometimes returns 0 for a keyword that has posts).
- **1 November 2026** — Reposts are labelled `mediaType: "repost"`; empty bio-link titles are returned as null.
- **1 November 2026** — First release: keyword + topic tag search, profiles with four tabs, post URLs with replies.

#### How to scrape Threads

1. Open the Actor and click **Try for free**.
2. Add **keywords** (`marketing`, `#ai`), **usernames** (`nasa`, `@zuck`, profile URLs) and/or **post URLs**.
3. Choose the profile tabs and whether to add the matching hashtag page and replies.
4. Set **Max posts per keyword / profile / post**.
5. Click **Start** and export to JSON, CSV, Excel or HTML — or connect Google Sheets, a webhook or your code.

#### ⬇️ Input examples

##### Brand and topic monitoring

```json
{ "searchQueries": ["notion", "#productivity", "ai agents"], "maxPostsPerSource": 100 }
```

##### Search only, without the hashtag page

```json
{ "searchQueries": ["marketing"], "includeTagPage": false, "maxPostsPerSource": 50 }
```

##### Profiles with their latest posts (all four tabs)

```json
{ "usernames": ["nasa", "@netflix", "https://www.threads.com/@espn"], "profileTabs": ["threads", "replies", "media", "reposts"] }
```

##### Profile statistics with only the main posts tab

```json
{ "usernames": ["mosseri", "zuck", "nytimes"], "profileTabs": ["threads"], "maxPostsPerSource": 10 }
```

##### A post and its replies

```json
{ "postUrls": ["https://www.threads.com/@nasa/post/DfLnIF0F5Uo"], "includeReplies": true }
```

##### Everything in one run

```json
{
  "searchQueries": ["openai"],
  "usernames": ["openai", "nasa"],
  "postUrls": ["https://www.threads.com/@zuck/post/DPx4Yh1kVzr"],
  "maxPostsPerSource": 50
}
```

##### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | list | `["marketing"]` | Keywords or hashtags. ~20–40 posts per keyword for logged-out visitors. |
| `usernames` | list | `["nasa"]` | Usernames (`zuck`, `@nasa`) or profile URLs (threads.com or threads.net). |
| `postUrls` | list | | `https://www.threads.com/@user/post/CODE` or `threads.net/t/CODE`. |
| `includeTagPage` | yes/no | yes | Also scrape the topic tag with the same name as the keyword. |
| `profileTabs` | list | all four | `threads`, `replies`, `media`, `reposts`. |
| `includeReplies` | yes/no | yes | Replies of post URLs. |
| `maxPostsPerSource` | number | 100 | Upper limit per keyword, profile or post. |
| `maxConcurrency` | number | 5 | Keywords / profiles / posts processed in parallel. |
| `proxyConfiguration` | proxy | Apify Proxy | Datacenter proxy works well. |

#### ⬆️ Output examples

**Post** (real row, 3 November 2026):

```json
{
  "type": "post",
  "code": "DfLnIF0F5Uo",
  "url": "https://www.threads.com/@nasa/post/DfLnIF0F5Uo",
  "text": "Happy Halloween, from the crew aboard the space station! 🎃🚀\n\nShow us your out-of-this-world costumes in the comments!",
  "createdAt": "2026-11-01T02:01:27.000Z",
  "likeCount": 16215,
  "replyCount": 239,
  "repostCount": 734,
  "quoteCount": 92,
  "shareCount": 317,
  "mediaType": "text",
  "links": ["https://www.instagram.com/reel/DfLCpw5FfMO/"],
  "topicTag": "Space Threads",
  "language": "en",
  "isReply": false,
  "author": { "username": "nasa", "fullName": "NASA", "isVerified": true, "profileUrl": "https://www.threads.com/@nasa" },
  "source": "post"
}
```

**Profile**:

```json
{
  "type": "profile",
  "username": "nasa",
  "fullName": "NASA",
  "url": "https://www.threads.com/@nasa",
  "followerCount": 12786439,
  "isVerified": true,
  "isPrivate": false,
  "biography": "Making the seemingly impossible, possible. ✨",
  "bioLinks": [],
  "profileTags": ["NASA", "Space Threads", "Science Threads"],
  "profilePicUrl": "https://…"
}
```

Replies have `"type": "reply"`, `replyToUsername` and `parentPostUrl`. Inputs that cannot be read produce a free `warning` row (*"This Threads profile does not exist."*, *"No public posts found for this keyword."*).

#### Use cases for Threads data

##### Brand and social listening

Track what people post about your brand, product or competitors, with engagement per post.

##### Influencer research

Collect follower counts, bios, links and recent engagement of creators.

##### Trend monitoring

Follow topic tags and keywords daily and spot posts that take off.

##### Competitor tracking

Watch the latest posts of competitor accounts and their likes, replies and reposts.

##### Research and AI datasets

Build datasets of public Threads posts with dates, languages and engagement.

#### Integrations and Threads API

**Python**:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("rt-solutions/threads-scraper").call(run_input={"searchQueries": ["notion"], "maxPostsPerSource": 50})
for p in client.dataset(run.default_dataset_id).iterate_items():
    if p["type"] == "post":
        print(p["likeCount"], p["author"]["username"], p["text"][:80])
```

**JavaScript / Node.js**:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('rt-solutions/threads-scraper').call({ usernames: ['nasa'], profileTabs: ['threads'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.type === 'post').map((p) => `${p.likeCount} ${p.text?.slice(0, 60)}`));
```

**HTTP (one call, results in the response)**:

```bash
curl -X POST "https://api.apify.com/v2/acts/rt-solutions~threads-scraper/run-sync-get-dataset-items?timeout=120" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"searchQueries":["marketing"],"maxPostsPerSource":20}'
```

**No-code**: Make, n8n (*HTTP Request* node) and Zapier can call the same endpoint. To get each mention only once, deduplicate on `code` (n8n: *Remove Duplicates* node → "Remove items processed in previous executions"). Apify's **Google Sheets** integration and **webhooks** work too.

##### Use it from Claude, ChatGPT, Cursor or any MCP agent

Connect the Apify MCP server (https://mcp.apify.com) and allow `rt-solutions/threads-scraper`. Example request: *"Get the latest Threads posts about 'AI agents' and the profiles of @openai and @netflix with their follower counts."*

#### 🤖 For AI Agents & LLM Apps

- **What the tool does**: returns public Threads posts for keywords, latest posts and stats of public profiles, and posts with their replies.
- **Minimal inputs**: `{"searchQueries": ["<keyword>"]}`, `{"usernames": ["<username>"]}` or `{"postUrls": ["<url>"]}`.
- **Volume per source**: ~20–40 posts per keyword, ~10–25 per profile, ~10 reply threads per post (logged-out limits).
- **Output contract**: rows with `type` = `post` | `reply` | `profile`; `warning` rows contain no data and are free.
- **Deduplication across runs**: use `code` for posts and `username` for profiles.
- **Cost guard**: `maxPostsPerSource`; cost = posts × $0.001 + profiles × $0.002 on the free plan.

#### ❓ FAQ

##### How do I scrape Threads without logging in?

Enter keywords, usernames or post URLs and run. The Actor reads the public pages of threads.com — no account, cookies or API key.

##### Is it legal to scrape Threads?

The Actor only reads public pages that anyone can open without an account and collects no private data. Use the data responsibly and in line with the laws that apply to you (e.g. GDPR).

##### How much does it cost to scrape 10,000 Threads posts?

$10 at $1 per 1,000 posts ($7 on Business). 1,000 profiles cost $2.

##### Can I get a profile's full post history?

No. Threads shows only the latest posts to visitors who are not logged in, and this Actor does not log in. Schedule it to build a history going forward.

##### Why do I get only 20–40 posts for a keyword?

That is what Threads shows to logged-out visitors (search results + the matching topic tag). Add more keywords or hashtags.

##### Why does a multi-word keyword return few posts?

Threads often returns nothing for phrases like `ai agents`. The Actor then retries the hashtag form (`#aiagents`); results can still be fewer than for single words.

##### Can I monitor keywords or accounts?

Yes. Schedule the Actor (every hour, day…) and deduplicate on `code`.

##### Why are some fields empty?

`likeCount` is null when the author hid like counts; `shareCount` is not always shown; `images`/`videos` are empty for text posts; `bioLinks` is empty when the profile has none.

##### What about private profiles?

You get the profile row (followers, bio) and a warning; private posts are never collected.

##### Do threads.net links work?

Yes — threads.net and threads.com URLs, `@username`, `threads.net/t/CODE` short links.

##### Can I get followers lists or view counts?

No — they are not visible without logging in.

##### Can I export to CSV, Excel or Google Sheets?

Yes — download from the run, or use the Google Sheets integration.

##### Can I use it with the Apify API or an MCP server?

Yes — see "Integrations" (Python, Node.js, HTTP, Make, n8n, Zapier, MCP).

#### Limits

- Logged-out limits: ~20–40 posts per keyword, ~10–25 per profile, ~10 reply threads per post.
- No followers lists, view counts or private content.
- Threads sometimes returns empty pages; the Actor retries with new IPs and reports a warning if a page still cannot be read.

#### Run health

- 3 November 2026: 3 runs, 5 profiles, 115 posts and replies, 0 failed runs.
- Volume test (1 November 2026): 15 keywords + 15 profiles → 489 results in 92 s, 0 duplicates.

#### Your feedback

Missing a field or found a wrong value? Open an issue in the **Issues** tab — we answer fast and ship fixes (see "What's new"). If the Actor saved you time, a short review helps other marketers and researchers find it.

#### Related scrapers

- [Threads Profile Scraper](https://apify.com/rt-solutions/threads-profile-scraper) — simpler form for profiles only (followers, bio, links)
- [Threads Replies Scraper](https://apify.com/rt-solutions/threads-replies-scraper) — simpler form for the replies of post URLs
- [YouTube Scraper](https://apify.com/rt-solutions/youtube-scraper)
- [YouTube Comments Scraper](https://apify.com/rt-solutions/youtube-comments-scraper)
- [Google Trends Scraper](https://apify.com/rt-solutions/google-trends-scraper)
- [Weibo Scraper](https://apify.com/rt-solutions/weibo-scraper)

# Actor input Schema

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

Keywords or hashtags to search on Threads (e.g. marketing, #ai). Threads shows about 20–40 posts per keyword to visitors who are not logged in.

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

Threads usernames (zuck, @nasa) or profile URLs (https://www.threads.com/@nasa). Returns the profile (followers, bio, links) and its latest public posts.

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

Threads post URLs (https://www.threads.com/@user/post/CODE). Returns the post and its visible replies.

## `includeTagPage` (type: `boolean`):

For each keyword, also scrape the Threads topic tag with the same name (e.g. 'marketing' → #Marketing). Usually adds 10–30 posts.

## `profileTabs` (type: `array`):

Which profile tabs to read. Each tab adds the posts Threads shows publicly on it.

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

For post URLs, also return the replies Threads shows publicly.

## `maxPostsPerSource` (type: `integer`):

Upper limit of posts saved for each keyword, profile or post URL.

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

How many keywords, profiles or posts are processed in parallel.

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

Apify Proxy (datacenter) works well.

## Actor input object example

```json
{
  "searchQueries": [
    "marketing"
  ],
  "usernames": [
    "nasa"
  ],
  "includeTagPage": true,
  "profileTabs": [
    "threads",
    "replies",
    "media",
    "reposts"
  ],
  "includeReplies": true,
  "maxPostsPerSource": 100,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All results.

# 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 = {
    "searchQueries": [
        "marketing"
    ],
    "usernames": [
        "nasa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rt-solutions/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 = {
    "searchQueries": ["marketing"],
    "usernames": ["nasa"],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rt-solutions/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/EQgzhNQGSb7bbTOiG/builds/zR1ykNtUU9KJtzpv9/openapi.json
