Threads User Replies Scraper avatar

Threads User Replies Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Threads User Replies Scraper

Threads User Replies Scraper

Collect public replies from Threads profile Replies tabs. Export each user reply with replied-to content when available, author details, timestamps, available engagement counts, media links when present, and source URLs for research and public conversation review. (Beta)

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Rush

Rush

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

2

Monthly active users

2 days ago

Last modified

Share

Collect public replies from a Threads profile's Replies tab and export structured rows for review and download.

Use this Actor when you want to understand what a public Threads user replied to, what they said, when they replied, and which replied-to public content was visible with that reply.

Explore more FuturizeRush Actors

What You Get

  • Public user reply rows from Threads profile Replies tabs
  • Reply rows with replied-to public content fields on the same row when available
  • Author username, display name, verification status, profile URL, and a stable account ID
  • Reply text, content type, timestamps, available engagement counts, view count status, media links when present, mentions, hashtags, and URLs
  • A run summary with saved row counts, completion status, and any profile that may still have more replies

How to Use

  1. Paste one or more Threads profile URLs, Replies tab URLs, or usernames.
  2. Choose the maximum number of public reply rows to save per profile.
  3. Start the Actor.
  4. Review the default dataset view or download the results in your preferred format.
  5. Open the run summary when you need saved row counts or completion status.

Input

You can provide profile URLs, Replies tab URLs, usernames, or a mix of them. Use up to 20 profiles per run. max_replies_per_profile accepts 10 to 5,000 and is a per-profile cap, not a promised result count. Use a larger value when you want the run to keep looking for public replies until the selected cap is reached or no more public replies are available during the run.

{
"profiles": [
"https://www.threads.com/@boris_cherny"
],
"max_replies_per_profile": 20
}

Output

Each saved row represents one public reply written by the requested profile.

Short Output Example

This synthetic, shortened example shows the most important fields. The Dataset schema defines the full export field list.

{
"record_type": "user_reply",
"input_username": "sample_profile",
"profile_username": "sample_profile",
"target_reply_code": "EXAMPLE_REPLY_ID",
"author_username": "sample_profile",
"author_user_id": "10000000000",
"reply_content_type": "text",
"reply_content_preview": "Thanks for the helpful details.",
"reply_text": "Thanks for the helpful details.",
"reply_url": "https://www.threads.com/@sample_profile/post/EXAMPLE_REPLY_ID",
"reply_like_count": 4,
"reply_reply_count": 0,
"reply_repost_count": 1,
"reply_quote_count": 0,
"reply_share_count": 2,
"reply_view_count": 120,
"reply_view_count_status": "available",
"replied_to_available": true,
"replied_to_author_username": "example_user",
"replied_to_author_user_id": "20000000000",
"replied_to_text": "Here is the original public comment.",
"replied_to_post_url": "https://www.threads.com/@example_user/post/EXAMPLE_CONTEXT_ID",
"replied_to_like_count": 38,
"replied_to_reply_count": 6,
"replied_to_repost_count": 3,
"replied_to_quote_count": 1,
"replied_to_share_count": 7,
"replied_to_view_count": 840,
"replied_to_view_count_status": "available",
"created_at": "2026-01-15T03:31:15Z",
"has_media": false,
"media_type": "none",
"media_url": "",
"media_urls": [],
"has_sticker": false,
"sticker_count": 0,
"sticker_urls": [],
"mentions": ["example_user"],
"mentioned_accounts": [{ "username": "example_user", "user_id": "20000000000" }],
"urls": [],
"link_title": "",
"link_domain": "",
"source_tab": "profile_replies",
"scraped_at": "2026-06-15T02:30:00Z"
}

Fields that start with reply_ describe the requested user's reply. reply_text contains only visible reply text; media, GIFs, and stickers are represented by their own fields. Fields that start with replied_to_ describe the public content they replied to when that content is available.

View count status

view_count_status says what the run was able to establish about a view count, and nothing more:

ValueMeaning
availableA number was read and is in view_count.
temporarily_unavailableThe public page did not serve a number this time.
not_checkedNo number was obtained. This is not evidence that the reply has no views.

replied_to_view_count_status uses the same values and adds not_available, which means the row had no public replied-to content at all, so there is no count to report.

Account IDs

author_user_id and replied_to_author_user_id carry the account's stable numeric ID, and mentioned_accounts pairs each mention that Threads itself resolved with the same kind of ID. A username can be changed or reclaimed, so matching rows across runs on the handle alone can split one account into two or merge two into one. The IDs are the safe key. A handle written only as text, with no account behind it, appears in mentions but not in mentioned_accounts, and a mention whose ID the source did not include is reported as null rather than guessed. Replies that mention an account are uncommon on this tab, so both fields are often empty.

urls lists the addresses a reply contains. When Threads also shows a preview card under the reply, link_title carries its headline and link_domain the site it resolves to โ€” which is the only place a shortened address says where it leads. A reply can share a link and have no card, in which case the address is in urls and both card fields are empty.

For most reviews, start with the reply_* and replied_to_* fields. Full exports also include saved-row fields such as post_url, text_content, and like_count; for this Actor, those fields mirror the requested user's reply row and help spreadsheets and automations work with a predictable export shape.

conversation_index is the saved result order for the requested profile.

