Threads Search Scraper โ Keywords, Hashtags, Accounts
Pricing
from $1.40 / 1,000 posts
Threads Search Scraper โ Keywords, Hashtags, Accounts
Search Meta Threads by keyword or hashtag and get every public post as a row: text, author, time, likes, replies, reposts, images, videos, links and mentions. Top, recent and tag pages in one pass, deduplicated. Finds matching accounts too. No login, no browser.
Pricing
from $1.40 / 1,000 posts
Rating
5.0
(6)
Developer
Matvey
Maintained by CommunityActor stats
0
Bookmarked
36
Total users
20
Monthly active users
11 hours ago
Last modified
Categories
Share
Threads Search Scraper turns a keyword or a hashtag into rows of public Threads posts: text, author, time, likes, replies, reposts, quotes and shares, images and videos, links, mentions and hashtags. It reads the top, recent and tag result pages in one pass and removes duplicates, so a search returns what Threads actually shows a visitor โ not one slice of it. It can also return the accounts behind a keyword instead of their posts. No login, no cookies, no browser.

Paste keywords or #hashtags, click Start, export as JSON, CSV or Excel โ or call it from the API and from AI agents.
Tested head-to-head โ 26 September 2026

The same request went to this Actor and to the six most-used Threads search Actors on the Apify Store, from an ordinary paying account: keyword coffee, 20 posts. Threads answers a keyword with whole threads, so a scraper that keeps every post in a thread hands you the replies and root posts around the match too. This Actor puts the posts that contain your keyword first; every row carries containsKeyword, and Only posts that contain the keyword removes the rest.
| This Actor | The six others | |
|---|---|---|
| Posts returned (20 asked) | 20 | 15โ20 |
| Posts that mention "coffee" | 20 of 20 | 4โ17 of 20 |
| Fee for starting a run | None | five of six charge one ($0.00005โ0.08) |
| Cost per 1,000 posts delivered | $2.00 | $2.49โ21.00 |
What is it for?
Social listening and brand monitoring, tracking a campaign hashtag, watching a competitor's mentions, collecting posts for research, and AI agents asked "what are people saying about X on Threads". Threads' official API only covers your own account; this Actor reads the public pages Threads serves to any visitor, so any public post is in reach.
| Mode | You give | You get |
|---|---|---|
| Search | keywords, #hashtags | public posts from the top, recent and tag pages, deduplicated |
| Accounts | keywords | people and brands matching the keyword, optionally with full profile details |
searchTypes decides which result pages are read (top, recent, tags), postedAfter cuts everything older than a date, and filterKeywords keeps only posts that contain one of your words.
What data does it return?
| Field | Example |
|---|---|
id, code, url | 3977518562965884838 ยท Dcy_A8pGo-m ยท https://www.threads.net/@zuck/post/Dcy_A8pGo-m |
text, language | "Muse Spark 1.3 is rolling out todayโฆ" ยท en |
createdAt, timestamp | 2026-09-02T19:26:23.000Z ยท 1788377183 |
username, userId, fullName, isVerified, profilePicUrl, profileUrl | zuck ยท 63055343223 ยท Mark Zuckerberg ยท true ยท โฆ |
likeCount, replyCount, repostCount, quoteCount, shareCount | 1453 ยท 196 ยท 148 ยท 28 ยท 78 |
viewCount | the views Threads prints under the post, read from the post's own page; null while Threads has not made them public yet (very new posts) |
mediaType, imageUrl, videoUrl, images[], videos[] | carousel ยท โฆ ยท [{url,width,height,alt}] ยท [{url,thumbnail,hasAudio}] |
hashtags, mentions, urls, linkPreview | ["ai"] ยท ["natgeo"] ยท ["https://โฆ"] ยท {url, title, imageUrl} |
isQuote, quotedPost, isRepost, repostedPost | the quoted or boosted post, inline |
source, query | search-top ยท search-recent ยท search-tag ยท the keyword that found the row |
Account rows carry username, userId, fullName, biography, bioLinks, websiteUrl, emails and phones from the bio, followerCount, isVerified, isPrivate, profilePicUrl, profileUrl.
How much does it cost?
Pay per row, no start fee, and error rows are free. There is no browser here, so platform usage is close to zero.
| Row | Price |
|---|---|
| Post | $0.002 โ 1,000 posts for $2 |
| Account match | $0.002 |
| Account with full profile details | $0.004 |
Larger monthly plans get 10โ30 % off.
Bulk export: what 50,000 posts actually cost
This Actor is built for bulk jobs โ put hundreds of inputs into one run, or call it from the API on a schedule. There is no fee per run, no fee per page and no proxy charge: you pay for the rows you keep, and error rows are free. That is what decides the bill once you pull a whole market rather than a single account.
| Job | This Actor | Most-used Actor in this category |
|---|---|---|
| 50,000 posts across 100 runs | $100 | $127 |
Checked on the Apify Store on 21 September 2026 against the Actor with the most monthly users in this category; its per-run fee is counted in, as ours would be if we charged one. Some Actors here ask less per row โ this table compares against the one buyers actually use most.
How to search Threads
- Put your terms in ๐ Keywords or hashtags โ
bali,#ai, a brand name, one per line. - Pick the result pages in ๐ Search result pages: top is what Threads ranks highest, recent is the live feed, tags is the hashtag page.
- Set ๐ Only posts after when you want new posts only โ that turns a repeated run into monitoring.
- Switch ๐งญ What to get to users to search accounts instead of posts.
- Click Start, then export as JSON, CSV or Excel, or read the dataset from the API.
โฌ๏ธ Input
{"mode": "search","keywords": ["#ai", "artificial intelligence"],"searchTypes": ["top", "recent"],"maxPosts": 200}
Brand monitoring, only what is new since a date:
{ "mode": "search", "keywords": ["apify"], "postedAfter": "2026-09-01", "includeProfile": true, "maxPosts": 100 }
Accounts instead of posts:
{ "mode": "users", "keywords": ["photographer"], "maxUsersPerKeyword": 50 }
Every input field
| Field | What it does |
|---|---|
mode | search โ posts matching your terms. users โ accounts matching them. |
keywords | Terms or hashtags. #ai searches the hashtag page, plain words the post index. |
searchTypes | Which result pages to read: top, recent, tags. Fewer pages, fewer duplicates. |
startUrls | Threads search or tag URLs, when you already have the link. |
maxPosts | Posts per keyword. Billing is per row, so this is your budget per term. |
postedAfter | Drop anything older. The field that turns this into a monitor. |
filterKeywords | Second filter applied to the text: keep only posts that also contain one of these. |
includeProfile | Add a profile row for each author โ followers, bio, links, contacts. |
maxUsersPerKeyword | Accounts per term in users mode. |
includeViews | Fill viewCount from each post's page (on by default, no extra charge). Turn off for the fastest bulk runs. |
maxItems | Ceiling on rows for the whole run. |
โฌ๏ธ Output
{"type": "post","id": "3712...","code": "DdRSOdDjetX","url": "https://www.threads.net/@natgeo/post/DdRSOdDjetX","username": "natgeo","text": "The ocean holdsโฆ","language": "en","createdAt": "2026-09-14T18:20:11.000Z","likeCount": 812,"replyCount": 40,"repostCount": 11,"quoteCount": 2,"hashtags": ["ocean"],"mentions": [],"urls": ["https://on.natgeo.com/โฆ"],"imageUrls": ["https://โฆ"],"videoUrls": [],"searchQuery": "#ocean","searchType": "top","scrapedAt": "2026-09-15T09:00:00.000Z"}
searchQuery and searchType say which term and which result page produced the row โ necessary when you search several keywords at once. Posts that fail arrive as type: "error" rows and are free.
Use cases
Brand and product monitoring
Search your brand name with postedAfter set to yesterday, schedule it daily, and you have a feed of every new mention with its engagement.
Hashtag and trend research
Read a hashtag's top and recent pages together to see both what performed and what is being posted right now.
Finding accounts in a niche
Users mode turns a keyword into a list of accounts with follower counts โ the first step of any influencer shortlist.
Sentiment and language filtering
Every post carries language and its engagement counts, so you can cut to English-only posts above a like threshold before analysis.
AI agents and RAG
An agent asked "what are people saying about X on Threads" runs one search and reads the text fields straight off the rows.
๐ค For AI agents and LLM apps
Compact reference for agents calling this Actor through the Apify MCP server or the API (lergassy/threads-search-scraper).
Purpose: find public Threads posts or accounts for a keyword or hashtag, with engagement numbers attached.
Minimal input:
{ "mode": "search", "keywords": ["bali"], "maxPosts": 50 }
Behaviours an agent should know:
- Threads returns fewer results for a rare term than
maxPostsasks for. A short list is the platform's answer, not an error. searchTypesdecides the flavour:topfor the posts that performed,recentfor what is happening now.- Use
postedAfterfor anything time-sensitive; without it you get the whole index the search page offers. filterKeywordsnarrows on the text after the search โ the way to remove homonyms ("apple" the company vs the fruit).- Rows are deduplicated across search types, so a post ranked both top and recent is billed once.
includeProfileadds a separate, more expensive profile row per author. Leave it off unless you need contacts.
Use via API
Run this Actor from your own code or pipeline. Get your token in Apify Console โ Settings โ API & Integrations. Every input field below has the same name as in the JSON tab of the input form.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("lergassy/threads-search-scraper").call(run_input={"mode": "search","keywords": ["bali"],"maxPosts": 50,"searchTypes": ["top","recent"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('lergassy/threads-search-scraper').call({"mode": "search","keywords": ["bali"],"maxPosts": 50,"searchTypes": ["top","recent"]});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL (runs the Actor and returns the results in one call)
curl -X POST "https://api.apify.com/v2/acts/lergassy~threads-search-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "search", "keywords": ["bali"], "maxPosts": 50, "searchTypes": ["top", "recent"]}'
Limitations, stated plainly
- What a logged-out visitor can see. Threads shows a slice of its index to visitors; this Actor reads that slice honestly rather than pretending to have the whole platform.
- No date filter inside search. Threads has none, so
postedAfteris applied to the results after they arrive. - Hashtags and plain words behave differently.
#aireads the tag page;aireads the post index. Ask for both if you want both. - Replies and whole conversations are elsewhere โ Threads Replies Scraper handles those.
- Refusals. When Threads refuses a request, it is retried on a new address and then once through a residential address at our cost. If Threads keeps refusing most of a run, the Actor pauses once, then stops instead of grinding: the keywords it did not get to are listed in the
NOT_ATTEMPTEDrecord and in the status message (not charged โ run them again later). Refused pages are freeerrorrows.
Run health
When a run ends with many error rows, the Actor sends its developer the counts (rows delivered, error types, run ID) so the cause gets fixed fast; your input and results are never sent.
Integrations
Runs from the Apify API, the Python and JavaScript clients, and from n8n, Make or Zapier through the Apify app. Schedule it, push the rows into Google Sheets, Slack or a webhook, or let an agent call it through the Apify MCP server.
โ FAQ
Do I need a Threads account or cookies?
No. It reads the public search pages Threads serves to any visitor.
Why did I get fewer posts than I asked for?
Because the term has fewer public results. Broaden the keyword, add recent to searchTypes, or search several related terms in one run.
Can I filter by date?
Yes, with postedAfter. Threads itself offers no date filter, so the Actor applies yours to the results.
Do the results contain my keyword?
Yes โ and if you add filterKeywords, rows that do not contain your words are dropped before you are billed.
Will I pay twice for the same post?
No. A post found on more than one result page is deduplicated inside the run.
Can I search hashtags and plain keywords together?
Yes. Put both in keywords; #tag goes to the tag page and plain words to the post index.
How do I find accounts rather than posts?
Set mode to users. You get one row per account with followers, bio and links.
Is scraping Threads search legal?
The Actor reads public pages at a normal rate without logging in, which is ordinary public-data collection. What you do with the data afterwards is on you.
You might also like
| Actor | What it does |
|---|---|
| Threads Scraper | Search, posts, replies and profiles in one Actor |
| Threads Profile Scraper | Full profiles with followers, bio and contacts |
| Threads Replies Scraper | Replies, reposts and whole conversations |
| Trustpilot Reviews API | The same monitoring idea for review sites |
Also known as
People look for this Actor as a Threads search scraper, Threads hashtag scraper, Threads keyword API, Threads brand monitoring tool, Threads mentions tracker and a Threads trend research tool.
Notes
Threads shows search results to logged-out visitors, and that is exactly what this Actor reads โ public posts only. Private accounts are never opened. How many results a keyword has is Threads' decision, not ours: rare keywords return a handful of posts, and maxPosts caps the rest.
Need an account's own posts, its profile and contacts, or a whole conversation? Those live in Threads Profile Scraper, Threads Replies Scraper and the all-in-one Threads Scraper.