# Threads Search Scraper: Keywords & Hashtags (`deepmine/threads-search-scraper`) Actor

Search Meta Threads posts by keyword or hashtag, no login: often hundreds of matching posts per term (Top or Recent), with likes, replies, reposts, shares, media, links and dates. Or find up to 100 accounts per term with followers, bio, links and emails.

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

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 Search Scraper: Keywords & Hashtags

Search Threads posts by keyword or hashtag with no login and get every matching post, or the accounts behind a topic, as a table.

| Term | User | Post | Likes | Replies | Posted |
|---|---|---|---|---|---|
| coffee | [pavelkucherov18](https://www.threads.com/@pavelkucherov18/post/DeB-uctiiC4) | What I learned in Spain, the coffee break ✌️ | 98 | 9 | 2026-10-03 |
| coffee | [carpenterofqaqc](https://www.threads.com/@carpenterofqaqc/post/DeCI2HWHDRz) | Good Mornong All! It’s a bright beautiful brisk ea… | 68 | 15 | 2026-10-03 |
| coffee | [billbill5599](https://www.threads.com/@billbill5599/post/DeCjz4liZtg) | Enjoy a great Cup of coffee!!! | 9 | 2 | 2026-10-03 |

<sub>Collected 2026-10-03 with this Actor's prefilled run ("coffee" and "skincare", 45 posts each: 90 results). $2.29 per 1,000 results on the Free plan and $1.99 on every paid plan, with no start fee. The prefilled run costs about $0.18 on Starter.</sub>

### What you can search

| You type | You get |
|---|---|
| A word or phrase (`coffee`, `real estate`) | Posts that mention it, **Top** (Threads' order) or **Recent** (newest first, sent as each search page arrives) |
| A hashtag (`#booktok`) or a Threads search or tag URL | Posts from that tag |
| Any term with **Search for: Accounts** | Up to 100 accounts per term with followers, bio, bio links, emails and phones |

Use it to track a brand, product or topic on Threads, collect posts for research, sentiment or AI training, or
find creators in a niche for outreach.

### Search depth

Threads shows logged-out visitors one page (13-20 posts) per search. This Actor reads every page Threads offers
for a term (its default and top lists, the hashtag, the singular or plural form, and up to 8 related topic tags).
When those run out before your **📊 Max results per term**, **Search deeper** (on by default) reads the newest posts
of the authors it found and of the accounts Threads ranks for the term, and keeps only posts whose own text, topic
or hashtags contain your words. Each row says where it came from in `searchSource`.

| Search term | Threads' search and tag pages | With Search deeper |
|---|---|---|
| coffee | 155 | 363 |
| skincare | 124 | 506 |
| real estate | 99 | 391 |
| marathon training | 40 | 160-204 |
| ai agents | 28 | 136-149 |

<sub>Posts that mention the term, per term, measured 2026-10-03 on Apify datacenter IPs with the same engine.
Counts change with what people post.</sub>

**Only posts that mention the search term** (on by default) drops the loosely related posts Threads' search also
shows; dropped posts are free. In the prefilled run it left out 21 loosely related posts.

### Output

The Output tab opens on **🧵 Posts** (Posts, Media, and Views and authors views) and **📇 Accounts** for account searches. Every
field has a label and a description in the dataset schema. Posts:

- who: `username`, `fullName`, `profilePicUrl`, `isVerified`
- what: `text`, `textSnippet`, `url`, `createdAt`, `language`
- engagement: `likeCount`, `replyCount`, `repostCount`, `quoteCount`, `shareCount` and `viewCount` (Threads hides
  many zero counts; those come back empty)
- media: `mediaType`, `thumbnailUrl`, `mediaUrl`, `images`, `videos`, `carouselCount`
- `hashtags`, `mentions`, `links` (real URLs, not Threads' redirect links), `emails`, `topicTag`, link preview
  (`linkPreviewUrl`, `linkPreviewTitle`)
- replies and quotes: `isReply`, `replyToUsername`, `parentPostUrl`, `parentPostText`, `replyDepth`,
  `isQuotePost`, `quotedPostUrl`, `quotedPostText`
- ids and source: `postId`, `code`, `userId`, `inputType`, `input`, `scrapedAt`
- search: `searchQuery`, `searchSource`, `keywordMatch`
- author (on by default, one lookup per author per run): `authorFollowerCount`, `authorBio`,
  `authorProfilePicHdUrl`, `authorProfileTags`, `authorInstagramFollowerCount`, `authorBioLinks`
- also: `imageCount`, `gifUrl`, `gifDescription`, `canReply`, `areCountsHidden`, `transparencyLabel`

Accounts: `username`, `fullName`, `followerCount`, `bio`, `bioLinks`, `emails`, `phones`, `isVerified`,
`profileTags`, `instagramFollowerCount`, `searchQuery`.

**👁️ View counts on every post** and **👤 Author details on every post** are on by default: each post gets its
`viewCount` and its author's followers, bio, HD photo and topics, read in parallel while rows stream (same
price; turn them off for faster big runs).

### Speed

Plain HTTPS on Apify datacenter IPs, no browser, 256 MB. The prefilled run (90 posts) took
8 s with the first row after 2.6 s (local run of this build through Apify
datacenter IPs, 2026-10-03). On the Apify platform the same engine read 10 terms × 15 posts in 52 s. Terms are read one
after another, so a run's time grows with the number of terms.

**Posted after** / **Posted before** keep only posts in a date window (a date or a period like `7 days`). Threads'
own date filters need a login, so the window applies to what the search returns; posts outside it are not charged.

### Pricing

Pay per result: **$2.29 per 1,000 on Free, $1.99 per 1,000 on Starter, Scale and Business**. No start fee. Only
results in your dataset are charged; filtered posts and repeats are free. Set a maximum cost per run in the run
options and the run stops exactly there. A run that Apify restarts never charges a result twice.

### FAQ

**Do I need a Threads or Instagram account?** No. Everything comes from what Threads shows logged-out
visitors, through Apify datacenter IPs (residential only as a fallback, at no extra cost to you).

**How many posts per term?** Usually a few hundred with Search deeper on (see the table); niche terms fewer. The run
summary (`OUTPUT`) says per term how many were found and why it stopped.

**Is there a Threads search API?** Meta's official Threads API has keyword search only for your own app's users.
Call this Actor from the Apify API, a schedule or an integration and get JSON, CSV or Excel.

### Related Actors

- [Threads Scraper](https://apify.com/deepmine/threads-scraper): search, profiles, posts and replies in one Actor.
- [Threads Profile Scraper](https://apify.com/deepmine/threads-profile-scraper): followers, bio, links and the linked Instagram's counts.
- [Threads Posts Scraper](https://apify.com/deepmine/threads-posts-scraper): every post of an account, or posts by URL with views.
- [Threads Replies Scraper](https://apify.com/deepmine/threads-replies-scraper): every reply under a post, 3 levels deep.

### Feedback

Missing a field or an input type? Open an issue on the Actor's page; we answer quickly. If the data helped you, a
short review on the Store page helps others find it, and helps us a lot.

# Actor input Schema

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

Words or hashtags, one per line, e.g. coffee or #booktok. A Threads search or tag URL works too.

## `searchType` (type: `string`):

Posts that mention the term, or accounts (up to 100 per term, each with followers, bio and links).

## `maxItemsPerInput` (type: `integer`):

Most posts (or accounts) per search term. A term gives up to a few hundred posts (see Search depth in the README); accounts stop at 100.

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

Top is Threads' own order; Recent puts the newest posts first.

## `onlyMatchingPosts` (type: `boolean`):

Threads also shows loosely related posts. On: keep only posts whose text, topic, hashtags or author name contain your words. Posts left out are not charged.

## `deepSearch` (type: `boolean`):

When Threads' search pages run out before your max, also read the newest posts of the authors found and of accounts matching the term, keeping posts that mention it. Off: Threads' search pages only.

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

A date (2026-09-01) or a period (7 days, 12 hours). Empty = any time. Posts outside the window are not charged.

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

A date (2026-09-30) or a period. Empty = up to now.

## `includeViewCounts` (type: `boolean`):

On: every post found gets its view count (viewCount), read in parallel from the post's own page; rows still stream as they're ready. Same price.

## `includeAuthorDetails` (type: `boolean`):

Add the author's followers, bio, HD photo, topics, Instagram followers and bio links to every post row (looked up once per author). Same price.

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

Leave as is. The Actor starts on Apify datacenter IPs, which Threads serves, and moves a request to residential only if Threads refuses. Same price either way.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee",
    "skincare"
  ],
  "searchType": "posts",
  "maxItemsPerInput": 45,
  "sort": "top",
  "onlyMatchingPosts": true,
  "deepSearch": true,
  "includeViewCounts": true,
  "includeAuthorDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `posts` (type: `string`):

No description

## `accounts` (type: `string`):

No description

## `overview` (type: `string`):

No description

## `summary` (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 = {
    "searchQueries": [
        "coffee",
        "skincare"
    ],
    "maxItemsPerInput": 45
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/threads-search-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": [
        "coffee",
        "skincare",
    ],
    "maxItemsPerInput": 45,
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/threads-search-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": [
    "coffee",
    "skincare"
  ],
  "maxItemsPerInput": 45
}' |
apify call deepmine/threads-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/threads-search-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/s52EJemkmcNsj92rd/builds/9E6WQUZXpTJ5ZVGXL/openapi.json
