Export public Threads posts and visible replies from post URLs into structured, analysis-ready data. This Threads posts scraper captures text, authors, engagement, media, timestamps, and conversation links for social listening, campaign reporting, PR evidence, and OSINT workflows—without a login. Use it whenever you need to scrape a Threads post into a repeatable dataset.
What you can export
- Root posts and visible public replies as separate rows
- Post IDs, canonical URLs, text, timestamps, and author details
- Likes, replies, reposts, quotes, shares, and public view counts when available
- Image, video, and carousel URLs plus accessibility captions
- Hashtags, mentions, external links, and link-preview titles
- Reply-to, parent-post, and root-post IDs for conversation analysis
- Collection status and warnings for auditable partial results
Example input
{
"postUrls": [
{ "url": "https://www.threads.com/@openai/post/DW7RXR7EnRC" }
],
"maxItems": 10,
"includeReplies": true,
"maxRepliesPerPost": 20,
"includeAuthorProfile": false,
"failOnBlocked": false
}
Example output
{
"itemType": "post",
"postUrl": "https://www.threads.com/@openai/post/DW7RXR7EnRC",
"postId": "example-public-post-id",
"shortcode": "DW7RXR7EnRC",
"text": "Public post text",
"timestamp": "2026-08-20T12:00:00.000Z",
"username": "openai",
"userId": "example-public-user-id",
"displayName": "OpenAI",
"profileUrl": "https://www.threads.com/@openai",
"avatarUrl": "https://example.cdn/image.jpg",
"isVerified": true,
"bio": null,
"followerCount": null,
"likeCount": 1200,
"replyCount": 84,
"repostCount": 95,
"quoteCount": 12,
"shareCount": null,
"viewCount": 31735,
"viewCountStatus": "available",
"mediaType": "image",
"mediaUrls": ["https://example.cdn/media.jpg"],
"mediaWidth": 1080,
"mediaHeight": 1350,
"accessibilityCaption": null,
"hashtags": [],
"mentions": [],
"mentionedUsers": [],
"externalUrls": [],
"linkPreviewTitle": null,
"language": null,
"isReply": false,
"isRepost": false,
"isQuotePost": false,
"replyToUsername": null,
"replyToPostId": null,
"replyControl": null,
"parentPostId": null,
"rootPostId": "example-public-post-id",
"sourceUrl": "https://www.threads.com/@openai/post/DW7RXR7EnRC",
"scrapedAt": "2026-08-25T12:00:00.000Z",
"collectionStatus": "complete",
"warning": null
}
Input settings
| Field | Type | Default | Description |
|---|---|---|---|
postUrls |
array | required | Public threads.com/@username/post/code URLs. |
maxItems |
integer | 10 |
Maximum combined root-post and reply rows to save. |
includeReplies |
boolean | true |
Save visible public replies as linked rows. |
maxRepliesPerPost |
integer | 20 |
Maximum visible replies saved for each root post. |
includeAuthorProfile |
boolean | false |
Request bounded public author-profile enrichment when available. |
failOnBlocked |
boolean | false |
Fail the run on a source block instead of preserving completed rows with warnings. |
Who is it for?
Social listening teams, brand marketers, PR teams, and OSINT researchers who need structured evidence from specific public Threads post URLs.
Common use cases
- Social listening: archive specific public posts and their visible conversation context.
- Campaign reporting: export engagement and media evidence for campaign posts.
- PR monitoring: preserve source URLs, timestamps, author details, and public metrics.
- OSINT research: build auditable post-level datasets with parent/root relationships.
- Content analysis: analyze hashtags, mentions, links, media types, and public reactions.
Tips and limits
- Use canonical public Threads post URLs for the most reliable target matching.
- Start with a low
maxItemsvalue, inspect the dataset, then scale the batch. - Threads may expose only a bounded set of visible replies; the Actor does not claim to return hidden or private replies.
- Deleted, private, unavailable, or rate-limited posts can produce warnings or no row.
- Some public fields, including views, shares, biography, follower count, and language, may not be available for every post.
collectionStatusandwarningdistinguish complete rows from partial source responses.- The Actor does not accept login cookies and does not access private accounts, direct messages, or private profile data.
API usage
Run the scraper programmatically as a Threads post API using the Apify REST endpoint below.
curl -X POST \
"https://api.apify.com/v2/acts/fetch_cat~threads-post-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"postUrls":[{"url":"https://www.threads.com/@openai/post/DW7RXR7EnRC"}],"maxItems":10,"includeReplies":true}'
Use the returned run ID to monitor completion and download the default dataset as JSON, CSV, Excel, or another supported format.
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/threads-post-scraper').call({
postUrls: [{ url: 'https://www.threads.com/@openai/post/DW7RXR7EnRC' }],
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClient
client = ApifyClient(token='APIFY_TOKEN')
run = client.actor('fetch_cat/threads-post-scraper').call(run_input={
'postUrls': [{'url': 'https://www.threads.com/@openai/post/DW7RXR7EnRC'}],
'maxItems': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
Use with MCP and AI agents
Connect an MCP-compatible client to:
https://mcp.apify.com/?tools=fetch_cat/threads-post-scraper
The Actor can also be called from the Apify JavaScript or Python client, n8n, Make, Zapier, webhooks, and scheduled Apify Tasks.
Support
For questions, feature requests, or a reproducible problem, open an issue from the Actor's Apify Store page. Include a public example URL, the run ID, and the expected behavior; do not include credentials or private data.