Threads Scraper | 25 Fields, 4 Modes, No Login, Monitor
Pricing
from $1.20 / 1,000 posts
Threads Scraper | 25 Fields, 4 Modes, No Login, Monitor
Scrape Meta Threads (threads.com) posts, profiles, hashtags & search. No login, no cookies. Get text, media, likes, replies & reposts. Pay only per post delivered. Works in Claude, ChatGPT & any MCP agent.
Pricing
from $1.20 / 1,000 posts
Rating
5.0
(2)
Developer
The Mine Works
Maintained by CommunityActor stats
3
Bookmarked
245
Total users
99
Monthly active users
15 hours ago
Last modified
Categories
Share
๐งต Threads Scraper: Posts, Profiles, Hashtags & Search (No Login)
Part of the Social & Market Research MCP. This actor's data is also available to AI agents through our Social & Market Research MCP server, eight social, news and search-interest tools behind one endpoint. No result, no charge.
โก Pay only per post delivered. No login, no cookies, no ban risk. ๐ธ Empty searches, blocked pages and failed runs are never billed.
What does Threads Scraper do?
Threads Scraper turns any public Meta Threads target, a profile, a search keyword, a hashtag, or a direct post URL, into structured JSON: post text, media URLs, likes, replies, reposts, quote counts, author info, and full timestamps. Meta never shipped a public Threads API, so the usual options are manual copy-paste or a brittle browser build. This actor reads the same public pages any logged-out visitor sees on threads.com, four modes in one actor, full engagement counts and media captured on every post, and you pay only for posts actually delivered.
Built for unattended running. This actor has served more than 40,000 runs to date, with per-request IP rotation and a deadline watchdog that returns partial results instead of dying mid-run. A run that delivers nothing charges nothing, so even a run that hits a wall costs you $0.
โ No login | โ No cookies | โ Pay per post delivered | โ Zero charge on empty runs | โ MCP-ready for AI agents
Who is it for?
Brand and social teams tracking mentions, hashtags, and competitor accounts. Market researchers building sentiment or trend datasets from live conversation. Growth and content teams watching which formats and hooks are working on Threads right now. Anyone feeding an AI agent that needs current Threads data without building a scraper of their own.
How much does it cost to scrape Threads posts?
You pay per post actually delivered. Nothing else: no subscription, no per-run start fee, no monthly minimum.
| Event | Price | You pay when |
|---|---|---|
| Post delivered | $0.0012 on Gold, $0.002 on Free | A post record lands in your dataset |
| Apify plan | Price per 1,000 posts |
|---|---|
| Free | $2.00 |
| Bronze | $1.80 |
| Silver | $1.60 |
| Gold and above | $1.20 |
The Pricing tab on this page is the single source of truth and always shows the rate for your own plan. If this table and the Pricing tab ever disagree, the Pricing tab is right.
What a real job costs. Apify's Free plan includes $5 of usage credit every month, about 2,500 posts a month at no cost to you. A 500-post hashtag pull costs about $0.60 on Gold. A 20,000-post competitor and hashtag monitoring sweep across a month costs about $24.00 on Gold.
What is never charged. Empty searches, blocked pages, and failed runs cost nothing. The charge event fires only after a post record is in your dataset. Several Threads scrapers on the Store add a per-run start fee, which is what actually dominates the bill on a scheduled monitor that runs many times a day, so compare total cost, not just the headline rate.
How does it work?
The actor requests the same public threads.com pages a logged-out visitor gets, then extracts the structured post data Threads' own front-end embeds in the page to render it, the same JSON payload the site itself uses, just read instead of displayed. No account, no cookies, no anti-bot fragility, and every request goes out through a fresh proxy session so one throttled IP never stalls a whole run.
For each post it flattens Threads' deeply nested response into one analysis-ready record. Reply and repost posts are filtered out by default; toggle the input to include them, and use the is_reply / is_repost flags to sort them out downstream. For search mode, the actor fans out across every logged-out surface that carries results for your query: the recent and top feeds, the query's own tag feed, and repeated recency windows over the run, all deduplicated into one result set, which is how it exceeds the roughly 20-post single-feed cap. Each run's summary lists the exact search_windows yield in the run's OUTPUT record, so you can audit it.
How many posts should I expect per run?
Set expectations by mode before you run it, because Threads is not uniform here:
| Mode | Realistic yield per run | Notes |
|---|---|---|
| Search | tens to hundreds | Best mode for volume. Fans out across several logged-out surfaces and deduplicates. |
| Hashtag | tens | Recent or top feed for a tag. |
| Post | exactly what you pass | One record per post URL, plus quoted or parent context. |
| Profile | about 4 to 5 recent posts per username | Threads' own logged-out limit, not a cap we set. List several usernames to reach a higher total. |
That profile figure is deliberate honesty rather than a bug report. A logged-out visitor is served only the handful of most recent posts on a profile, and the timeline then repeats the same posts instead of paging deeper, so raising Max posts does not produce more. We verified this repeatedly against live profiles across several weeks. The actor detects the repeat and stops within about three requests rather than paying to spin, and you are never charged for posts that do not exist. If you need many posts about a person rather than by them, use search mode with their name or handle as the query, then filter on the username field if you only want their own posts.
Reaching a high maxPosts in profile mode: the fix is more usernames, not a bigger number. List several in profileUsernames and the run draws from each in turn until the total is met or the list runs out, skipping any username that returns nothing rather than failing the run. Verified: 6 usernames, maxPosts: 20, returned exactly 20 posts spread 5/4/4/4/2/1 across 5 of the 6, one had nothing to give.
๐งพ What input does it take?
{"mode": "hashtag","hashtag": "ai","maxPosts": 25,"resultType": "top","includeReplies": false,"includeReposts": false}
| Input | Required | What it does |
|---|---|---|
mode | Yes | profile, post, search, or hashtag |
profileUsernames | For profile mode | One or more usernames, without the @ |
postUrls | For post mode | One or more direct threads.com post URLs |
searchQuery | For search mode | Keyword or phrase to search |
hashtag | For hashtag mode | Tag to pull, without the # |
maxPosts | No | Caps how many posts are returned, which is how you cap cost |
resultType | No | recent or top, applies to search and hashtag modes |
includeReplies | No | Include reply posts, excluded by default |
includeReposts | No | Include repost posts, excluded by default |
monitorMode | No | Deliver and charge only posts not seen in a prior run, see Monitor mode below |
๐ค What data do you get back?
[{"post_id": "3937491905269768921","code": "DakyAavlKLZ","url": "https://www.threads.com/@zuck/post/DakyAavlKLZ","username": "zuck","user_full_name": "Mark Zuckerberg","user_pic_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/550174606_17925811725103224_8363667901743352243_n.jpg...","user_verified": true,"text": "Today we're releasing Muse Spark 1.1, a strong agentic and coding model at a very low price. It's available through our new Meta Model API and in Meta AI.","posted_at": "2026-07-09T14:00:34.000Z","posted_at_human": "Thu, 09 Jul 2026 14:00:34 GMT","like_count": 2766,"reply_count": 617,"repost_count": 189,"quote_count": 62,"has_media": false,"media_urls": [],"media_type": "text","is_reply": false,"is_repost": false,"hashtags": [],"mentions": [],"urls": [],"scraped_at": "2026-07-15T04:18:09.233Z"},{"post_id": "3938102254417839213","code": "DalR2qzoP9n","url": "https://www.threads.com/@aibuilds_dev/post/DalR2qzoP9n","username": "aibuilds_dev","user_full_name": "AI Builds","user_pic_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/412201558_17902200018103224_5921147736203352243_n.jpg...","user_verified": false,"text": "Been testing Muse Spark 1.1 all morning, latency is noticeably better than the last release. Full notes here: https://ai-builds.dev/muse-spark-1-1 #ai #llm cc @zuck","posted_at": "2026-07-09T16:42:11.000Z","posted_at_human": "Thu, 09 Jul 2026 16:42:11 GMT","like_count": 84,"reply_count": 6,"repost_count": 2,"quote_count": 0,"has_media": true,"media_urls": ["https://scontent-iad6-1.cdninstagram.com/v/t51.2885-15/442019873_17902200105103224_o.jpg..."],"media_type": "image","is_reply": true,"parent_post_id": "3937491905269768921","is_repost": false,"hashtags": ["ai", "llm"],"mentions": ["zuck"],"urls": ["https://ai-builds.dev/muse-spark-1-1"],"scraped_at": "2026-07-15T04:18:11.885Z"},{"post_id": "3938340871122098765","code": "DalXk93hQmT","url": "https://www.threads.com/@ml_weekly/post/DalXk93hQmT","username": "ml_weekly","user_full_name": "ML Weekly Digest","user_pic_url": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/398120441_17899044518103224_2241536203352243_n.jpg...","user_verified": false,"text": "","posted_at": "2026-07-09T18:05:47.000Z","posted_at_human": "Thu, 09 Jul 2026 18:05:47 GMT","like_count": 31,"reply_count": 1,"repost_count": 0,"quote_count": 0,"has_media": false,"media_urls": [],"media_type": "text","is_reply": false,"is_repost": true,"original_post_id": "3937491905269768921","hashtags": [],"mentions": [],"urls": [],"scraped_at": "2026-07-15T04:18:13.401Z"}]
A real run returns an array of records, one per post. The first record above was captured live from a real public Threads post by @zuck. The next two show the same schema for a reply and a repost, since a single scrape rarely returns both variants at once: notice parent_post_id on the reply and original_post_id on the repost, the two fields a single-post sample can't demonstrate.
Every post record contains these fields:
| Field | Description |
|---|---|
๐ post_id | Numeric Threads post ID |
๐ก code | Post shortcode used in the URL |
๐ url | Canonical threads.com post URL |
๐ค username | Author username without the @ |
๐ท๏ธ user_full_name | Author display name |
โ
user_verified | True if the author is verified |
๐ท user_pic_url | Author profile picture URL |
๐ text | Full post text |
๐ posted_at | ISO timestamp of publication |
๐ posted_at_human | Human readable publication timestamp |
โค๏ธ like_count | Number of likes |
๐ฌ reply_count | Number of replies |
๐ repost_count | Number of reposts |
๐จ๏ธ quote_count | Number of quote posts |
๐ผ๏ธ media_type | image, video, carousel, or text |
๐ has_media | True when media is attached |
๐๏ธ media_urls[] | Array of media file URLs |
#๏ธโฃ hashtags[] | Hashtags extracted from the text |
@ mentions[] | Mentions extracted from the text |
๐ urls[] | Plain URLs extracted from the text |
โฉ๏ธ is_reply | True if this post is a reply |
๐ is_repost | True if this post is a repost |
๐งต parent_post_id | Parent post ID for replies |
๐งฌ original_post_id | Original post ID for reposts |
๐ scraped_at | ISO timestamp of when the record was captured |
Every run also ends with a final _type: "info" record. It is informational only and never billed.
What are the limitations?
Worth knowing before you buy, so there are no surprises:
- Profile mode returns only about 4 to 5 posts per username. That is Threads' own logged-out limit, not a cap we set, verified repeatedly against live profiles. List more usernames rather than raising
maxPostsfor a bigger total. - Search and hashtag surfaces can intermittently come back with no post data embedded at all, a platform-side condition on Threads' logged-out pages, not a broken query. The actor detects this after a single request and stops rather than paying for retries into the same empty response; profile and post modes are unaffected. If a search or hashtag run comes back empty, retry after a short wait before assuming your query was too narrow.
- No official Threads API exists. This actor reads the same public HTML a logged-out browser gets, so a front-end change on Meta's side can require an update on ours. We watch for that; it is not something you need to monitor yourself.
- Media URLs point to Meta's CDN and expire. Download anything you need to keep promptly rather than storing the link long-term.
- Public post data only. No DMs, no analytics dashboard metrics, no data behind a login wall.
๐ผ What can you use it for?
Brand and topic monitoring Search Threads for your brand name or a keyword and capture every public post that mentions it. Flag spikes in conversation volume before they turn into a PR moment.
Trend and hashtag tracking Pull the recent or top feed for any tag to see what is gaining traction. Compare hashtag velocity across days to spot early breakouts.
Competitor and creator watch Snapshot a rival account's latest posts with full engagement metrics. Build a rolling dataset of which formats and hooks perform best on Threads.
AI training and sentiment analysis Assemble structured Threads corpora for LLM fine-tuning or sentiment scoring. Feed live posts into a Claude, ChatGPT, or MCP agent for summarization and classification.
๐ How do I get started?
- Open the actor and pick a Mode: Profile posts, Post detail, Search query, or Hashtag feed.
- Fill in the matching field: usernames, post URLs, search text, or hashtag (without the #).
- Set Max posts to cap the run size, and optionally toggle Include replies or Include reposts.
- For search and hashtag modes, pick Result type: Recent or Top.
- Click Save & Start, then download as JSON, CSV, or Excel, or pull via API or MCP.
๐ Run on a schedule
Turn this from a one-off pull into a standing feed with Apify's built-in Schedules. No code, no cron server of your own.
- Run the actor once with the input you want repeated, then click Save as a task (top of the run form). This keeps your exact input attached for every future run.
- In the Apify Console, go to Schedules (left sidebar) โ Create new.
- Name it, set your timezone, and pick a frequency: a preset (hourly, daily or weekly) or a custom cron expression (e.g.
0 6 * * *for daily at 6am). - Under Actors or tasks to run, add the task you saved in step 1.
- Save. From then on it runs unattended on your schedule, billed the same pay-per-post way as a manual run. Nothing is charged just for the schedule existing.
Prefer to automate the setup itself? Same thing via the API:
curl -X POST "https://api.apify.com/v2/schedules?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"name": "threads-scraper-daily","cronExpression": "0 6 * * *","isEnabled": true,"actions": [{ "type": "RUN_ACTOR", "actorId": "themineworks/threads-scraper" }]}'
Full options for time zones, run notifications and pausing a schedule are in Apify's Schedules documentation.
Monitor mode: pay only for NEW posts
Set monitorMode: true and this actor remembers what it delivered last time (keyed on
post_id). On the next scheduled run, only genuinely new posts are pushed and charged.
Re-running the same input daily costs you for the new posts each day, not the whole feed
every time.
{ "monitorMode": true }
Pairs directly with Run on a schedule above: save a task with monitorMode: true,
attach it to a daily schedule, and you have a standing "what's new" feed with no
duplicate charges. The run summary reports new_this_run and skipped_duplicates so
you can see the dedup working. First run establishes the baseline (everything is "new");
every run after that is incremental.
The summary lives in the run's OUTPUT record (Storage โ Key-value store โ
OUTPUT), not in the dataset, so your dataset holds posts and nothing else. It
carries posts_scraped, charged_for, and the per-window fan-out yield.
Is scraping Threads legal?
This actor reads only public Threads content, the same posts a logged-out visitor already sees on threads.com. It does not log in, does not use cookies, and does not access anything behind an authentication wall. That said, this is general information and not legal advice. Public post data can still include personal data, so you remain responsible for your own compliance with GDPR, CCPA, and any other law that applies to how you use the data.
FAQ
Does Threads have an official API? No. Meta has not released a public Threads API, which is why this scraper exists. It reads only the public data a logged-out visitor sees on threads.com.
How am I charged? Pay per post. You are billed only for posts actually delivered. Runs that return zero posts are never charged.
Can I include replies and reposts?
Yes. Both are excluded by default. Toggle Include replies and Include reposts to add them, then use the is_reply and is_repost flags to sort or filter downstream.
Which input modes are supported? Four: profile (a user's recent posts, about 4 to 5 per username because that is all Threads shows a logged-out visitor, so add more usernames for a higher total), post (one or more post URLs with detail), search (posts matching a keyword, the fastest single-query route to volume), and hashtag (a tag's recent or top feed).
Is it legal to scrape Threads? The actor collects only publicly available posts and never accesses private accounts. Public data can still include personal data under laws like the GDPR, so scrape only what you have a legitimate reason to use.
Is there a Threads API in 2026? Meta has still not shipped a public read API for Threads. Third-party options are scrapers like this one, which read only what a logged-out visitor sees on threads.com.
Can I monitor a keyword on Threads over time? Yes. Save a search-mode input and put it on a schedule (see "Run on a schedule"). Each run appends new posts to your dataset, and the in-run recency windows catch posts that appear while it runs.
What's the cheapest way to get Threads data? Compare total cost, not just the headline rate. This actor charges $1.20 per 1,000 posts on Gold and above with no start fee, no minimum, and no billing on empty or failed runs. A cheaper per-post rate with a per-run start fee usually costs more on a scheduled monitor. If a competitor is genuinely cheaper for your workload, use them.
Can I use Threads Scraper through an MCP server? Yes. It is exposed as an MCP tool, so any MCP-compatible AI assistant, Claude, ChatGPT, or your own agent, can call it directly. See "Use from Claude, ChatGPT & any MCP agent" above for the paste-ready prompt and setup.
๐ค Use from Claude, ChatGPT & any MCP agent
Hosted MCP endpoint, no install, OAuth on first connect:
https://mcp.apify.com/?tools=themineworks/threads-scraper
Claude Desktop / Cursor config (token auth):
{"mcpServers": {"threads": {"url": "https://mcp.apify.com/?tools=themineworks/threads-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Things an agent can ask for once connected:
- "Search Threads for posts about [topic] from the last week and summarize the sentiment."
- "Pull the last 25 posts from @nasa and tell me which ones got the most engagement."
- "Track posts mentioning [my brand] on Threads and flag anything that reads negative."
For multi-platform social research in one connection (Threads + Reddit + X + YouTube + Google Trends + news), use our Social & Market Research MCP server, eight tools behind one endpoint.
Copy this into your AI assistant
Paste the line below into ChatGPT, Claude, or any assistant connected to Apify's MCP, and it will run the job for you:
Use the Apify actor themineworks/threads-scraper to pull the last 25 posts tagged #ai on Threads, sorted by top. Return the results as a table.
Or call it programmatically with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/threads-scraper').call({mode: 'hashtag',hashtag: 'ai',maxPosts: 25,resultType: 'top',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
๐ ๏ธ Complete your social listening pipeline
Threads is one channel. Add the others in the same suite:
- Instagram Profile Scraper: followers, bio, and stats for any public account. Threads and Instagram share usernames.
- Twitter / X Scraper: tweets by keyword or handle without a paid API key.
- Reddit Scraper: posts, comments, and subreddit search with full comment trees.
Typical flow: search Threads for a brand or keyword, cross-check the same handle on Instagram and X, then pull Reddit for longer-form conversation.
Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.