Threads Scraper — Profiles, Posts, Replies & Search
Pricing
from $3.00 / 1,000 results
Threads Scraper — Profiles, Posts, Replies & Search
Scrape Threads without a browser. Profiles, posts, replies and keyword search with engagement counts. Detects silent empty responses and retries, so you get data instead of blank runs.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Steady API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Scrape Meta's Threads without a browser. Profiles, individual posts with their replies, and keyword search — with full engagement counts.
The failure mode nobody handles
Threads does not tell you when it throttles you. It returns HTTP 200 with a full-size page and no post data in it.
Measured on 2026-09-15: the same search URL called five times in a row returned 21 posts on four attempts and zero posts on one — same status code, same ~1.1 MB page size. Called again a moment later, it returned 21 posts again.
If your scraper treats 200 OK as success, that run silently hands you an empty result and calls it a win.
This Actor treats an empty parse as a failure, backs off exponentially, rotates to a new proxy session, and retries. Every row tells you how many attempts it took.
What else is different
- No headless browser. Data is read straight out of the JSON embedded in the server-rendered page. Runs are fast and cheap.
- No fixed JSON path. Threads buries posts 15+ levels deep, and the path differs between profile pages, post pages and search results. This Actor walks the whole tree and collects anything shaped like a post, so a Meta refactor does not break it.
- Replies included. A post URL returns the post and its visible replies — 31 items on a busy thread in testing.
- Partial success. A failed target returns a row with
erroranderrorType, not a dead run. - You are not charged for failed targets.
Input
Give it any mix of these. Handles, URLs and search terms can all be used together.
| Field | Type | Notes |
|---|---|---|
profiles | array | zuck, @zuck or https://www.threads.com/@zuck all work |
postUrls | array | Single post URLs. Returns the post plus its visible replies |
searchQueries | array | Keywords. Returns matching posts from many accounts |
searchType | string | default (top posts) or tags (hashtag feeds) |
startUrls | array | Same targets in Apify request-list format |
maxPostsPerTarget | integer | 0 = no limit |
includeReplies | boolean | Default true. Turn off for original posts only |
includeProfileInfo | boolean | Adds follower count, bio and verified status |
onlyPostsWithMedia | boolean | Keep only posts with an image or video |
requestDelayMs | integer | Default 2500. Do not lower below 2000 on large runs |
proxyConfiguration | object | Optional. Works without a proxy |
Example
{"profiles": ["zuck", "@mosseri"],"postUrls": ["https://www.threads.com/@zuck/post/DdCYWl7GktV"],"searchQueries": ["openai"],"includeReplies": true}
Output
One row per post.
{"postId": "3981852126213720917","code": "DdCYWl7GktV","url": "https://www.threads.com/@zuck/post/DdCYWl7GktV","text": "Introducing @Muse, the personal agent that ...","postedAt": "2026-09-08T18:56:00.000Z","username": "zuck","userFullName": "Mark Zuckerberg","userIsVerified": true,"likeCount": 3025,"replyCount": 1735,"repostCount": 259,"quoteCount": 145,"isReply": false,"replyToUsername": null,"isQuote": false,"isRepost": false,"isPaidPartnership": false,"imageUrl": null,"images": [],"videos": [],"hasMedia": false,"linkAttachment": null,"sourceType": "profile","profileFollowerCount": 5736539,"profileBiography": "Mostly superintelligence and MMA takes"}
Failed targets look like this instead:
{"sourceUrl": "https://www.threads.com/@someone","error": "Empty response (HTTP 200, 1,186,646 bytes). Looks like temporary throttling","errorType": "EMPTY_RESPONSE"}
errorType is one of INVALID_INPUT, BLOCKED_OR_NOT_FOUND, EMPTY_RESPONSE, FETCH_FAILED.
RUN_SUMMARY in the key-value store gives you requestedTargets, succeededTargets, failedTargets, totalPosts and successRate.
What you can build with it
- Competitor tracking. Watch what brands post and how it lands, with like/reply/repost counts.
- Conversation mining. A post URL gives you the replies, which is where the actual opinions are.
- Trend discovery. Search a keyword and see who is talking and how loudly.
- Creator research. Follower counts, bios and posting cadence across a list of handles.
Notes and limits
- Threads serves roughly 10 posts per profile page and 20-30 per search. This Actor reads what the page serves; it does not scroll for more.
- Only public data. No login, no private accounts, no DMs, no follower lists.
- Search results mix many authors. Use
sourceTypeandsourceQueryto tell rows apart. postedAtis ISO 8601 UTC.likeCountis 0 on some search-sourced rows because Threads omits it there.
Legal
Only publicly visible Threads content is requested, through the same pages any logged-out visitor sees. No login, no personal data beyond what appears on a public profile.