Threads Scraper
Pricing
from $1.40 / 1,000 results
Threads Scraper
Collect public Threads posts, profiles, replies and keyword or hashtag search results: text, likes, reposts, followers and bio. No Threads or Instagram login needed. Great for social listening, brand monitoring, trend research and finding creators.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Data WiKi
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
Threads Scraper — posts, profiles, replies and search results
Threads Scraper extracts public data from Meta's Threads (threads.com) without a Threads or Instagram login. It collects posts with text, likes, replies, reposts, quotes, media, hashtags, mentions and links, profile cards with followers, bio and verified status, replies under any post, and keyword or hashtag search results. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a social-listening pipeline. No Threads account or cookies needed. Rows reach your dataset the moment they are collected, so brand monitors, researchers and data teams can watch results arrive and export them while the run is still going.
🧵 What does Threads Scraper do?
| Mode | What you give | What you get |
|---|---|---|
| 👤 Profiles only | usernames or profile URLs | one profile row per account: followers, bio, bio links, verified, private, picture |
| 🧵 User posts | usernames or profile URLs | the account's posts, newest first, plus an optional profile card |
| 🔍 Search posts | keywords or #hashtags | matching posts, ranked by relevance (Top), freshest first (Recent) or both |
| 🔗 Specific posts by URL | post links, short codes or IDs | the exact posts, optionally with the replies under them |
Every mode can add the replies under each collected post as separate rows, and every mode accepts bulk input (one target per line).
🏆 Why choose Threads Scraper?
- Four modes in one Actor – profiles, user posts, search and exact post URLs, all with bulk input.
- Reply threads included – most Threads tools stop at the post; this one can store the replies too.
- Live results – rows appear in the Output tab while the run is still going.
- Self-healing – blocked requests switch proxy tier automatically, so you rarely need to configure anything.
- Clean, typed JSON – the same field names on every run, with nulls where Threads shows nothing.
✨ Key features
- 🔓 No login, no cookies, no API key – works on anything a visitor can see on threads.com.
- ⚡ Real-time output – each profile, post or reply is saved as soon as it is parsed. A long run never ends with an empty dataset.
- 📊 Full engagement data – likes, reply count, repost count and quote count on every post.
- 🖼️ Media extraction – photo and video URLs with dimensions, carousels, GIFs and audio flag.
- 🔗 Parsed text entities – hashtags, topic tag, @mentions and external links as separate arrays.
- 🧵 Reply threads – collect up to 200 replies under every post, each linked to its parent post.
- 🎯 Filters – date window (
postedAfter,postedBefore), minimum likes, keep or drop the author's own replies. - 🌐 Automatic proxy fallback – runs without a proxy, switches to a datacenter and then to a residential proxy when Threads blocks a request, and keeps that setting for the rest of the run. Every switch is logged.
- 🧹 Duplicate removal across usernames and queries.
- 🪶 Lightweight – plain HTTP requests, no browser, 1 GB of memory is enough.
📥 Input
{"mode": "posts","usernames": ["zuck", "https://www.threads.com/@mosseri"],"maxPosts": 20,"includeProfile": true,"includeReplyThread": false,"proxyConfiguration": { "useApifyProxy": false }}
| Field | Type | Description | Default |
|---|---|---|---|
mode | string | profile, posts, search or postUrls | posts |
usernames | string[] | Usernames (zuck, @zuck) or profile URLs. Profile and posts modes. | ["zuck"] |
searchQueries | string[] | Keywords or #hashtags. Search mode. | – |
postUrls | string[] | Post URLs, short codes or numeric post IDs. postUrls mode. | – |
searchSort | string | top, recent or both. Search mode. | top |
maxPosts | integer | Max posts per username / query (1–200). Free plan: up to 10 items per run in total. | 20 |
postedAfter | string | Keep posts published at or after this date (YYYY-MM-DD or RFC3339, inclusive). | – |
postedBefore | string | Keep posts published before this date (exclusive). | – |
minLikes | integer | Skip posts with fewer likes. | 0 |
includeProfile | boolean | Posts mode: also store a profile row per user. | true |
includeReplies | boolean | Keep the author's own replies / thread continuations. | false |
includeReplyThread | boolean | Also collect the replies under every collected post. | false |
maxRepliesPerPost | integer | Replies stored per post when includeReplyThread is on (1–200). | 20 |
dedupe | boolean | Store every post / profile only once across all targets. | true |
proxyConfiguration | object | Proxy to start with. Automatic fallback is always on. | no proxy |
Search example (freshest mentions first)
{"mode": "search","searchQueries": ["Acme launch", "#acme"],"searchSort": "recent","maxPosts": 50,"postedAfter": "2026-10-01"}
Posts with reply threads
{"mode": "postUrls","postUrls": ["https://www.threads.com/@zuck/post/DeZtp-TkQHh"],"includeReplyThread": true,"maxRepliesPerPost": 50}
📤 Output
Rows land in the default dataset while the run is going. The Output tab shows them in five views: Overview, Posts, Profiles, Engagement and Media. Export any view as JSON, CSV, Excel or XML.
Profile row
{"type": "profile","username": "zuck","fullName": "Mark Zuckerberg","biography": "Mostly superintelligence and MMA takes","followerCount": 5751350,"isVerified": true,"isPrivate": false,"profilePicUrl": "https://instagram.fdac14-1.fna.fbcdn.net/v/t51.82787-19/....jpg","bioLinks": [],"url": "https://www.threads.com/@zuck","userId": "63055343223","scrapedAt": "2026-10-28T19:49:36.756Z"}
Post row
{"type": "post","postId": "4006434140014576097","code": "DeZtp-TkQHh","username": "zuck","fullName": "Mark Zuckerberg","isVerified": true,"userId": "63055343223","text": "Introducing Muse Wonder, our new family of frontier models with state of the art performance for personal and professional agentic work.","likeCount": 2138,"replyCount": 607,"repostCount": 170,"quoteCount": 61,"mediaType": "photo","media": [{ "type": "photo", "url": "https://instagram.fdac14-1.fna.fbcdn.net/v/t51.82787-15/....webp", "videoUrl": null, "width": 2160, "height": 3260, "hasAudio": null }],"hashtags": [],"topicTag": null,"mentions": [],"urls": [],"isReply": false,"isRepost": false,"repostedFrom": null,"isQuote": false,"quotedPostUrl": null,"isPinned": false,"replyControl": "everyone","timestamp": 1791824189,"date": "2026-10-12T16:56:29.000Z","url": "https://www.threads.com/@zuck/post/DeZtp-TkQHh","searchQuery": null,"scrapedAt": "2026-10-28T19:49:36.756Z"}
Reply rows are post rows with isReply: true plus replyToPostId and replyToUsername. In search mode searchQuery holds the term that produced the post. Values Threads does not expose stay null.
| Field | Meaning |
|---|---|
type | profile or post |
likeCount, replyCount, repostCount, quoteCount | engagement counters |
mediaType | text, photo, video or carousel |
media[] | type, url, videoUrl, width, height, hasAudio per attachment |
hashtags, mentions, urls | entities parsed from the text (hashtags also include the post's topic tag) |
isRepost / repostedFrom | repost flag and the original author |
isQuote / quotedPostUrl | quote flag and the quoted post link |
isPinned, replyControl | pinned-to-profile flag and who may reply |
timestamp / date | publication time as Unix seconds and ISO 8601 |
A JSON run summary (rows stored, failed targets, requests, proxy events) is saved under the key SUMMARY in the run's key-value store.
🚀 How to use (Apify Console)
- Log in at https://console.apify.com and open Threads Scraper.
- Pick a Scraping mode.
- Paste usernames, search keywords or post URLs – one per line, as many as you like.
- Optionally set limits, a date window, reply options or a proxy.
- Click Start and follow the log: every stored row appears as a line with likes and replies.
- Open the Output tab while the run is going. Switch between Overview, Posts, Profiles, Engagement and Media.
- Export as JSON, CSV, Excel or XML, or read the dataset through the API.
🤖 Use via API / MCP
curl -X POST "https://api.apify.com/v2/actors/<ACTOR_ID>/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"posts","usernames":["zuck"],"maxPosts":10}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("<ACTOR_ID>").call(run_input={"mode": "search", "searchQueries": ["artificial intelligence"], "searchSort": "recent", "maxPosts": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["username"], item.get("likeCount"), item.get("text"))
AI agents can run this Actor through the Apify MCP server:
$claude mcp add --transport http apify "https://mcp.apify.com"
The agent finds Threads Scraper with the server's search, details and call-actor tools and reads the results from the dataset.
💡 Best use cases
- Social listening – search brand, product or competitor names with
searchSort: "recent"on a schedule. - Creator and influencer research – posts mode with
includeProfilefor engagement rates and posting frequency. - Audience and sentiment analysis –
includeReplyThreadcollects what people answer under a post. - Trend and hashtag tracking –
#hashtagqueries with a date window for weekly reports. - Content archiving – postUrls mode keeps the exact posts you reference, with media URLs.
- AI pipelines – clean JSON text and metadata for LLM summaries, embeddings or classification.
💳 Pricing
Threads Scraper uses pay-per-event pricing. One event, Result row stored, is charged for every profile, post or reply row written to the dataset. Rows that fail or are filtered out cost nothing. Set Maximum charge per run in the run options to cap spend; the Actor stops cleanly when the cap is reached and keeps everything stored so far.
❓ Frequently asked questions
Do I need a Threads or Instagram account? No. The Actor reads only what any logged-out visitor can see.
Why did I get fewer posts than maxPosts?
The account has fewer public posts, your filters removed some, or in search mode Threads offers a limited set of results per query. Try searchSort: "both" to merge the Top and Recent lists.
Can it scrape private accounts?
No. Private profiles return their profile card with isPrivate: true and no posts.
What happens when Threads blocks a request? The Actor retries with back-off, switches to an Apify datacenter proxy and then to a residential proxy, and keeps the working proxy for the rest of the run. Each switch is written to the log.
How do I get the replies under a post?
Turn on Collect replies under each post and set Max replies per post. Reply rows carry replyToPostId and replyToUsername.
Is there a free plan limit? Free Apify plans receive up to 10 items per run with no monthly cap. Any paid plan removes the limit.
What if Threads changes its layout? The Actor refreshes its session details automatically on every run. If a change still breaks a field, open an issue and it will be updated.
⚖️ Legal
Threads Scraper collects publicly available data only. It does not bypass logins or access controls and does not scrape private accounts. You are responsible for using the data in line with Meta's terms, GDPR, CCPA and other applicable laws.
🛟 Support and feedback
Open an issue in the Actor's Issues tab in Apify Console. Please include the run ID and the input you used.