Threads Scraper — Profiles, Posts, Replies & Search avatar

Threads Scraper — Profiles, Posts, Replies & Search

Pricing

from $3.00 / 1,000 results

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

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

Steady API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

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 error and errorType, 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.

FieldTypeNotes
profilesarrayzuck, @zuck or https://www.threads.com/@zuck all work
postUrlsarraySingle post URLs. Returns the post plus its visible replies
searchQueriesarrayKeywords. Returns matching posts from many accounts
searchTypestringdefault (top posts) or tags (hashtag feeds)
startUrlsarraySame targets in Apify request-list format
maxPostsPerTargetinteger0 = no limit
includeRepliesbooleanDefault true. Turn off for original posts only
includeProfileInfobooleanAdds follower count, bio and verified status
onlyPostsWithMediabooleanKeep only posts with an image or video
requestDelayMsintegerDefault 2500. Do not lower below 2000 on large runs
proxyConfigurationobjectOptional. 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 sourceType and sourceQuery to tell rows apart.
  • postedAt is ISO 8601 UTC. likeCount is 0 on some search-sourced rows because Threads omits it there.

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.