Threads Scraper — Posts, Profiles, Replies & Search avatar

Threads Scraper — Posts, Profiles, Replies & Search

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Threads Scraper — Posts, Profiles, Replies & Search

Threads Scraper — Posts, Profiles, Replies & Search

Extract public Threads (Meta) data — posts, replies, profiles, keyword search — as clean structured JSON. No login or cookies. Recommended posts are filtered out, so replies are actually replies. Structure-adaptive parser that survives Meta's changes.

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

21 minutes ago

Last modified

Share

Threads Scraper — Posts, Profiles, Replies & Keyword Search

Extract public Threads (Meta) data as clean structured JSON: posts, replies, profiles and keyword search results. No login. No cookies. No account of yours is ever used.

Give it a post URL, a profile URL, a @username or a keyword — mix them freely in one run — and get back a flat, ready-to-use dataset.


Why this one

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

This ActorTypical alternative
Measured failure rate0% across 24 tasks — 8 profiles, 10 posts, 6 keyword searches, 647 records delivered, 72 fetches with zero render fallbacks13% – 17% on the two largest Threads Actors
Recommended posts mixed into repliesNever — filtered out explicitlyCommon, and it silently pollutes your dataset
Breaks when Meta rotates doc_idNo — nothing is hard-codedYes
Login / cookies requiredNoVaries

Replies are actually replies

Threads serves recommended posts in the same payload as the real replies to a post. Naive scrapers hand you both, mixed together, with no way to tell them apart — you think you have 30 replies to your post, and 10 of them are strangers talking about something else.

This Actor separates them and returns only genuine replies, each carrying root_post_author and replied_to_username so you can verify the thread they belong to.


Honest limitation — please read before you buy

Meta caps logged-out access to Threads. Measured, as of August 2026:

SurfaceWhat you get without logging in
Replies to a post~20 (Threads then shows "Log in to see more replies.")
Keyword search~20 per surface — but this Actor merges all 5 public surfaces for ~50 (see below)
Posts on a profile~5 per tab — but this Actor merges all 4 public tabs for 16-22 (see below)

Replies cannot exceed this — it is enforced by Meta, not by this Actor.

Profiles and search are the exceptions, because Meta caps each entry point, not the total.

Search is the exception. Threads exposes five separate public search surfaces (default, recent, top, users, tags), each capped at ~20 but each returning a different result set. This Actor queries all five and merges them deduplicated, which measured 47 posts for ai agents and 54 for climate tech — about 2.4–2.7x what a single-surface scraper returns. Every record carries a search_surface field. Set searchDepth: "standard" for the faster single-surface behaviour.

Profiles work the same way. A Threads profile has four public tabs — threads, replies, media, reposts — each capped at ~5 but each holding different posts. This Actor queries all four and merges them: measured 16 posts for @nasa and 22 for @mkbhd, against 5-6 from the main tab alone (2.7-4.4x). Every record carries a profile_tab field. Set profileDepth: "standard" to query only the main tab.

Neither of these is a bypass — every surface and tab is the same public endpoint the Threads website itself uses, read logged-out. Anything promising you "all 800 replies" without an account 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 per-target lookup at volume: point it at 1,000 posts and get the top ~20 replies for each, reliably. It is not a bulk archive crawler. If you need full reply archives, this is not the right tool and you should not buy it.

When the cap is reached the Actor stops immediately instead of burning your compute on scrolls that return nothing.


Dead handles do not count against us — and we tell you which ones they were

Feed in a list of 40 brand accounts and some of them will not exist on Threads. In our own 40-account test, six did not: tesla, spacex, apple, stripe, vercel, anthropicai.

Most scrapers count those as failures, which inflates the failure rate you see and tells you nothing about which inputs were bad. This Actor separates them:

  • failedTasks — runs that actually went wrong
  • notFoundTargets + notFoundList — targets that simply do not exist, listed by name so you can clean your input
  • failureRate — computed over real attempts only, excluding non-existent targets

You get an honest reliability number and a list of the handles worth removing from your source data.


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

{
"startUrls": [
{ "url": "https://www.threads.com/@natgeo/post/Db5pTtZFAmB" },
{ "url": "https://www.threads.com/@nasa" }
],
"usernames": ["mkbhd"],
"searchQueries": ["ai agents", "climate tech"],
"includeReplies": true,
"maxRepliesPerPost": 25,
"maxItems": 1000
}
FieldTypeNotes
startUrlsarrayPost URLs, profile URLs or search URLs. Detected automatically.
usernamesarrayBare usernames, with or without @.
searchQueriesarrayKeyword searches.
includeRepliesbooleanDefault true. Set false for posts only.
maxRepliesPerPostintegerDefault 25. Values above ~20 will not return more — see the limitation above. Set to 20 for the fastest path (~2 s/post, no page rendering).
maxItemsintegerHard cap on billed records. Your safety net against surprise charges.
proxyConfigurationobjectResidential proxies recommended for larger runs.

Output

One flat record per post or reply:

{
"id": "3961381054679086896",
"code": "Db5pxS4G_cw",
"url": "https://www.threads.com/@catacolypse_/post/Db5pxS4G_cw",
"is_reply": true,
"replied_to_username": "natgeo",
"root_post_author": "natgeo",
"text": "Ohmygosh, yes!! We just had this visitor yesterday!",
"posted_at": "2026-08-11T13:04:02.000Z",
"like_count": 101,
"reply_count": 2,
"repost_count": 0,
"quote_count": 0,
"author": {
"id": "63294227753",
"username": "catacolypse_",
"full_name": "Cathie English",
"is_verified": false,
"profile_pic_url": "https://…"
},
"media": { "images": [], "videos": [], "alt_text": null },
"query_type": "post",
"query_value": "https://www.threads.com/@natgeo/post/Db5pTtZFAmB",
"source_url": "https://www.threads.com/@natgeo/post/Db5pTtZFAmB",
"scraped_at": "2026-08-12T13:56:56.667Z"
}

Every run also writes a RUN_SUMMARY key with tasks, itemsPushed, failedTasks and failureRate, so you can monitor reliability yourself instead of taking our word for it.

What it's used for

  • Brand & product monitoring — track what people reply to your announcements
  • Competitor watch — follow competitor accounts and the sentiment underneath their posts
  • Creator research — find accounts and posts that perform in a topic
  • AI agents & RAG — clean JSON in, no HTML parsing, ready to embed

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.

Reads public Threads pages only. No login, no cookies, no CAPTCHA solving, no access-control circumvention. Threads publishes no robots.txt restriction for these paths. You are responsible for how you use the data, including GDPR/CCPA obligations where personal data is involved.