Threads Search Scraper — Keyword Search to JSON avatar

Threads Search Scraper — Keyword Search to JSON

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Threads Search Scraper — Keyword Search to JSON

Threads Search Scraper — Keyword Search to JSON

Search public Threads (Meta) by keyword and get clean structured JSON: text, author, timestamp, likes, replies, reposts. No login or cookies. Duplicates across keywords are removed, so you are never billed twice for the same post.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Northbound Data

Northbound Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Threads Search Scraper — Keyword Search to Clean JSON

Search public Threads (Meta) by keyword and get back a flat, structured dataset: post text, author, timestamp, likes, replies, reposts. No login. No cookies. No account of yours is ever used.

Give it a list of keywords, get one row per matching post.


Why this one

Duplicates across keywords are removed — and never billed twice.

If you search ai agents, ai automation and llm tools, the same post will often match more than one of them. Most scrapers hand you that post three times and charge you three times. This Actor deduplicates by post ID across the whole run, so you pay once and your dataset stays clean. Each record carries the query field that matched it.

Structure-adaptive parsing. Most Threads scrapers hard-code GraphQL doc_id values or fixed JSON paths, so they break the moment Meta ships a change. This one identifies data by structural signature, not by path — a Meta refactor degrades output instead of killing the run.

Retries transient failures. A single flaky response does not become a failed run. The Actor retries with backoff, and distinguishes a genuinely missing target (returns immediately, no wasted compute) from a temporary hiccup (retried).

Measured 0% failure rate. Across a 24-task benchmark (8 profiles, 10 posts, 6 keyword searches) this engine delivered 647 records with zero failed tasks, averaging 5.5 s per task. The two largest Threads Actors on the Store run at 13.5% and 13.1% failure (measured 2026-08-19).

Reports its own reliability. Every run writes a RUN_SUMMARY with queries, itemsPushed, failedQueries and failureRate, so you can verify quality yourself instead of taking our word for it.


Threads exposes five separate public search surfaces, and each returns a different result set:

SurfaceWhat it is
defaultThe standard results page
recentRecency-weighted results
topEngagement-weighted results
usersResults surfaced through matching accounts
tagsResults surfaced through matching hashtags

Meta caps each individual surface at roughly 20 results. Most scrapers query only the default surface and stop there, so they hand you ~20 posts.

This Actor queries all five and merges them, deduplicated by post ID. Measured on real keywords:

KeywordSingle surfaceAll five merged
ai agents2047
climate tech2154

That is 2.4–2.7x more unique posts per keyword, and every record carries a search_surface field so you can see where it came from. Set searchDepth to standard if you prefer the faster, cheaper single-surface behaviour.

This is not a bypass. All five surfaces are the same public endpoints the Threads website itself uses, read logged-out. We do not use accounts, cookies, or any circumvention.

Honest limitation — please read before you buy

Even with all five surfaces merged, you get roughly 50 posts per keyword, not thousands. Meta's per-surface cap is real and we do not pretend otherwise. Anything promising thousands of logged-out search results is either using logged-in accounts (against Threads' terms, and those accounts get banned) or it is not telling you the truth.

This Actor is built for breadth: give it 200 keywords and get ~50 fresh posts for each, reliably. If you need a deep historical archive of one keyword, this is not the right tool and you should not buy it.


Why residential proxy is the default

Meta serves empty shell pages to datacenter IPs. When that happens this Actor falls back to full browser rendering, which still returns correct data but is dramatically slower and more expensive.

Measured on the Apify platform, same target, same day (2026-08-19):

ProxyMode usedTime per profileCompute cost per run
Datacenter (Apify default)browser rendering150 s$0.127
Residentialdirect fetch3.3 s$0.0086

That is 45x faster and 15x cheaper, for a residential transfer cost of roughly 7% of what the returned records are worth. So RESIDENTIAL ships as the default proxy group.

You can override it, but if you switch to datacenter expect slow runs — the Actor will still work, it just has to render every page.


Input

{
"searchQueries": ["ai agents", "climate tech", "web scraping"],
"includeReplies": true,
"maxItems": 1000
}
FieldTypeNotes
searchQueriesarrayKeywords to search. Deduplicated automatically.
includeRepliesbooleanDefault true. Set false for top-level posts only.
searchDepthstringdeep (default) queries all five surfaces (~50 posts/keyword); standard queries only the default surface (~20).
maxItemsintegerHard cap on billed records. Your safety net.
proxyConfigurationobjectDefaults to RESIDENTIAL. See the section above — datacenter IPs get shell pages from Meta and force slow rendering.

Output

One flat record per matching post:

{
"id": "3961381054679086896",
"code": "Db5pxS4G_cw",
"url": "https://www.threads.com/@someone/post/Db5pxS4G_cw",
"query": "ai agents",
"is_reply": false,
"text": "This website has 1M+ skills for your AI agents",
"posted_at": "2026-08-11T13:04:02.000Z",
"like_count": 101,
"reply_count": 2,
"repost_count": 0,
"quote_count": 0,
"author": {
"id": "63294227753",
"username": "someone",
"full_name": "Some One",
"is_verified": false,
"profile_pic_url": "https://…"
},
"media": { "images": [], "videos": [], "alt_text": null },
"source_url": "https://www.threads.com/search?q=ai%20agents",
"scraped_at": "2026-08-15T07:28:00.000Z"
}

What it's used for

  • Threads social listening & brand monitoring — track how a topic, product or category is actually discussed, including the comments people leave on posts that match your keywords, across all five public search surfaces rather than the one most tools read
  • Hashtag monitoring — the tags surface is queried as a first-class source, not an afterthought
  • Sentiment datasets — every record carries text, engagement counts and a timestamp, which is what a sentiment pipeline needs and nothing it does not
  • Competitor tracking — sample competitor names and category terms on the same schedule
  • Trend research — sample hundreds of keywords cheaply and compare engagement between them
  • Lead and creator discovery — find accounts posting about your niche
  • AI agents & RAG — clean JSON in, no HTML parsing, ready to embed

On breadth vs depth

This Actor is built for breadth: many keywords, ~50 fresh posts each, reliably, on a schedule. That shape suits social listening and brand monitoring, where you care about what is being said across a category right now. It is not a historical archive tool — see the honest limitation above before you buy.

Pricing

Pay per result. You are charged only for records actually delivered to your dataset, and duplicates within a run are never billed twice. maxItems caps your spend.

Need posts, replies and profiles as well as search? See Threads Scraper — Posts, Profiles, Replies & Search by the same author.

The numbers behind this page

Everything this Actor claims about Threads' logged-out ceilings — the ~20 reply cap, the five search surfaces, the four profile tabs, and the empty shell page Meta serves to datacenter IPs as a valid HTTP 200 — is written up with the measurements, dates and method here:

What Threads actually returns when you are not logged in

It is a reference, not a sales page. If you are evaluating any Threads scraper, including someone else's, those are the limits to test them against.


Open-source client

There is a small MIT-licensed JavaScript client for this Actor, so you do not have to write the run-start / polling / dataset-pagination plumbing yourself:

github.com/zhanghengrui0308/threads-data-client — zero dependencies, Node 18+.

import { ThreadsClient } from 'threads-data-client';
const threads = new ThreadsClient(process.env.APIFY_TOKEN);
const rows = await threads.search(['ai agents', 'climate tech'], { maxItems: 200 });

It also exposes estimateCost(actor, records, tier), which tells you the exact USD bill for a run before you start it, at your own plan tier.

You do not need it — the Actor works fine from the Apify Console, the API, or any HTTP client. It is there if you would rather read the code than trust a description of it.


Reads public Threads pages only. No login, no cookies, no CAPTCHA solving, no access-control circumvention. On robots.txt, stated plainly: threads.com/robots.txt runs an allowlist. Named crawlers (Googlebot, Bingbot, GPTBot, ClaudeBot and others) are granted specific access; for every other user agent the file says Disallow: /, and its opening notice states that automated collection requires express written permission from Meta. This Actor is not on that allowlist. We say so because you should decide with the real facts rather than a comfortable summary, and because you are the party accountable for how the data is collected and used under Meta's terms and applicable law. You are responsible for how you use the data, including GDPR/CCPA obligations where personal data is involved.