Threads Replies Scraper — Comments, Authors, Likes (No Login) avatar

Threads Replies Scraper — Comments, Authors, Likes (No Login)

Pricing

from $2.50 / 1,000 replies

Go to Apify Store
Threads Replies Scraper — Comments, Authors, Likes (No Login)

Threads Replies Scraper — Comments, Authors, Likes (No Login)

Export accessible replies to public Threads posts without logging in: text, authors, likes and nesting, plus root posts. Per-post coverage reports show what was reachable; Threads may expose fewer replies than its displayed count.

Pricing

from $2.50 / 1,000 replies

Rating

0.0

(0)

Developer

architek.earth

architek.earth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

24 minutes ago

Last modified

Categories

Share

🧵 Threads Replies Scraper — Comments, Authors, Likes (No Login)

Recorded 18 Oct 2026 from Apify datacenter IPs, no login, no cookies: a 433-reply post by @zuck walked end to end in 27 page requests. That reached 225 direct replies, 241 reply posts in all including nested replies and the author's own thread. With forced IP rotations mid-walk it still reached all 225, and every run's coverage is reported, not hidden.

From Architekture, makers of the YouTube, Reddit, Substack and retail scrapers.

🤖 Built for AI workflows. Every row is deterministic, schema-stable JSON — feed it straight to LLM apps, RAG pipelines, sentiment models or agent tool calls via the Apify API, the Apify MCP server (mcp.apify.com), or AI coding agents like Claude Code and Cursor.

🌐 Platform📍 Access📦 Recorded run💰 From🔑 Standout fields
Threads (threads.com / threads.net)Public posts, no login 🌍433-reply post → 241 reply rows in ~35 s$2.50 / 1,000 repliesisAuthor, nesting depth / parentCode, per-post coverage

Give it Threads post URLs (or profiles, for their latest posts) and get one clean JSON row per reply:

  • reply author handle, name, profile URL, id and verified badge
  • reply text, like / reply / repost / quote counts, timestamp, image and video URLs
  • isAuthor for the thread starter's own replies (Threads' "Author" label)
  • nesting: depth, parentCode and replyToUsername, so you can rebuild the conversation tree

The post itself comes back as its own recordType: "post" row.

🚀 Why choose this actor

  • ✅ An honest coverage report. Threads shows logged-out visitors only part of a big post's replies (about half on the post above). RUN_SUMMARY lists each post's claimed reply count, how many direct replies were actually reachable, and a coverage ratio, so you know exactly what you got.
  • 🔗 The whole conversation, not just the first layer. Each direct reply comes with the nested replies Threads shows under it, each linked to its parent.
  • 🗂️ Author replies flagged. The thread starter's continuation posts and replies have isAuthor: true. Turn them off with includeAuthorThread: false.
  • 🔎 De-duplicated per run. A reply that appears on several pages, or under two input URLs, is delivered and charged once.
  • 🆓 Never pay for misses. A deleted, private or wrong link gets one free recordType: "status" row (NOT_FOUND, BLOCKED, ERROR, INVALID_URL).
  • 📈 Resumable. After a platform migration or a resurrect, the run continues where it stopped, without duplicate or re-charged rows.

⚠️ Worth knowing up front

QuestionAnswer
Do I need a Threads account or cookies?❌ No. Everything comes from what Threads shows logged-out visitors.
Will I get every reply a post claims?Not on big posts. Threads hides part of them from logged-out visitors (225 of 433 on our test post). coverage reports it per post.
Does RECENT order reach more replies?❌ No. In our test both orders reached the same set. Order matters only when maxRepliesPerPost cuts the list.
Very long nested chains?Threads shows the first few replies under each reply. Chains it cuts are counted in truncatedChains, not followed.
Profile scraping or search?❌ No. This is a replies tool. A profile URL only picks that profile's latest posts.
Do media URLs last?They are signed Threads CDN links that expire. Download promptly if you need the files.

⚡ Try the example

{
"postUrls": ["https://www.threads.com/@zuck/post/DeZtp-TkQHh"],
"maxRepliesPerPost": 100
}

Set "maxRepliesPerPost": 0 for everything Threads shows, or add "profileUrls": ["@zuck"] for a profile's latest posts.

⚙️ Input parameters

ParameterTypeDefaultDescription
postUrlsarray—Post URLs, e.g. https://www.threads.com/@zuck/post/DeZtp-TkQHh (threads.net and query strings accepted). Up to 200.
profileUrlsarray—https://www.threads.com/@zuck or @zuck. Uses the profile's latest posts. Up to 20.
maxRepliesPerPostinteger200Reply rows per post (direct, nested and author thread). 0 = everything Threads shows (hard cap 5,000).
maxPostsPerProfileinteger3Latest posts per profile, 1–10 (the profile page lists a handful).
sortOrderselectTOPTOP or RECENT. Matters only when maxRepliesPerPost cuts the list.
includeAuthorThreadbooleantrueThe post author's continuation posts as reply rows with isAuthor: true.
proxyConfigurationproxyApify datacenterBlocked or rate-limited requests are retried on a fresh IP. The session re-reads the post page first, so pagination continues where it stopped.
feedbackstring—A note to the maintainers. Read by a human.

🧱 Stable fields for automations

Reply rows have recordType: "reply"; the post has recordType: "post"; misses have recordType: "status". Fields are omitted, never null, when Threads does not show them. New fields are only ever added.

