Threads Scraper - Posts, Profiles, Replies & Search avatar

Threads Scraper - Posts, Profiles, Replies & Search

Pricing

from $0.24 / 1,000 posts

Go to Apify Store
Threads Scraper - Posts, Profiles, Replies & Search

Threads Scraper - Posts, Profiles, Replies & Search

Threads scraper: scrape Threads posts, profiles (followers, bio, links), replies and keyword or #hashtag search results as deep as you need, with likes, reposts, quotes, shares, images and videos. No login. $0.30 per 1,000 posts, $0.50 per 1,000 profiles.

Pricing

from $0.24 / 1,000 posts

Rating

0.0

(0)

Developer

Social Scrapers

Social Scrapers

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

12 hours ago

Last modified

Features

Limited permissions

Share

Threads Scraper extracts public data from Threads (threads.com): profiles with followers, bio, bio links and verified badge, their posts, the replies under any post, and keyword or #tag search results as deep as you need, with likes, replies, reposts, quotes, shares, images and videos. No Threads account, cookies or login. $0.30 per 1,000 posts and $0.50 per 1,000 profiles.

What does Threads Scraper do?

It reads Threads the way a logged-out visitor sees it and turns profiles, posts, replies and search results into clean dataset items you can download as JSON, CSV, Excel, XML or HTML, or read through the Apify API.

  • πŸ‘€ Threads profile scraper: give it usernames or profile URLs and get each account's name, bio, follower count, verified badge, bio links, topics and profile picture.
  • πŸ“ Threads posts scraper: each profile's recent posts, newest first (pinned posts first, as on the profile), with text, date, permalink, images and videos, link previews and engagement counts. Most accounts can be paged back about 1,000 posts.
  • πŸ’¬ Threads replies scraper: give it post links and get each post with its replies: the author's own continuation, pinned replies, then the replies people wrote, each with the post it answers.
  • πŸ”Ž Threads search scraper: search posts by keyword or topic tag (#tag). Top results, recent results or both, as deep as you ask: recent results keep going back in time, top results go back week by week.
  • πŸ“… Date filter: keep only posts newer than a date (2026-01-31, 31/01/2026, Jan 31 2026) or an age (7 days, 2w, 3 months, yesterday); searches stop there.
  • 🧾 Stable records: profiles, posts and replies each have a fixed set of fields, so exports and integrations stay simple.
  • ♻️ No duplicates: a post found through two inputs (a profile and a search, say) is stored once and charged once.
  • πŸ’Έ Pay only for results: unknown accounts and removed posts cost nothing, and the run stops cleanly at the spending limit you set.

What data can you extract from Threads?

One dataset item per profile, post or reply, told apart by dataType: profile (an account from usernames), post (a post of an account, a search result, or a post you linked) or reply (a reply under a post you linked). Every field of a type is always present: null, "" or an empty list means Threads shows nothing for it.

Profile fields

FieldTypeDescription
dataTypestringprofile
idstringNumeric account id.
usernamestringThe account's username.
urlstringLink to the profile.
fullNamestring or nullDisplay name.
biographystringThe bio ("" when empty).
followerCountinteger or nullFollowers.
isVerifiedbooleanShows the verified badge.
isPrivatebooleanA private account (its posts are not shown).
profilePicUrlstring or nullThe largest profile picture available.
bioLinksarrayLinks in the bio: url and title.
topicsarrayTopics the account lists on its profile.
inputstringThe usernames entry it was read for.
scrapedAtstringWhen it was scraped, ISO 8601 UTC.

Post and reply fields

FieldTypeDescription
dataTypestringpost or reply
idstringNumeric post id.
codestringThe short code in the post's address.
urlstringPermalink of the post.
textstringPost text ("" for media only).
createdAtstring or nullWhen it was posted, ISO 8601 UTC.
authorobjectid, username, fullName, isVerified, profilePicUrl and url.
likeCountinteger or nullLikes; null when the author hides them.
replyCountintegerDirect replies.
repostCountintegerReposts.
quoteCountintegerQuotes.
shareCountintegerShares.
mediaTypestringtext, image, video or carousel (other for a kind of post Threads adds later).
mediaarrayImages and videos in order: type, url, thumbnailUrl (a video's cover), width, height, altText.
topicstring or nullThe topic tag shown on the post.
hashtagsarray#tags in the text.
mentionsarrayUsernames mentioned.
linksarrayLinks in the text and the link preview.
linkPreviewobject or nullThe link preview card: url, title, imageUrl.
isReplybooleanThreads marks the post as a reply (also true when an author continues their own thread).
replyToUsernamestring or nullThe author it replies to.
replyToPostIdstring or nullFor a reply: the id of the post it answers.
quotedPostobject or nullThe post it quotes: id, code, url, text, authorUsername, createdAt.
repostedPostobject or nullThe post it reposts, same fields.
isPinnedbooleanPinned to the profile, or a reply pinned under its post.
isEditedbooleanThe text was edited.
isPaidPartnershipbooleanLabelled as a paid partnership.
languagestring or nullLanguage Threads detected, such as en.
sourcestringprofile, post or search: how the post was found.
inputstringThe username, post URL or search query it was found through.
scrapedAtstringWhen it was scraped, ISO 8601 UTC.

How to scrape Threads

  1. Open the Actor and fill in any mix of Usernames or profile URLs, Post URLs and Search queries.
  2. Set how much you want: Max posts per profile, Max replies per post, Max posts per search, and optionally Only posts newer than (for example 30 days).
  3. For searches, pick Search results: top and recent (default), top, or recent.
  4. Keep the default proxy (Apify Proxy, residential) and click Start.
  5. Watch items arrive in the Output tab (the Posts and replies and Profiles views show the main columns), then export them or fetch them with the Apify API.

How much does it cost to scrape Threads?

You pay per item delivered to the dataset: no start fee, no extra charge for proxies or platform usage.

WhatPrice per 1,000Silver planGold plan
Post (posts, replies and search results alike)$0.30$0.27$0.24
Profile$0.50$0.45$0.40
  • 5,000 search results for a keyword cost $1.50.
  • 100 profiles with their latest 50 posts each cost 100 Γ— $0.0005 + 5,000 Γ— $0.0003 = $1.55.

Unknown accounts, removed posts and searches with no results cost nothing, and a post found through two inputs is charged once. Set a maximum total charge in the run options to cap a run: the Actor stops cleanly once it is reached and keeps everything scraped so far. Apify's free plan includes monthly platform credit, enough to try the Actor on thousands of posts.

Input example

{
"usernames": ["nasa", "unicef", "https://www.threads.com/@metmuseum"],
"maxPostsPerProfile": 30,
"postUrls": ["https://www.threads.com/@nasa/post/DfaRKFSlI4A"],
"includeReplies": true,
"maxReplies": 100,
"searchQueries": ["space telescope", "#astronomy"],
"maxPostsPerQuery": 500,
"searchSort": "top_and_recent",
"onlyPostsNewerThan": "30 days",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
FieldDefaultDescription
usernamesAccounts to scrape: nasa, @nasa or https://www.threads.com/@nasa (threads.net links work too).
maxPostsPerProfile20Recent posts to read from each account. 0 gives the profile only. No upper limit.
postUrlsPost links: https://www.threads.com/@nasa/post/<code> or the short https://www.threads.com/t/<code>.
includeRepliestrueAlso collect the replies under each linked post.
maxReplies50Replies to collect under each linked post.
searchQueriesKeywords such as space telescope, or topic tags such as #astronomy.
maxPostsPerQuery50The most posts to keep from each search. No upper limit.
searchSorttop_and_recenttop, recent or top_and_recent (both, duplicates removed).
onlyPostsNewerThanSkip older profile posts and search results: a date (2026-01-31, 2026-1-31, 31/01/2026, Jan 31 2026; a UTC day), an ISO date-time (2026-01-31T18:00:00Z) or an age (7 days, 2w, 3 months, 1 year, yesterday). With both day and month 12 or less (01/02/2026) the date is read month/day/year.
proxyConfigurationResidentialProxy settings. Keep the residential default.

Output example

A profile:

{
"dataType": "profile",
"id": "28829152388",
"username": "nasa",
"url": "https://www.threads.com/@nasa",
"fullName": "NASA",
"biography": "Making the seemingly impossible, possible. ✨",
"followerCount": 12792257,
"isVerified": true,
"isPrivate": false,
"profilePicUrl": "https://<media-host>/<image>.jpg?<signed-parameters>",
"bioLinks": [],
"topics": ["NASA", "Space Threads", "Science Threads"],
"input": "nasa",
"scrapedAt": "2026-11-08T02:14:04.709Z"
}

A post:

{
"dataType": "post",
"id": "4023738253734741550",
"code": "DfXMJ-DAoYu",
"url": "https://www.threads.com/@nasa/post/DfXMJ-DAoYu",
"text": "Pssssst. There's a spacewalk happening now!\n\nhttps://www.nasa.gov/live/",
"createdAt": "2026-11-05T14:00:37.000Z",
"author": {
"id": "28829152388",
"username": "nasa",
"fullName": "NASA",
"isVerified": true,
"profilePicUrl": "https://<media-host>/<image>.jpg?<signed-parameters>",
"url": "https://www.threads.com/@nasa"
},
"likeCount": 4436,
"replyCount": 127,
"repostCount": 244,
"quoteCount": 35,
"shareCount": 50,
"mediaType": "video",
"media": [
{
"type": "video",
"url": "https://<media-host>/<video>.mp4?<signed-parameters>",
"thumbnailUrl": "https://<media-host>/<image>.jpg?<signed-parameters>",
"width": 1920,
"height": 1080,
"altText": null
}
],
"topic": "Space Threads",
"hashtags": [],
"mentions": [],
"links": ["https://www.nasa.gov/live/"],
"linkPreview": {
"url": "https://www.nasa.gov/live/",
"title": "NASA Live - NASA",
"imageUrl": "https://<media-host>/<image>?<signed-parameters>"
},
"isReply": false,
"replyToUsername": null,
"replyToPostId": null,
"quotedPost": null,
"repostedPost": null,
"isPinned": false,
"isEdited": false,
"isPaidPartnership": false,
"language": "en",
"source": "profile",
"input": "nasa",
"scrapedAt": "2026-11-08T02:14:04.709Z"
}

A reply (the replier's details replaced by placeholders):

{
"dataType": "reply",
"id": "4024621402157608983",
"code": "<code>",
"url": "https://www.threads.com/@<replier>/post/<code>",
"text": "What a beauty... 😍",
"createdAt": "2026-11-06T19:11:19.000Z",
"author": {
"id": "<replier-id>",
"username": "<replier>",
"fullName": "<replier name>",
"isVerified": false,
"profilePicUrl": "https://<media-host>/<image>.jpg?<signed-parameters>",
"url": "https://www.threads.com/@<replier>"
},
"likeCount": 24,
"replyCount": 0,
"repostCount": 0,
"quoteCount": 0,
"shareCount": 5,
"mediaType": "text",
"media": [],
"topic": null,
"hashtags": [],
"mentions": [],
"links": [],
"linkPreview": null,
"isReply": true,
"replyToUsername": "nasa",
"replyToPostId": "4024604676674850304",
"quotedPost": null,
"repostedPost": null,
"isPinned": true,
"isEdited": false,
"isPaidPartnership": false,
"language": "en",
"source": "post",
"input": "https://www.threads.com/@nasa/post/DfaRKFSlI4A",
"scrapedAt": "2026-11-08T02:14:04.473Z"
}

Use cases

  • Brand and competitor monitoring: follow what accounts post and how their audience reacts, on a schedule.
  • Influencer research: compare followers, bios, links and engagement across creators.
  • Social listening: collect every recent post that mentions your brand, product or topic, going back as far as you need.
  • Engagement analysis: find which posts draw the most likes, replies, reposts and quotes.
  • Conversation research: read the replies under a launch, an announcement or a viral post.
  • AI and text datasets: gather real-world posts for sentiment analysis, topic modelling, classification or a RAG pipeline.

Use it via API, Python, JavaScript and integrations

Run the Threads Scraper from your own code with the Apify API:

curl -X POST "https://api.apify.com/v2/acts/socialscrapers~threads-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["space telescope"], "maxPostsPerQuery": 200}'

Python, with the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("socialscrapers/threads-scraper").call(
run_input={"usernames": ["nasa"], "maxPostsPerProfile": 50, "searchQueries": ["#astronomy"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["dataType"], item.get("username") or item.get("text", "")[:80])

JavaScript, with the apify-client package:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('socialscrapers/threads-scraper').call({ usernames: ['nasa'], maxPostsPerProfile: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.dataType === 'post').length, 'posts');

It also works without code: connect it to Make, Zapier, n8n, Google Sheets, Slack or webhooks from the Integrations tab, run it on a schedule, and let AI agents call it through the Apify MCP server.

Limits

  • Public data only. The Actor never logs in, so it sees what Threads shows a logged-out visitor. Private accounts give their profile item only.
  • Searches return posts, not accounts. Threads does not show the Profiles tab of search to logged-out visitors.
  • Replies as the post page shows them. Direct replies with the first follow-ups under each; longer side conversations are not expanded.
  • No view counts and no following counts. Threads does not show them to logged-out visitors.
  • Profile posts are the account's own posts. Its replies to others and its reposts are not included.
  • How far back. Threads lets a logged-out visitor page a long way back through most accounts (1,000 posts, nearly two years, in our tests), but some accounts' post lists end sooner. The run log says how far back each profile and search went.
  • Media links expire. Image and video links point to Threads' media servers, which expire them after some days; download files promptly if you need them.
  • Residential proxy recommended. Keep the default Apify Proxy RESIDENTIAL setting.
  • Share links work as they are. Links copied from the app, on threads.com or threads.net, with their ?xmt=… or ?igshid=… parameters, and short /t/CODE post links are all read; a profile link given as a post (or a short post link given as a username) is read as what it is. Nothing is charged for reading a link.
  • A run with 0 results still succeeds when your input was fine. When an account does not exist or is private, a post is gone, or a search finds nothing, the run ends as Succeeded with a status message naming each input and why, and nothing is charged. A run fails only when no input is usable at all, or when Threads refuses every one of 3 or more inputs.

FAQ

Is it legal to scrape Threads? The Threads Scraper only reads data Threads shows publicly to anyone without an account. Whether you may use it depends on your purpose and jurisdiction (for example personal-data rules such as the GDPR), so check before you store or publish personal data.

Do I need a Threads account or cookies? No. The Actor reads only what Threads shows to visitors who are not logged in.

How many search results can I get? As many as the topic has: recent results keep going back in time until Max posts per search, the date in Only posts newer than, or the end of the results. In our tests a busy keyword ("electric vehicles") gave 300 posts reaching back ten weeks in under four minutes.

Why did I get fewer posts than I asked for? The account has fewer posts, the date limit in Only posts newer than was reached, the search ran out of results, or the run hit its maximum total charge. The run log says which, for each input.

How do I collect only new posts every day? Schedule the Actor daily with Only posts newer than set to 1 day (or 25 hours for some overlap).

How are replies and search results charged? Like posts: each one is a post item.

Do threads.net links work? Yes. threads.com and threads.net links, short /t/ links and links with tracking parameters all work.

What happens with a username that does not exist? It is reported in the log, produces no item and costs nothing. The same goes for a link to a removed post.

Other scrapers by Social Scrapers

ActorWhat it does
Instagram Profile ScraperInstagram profiles with their latest posts
Instagram Post ScraperInstagram posts and reels with comments
Facebook Groups ScraperPosts from public Facebook groups
Facebook Profile ScraperPublic details of Facebook profiles and Pages
Facebook Profile Posts ScraperRecent posts of Facebook profiles and Pages
Facebook Ads Library ScraperAds from Meta's public Ad Library
X (Twitter) Profile ScraperX profiles with followers, bio and latest tweets
Reddit ScraperReddit posts, comments, users and search
Quora ScraperQuora questions, answers and profiles
YouTube ScraperYouTube videos, channels, search and comments
YouTube Transcript ScraperTranscripts and captions of YouTube videos
LinkedIn Jobs ScraperPublic LinkedIn job listings

This Actor collects publicly available data; you are responsible for how you use it and for complying with the laws and terms that apply to you.