Threads Scraper avatar

Threads Scraper

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Threads Scraper

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

Data WiKi

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

5 days ago

Last modified

Categories

Security

Limited permissions

Share

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?

ModeWhat you giveWhat you get
👤 Profiles onlyusernames or profile URLsone profile row per account: followers, bio, bio links, verified, private, picture
🧵 User postsusernames or profile URLsthe account's posts, newest first, plus an optional profile card
🔍 Search postskeywords or #hashtagsmatching posts, ranked by relevance (Top), freshest first (Recent) or both
🔗 Specific posts by URLpost links, short codes or IDsthe 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 }
}
FieldTypeDescriptionDefault
modestringprofile, posts, search or postUrlsposts
usernamesstring[]Usernames (zuck, @zuck) or profile URLs. Profile and posts modes.["zuck"]
searchQueriesstring[]Keywords or #hashtags. Search mode.–
postUrlsstring[]Post URLs, short codes or numeric post IDs. postUrls mode.–
searchSortstringtop, recent or both. Search mode.top
maxPostsintegerMax posts per username / query (1–200). Free plan: up to 10 items per run in total.20
postedAfterstringKeep posts published at or after this date (YYYY-MM-DD or RFC3339, inclusive).–
postedBeforestringKeep posts published before this date (exclusive).–
minLikesintegerSkip posts with fewer likes.0
includeProfilebooleanPosts mode: also store a profile row per user.true
includeRepliesbooleanKeep the author's own replies / thread continuations.false
includeReplyThreadbooleanAlso collect the replies under every collected post.false
maxRepliesPerPostintegerReplies stored per post when includeReplyThread is on (1–200).20
dedupebooleanStore every post / profile only once across all targets.true
proxyConfigurationobjectProxy 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.

FieldMeaning
typeprofile or post
likeCount, replyCount, repostCount, quoteCountengagement counters
mediaTypetext, photo, video or carousel
media[]type, url, videoUrl, width, height, hasAudio per attachment
hashtags, mentions, urlsentities parsed from the text (hashtags also include the post's topic tag)
isRepost / repostedFromrepost flag and the original author
isQuote / quotedPostUrlquote flag and the quoted post link
isPinned, replyControlpinned-to-profile flag and who may reply
timestamp / datepublication 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)

  1. Log in at https://console.apify.com and open Threads Scraper.
  2. Pick a Scraping mode.
  3. Paste usernames, search keywords or post URLs – one per line, as many as you like.
  4. Optionally set limits, a date window, reply options or a proxy.
  5. Click Start and follow the log: every stored row appears as a line with likes and replies.
  6. Open the Output tab while the run is going. Switch between Overview, Posts, Profiles, Engagement and Media.
  7. 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 ApifyClient
client = 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 includeProfile for engagement rates and posting frequency.
  • Audience and sentiment analysis – includeReplyThread collects what people answer under a post.
  • Trend and hashtag tracking – #hashtag queries 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.

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.