🧡 Threads Search Post Scraper avatar

🧡 Threads Search Post Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
🧡 Threads Search Post Scraper

🧡 Threads Search Post Scraper

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

ScraperForge

ScraperForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

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.net works 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

FieldDescription
post_urlCanonical link to the item
captionPost text
like_countLikes
taken_atTimestamp
codeThreads shortcode
pk, idPost identifiers
media_typeWhat kind of post it is
image_versions2Image renditions
video_versionsVideo renditions
carousel_mediaMulti-item media
has_audio, audioAudio attachment data
accessibility_captionAlt text
usertagsTagged users
is_paid_partnershipBranded-content flag
caption_is_editedWhether the post was edited
like_and_view_counts_disabledWhether counts are hidden

Author (user)

FieldDescription
username, full_nameIdentity
id, pkAccount identifiers
profile_pic_urlAvatar
is_verifiedVerified badge
text_post_app_is_privatePrivate-account flag
friendship_statusRelationship flags

Thread context (text_post_app_info)

FieldDescription
direct_reply_countReplies to this item
repost_countReposts
quote_countQuote posts
reshare_countTotal reshares
is_replyWhether this item is a reply
reply_to_authorWho it replies to
root_post_authorWho started the thread
is_liked_by_root_authorWhether the original author liked it
reply_control, can_replyWho is allowed to reply
text_fragmentsLinks and mentions parsed out of the text
link_preview_attachmentLink preview data
share_infoRepost 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

  1. Decide your targets β€” post URLs, numeric post IDs, search phrases, or a mix.
  2. Paste them into Targets to collect, one per line.
  3. Set Max items to cap total rows across the run, or leave it empty (or 0) for no limit.
  4. (Optional) Enable Apify Proxy for busier targets.
  5. 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

FieldTypeDefaultDescription
urlsarrayβ€” (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.
maxItemsintegerβ€”Cap on rows saved across the whole run. Leave empty or 0 for no limit.
proxyConfigurationobjectoffOptional. Leave off for a simple run; turn Apify Proxy on when you want requests routed through Apify's network on busy or sensitive targets.

maxItems is 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 ApifyClient
client = 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

  • maxItems caps 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_info and the author under user. 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_at is a Unix timestamp in this Actor's output; convert it for reporting.
  • Both threads.com and threads.net URLs 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.

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.


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.