Threads Replies Scraper avatar

Threads Replies Scraper

Pricing

from $0.05 / 1,000 replies

Go to Apify Store
Threads Replies Scraper

Threads Replies Scraper

Collect public replies from Threads post or profile URLs. Set a reply limit, nested reply depth, and UTC time filter, then save reply text, authors, links, engagement, and conversation context in a dataset.

Pricing

from $0.05 / 1,000 replies

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

Share

🧵 Find public Threads replies with conversation context

For social media researchers, community teams, and developers, Threads Replies Scraper collects public replies from submitted Threads post or profile URLs. It saves structured records with reply text, timestamps, authors, engagement, media, conversation links, root-post context, and the source URL, so you can review or export the data without copying replies by hand.

📦 Threads reply rows with source and context

Each saved row describes one public reply. It can include the reply author, text, time, engagement counts, media, mentions, hashtags, external links, reply state, and conversation context. The source URL and source type show whether the run used a post or profile target. Optional fields can be missing when Threads does not expose them.

▶️ Run a Threads reply collection

  1. Set Target to posts or profiles.
  2. Add one or more matching public Threads URLs to Source URLs.
  3. Optionally set the reply limit, nested reply depth, and UTC time filter.
  4. Start the run and open the dataset link in the output.

Successful default input

This input comes from a successful current-beta run:

{
"target": "posts",
"sourceUrls": [
{
"url": "https://www.threads.com/@instagram/post/DQNCKbZjq-v"
}
],
"maxRepliesPerTarget": 100,
"nestedReplyDepth": 0
}

⚙️ Input

Input fields

FieldTypeWhat it does
targetstringSelect posts for post URLs or profiles for profile URLs.
sourceUrlsarray of objectsLists one or more public Threads URLs that match target.
sourceUrls[].urlstringGives one public post or profile URL that matches target.
maxRepliesPerTargetintegerSets an optional cap for each submitted target. Leave it empty to collect all available replies until the source is exhausted.
nestedReplyDepthintegerSets the number of nested reply levels. Use 0 for top-level replies only. A positive number includes that many levels.
repliesAfterstring (UTC date-time)Keeps replies published at or after this UTC time. Use an ISO 8601 value such as 2026-01-15T12:00:00Z.

🧾 Output

Run output

The dataset output is a string URL that opens the default dataset overview for the run.

Dataset row fields

Each dataset item has one reply-row shape. Fields can be missing when Threads does not expose the value.

FieldTypeWhat it does
replyIdstringThe public ID of the reply.
replyUrlstring (URL)The public URL of the reply.
textstringThe reply text.
publishedAtstring (date-time)The time when the reply was published.
authorobjectPublic details about the reply author.
author.usernamestringThe author's public Threads username.
author.displayNamestringThe author's public display name.
author.profileUrlstring (URL)The author's public Threads profile URL.
author.isVerifiedbooleanWhether Threads marks the author as verified.
engagementobjectPublic activity counts for the reply.
engagement.likesintegerThe public like count for the reply.
engagement.repliesintegerThe public reply count for the reply.
engagement.repostsintegerThe public repost count for the reply.
engagement.quotesintegerThe public quote count for the reply.
mediaarray of objectsPublic media attached to the reply.
media[].urlstring (URL)The direct public URL of a media file.
media[].typestringThe public media type.
media[].altTextstringAccessibility text for the media.
media[].widthintegerThe media width in pixels.
media[].heightintegerThe media height in pixels.
sharedPostobjectPublic quote, repost, or share context attached to the reply.
sharedPost.typestringThe share type: quote, repost, or share.
sharedPost.idstringThe public ID of the shared post.
sharedPost.urlstring (URL)The public URL of the shared post.
sharedPost.textstringThe text of the shared post.
conversationobjectThe reply's place in the public conversation.
conversation.depthintegerThe reply's public nesting depth.
conversation.parentReplyIdstringThe public ID of the parent reply.
conversation.parentReplyUrlstring (URL)The public URL of the parent reply.
conversation.rootReplyIdstringThe public ID of the first reply in the chain.
rootPostobjectPublic context for the post that starts the conversation.
rootPost.idstringThe public ID of the root post.
rootPost.urlstring (URL)The public URL of the root post.
rootPost.textstringThe text of the root post.
rootPost.authorobjectPublic details about the root post author.
rootPost.author.usernamestringThe root post author's public Threads username.
rootPost.author.displayNamestringThe root post author's public display name.
rootPost.author.profileUrlstring (URL)The root post author's public Threads profile URL.
rootPost.author.isVerifiedbooleanWhether Threads marks the root post author as verified.
rootPost.engagementobjectPublic activity counts for the root post.
rootPost.engagement.likesintegerThe public like count for the root post.
rootPost.engagement.repliesintegerThe public reply count for the root post.
rootPost.engagement.repostsintegerThe public repost count for the root post.
rootPost.engagement.quotesintegerThe public quote count for the root post.
rootPost.publishedAtstring (date-time)The time when the root post was published.
mentionsarray of stringsPublic usernames mentioned in the reply.
hashtagsarray of stringsPublic hashtags found in the reply.
externalLinksarray of strings (URL)Public external links found in the reply.
replyStateobjectPublic state details for the reply.
replyState.isQuotebooleanWhether the reply is marked as a quote.
replyState.isRepostbooleanWhether the reply is marked as a repost.
replyState.isEditedbooleanWhether the reply is marked as edited.
replyState.isPartnershipbooleanWhether the reply is marked as a partnership.
replyState.replyControlstringThe public reply control shown by Threads.
sourceUrlstring (URL)The submitted public Threads URL that led to the reply.
sourceTypestringSays whether sourceUrl points to a post or profile.
isPublicSubsetbooleanSays whether the row is part of the public subset exposed by Threads.
collectedAtstring (date-time)The time when the reply was collected.

