Threads Keyword Search
Pricing
from $2.13 / 1,000 post rows
Threads Keyword Search
Search Threads by keyword and get one row per post that contains it: text, author, date, likes, replies, reposts, and the post link. Exact phrase matching, deduped across keywords, only new posts on a schedule. No login or key. CSV or Clay ready.
Pricing
from $2.13 / 1,000 post rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Search Threads for the words and phrases your buyers, competitors, and prospects use, and get one flat row per post that actually contains them: the text, the author, the publish date, likes, replies, reposts, quotes, and the post link. A post found by several keywords comes back once. Rows export to CSV or drop into a Clay table, a CRM import, or a social listening sheet.
Features
- Keyword search on Threads. Up to 50 keywords per run, each searched the way Threads search works for a visitor.
- Only posts that contain your keyword. Threads search also returns posts that only loosely relate to the words you typed. By default a post is kept only when your keyword is in its text, words next to each other and in order, with case and punctuation ignored, so
cold emailmatchesCold-emails. Choose all words in any order, or off to keep every result. Posts set aside are not charged. - No duplicates. A post found by several keywords is returned once, and
matched_keywordslists every keyword it matched. - Filters. Only posts from the last N days, a minimum like count, and replies on or off.
- Only new posts. On a schedule, a post an earlier run returned is skipped and not charged, so each run returns what is new.
- One summary row per keyword. A free row per keyword says how many posts Threads returned, how many were delivered, and how many were set aside and why.
- Cost guards. Max posts per keyword and a max charge per run.
How Threads is read
The actor opens the public Threads search page for each keyword, the page a browser that is not logged in sees, through the Apify proxy, and reads the posts the page carries. No Threads or Instagram account, no login, and no key are used, and no other developer's actor is called. A search the proxy pool cannot get through is retried on residential addresses.
Threads shows a visitor who is not logged in one page of results per search, about 20 to 25 posts, ranked by Threads. So each keyword returns at most about 25 posts per run. Use more specific keywords, several phrasings of one idea, or a schedule with Only new posts on to collect more over time.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | array | Words or phrases to search for, up to 50 | |
max_posts_per_keyword | number | 25 | Posts per keyword, up to 50 (Threads shows about 20 to 25) |
match_mode | string | phrase | phrase, all_words, or off |
since_days | number | Set aside posts older than this many days | |
min_likes | number | Set aside posts with fewer likes | |
include_replies | true or false | true | Return matching replies too |
only_new | true or false | false | Skip posts an earlier run returned (free) |
state_key | string | Name for the only new posts memory | |
max_charge_usd | string | Stop before a charge that would pass this amount | |
proxy_mode | string | auto | auto or residential. A reliability setting; it does not change what you pay |
Output
| Field | Type | Example |
|---|---|---|
row_type | string | post, keyword_summary, or run_summary |
keyword | string | cold email |
matched_keywords | array | ["cold email"] |
match_type | string | phrase, all_words, or none |
post_id | string | 4017881578785193848 |
post_code | string | DfCYgIdE794 |
post_url | string | https://www.threads.com/@devinpcrudup/post/DfCYgIdE794 |
text | string | One cold email changed everything for me. |
author_username | string | devinpcrudup |
author_full_name | string | Devin P. Crudup |
author_is_verified | true or false | false |
author_profile_url | string | https://www.threads.com/@devinpcrudup |
published_at | string | 2026-10-28T12:00:30.000Z |
like_count | number | 7 |
reply_count | number | 2 |
repost_count | number | 1 |
quote_count | number | 0 |
media_type | string | text, image, video, carousel, or other |
link_url | string | the link the post shares |
is_reply | true or false | false |
is_new | true or false | true with Only new posts on |
posts_found, rows_delivered, skipped_seen, skipped_filtered | number | keyword summary counts |
row_status | string | ok, no_results, no_change, partial, blocked, or error |
error_reason | string | why a summary row is not ok |
billable_events_json | string | {"post-row":1}, or {} for a free row |
scraped_at | string | when the row was written |
Pricing
Pay per event. You pay for post rows and the run start. Keyword summary rows, a refused input, posts set aside by your filters, and posts already delivered with Only new posts on are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
post-row, one Threads post that contains your keyword | $0.0025 | $0.002375 | $0.00225 | $0.002125 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.0015 | $0.0015 | $0.0015 | $0.0015 |
Per 1,000 posts: $2.50 on the free plan, $2.13 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 600 post rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
Usage examples
Apify Console or API.
{"keywords": ["cold email", "lead generation", "hubspot alternative"],"match_mode": "phrase","since_days": 30,"only_new": true}
Read the rows with GET https://api.apify.com/v2/datasets/{datasetId}/items.
Clay. Run the actor from a Clay HTTP column or the Apify integration and map the flat columns. Number and on or off inputs are text fields, which is what Clay sends: numbers as text and true or false. A list input takes a JSON list, so put the column inside a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-threads-keyword-search exposes the tool search_threads_posts to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| No keyword, more than 50, or a value the actor cannot read | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| Threads returns no posts for a keyword | A free summary row, row_status no_results |
| Every post is set aside by your filters | A free summary row, row_status no_results, with the counts |
| Threads refuses a search | Retried on a new address, then on residential addresses; if every route refuses, a free summary row with row_status blocked |
| No new posts with Only new posts on | A free summary row, row_status no_change |
| The run is close to its timeout | The actor stops starting new searches 90 seconds before the timeout and delivers what it has |
Limitations
- About 20 to 25 posts per keyword per run: Threads shows a visitor who is not logged in one page of results, ranked by Threads, not newest first.
- Some short or unusual keywords return no posts to a visitor who is not logged in, even when posts with those words exist.
- Like, reply, and repost counts are read at the time of the run.
- Posts from private profiles are not shown by Threads search, so they are not returned.
Mamba Labs actor suite
MCP servers for the suite are published under the npm scope @mambalabsdev.
Built by Mamba Labs.