Meta Threads Scraper for Posts and Replies
Pricing
from $1.19 / 1,000 posts
Meta Threads Scraper for Posts and Replies
Collect public Threads posts from accounts, and Threads replies from post links. Export original text, likes, replies, images, videos and shared links, with a report showing what was collected. No Threads login required. Maintained by CleanScrape.
Pricing
from $1.19 / 1,000 posts
Rating
0.0
(0)
Developer
CleanScrape
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
Collect public Threads posts from accounts or specific post links. Export the original text, available engagement counts, images, videos and shared links. No Threads login or account cookies are needed.
Use it to review an account's public posts, compare a shortlist of posts, or collect examples for content research. A separate run report explains what was collected and where the source stopped.
From $0.0298 for 20 saved posts. Pay for posts saved, with no startup fee. Bronze, Silver and Gold discounts are available.
Watch the walkthrough
Let's use NASA and National Geographic as an example: collect their last 30 days of posts, compare what gets likes, and export to CSV or Excel. Use your own public accounts or specific post links for another project.
Start with a small example
Open the 20-post example, or enter the same settings yourself:
- Select Account posts.
- In Accounts or post links, enter
nasa. Replace it with your own example when you are ready. - Set Maximum posts to
20, then start the run. The date filter is optional.
Open Posts for the results. To check coverage, open the Posts menu in Output, select Run report, then open REPORT. The maximum applies to the whole run, not separately to each account. It is a limit, not a guaranteed result count.
The same example as JSON input:
{"mode": "accounts","targets": ["nasa"],"maxResults": 20,"timeRange": "any"}
Choose what to collect
| Selection | What to enter | What it collects |
|---|---|---|
| Account posts | Handles such as nasa, @nasa, profile links, or an Instagram profile link (the same name is used on Threads) | Account posts available through the public source |
| Specific posts | Full Threads post links | The posts you selected, without collecting an account feed |
| Replies (experimental) | Full links to posts whose replies you want | Replies available from the public conversation source |
Enter one item per line. If an entry is mistyped, the valid entries are still collected and the run explains which entry was skipped. An account that does not exist, is private or needs a login is reported in the run's message and not charged; the other accounts are still collected. Hashtags and keywords get a plain explanation, as keyword search is not supported. A list of only post links is collected as Specific posts, and a list of only accounts as Account posts, whichever option is selected; the run says when it switched. Keep accounts and post links in separate runs. Both threads.com and older threads.net links are accepted, with or without https://.
With Last 7 days, Last 30 days or your own dates, the Actor stops reading an account once it reaches posts older than your dates, so date-limited runs are quick.
Try the post-links example to compare selected posts without reading an entire account feed. As JSON input, collecting one selected post looks like this:
{"mode": "posts","targets": ["https://www.threads.com/@nasa/post/DZceA72Drjf"],"maxResults": 5}
This requests one post, even though the maximum is five. For replies to that post, change mode to replies. The source may return fewer replies than the count shown on Threads.
This Actor does not search Threads by keyword or export follower lists. Replies are experimental: some replies may be missing, and the output does not reconstruct who replied to whom.
Collect older account posts
Keep Account posts and Any time selected, then increase Maximum posts. The Actor follows the public feed backwards until the source ends, your limit is reached, or a safety stop is needed. The maximum is 10,000 saved posts per run; 20 remains the default for a quick first try.
Try the older-posts example with a 200-post limit. Replace the example account with your own starting point.
For a longer export, allow up to 60 minutes under Apify's run options and set a spending limit you are comfortable with. The Actor saves its report as it works. A larger maximum does not guarantee that more posts are available.
Entire available feed is not the same as guaranteed entire history. Threads can omit old posts or return incomplete pages without a login. The report distinguishes reaching the available feed's end from stopping early. Use it before treating an export as a complete archive.
Optional date filter
Leave Any time selected for a standard run, or choose Last 7 days, Last 30 days, or Choose dates. Custom dates use calendar controls. Dates left in those controls are ignored when you switch to another option.
For JSON input, use timeRange: "custom" with startDate and endDate in YYYY-MM-DD format. The end date includes the whole UTC calendar day.
Filtering keeps matching posts from what the source supplies; it does not unlock older or unavailable posts. Pinned posts and source ordering can make dates appear out of order. Sort by Published (UTC) when needed.
Read the results
| Posts column | Meaning |
|---|---|
| Author | The account that wrote the post |
| Post text | Original text, without rewriting or generated summaries |
| Published (UTC) | When the post was published |
| Likes, Replies, Reposts, Quotes | Counts supplied by Threads at collection time |
| Post link | A link back to the source post |
Images and videos separates media attachments for inspection. Shared and quoted content shows link previews and quoted posts. Full JSON retains IDs and nested objects for programmatic use.
A blank count or null means the source did not provide that value, not zero. A captionless post can still contain useful media, a shared link or a quote. Link titles remain in linkPreview; they do not replace the author's words.
If Threads explicitly marks a quoted post unavailable, the Actor can still save the readable original post. Its unavailable quote stays blank, and the report notes this. Deleted or inaccessible quoted content is not reconstructed.
Media URLs may expire. Download files you need while the links work. This is not a permanent media archive, and the Actor does not visit shared external websites.
Replies include the requested rootPostId. The immediate parentPostId stays null because that relationship has not been established reliably; the output is not a reconstructed reply tree.
Export or automate
Use Apify's dataset export controls for JSON, CSV or Excel, choosing the view you need. Spreadsheet export provides a separate, compact CSV with one row per post and protection against spreadsheet formulas in collected text. Original JSON values stay unchanged. Keep long post IDs as text in spreadsheets to avoid rounding.
The Actor's API tab provides request examples for automation. Send the same input fields shown above and retrieve the run's default dataset. Keep your Apify token in an environment variable or credential manager, not in a public URL or shared workflow.
Each new run is a separate snapshot. Match postId across runs and use observedAt for collection time. New-only monitoring and cross-run duplicate removal are not built in.
Check coverage
Run report lists each account or link, saved results, filtered or excluded records, and stopping reasons. Coverage JSON contains the machine-readable version.
Checked means the available source ended and queued records were processed, not that complete history was recovered. Partial means collection stopped early, a record was excluded, or a source warning prevents confirming coverage. Read the stopping reason and any coverage notes together. An empty dataset after a failure is not evidence that an account has no posts.
If Threads returns an incomplete page, the Actor can check individual posts before saving them. The report still warns that other posts may be missing. Access blocks, rate limits and unexpected source errors stop collection rather than being hidden.
The limit is shared across accounts. Each active account is checked in turn, so results can be interleaved. Use separate runs if you need a fixed sample from each account.
The Actor does not bypass login requirements or access blocks. It can try another public page when a post response is incomplete, but it does not retry indefinitely.
If an interrupted write cannot be confirmed in the dataset, it is preserved under Recovery records rather than blindly written again. A resumed run reconciles its existing storage. Starting a new run creates a new snapshot, not a continuation.
Pricing
The base price is $1.49 per 1,000 saved posts. Each post saved to the default dataset is one event, including a reply in reply mode. Images, videos and quoted content attached to that post are not extra results. There is no startup fee or separate platform-usage charge for customers.
| Saved posts | Base cost |
|---|---|
| 20 | $0.0298 |
| 100 | $0.149 |
| 1,000 | $1.49 |
Bronze receives 10% off, Silver 15% off, and Gold, Platinum and Diamond 20% off the base event price. Apify applies the eligible tier automatically; check the Pricing tab for your rate.
Reports, filtered-out posts and separate recovery records are not additional billed results. If a run stops early, posts already saved are still billable. Set Maximum posts and Apify's Maximum cost per run to control your job. New runs are new snapshots and can return previously collected posts again.
Ready-to-run examples
Each example opens with its input filled in. Change the input and run it.
| Example | What it does |
|---|---|
| Collect a brand's Threads posts from the last 30 days | Netflix's public Threads posts from the past 30 days, with likes, replies and media. |
| Export replies to a Threads post for sentiment analysis | Up to 200 replies to a Threads post with text, author, likes and time, ready for sentiment analysis. |
Use it from an AI agent
This Actor works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server. Add this server and sign in with your Apify account when asked:
https://mcp.apify.com?tools=cleanscrape/threads-scraper
Then ask in plain words, for example: "Get the latest 30 Threads posts from @nasa and tell me which ones got the most likes." The assistant runs the Actor in your Apify account and reads the results. The price per result is the same as in Console.
Common questions
Can I scrape Threads without logging in?
Yes. The Actor reads public posts. No Threads login or cookies are needed.
Is there an official Threads API?
Meta's Threads API needs a registered app, access tokens and approval for most uses. This Actor needs only the account name or post links.
How far back can I go?
Raise Maximum posts to reach older posts, or choose a period under Published. Very old posts may not be available for every account.
Can I get replies to a post?
Yes. Choose Replies (experimental) and paste the post links. Some replies may be missing.
How much does it cost to scrape Threads?
$1.49 per 1,000 saved posts, with no start fee. 20 posts cost about $0.03. See Pricing above.
Questions or a problem with a run?
Maintained by CleanScrape. Open an Actor issue or email contact.cleanscrape@gmail.com with the run ID and a non-sensitive example of what you expected. Please do not send API tokens, cookies or private exports.
If you have used the Actor, an honest review or a note about a step that was unclear helps us improve it.
Disclaimer: This independent tool is not affiliated with, endorsed by or sponsored by Meta. Threads and all other trademarks belong to their respective owners. Collect and use public data responsibly and in accordance with applicable requirements.
More tools from CleanScrape
- Casino Bonus Checker: the casino bonus each affiliate and review site shows, with promo codes, 18+ notices and affiliate IDs
- Kick Sponsor Tracker: which brands Kick streamers promote, with promo codes, affiliate links and broadcast hours
- Google Jobs Scraper: job listings with salaries, descriptions and apply links from Google Jobs
- App Store Reviews & Google Play Reviews Scraper: reviews from both app stores in one table
- Google Trends Scraper API: search interest over time, by region, related queries and trending searches
- Map Your Show Exhibitor List Scraper: trade show exhibitor lists and booth changes
- Shopify Product Reviews Scraper API: Judge.me and Okendo reviews from Shopify product links
- Google News Scraper and RSS Feed Reader: headlines from Google News and publisher feeds
- Pinterest Scraper API: keyword search, public pin links and board previews; search results may lack a pin link
- Google Hotels Scraper: hotel prices and booking offers for your dates
- TikTok Shop Product Scraper: US TikTok Shop prices, sellers and ratings
- Whatnot Seller Tracker: top Whatnot sellers per category, items sold, sales per day and followers over time
- Whatnot Scraper: Whatnot listings with prices and live shows by keyword or category
- Likee Scraper API: Likee videos and comments
- Flashscore Tennis Scraper: tennis results, statistics, point-by-point and head-to-head
- Bilibili Scraper: Bilibili videos, danmaku, top comments and creators, no login
- ATP and WTA Tennis Rankings Scraper: current ATP and WTA singles, doubles and race rankings with points and movement
- Career Page Jobs Scraper for Greenhouse, Lever and Ashby: open jobs from company career pages, with salaries and new or closed jobs per company
- Video Frame Extractor for Scene Changes and Thumbnails: still images from video files at scene changes, intervals or timestamps, with contact sheets