Genuine row from a current-beta run

This unshortened row comes from a successful post-target run with nested reply depth set to 1:

{
"replyId": "3750701025532684326_73499897891",
"replyUrl": "https://www.threads.com/@n1n2t1t2/post/DQNKrXtkagm",
"text": "I don’t know what to do with myself I don’t know how much",
"publishedAt": "2025-10-24T20:40:26.000Z",
"author": {
"username": "n1n2t1t2",
"displayName": "Mirella Hernandez",
"profileUrl": "https://www.threads.com/@n1n2t1t2",
"isVerified": false
},
"engagement": {
"likes": 0,
"replies": 0,
"reposts": 0,
"quotes": 0
},
"media": [],
"conversation": {
"depth": 1,
"rootReplyId": "3750701025532684326_73499897891"
},
"rootPost": {
"id": "3750663577377091503_63404918397",
"url": "https://www.threads.com/@instagram/post/DQNCKbZjq-v",
"text": "coffee dates with your bestie >>>\n\nkipotheshibainu",
"author": {
"username": "instagram",
"displayName": "Instagram",
"profileUrl": "https://www.threads.com/@instagram",
"isVerified": true
},
"engagement": {
"likes": 1227,
"replies": 63,
"reposts": 30,
"quotes": 1
},
"publishedAt": "2025-10-24T19:27:20.000Z"
},
"mentions": [],
"hashtags": [],
"externalLinks": [],
"replyState": {
"isEdited": false,
"replyControl": "everyone"
},
"sourceUrl": "https://www.threads.com/@instagram/post/DQNCKbZjq-v",
"sourceType": "post",
"isPublicSubset": true,
"collectedAt": "2026-08-25T16:35:33.804Z"
}

💳 Pricing

How billing works

The pricing event is charged for each public reply saved to the dataset. Check Apify Console for the current tier price.

🔌 Integrations

Open the dataset output in Apify Console or read its rows through the Apify API.

❓ FAQ

What happens when I leave the reply limit empty?

The Actor collects all available replies until the source is exhausted. A value sets a separate cap for each submitted post or profile.

Can I choose how many nested replies to include?

Yes. Use 0 for top-level replies only. A positive value includes that many nested levels. If you leave the field empty, only top-level replies are included.

Can I filter replies by publication time?

Yes. Set repliesAfter to a UTC ISO 8601 timestamp. The Actor includes replies published at or after that time.

Can I submit both post and profile URLs in one run?

Choose one target value for the run. Add post URLs when target is posts, or profile URLs when it is profiles.

Does the Actor return private replies?

No. It reads public Threads data only. Optional fields can be missing when Threads does not expose them.

How can I trace a reply to its source?

Use sourceUrl and sourceType to identify the submitted target. replyUrl, rootPost, and available conversation links add more context.

What does one billed event cover?

One billed event covers one public reply saved to the dataset. The current tier price is shown in Apify Console.

📝 Changelog

0.0: Initial release

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré