Threads Post Scraper
Extracts data from public Threads posts — caption text, author username, like and reply counts, images and videos, and the full reply thread including nested replies. Accepts multiple post URLs per run.
What it extracts
Every field below comes from the Actor’s published dataset schema.
| Field | Description | Type |
|---|---|---|
thread.username | Username | text |
thread.text | Text | text |
thread.like_count | Like Count | number |
thread.reply_count | Reply Count | number |
thread.images | Images | image |
thread.videos | Videos | video |
replies | Replies | text |
Input parameters
Generated from the Actor’s input schema — the same fields the Apify console shows.
| Parameter | Type | Required | Description |
|---|---|---|---|
startUrls | array | Required | The URLs of the Threads posts to scrape. |
proxyConfiguration | object | Optional | Specifies proxy servers that will be used by the scraper in order to hide its origin. |
API access
Run this Actor from your own code over the Apify API.
{
"startUrls": [
{
"url": "https://www.threads.net/@zuck/post/CuVdfsNtmvh"
}
]
}curl -X POST \
"https://api.apify.com/v2/acts/logical_scrapers~threads-post-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.threads.net/@zuck/post/CuVdfsNtmvh"}]}'import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' })
const run = await client.actor('logical_scrapers~threads-post-scraper').call({
"startUrls": [
{
"url": "https://www.threads.net/@zuck/post/CuVdfsNtmvh"
}
]
})
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("logical_scrapers~threads-post-scraper").call(run_input={
"startUrls": [
{
"url": "https://www.threads.net/@zuck/post/CuVdfsNtmvh",
},
],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)Runs are executed on Apify. Create an API token in your Apify account, then call the Actor over REST or with the official client for your language. The same input object works in the Apify console, so you can test interactively before automating.
Use cases
Conversation research
Capture a post together with its entire reply tree to study how a discussion actually developed.
Engagement analysis
Compare like and reply counts across a set of posts to see what resonates.
Brand monitoring
Track posts that mention a brand and collect the replies alongside them.
Dataset building
Assemble structured social conversation data for analysis or model evaluation.
Pricing
Data not currently verified. This Actor's pricing model is not declared in our source repository.
Current rates are published on the Apify listing and can change, so they are not duplicated here. See pricing on Apify
Reliability
Measured across all public Goldmine Actors on Apify, 2026-08-24. This is an account-level figure, not a per-Actor benchmark — per-Actor speed and completeness benchmarks are not yet published. Source.
Limitations
What this Actor does not do, so you can tell before you run it whether it fits.
- Public posts only. Private accounts are not accessible.
- Takes post URLs as input — it does not search Threads or discover posts. Use Threads Hashtag Scraper or Threads Profile Scraper to build the URL list.
- Returns one record per post with its replies attached, rather than one record per reply.
- It reads the JSON embedded in the post page, so a change to that structure can affect field availability.
Frequently asked questions
Does it capture replies?
Yes. The full conversation is returned, including nested replies, in the `replies` field of the post record.
Can I scrape more than one post per run?
Yes — `startUrls` takes an array of Threads post URLs.
Do I need an account?
No. It works against public posts without authentication.