Threads Scraper — Posts, Profiles, Replies & Search
Pricing
from $3.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 minutes ago
Last modified
Categories
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 Actor | Typical alternative | |
|---|---|---|
| Measured failure rate | 0% across 24 tasks — 8 profiles, 10 posts, 6 keyword searches, 647 records delivered, 72 fetches with zero render fallbacks | 13% – 17% on the two largest Threads Actors |
| Recommended posts mixed into replies | Never — filtered out explicitly | Common, and it silently pollutes your dataset |
Breaks when Meta rotates doc_id | No — nothing is hard-coded | Yes |
| Login / cookies required | No | Varies |
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:
| Surface | What 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 wrongnotFoundTargets+notFoundList— targets that simply do not exist, listed by name so you can clean your inputfailureRate— 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):
| Proxy | Mode used | Time per profile | Compute cost per run |
|---|---|---|---|
| Datacenter (Apify default) | browser rendering | 150 s | $0.127 |
| Residential | direct fetch | 3.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}
| Field | Type | Notes |
|---|---|---|
startUrls | array | Post URLs, profile URLs or search URLs. Detected automatically. |
usernames | array | Bare usernames, with or without @. |
searchQueries | array | Keyword searches. |
includeReplies | boolean | Default true. Set false for posts only. |
maxRepliesPerPost | integer | Default 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). |
maxItems | integer | Hard cap on billed records. Your safety net against surprise charges. |
proxyConfiguration | object | Residential 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.
Legal & scope
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.