Threads Scraper: Profiles, Posts, Replies & Search
Pricing
from $1.00 / 1,000 profiles
Threads Scraper: Profiles, Posts, Replies & Search
Scrape Threads profiles, posts, replies and keyword search: followers, bio, post text, likes, replies, reposts, quotes, media and links. No login. Monitoring returns only new posts.
Pricing
from $1.00 / 1,000 profiles
Rating
0.0
(0)
Developer
Stratum ICS
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Threads Scraper collects public Threads profiles, posts, replies and keyword search results without logging in: followers, bio and bio links for each profile, and text, date, likes, replies, reposts, quotes, shares, images, videos, link previews, topic tags and quoted posts for each post. Paste usernames, profile links, post links or search terms and get clean rows you can export, so it works as a Threads API and Threads profile scraper with no Threads or Instagram account.
It reads public pages only and never logs in.
What does Threads Scraper do?
- Profiles: give it
@nasa,nasaorhttps://www.threads.com/@nasaand get a profile row with the exact follower count, display name, bio, bio links, verified badge and profile picture, plus the profile's posts, newest first, as deep as you ask within Threads' page limit (pinned posts come first, as on the profile). - Posts: every post row has its text, publishing time, likes, replies, reposts, quotes and shares, the media (image and video links, carousels), the attached link preview, the topic tag, mentions, links in the text, the quoted or reposted post and the author.
- Replies: turn on replies and get the replies Threads shows under each post, nested conversations included, each linked to what it answers.
- Post links: paste links to single posts for their full rows and replies.
- Keyword search: the Recent or Top results Threads shows for a term.
- Monitoring: run it on a schedule and get only the posts published since the last run, per profile and per search term.
Limits of signed-out access, said plainly: Threads shows visitors who are not logged in about ten replies per post and about 20 results per search, so those two features give that much and no more. It also limits how many pages of posts one address can read in a row: in testing, a run read about 70 pages (about 1,700 posts) before Threads asked it to wait. The run then keeps everything: a profile cut short keeps the posts read so far, profiles it had not reached yet get the posts on their profile page (5 to 10), and the final message says how many profiles stopped early. Private profiles show no posts to anyone who is not an approved follower; they come back as free status rows.
Why use this Threads scraper?
- Cheaper than the leaders. $1.50 per 1,000 posts on the Free plan and $0.80 on Business, where the most used Threads scrapers charge $2.50 to $5.00 per 1,000 and add start fees.
- Deep profile history. Profiles page through Threads' own timeline, 25 posts per page; in testing one run read 1,768 posts from two profiles, one of them back to its first post in July 2023.
- Checked against the live site. In testing, 10 of 10 posts had the same text as their pages in a signed-out browser, and likes, replies, reposts and shares were within 6% of the numbers the pages showed 15 minutes later (new likes and reposts, and the page's rounding such as "1.5K").
- No login, no cookies. Nothing to set up and no account at risk.
- Monitoring built in. Turn on "Only new posts" and schedule the run: each run returns only posts you have not received yet.
- You pay for results only. Private and missing profiles, deleted posts, filtered-out posts and errors are never charged.
- Restart-safe. If the platform moves a run to another server, it continues where it stopped and never stores or charges a row twice.
On top of that you get the Apify platform: scheduled runs, an API, webhooks, run history, and exports to JSON, CSV, Excel and more.
What data can you extract from Threads?
| Field | What it holds | Example |
|---|---|---|
type | profile, post or reply | post |
id, code, url | Threads id, the code in the link, and the link | DekCdIIEZCG |
text, createdAt | The text, and the publishing time in UTC | New podcast episode alert! |
likes, replies, reposts, quotes, shares | Counts for the post | 310, 16, 16, 2, 3 |
mediaType, imageUrls, videoUrls | text, image, video or carousel, and the media links | text, [], [] |
linkUrl, linkTitle | The link preview attached to the post | https://open.spotify.com/... |
topic, mentions, textLinks | Topic tag, @mentions and links in the text | Podcast Threads |
quotedPost, repostedPost | The post this one quotes or reposts (code, link, author, text) | null |
isPinned, isReply, replyToUsername | Pinned to the profile, and replies | true |
authorUsername, authorFullName, authorId, authorIsVerified, authorProfilePicUrl | The author on every post and reply | nasa, NASA |
username, fullName, followers, bio, bioLinks, isVerified, isPrivate, profilePicUrl, status | Profile rows; status is ok, private or notFound | nasa, 12783247 |
postCode, postUrl, parentId | Reply rows: the post and what the reply answers | DekCdIIEZCG |
input, scrapedAt | The input the row came from, and when it was collected | https://www.threads.com/@nasa |
The full list of fields, with descriptions, is on the Dataset tab of the output.
How to scrape Threads
- Open Threads Scraper in Apify Console and click Try for free.
- In Profiles, paste usernames or profile links; in Post links, paste post links; in Search terms, add keywords. Use any mix.
- Set Max posts per profile or search (the default is 20) and, if you want them, turn on Include replies.
- Optionally set Only posts newer than, or turn on monitoring.
- Click Start. When the run finishes, download the data as JSON, CSV or Excel, or read it through the API.
How much does it cost to scrape Threads?
The scraper uses pay-per-event pricing: you pay for each row saved to your dataset, plus a start fee of $0.0005 per run.
| Event | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Post saved | $1.50 per 1,000 ($0.0015 each) | $1.20 per 1,000 | $1.00 per 1,000 | $0.80 per 1,000 |
| Reply saved | $0.50 per 1,000 ($0.0005 each) | $0.50 per 1,000 | $0.40 per 1,000 | $0.30 per 1,000 |
| Profile saved | $2.00 per 1,000 ($0.002 each) | $2.00 per 1,000 | $1.50 per 1,000 | $1.00 per 1,000 |
Private and missing profiles are free status rows. The Pricing tab always shows the current prices.
Worked examples on the Free plan:
- 10 profiles, 100 posts each: 10 profile rows ($0.02) plus 1,000 posts ($1.50) cost about $1.52.
- 200 posts with their replies (about 10 each): $0.30 for the posts plus about 2,000 replies ($1.00), about $1.30.
- A daily monitor of 20 accounts that post three times a day, with profile rows turned off, saves about 1,800 posts a month: about $2.72 a month, start fees included.
Set Maximum cost per run in the run options to cap your spend. The scraper stops cleanly at that amount and keeps everything collected so far.
Input
See the Input tab for every option. A typical input:
{"profiles": ["https://www.threads.com/@nasa", "@zuck"],"posts": ["https://www.threads.com/@nasa/post/DekCdIIEZCG"],"searchTerms": ["artemis ii"],"searchSort": "recent","maxPostsPerProfile": 50,"includeReplies": true,"maxRepliesPerPost": 20,"newerThan": "30 days"}
- Profiles: usernames with or without @, or profile links on threads.com or threads.net.
- Post links:
https://www.threads.com/@user/post/<code>(threads.net and/t/<code>links work too). - Search terms: one per line; Search results picks Recent (newest) or Top (highest ranked).
- Max posts per profile or search: up to 5,000 per profile, within Threads' page limit for one run (about 1,700 posts in all in testing); a search gives about 20. Set 0 for profile rows only.
- Only posts newer than: a date (
2026-10-01), an ISO date-time in UTC, or a relative value such as7 days. Profiles stop reading at the first older posts, so you pay only for what is in range.
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Three rows from real runs (long text and links shortened, the replier's name and ids replaced): a profile, its pinned post, and a reply in a conversation under that post.
[{"type": "profile","status": "ok","id": "28829152388","username": "nasa","fullName": "NASA","bio": "Making the seemingly impossible, possible. ✨","bioLinks": [],"followers": 12783247,"isVerified": true,"isPrivate": false,"profilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/669747085_1808...","url": "https://www.threads.com/@nasa","input": "https://www.threads.com/@nasa","scrapedAt": "2026-10-18T07:25:36.425Z"},{"type": "post","id": "4009340365949735046","code": "DekCdIIEZCG","url": "https://www.threads.com/@nasa/post/DekCdIIEZCG","text": "🚨New podcast episode alert! \n\nThe world watched them make history during Artemis II. Now, hear what stayed with them. ...","createdAt": "2026-10-16T17:10:38.000Z","likes": 310,"replies": 16,"reposts": 16,"quotes": 2,"shares": 3,"mediaType": "text","imageUrls": [],"videoUrls": [],"linkUrl": "https://open.spotify.com/episode/6M0CTlebFLsktPvvuZZJV6?si=vLnxWuqMTquh8dtxEUx9Pw","linkTitle": "Reflections After Artemis II with Victor and Jeremy","topic": "Podcast Threads","mentions": [],"textLinks": [],"quotedPost": null,"repostedPost": null,"isPinned": true,"isReply": false,"replyToUsername": null,"authorUsername": "nasa","authorFullName": "NASA","authorId": "28829152388","authorIsVerified": true,"authorProfilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/669747085_1808...","input": "https://www.threads.com/@nasa","scrapedAt": "2026-10-18T07:25:36.508Z"},{"type": "reply","id": "4009371609127307672","code": "DekJjxmkcmY","url": "https://www.threads.com/@replier_one/post/DekJjxmkcmY","postCode": "DekCdIIEZCG","postUrl": "https://www.threads.com/@nasa/post/DekCdIIEZCG","parentId": "4009342055197025071","text": "They were holding them back, waiting for the right moment, the interviews were held 2 months ago (at least Reid and Christina, haven't listened to part 2 yet). Just when we need them!","createdAt": "2026-10-16T18:12:42.000Z","likes": 0,"replies": 0,"authorUsername": "replier_one","authorFullName": "Replier One","authorId": "60000000001","authorIsVerified": false,"authorProfilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.2885-19/...","input": "https://www.threads.com/@nasa/post/DekCdIIEZCG","scrapedAt": "2026-10-18T07:14:32.653Z"}]
Each run also saves a SUMMARY record in its key-value store with, for every input, its status, the profile status, posts and replies saved, pages read, why reading stopped, and any problem.
Monitoring new posts
- Turn on Only new posts (monitoring mode) and enter a Monitor name, for example
brand-watch. - Run it once. This first run sets the starting point and returns posts like a normal run.
- Schedule the same input (hourly or daily). Each later run returns only posts published after the first run that it has not delivered before. A profile stops reading as soon as it reaches posts it already delivered, so a monitoring run that finds nothing costs only the start fee (plus the profile rows, if you keep them on). When there is nothing new, the run ends with "No new posts since the last run".
For search terms, monitoring returns the new posts among the results Threads shows at that moment (about 20). Threads reshuffles those results between requests, so a busy term can let a post slip past between two runs; profiles do not have that gap. Turn off Save a profile row per profile if you only want the new posts. The memory is a key-value store in your account named threads-scraper-monitor-<name>.
Tips for scraping Threads
- Counts on the website: Threads' page shows reposts and quotes added together under the repost icon; this scraper gives them as two numbers,
repostsandquotes. - Track growth over time: schedule a daily run with profile rows on and compare
followersbetween runs. - Only need recent posts? Set Only posts newer than to
7 days: each profile stops at the first older posts. - Need the images or videos? Download them right after the run: Threads signs media links and they expire.
Integrations and API
- API: start runs and read results over HTTP from any language. See the API tab for ready-made requests.
- JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('stratumics/threads-scraper').call({profiles: ['@nasa', '@zuck'],maxPostsPerProfile: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((item) => item.type === 'post').map((item) => [item.authorUsername, item.likes]));
- Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("stratumics/threads-scraper").call(run_input={"searchTerms": ["artemis ii"], "searchSort": "recent", "includeReplies": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["type"] == "post":print(item["createdAt"], item["authorUsername"], (item["text"] or "")[:60])
- No-code tools: connect runs to Zapier, Make, n8n, Google Sheets, Slack or your own webhook from the Integrations tab, for example to post every new post of a competitor into a team channel.
- AI agents: add the Actor to any agent or chat app that supports the Model Context Protocol through the Apify MCP server at
https://mcp.apify.com?tools=stratumics/threads-scraper, then ask in plain words, such as "get the last 50 posts of these accounts and tell me which topics got the most replies".
FAQ
Why do I get only about ten replies per post?
That is what Threads shows to visitors who are not logged in: the top replies under a post, with some of the conversations inside them. This scraper never logs in, so it gives the same: in testing, most posts gave 9 to 12 replies (4 to 19 in all), whether they had 20 replies or over 1,000.
Why does search give only about 20 results?
Threads shows signed-out visitors one page of search results, about 20 posts, in Recent or Top order. For more posts on a topic, add more specific terms, or follow the accounts that post about it.
What about private profiles and usernames that do not exist?
Both come back as free rows with a status: private when Threads shows the profile but hides its posts, and notFound when Threads sends signed-out visitors to its login page instead of a profile (the username does not exist, or Threads hides the profile from them). Nothing is charged for them.
Why did a profile stop before my limit?
Threads limits how many pages of posts one address can read in a row while signed out. In testing, a run read about 70 pages (25 posts each, so about 1,700 posts) before Threads asked it to wait, and the wait lasted more than 7 minutes. The scraper does not hammer it: it keeps every post read so far, gives the profiles it had not reached yet the posts on their profile page, marks the profiles cut short stoppedBecause: "limited" in the SUMMARY record, and says how many stopped early in its final message. Run those profiles again later; in testing, a new run started a few minutes later read the full 70 pages again. Searches and post links load from their own pages and keep working; only replies beyond what a post page shows need the limited calls.
Do I need a Threads or Instagram account, cookies or a proxy?
No account and no cookies. No proxy: Threads answers Apify's servers directly, up to the page limit above. Apify datacenter proxy was refused by Threads in testing, so it is not used; you can still set your own proxy in the input.
Is it legal to scrape Threads?
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
The personal data in the output is what Threads shows publicly: the usernames, display names, ids, profile pictures and posts of the accounts you ask for and of the people who wrote the replies and search results you ask for, and the bios and bio links of the profiles you ask for. No email addresses, phone numbers, followers lists or private data are collected. Threads is a trademark of its owner, and this tool is not affiliated with or endorsed by Threads.
Something looks wrong. Where do I report it?
Open an issue on the Issues tab with the run link and the profile, post or search term. Most problems can be reproduced and fixed quickly.
Other tools from Stratum ICS
- Airbnb Scraper: Get every Airbnb listing in a city or from listing links: price per night, rating, reviews, guests, bedrooms, host and Superhost status.
- App Store Reviews Scraper: Get Apple App Store reviews with star ratings, titles, text, app versions, helpful votes and developer replies, well past Apple's 500-review limit, for any country, plus app ratings.
- Bilibili Scraper: Scrape Bilibili videos by search, link or uploader without logging in: views, likes, coins, tags, uploader profiles, comments with replies and danmaku, in clean rows.
- Facebook Ads Library Scraper: Get ads from the Meta (Facebook) Ad Library by keyword, advertiser page or library link: texts, images, videos, dates, platforms and versions, plus spend for political ads.
- Facebook Posts Scraper: Get posts from public Facebook pages: text, reactions by type, comments, shares, views and media, plus page details with followers, contacts, rating and creation date.
- Google Ads Transparency Scraper: Get the ads any advertiser runs on Google Search, YouTube, Shopping, Maps and Play, from the Ads Transparency Center: images, formats, dates, regions and EU reach.
- Google Maps Reviews Scraper: Get the Google Maps reviews of any place: rating, full text, exact date, photos, owner reply, reviewer details and food or service scores.
- Google Maps Scraper: Get the businesses on Google Maps for any search and area: name, address, phone, website, rating, review count, opening hours, plus emails and social profiles.
- Google News Scraper: Get Google News articles with real publisher URLs (not Google redirects), source, date, image, author and optional full text.
- Google Play Reviews Scraper: Get Google Play reviews with star ratings, text, app versions, thumbs-up counts, developer replies and feature ratings in any language, plus app details with installs and star histogram.
- Google Trends Scraper: Get Google Trends data as JSON, CSV or Excel: interest over time, interest by region and city, related queries, and trending searches by country.
- Instagram Scraper: Scrape public Instagram profiles, posts, reels and comments without logging in: followers, bio, posts count, captions, likes, video views, media links, tags and music.
- LinkedIn Jobs Scraper: Scrape LinkedIn jobs with full descriptions, salary ranges, seniority, job type and applicant counts.
- Reddit Scraper: Get Reddit posts and full comment threads from subreddits, searches, user profiles and post links: titles, text, scores, flair, media and replies.
- Telegram Channel Scraper: Get messages from public Telegram channels with views, dates, media, reactions, polls and forwards, plus channel info with exact subscriber counts.
- TikTok Comments Scraper: Export TikTok comments and replies from any video or photo post: text, date, likes, reply count, commenter, pinned and creator-liked flags, plus video stats.
- TikTok Scraper: Scrape TikTok profiles and videos: followers, likes, bio, the latest 10 to 12 videos of each profile, and full stats for any video link.
- Website Contact Scraper: Turn a list of websites into one row per company with verified emails, formatted phone numbers, social profiles (LinkedIn, Facebook, Instagram, X), address and contact page.
- YouTube Scraper: Get YouTube videos from searches, channels, playlists and links with exact views, likes, comment counts, dates and tags, plus channel profiles and comments.
- YouTube Transcript Scraper: Get YouTube transcripts and captions as plain text, timed segments, SRT or WebVTT, from video links, whole channels or playlists, in any language YouTube offers.