FieldMeaning
recordType, code, urlreply / post; Threads post code; its URL.
rootPostCode, rootPostUrlThe post the reply belongs to.
authorUsername, authorName, authorUrl, authorId, authorVerifiedWho wrote it. authorVerified appears only when true.
isAuthortrue when the reply is by the root post's author.
replyTypereply, or author_thread for the author's own continuation posts.
depth, parentCode, replyToUsername1 = direct reply; 2+ = nested. parentCode is the post it answers.
textReply text (omitted for media-only replies).
likeCount, replyCount, repostCount, quoteCountAs shown on Threads. likeCount is omitted where the author hides it.
timestamp, editedISO 8601 UTC; edited: true when the text was edited.
images, videosMedia URLs (signed, expiring).
Status rows: url, status, reasonNOT_FOUND, BLOCKED, ERROR or INVALID_URL, and why.

📦 Output example

Recorded 18 Oct 2026. The reply author is anonymized here; the actor returns the real public handle.

{
"recordType": "reply",
"code": "DeZuMBkmOKg",
"url": "https://www.threads.com/@example.user/post/DeZuMBkmOKg",
"rootPostCode": "DeZtp-TkQHh",
"rootPostUrl": "https://www.threads.com/@zuck/post/DeZtp-TkQHh",
"authorUsername": "example.user",
"authorUrl": "https://www.threads.com/@example.user",
"authorId": "14722763243",
"authorVerified": true,
"isAuthor": false,
"replyType": "reply",
"depth": 1,
"parentCode": "DeZtp-TkQHh",
"replyToUsername": "zuck",
"text": "Will it be integrated with Muse Charm?",
"likeCount": 0,
"replyCount": 0,
"repostCount": 0,
"quoteCount": 0,
"timestamp": "2026-10-12T17:01:08Z"
}

The author's own continuation post:

{ "recordType": "reply", "code": "DeZtp7KER52", "authorUsername": "zuck", "isAuthor": true, "replyType": "author_thread", "depth": 2, "parentCode": "DeZtrvAEfEr", "likeCount": 90, "replyCount": 11, "timestamp": "2026-10-12T16:56:28Z" }

A link that doesn't exist:

{ "recordType": "status", "url": "https://www.threads.com/@zuck/post/DAAAAAAAAAA", "status": "NOT_FOUND", "reason": "Threads shows no public post here (deleted, private or wrong link)" }

🧠 Advanced usage

  • 📈 Sentiment and topic analysis: feed text to an LLM or classifier and weight by likeCount.
  • 🔗 Rebuild the conversation tree: join parentCode to code; depth gives the level.
  • 🗂️ Creator engagement: filter isAuthor: true to see where the author joined the discussion.
  • 🗺️ Monitor a creator: schedule profileUrls: ["@handle"] with maxPostsPerProfile: 3 and diff on code.
  • ✅ Completion check: read RUN_SUMMARY. It has status (COMPLETE, PARTIAL, NO_RESULTS, BUDGET_LIMIT, TIME_LIMIT, STATE_SAVE_FAILED, PUSH_FAILED, INVALID_INPUT, NOT_CONFIGURED), posts, replies, charged and perPost[]. Each perPost[] entry has status, delivered, claimedReplies, reachableDirectReplies, truncatedChains, coverage, coverageNote and exhausted.

🔌 Integrations

Export as JSON, CSV or Excel; push to Google Sheets; trigger from Make, Zapier or n8n; get a webhook when a run finishes; schedule with the Apify Scheduler.

💸 How much does it cost?

1,000 replies ≈ $2.50. The 433-reply test post (241 reachable reply rows plus the post) ≈ $0.60. 100 posts with 10 replies each ≈ $2.60. Platform usage is included, and there is no start fee.

💰 Pricing

EventPriceCovers
reply$2.50 / 1,000One reply row (direct, nested or author thread)
post$1.00 / 1,000One root post row

Platform usage is included. Status rows are free, and nothing is charged for failed requests or replies Threads doesn't show. A run stops cleanly at your spending limit, with charges equal to rows delivered.

❓ FAQ

Why is coverage below 1? Threads' reply counter includes replies it doesn't show logged-out visitors (hidden, restricted or filtered ones). We report what was reachable rather than pad the number.

Can I pass a reply's URL? Yes. Every reply on Threads is a post with its own URL. You get that reply as the post row and its own replies below it. If the same run already delivered that reply under its root post, it is not delivered (or charged) a second time, so it gets no separate post row.

🤖 For AI agents & LLM apps

architekture/threads-replies-scraper returns replies to public Threads posts as deterministic, schema-stable JSON: one object per reply, plus one per post. Each object has the author handle and URL, text, like/reply/repost counts, ISO timestamp, the isAuthor flag and nesting (depth, parentCode). Invoke it from any agentic workflow via the Apify API or the Apify MCP server (mcp.apify.com) as a tool call. Its cost is bounded before it starts: $2.50 per 1,000 replies. maxRepliesPerPost caps each post, and a spending limit stops the run cleanly. Every post gets a machine-readable status and coverage ratio in RUN_SUMMARY, and misses come back as free recordType: "status" rows. Honest limits: logged-out visibility only (about half the replies on very large posts), no login, no search, no profile data.

Works out of the box with LangChain, LlamaIndex and AI coding agents — call it as a tool from Claude Code, Cursor, or any MCP client via mcp.apify.com.

🧰 More Architekture scrapers

🙋 Support

Open an Issue on this actor's page; a human replies within a day.

This actor reads only what Threads shows logged-out visitors on public posts, without an account. Replies contain personal data (handles, names, text). You are responsible for having a lawful basis to process it (e.g. GDPR, CCPA), for Threads' and Meta's terms, and for how you store and use the data. Not affiliated with Threads or Meta.

📝 Changelog

  • 2026-10-18: 1.0. Post and profile inputs; direct and nested replies with isAuthor, depth and parent; author thread; per-post coverage report; free status rows; de-duplication per run; context refresh after IP rotation; clean stops at the spending limit and timeout; resumable after platform migration.