π§΅ Threads Search Post Scraper
Pricing
from $3.99 / 1,000 results
π§΅ Threads Search Post Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Threads Search Post Scraper β Posts, Replies & Full Thread Data by URL, ID or Phrase
Turn Threads post links into complete thread data. Give the Actor a post URL, a numeric post ID, or a plain search phrase, and it returns every item in that thread β the original post and its replies β with author details, text, engagement counts, media and direct links.
Three input types in one field, no account required, and rows saved as each thread is parsed.
What is Threads Search Post Scraper?
Most Threads tools stop at the top-level post. But a thread is the conversation: the replies are where the argument happens, where the questions get asked, and where the answers you actually want to read are.
This Actor collects the whole thread. Point it at a post and you get back every item in that thread as its own row β original and replies alike β each with the full author object, the post text, engagement counters, media versions and a canonical post_url.
The input field accepts three different things per line, and works out which is which:
- A full post URL β
https://www.threads.com/@zuck/post/AbCdEfGhIjK(threads.networks too). - A numeric post ID β 10 or more digits.
- A plain search phrase β
Mark Zuckerberg. The Actor runs that search and uses the first matching thread, which makes discovery possible without a link in hand.
The output keeps Threads' own rich post structure rather than flattening it: nested user, the full text_post_app_info block (reply counts, repost and quote counts, reply controls, link previews, fragments), image_versions2, video_versions, carousel_media. And the parser is deliberately schema-tolerant β it probes several known key names and preserves any fields it does not recognise, so a rename on Threads' side does not blank your output.
What data can you extract?
Post
| Field | Description |
|---|---|
post_url | Canonical link to the item |
caption | Post text |
like_count | Likes |
taken_at | Timestamp |
code | Threads shortcode |
pk, id | Post identifiers |
media_type | What kind of post it is |
image_versions2 | Image renditions |
video_versions | Video renditions |
carousel_media | Multi-item media |
has_audio, audio | Audio attachment data |
accessibility_caption | Alt text |
usertags | Tagged users |
is_paid_partnership | Branded-content flag |
caption_is_edited | Whether the post was edited |
like_and_view_counts_disabled | Whether counts are hidden |
Author (user)
| Field | Description |
|---|---|
username, full_name | Identity |
id, pk | Account identifiers |
profile_pic_url | Avatar |
is_verified | Verified badge |
text_post_app_is_private | Private-account flag |
friendship_status | Relationship flags |
Thread context (text_post_app_info)
| Field | Description |
|---|---|
direct_reply_count | Replies to this item |
repost_count | Reposts |
quote_count | Quote posts |
reshare_count | Total reshares |
is_reply | Whether this item is a reply |
reply_to_author | Who it replies to |
root_post_author | Who started the thread |
is_liked_by_root_author | Whether the original author liked it |
reply_control, can_reply | Who is allowed to reply |
text_fragments | Links and mentions parsed out of the text |
link_preview_attachment | Link preview data |
share_info | Repost and quoted-post details |
is_reply, reply_to_author and root_post_author are what let you rebuild the conversation structure rather than just listing items.
Why teams scrape Threads threads
For conversation analysis
The replies carry the objections, the questions and the corrections. A thread export is the difference between reading what a brand said and reading how people responded.
For social listening
Search phrases find relevant threads without you first having to know the URL.
For competitor monitoring
Track how competitors' announcement threads actually land β reply volume and sentiment, not just the like count on the top post.
For lead research
Replies asking "where can I get this?" identify people with intent, with their handle attached.
For customer support monitoring
Complaint threads and their reply chains are visible, so you can see which issues generated real discussion.
For research and archiving
is_liked_by_root_author and the reply-relationship fields let you preserve a conversation with its structure intact.
How to scrape a thread step by step
- Decide your targets β post URLs, numeric post IDs, search phrases, or a mix.
- Paste them into Targets to collect, one per line.
- Set Max items to cap total rows across the run, or leave it empty (or
0) for no limit. - (Optional) Enable Apify Proxy for busier targets.
- Click Start, then export the Output tab as JSON (recommended β the structure is nested).
β¬οΈ Input
Example input
{"urls": ["https://www.threads.com/@zuck/post/AbCdEfGhIjK","3141592653589793238","Mark Zuckerberg"],"maxItems": 100}
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
urls | array | β (required) | One target per line. A full post URL (threads.com or threads.net), a numeric post ID (10+ digits), or a search phrase β in which case the first thread from that search is used to fetch replies. |
maxItems | integer | β | Cap on rows saved across the whole run. Leave empty or 0 for no limit. |
proxyConfiguration | object | off | Optional. Leave off for a simple run; turn Apify Proxy on when you want requests routed through Apify's network on busy or sensitive targets. |
maxItemsis a run-wide cap, not per target. With several targets and a low cap, later targets may not be reached β the Actor stops as soon as the total is hit.
β¬οΈ Output
Example output (abridged)
{"post_url": "https://www.threads.com/@zuck/post/AbCdEfGhIjK","pk": "3141592653589793238","id": "3141592653589793238_1234567","code": "AbCdEfGhIjK","caption": { "text": "Shipping something new next week. Any guesses?" },"caption_is_edited": false,"like_count": 48210,"taken_at": 1786500151,"media_type": 19,"has_audio": null,"image_versions2": { "candidates": [ { "url": "https://scontent.cdninstagram.com/β¦", "width": 1080, "height": 1350 } ] },"video_versions": [],"user": {"username": "zuck","full_name": "Mark Zuckerberg","id": "1234567","pk": "1234567","is_verified": true,"profile_pic_url": "https://scontent.cdninstagram.com/β¦","text_post_app_is_private": false},"text_post_app_info": {"direct_reply_count": 3120,"repost_count": 942,"quote_count": 184,"reshare_count": 1126,"is_reply": false,"reply_to_author": null,"root_post_author": { "username": "zuck" },"is_liked_by_root_author": false,"reply_control": "everyone","can_reply": true,"text_fragments": { "fragments": [] }},"like_and_view_counts_disabled": false}
Illustrative values β a live run returns current Threads data. Reply items share the same shape, with is_reply: true and reply_to_author populated.
Usage recipes
Read a whole conversation
{"urls": ["https://www.threads.com/@brand/post/AbCdEfGhIjK"],"maxItems": 0}
No cap, one thread, every reply. Sort by taken_at to read it in order.
Discover threads by phrase
{"urls": ["product launch", "customer support"],"maxItems": 200}
No URLs required β the phrase finds the thread for you.
Separate replies from originals
Filter on text_post_app_info.is_reply. false is the original post; true is the conversation.
Find intent in replies
Search caption.text across reply rows for "where", "price", "link", "how much". Each hit comes with the author's username.
Spot the replies the author endorsed
is_liked_by_root_author: true marks replies the original poster liked β often the most useful contributions in a long thread.
Monitor a campaign
Schedule a run against a campaign thread and deduplicate on pk to track how the conversation grows.
How does this compare to the official Threads API?
Meta's Threads API is account-scoped: with OAuth and app review, a developer can publish, read replies to their own posts, and see their own insights. It does not return other people's threads, and there is no search endpoint for public posts.
This Actor reads publicly visible posts and their public replies β the same content any visitor can see β which is the only route to third-party thread research.
Integrate and automate
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperforge/threads-search-post-scraper").call(run_input={"urls": ["https://www.threads.com/@zuck/post/AbCdEfGhIjK"],"maxItems": 200,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():info = item.get("text_post_app_info") or {}kind = "REPLY" if info.get("is_reply") else "POST"text = ((item.get("caption") or {}).get("text") or "")[:80]print(kind, "|", item["user"]["username"], "|", item["like_count"], "|", text)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperforge/threads-search-post-scraper').call({urls: ['https://www.threads.com/@zuck/post/AbCdEfGhIjK'],maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
REST API
curl -X POST "https://api.apify.com/v2/acts/scraperforge~threads-search-post-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://www.threads.com/@zuck/post/AbCdEfGhIjK"],"maxItems":200}'
n8n, Make, Zapier and AI agents
Call the Actor from n8n, Make, Zapier or an MCP-capable agent β a common pattern is thread replies β LLM sentiment classification β dashboard.
Schedules and webhooks
Attach a Schedule to monitor an active thread and deduplicate on pk, then route results with webhooks or the Google Sheets / Airtable / Slack integrations.
Pricing and what you are charged for
Billing details for this Actor are shown on the Pricing tab of its page β check there for the current model and rates before a large run. Apify shows a cost estimate before and during every run.
Charging is per row saved, and a thread with many replies produces many rows β maxItems is your ceiling across the whole run.
Limits, reliability and blocking
maxItemscaps the whole run, not each target. Set it high enough that later targets are still reached, or leave it empty for no limit.- Search phrases use the first matching thread. That is a discovery convenience, not a full search: for an exact thread, pass its URL.
- Public posts only. Private accounts are not accessible.
- Reply depth is what Threads serves publicly. Very long threads may not return every reply.
- The output keeps Threads' nested structure, so engagement counts live under
text_post_app_infoand the author underuser. Export as JSON unless you only need a few flat columns. - The parser is schema-tolerant β it probes several key names and preserves unrecognised fields β but a large change on Threads' side can still reduce what is available. A run that parses zero posts logs a clear warning rather than failing silently.
- Media URLs point at Meta's CDN and expire.
taken_atis a Unix timestamp in this Actor's output; convert it for reporting.- Both
threads.comandthreads.netURLs work, and numeric IDs need 10 or more digits to be recognised as IDs rather than phrases. - Default run options are 4 GB memory and a 1-hour timeout.
Is it legal to scrape Threads posts?
This Actor collects publicly visible posts and replies β the same content any visitor can read without logging in. It does not log in, reply, follow, or access private profiles or direct messages.
Post text and media belong to their authors, and usernames, profile pictures and reply content are personal data under GDPR and comparable laws. Replies in particular are ordinary people's words: use them for research and analysis, credit and link when you quote, do not use them for unsolicited bulk messaging, and comply with Meta's Terms of Service.
β Frequently asked questions
What can I put in the input?
A full post URL, a numeric post ID (10+ digits), or a plain search phrase β mixed freely, one per line.
Do search phrases return every matching thread?
No. A phrase resolves to the first thread from that search, whose items are then collected. For an exact thread, pass its URL.
Do I get the replies as well as the original post?
Yes. Every item in the thread becomes its own row; text_post_app_info.is_reply distinguishes them.
Is maxItems per target or per run?
Per run. The Actor stops as soon as the total is reached, so later targets may not be processed.
Where are the engagement counts?
like_count is top-level; replies, reposts, quotes and reshares are inside text_post_app_info.
Can I scrape private accounts?
No. Only public posts are accessible.
Do threads.net URLs work?
Yes, alongside threads.com.
What does is_liked_by_root_author tell me?
That the original poster liked that reply β usually a signal the reply added something useful.
Why is the output nested?
It preserves Threads' own structure so nothing is lost, and so a schema change upstream does not blank fields. Export as JSON.
How is this different from the Threads User Posts Scraper?
That one exports a profile's own timeline as flat rows. This one takes a single post and returns the whole thread, replies included, in rich nested form.
π Related scrapers
- π§΅ Threads User Posts Scraper β a whole profile's timeline as flat, spreadsheet-ready rows.
- X Posts Search Scraper β keyword search on X.
- β€οΈπ¬ Instagram Likes Scraper with Comments β comment threads on Instagram.
- Truth Social Scraper β another text-first network.
Browse the full collection on the ScraperForge profile.
π¬ Feedback
Need deeper reply pagination, real keyword search, or a flattened output shape? Open an issue on the Issues tab of this Actor.