Dataset Views

  • ๐Ÿ’ฌ Reply Review: the default view for reading reply previews next to the public content they replied to
  • ๐Ÿ“Š Engagement: available public counts for the reply and for the content it replied to, side by side with view count status
  • ๐Ÿงต Replied-To Content: conversation context fields, with the account ID on each side
  • ๐Ÿ”— Reply Media & Links: media when present, stickers, URLs, the shared link's headline and site, mentions, mentioned accounts, and hashtags from saved replies

Every view reads the same saved rows, so switching between them never changes what was collected โ€” a view chooses which columns to show. Export from a view to get that view's columns, or export the dataset itself for the complete field list.

Common Use Cases

  • Social listening and community research
  • Audience and creator engagement analysis
  • Reply and conversation review, with the content each reply responded to
  • Public Threads research datasets

FAQ

Does this collect private content?

No. It is designed for public Threads profile pages and saves only public content that is available at run time.

How is replied-to content included?

On the same row as the reply, whenever Threads shows it there. When it does not, replied_to_available is false and the replied_to_* fields are empty.

Can I choose how many replies to save?

Yes, per profile. The run summary reports how many were actually saved, which can be fewer โ€” Threads decides what is publicly visible at any moment.

How do I know whether a profile was collected completely?

The run summary answers this in five fields, and they answer different questions.

status is about the run and carries one of four values: completed when every requested profile reached either the end of its available public replies or the maximum you selected, and every entry could be read; partial when any profile stopped short of that, or an entry could not be read; no_results when every profile was reached, none had a problem, and none had public replies to save; and failed when the run could not deliver a usable result โ€” replies saved before that point remain in the dataset. reason names the cause in every case, and prefers whatever explains why the data is short over anything you can simply correct and re-submit.

profiles_with_more_public_items is about the profiles: it lists those whose replies were never established to have run out. Reaching the maximum you selected puts a profile on this list even though the run is completed โ€” the run stopped because you asked it to, so it never found out whether more replies exist. Raise the maximum to collect further.

profiles_not_collected lists profiles whose replies were never collected, which happens when the run stops early โ€” either before it got to them, or because it reached the result limit before saving any of their replies.

failed_profiles lists the ones that were reached but could not be completed, with failed_reasons giving the cause for each.

entries_skipped lists anything in your input that could not be read as a Threads profile at all, as you submitted it โ€” so it is a list of things to correct, not of profiles to re-run. An entry that was not text has no submitted form to show and is listed by its position instead.

Between those four lists you can collect just what is missing instead of re-running the whole batch. failed_profiles, profiles_not_collected and entries_skipped do not overlap: every profile the run worked with is in exactly one of them or counted as succeeded, and profiles_total is the number they add up to. Repeated entries for the same account are treated as one profile, and blank lines are ignored, so profiles_total can be smaller than the number of lines you pasted. profiles_with_more_public_items answers a different question and can name a profile that also appears elsewhere, or one that succeeded. profile_stop_reasons gives the per-profile detail behind all of it.

A manual stop, or the run approaching its time limit, makes the Actor wrap up at the next safe point: it delivers everything collected so far, reports the reason run_interrupted, and fills the same lists. A run stopped too abruptly for even that still keeps every already-saved reply in the dataset.

If the platform moves the run to another server, the run carries on where it left off instead of starting over: profiles already finished are not collected again, and replies already saved are not delivered twice.

Why does a reply sometimes have no view count?

Public view counts are not exposed for every reply at every moment. A missing number never means the reply has no views โ€” read view_count_status for what the run was able to establish.

Why can reply_text be empty?

reply_text contains only visible text. A reply can still be valid when it is image-only, GIF-only, sticker-only, quote-only, or otherwise has no visible text. Use reply_content_type, reply_content_preview, has_sticker, sticker_count, media_url and media_urls to review those rows. sticker_urls is filled only when Threads publishes the sticker's image address, so a sticker reply can be marked as one and still carry no address.

Why are some fields empty or null?

Some public pages expose different metrics or media details across rows. Unavailable text fields are saved as empty strings, while unavailable numeric or optional fields may be null. The three view-count status fields are the exception and always carry a word rather than a blank, because saying nothing about a count is different from having read one.

A null is deliberate and means the public page did not state the value โ€” it is not the same as a value of false or zero. author_fediverse_enabled is the clearest example: it is true or false only when the page shows the cross-network sharing indicator, and null when the page says nothing about it, because "not stated" and "not enabled" are different facts.

Can I use profile URLs instead of usernames?

Yes. Paste a profile link, a Replies tab link, or just the username โ€” however you copied it.

What if one of the profiles I paste is wrong?

The rest still run. An entry that cannot be read as a profile is skipped and named in the log while the run is going, and listed in the run summary under entries_skipped afterwards, so you can correct that one and collect it on its own. The run's closing sentence says how many were skipped and points you at that list. Only a run with no readable entry at all stops before collecting.

Settings are different: a maximum outside the accepted range stops the run before it starts, because it would change what every profile returns.

This Actor collects the replies a public profile has written.

Disclaimer

This Actor is intended for collecting publicly available Threads data for legitimate research, monitoring, and analysis.

  • It is not affiliated with Threads, Meta, or Instagram.
  • It does not collect private content.
  • Public page availability, structure, and completeness can change.
  • Review your use case, applicable laws, platform terms, and privacy obligations before using or sharing collected data.

Keywords

Threads scraper, Threads user replies scraper, Threads replies, Threads comments, Threads profile replies, Threads social listening, Threads engagement analysis, Threads audience research, Threads community monitoring, Apify Threads Actor, Claude Code, OpenClaw, Gemini, Antigravity, Codex, ChatGPT