Meta Threads Scraper - Posts, Reply Trees, Bio Contacts
Pricing
Pay per event
Meta Threads Scraper - Posts, Reply Trees, Bio Contacts
Scrape Threads posts, profiles, hashtags & search with FULL recursive reply trees + bio email/phone extraction + monitoring mode. Beats incumbents on reply depth & outreach contact extraction.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Omar Eldeeb
Actor stats
2
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Meta Threads Scraper — Posts, Profiles, Discussion Trees, Bio Contacts
Scrape Meta Threads (threads.com) public posts, profiles, search results, hashtag feeds, and full discussion trees — with optional bio email/phone extraction and Linktree resolution. Designed for social-listening agencies, growth marketers, lead-gen, and brand-monitoring teams.
No login. No cookies. No GraphQL doc_id maintenance. Pure SSR HTML extraction via Meta's public crawler-friendly endpoint.
What this Actor does
- 📥 Profiles — scrape any active public Threads profile (followers, bio, bio links, profile pic, verification, post count, public views)
- 📰 Posts by user — fetch the most recent posts of any user with full engagement (likes, replies, reposts, quotes, media URLs, timestamps)
- 🌳 Discussion trees — for any post URL, return the source post plus all public quote-reposts and discussion posts that reference it
- 🔍 Search — pull the top results for any keyword
- #️⃣ Hashtag feed — pull top posts for any tag
- 📡 Monitor — re-run any user list and emit only new posts since the last run (KV-backed watermark)
- 📞 Premium: bio contact extraction — parse emails + phones from biography text + bio links, optionally resolve Linktree / Beacons / Stan / Bio.link aggregator pages into full contact lists
- 🔁 Concurrent + retry-aware — runs N usernames/URLs in parallel with timeouts and graceful per-target error handling
Why use this Actor
- No anti-bot war. No Cloudflare, no Akamai, no JavaScript challenge. Most existing Threads scrapers chase Meta's GraphQL
doc_idrotations every few weeks — this Actor doesn't, so it doesn't break. - Bio contact extraction as a first-class feature. Other Threads actors give you raw text; this one parses emails, phones, and resolves Linktree-style aggregators for cold outreach lead-gen.
- Discussion trees in one fetch. Get the source post + everyone publicly quoting/responding to it — perfect for influence tracking and competitive monitoring.
- Monitor mode is real incremental. Most "scheduled" actors burn compute re-scraping the same 500 posts; this one stores a per-user watermark so you only pay for new posts.
Buyer fit
| Persona | Use case |
|---|---|
| Social-listening agency | Track brand mentions, competitor activity, sentiment across Threads |
| Growth / SDR team | Pull bio contacts for cold outreach (creators, founders, brand owners) |
| Brand-monitoring lead | Daily monitor mode: alert on negative posts about your brand |
| ASO / mobile growth | Track creator+app mentions in hashtag feeds |
| Researcher / journalist | Discovery via search; archive a public post's discussion tree |
How to use
- Pick a mode (most users start with
posts_by_user) - Enter usernames, post URLs, search query, or hashtag depending on the mode
- (Optional) Enable extractBioContacts for outreach-grade contact data (premium event)
- Run — first 50 chargeable events are free every run
You can schedule the actor in monitor mode for daily delta detection (your watermark persists between runs in the actor's Key-Value Store).
Input examples
1) Pull recent posts from a list of users (most common)
{"mode": "posts_by_user","usernames": ["zuck", "mosseri", "instagram"],"maxPostsPerUser": 25}
2) Profile + bio contact extraction for outreach
{"mode": "profile","usernames": ["someinfluencer", "anotherbrand", "thirdcreator"],"extractBioContacts": true,"resolveLinktree": true}
3) Discussion tree for a single post
{"mode": "post_detail","postUrls": ["https://www.threads.com/@zuck/post/DXt5n9UlLl-"],"expandReplies": true,"maxReplyDepth": 3,"maxRepliesPerNode": 20}
4) Search keyword feed
{"mode": "search","searchQuery": "vibe coding"}
5) Hashtag feed
{"mode": "hashtag","hashtag": "ai"}
6) Monitor: emit only new posts since last run
{"mode": "monitor","usernames": ["yourcompetitor", "anothercompetitor"],"maxPostsPerUser": 50}
Output
The dataset is a mix of recordType: "profile" and recordType: "post" (or "reply") rows.
Profile row
{"recordType": "profile","username": "zuck","userId": "63055343223","fullName": "Mark Zuckerberg","biography": "Mostly superintelligence and MMA takes","followerCount": 5464936,"isVerified": true,"profilePicUrl": "https://instagram.fatz1-1.fna.fbcdn.net/...","bioLinks": [{"url": "https://meta.com", "title": "Meta", "linkType": "external"}],"extractedEmails": ["press@meta.com"],"extractedPhones": [],"publicViews": null,"fetchedAt": "2026-05-08T12:00:00.000Z","sourceUrl": "https://www.threads.com/@zuck"}
Post row
{"recordType": "post","postId": "3886015488044874110","code": "DXt5n9UlLl-","url": "https://www.threads.com/@zuck/post/DXt5n9UlLl-","username": "zuck","userId": "63055343223","fullName": "Mark Zuckerberg","text": "As part of our philanthropic work to help cure all diseases...","takenAt": "2026-04-25T08:46:07.000Z","likeCount": 1443,"replyCount": 350,"repostCount": 111,"quoteCount": 9,"mediaUrls": [],"mediaType": "text","parentPostId": null,"depth": 0,"fetchedAt": "2026-05-08T12:00:00.000Z","sourceUrl": "https://www.threads.com/@zuck"}
Field reference
| Field | Type | Notes |
|---|---|---|
recordType | string | profile / post / reply |
username | string | Without @ |
userId (pk) | string | Stable Meta numeric id |
followerCount | number | Profile only |
bioLinks | array | URL, title, link_type |
extractedEmails / extractedPhones | string[] | Only when extractBioContacts: true |
text | string | Caption text (post) |
takenAt | ISO datetime | Converted from unix |
likeCount / replyCount / repostCount / quoteCount | number | Engagement |
mediaUrls | string[] | Image / carousel / video best-resolution URL(s) |
mediaType | enum | text / image / carousel / video |
parentPostId | string | null | Set on reply rows |
depth | number | 0 for root posts; >0 for replies in a discussion tree |
Pricing — pay-per-event
You only pay for what you get. First 50 chargeable events per run are free.
| Event | Price | Fires when |
|---|---|---|
profile-fetched | $0.005 | One profile row emitted |
post-fetched | $0.0035 | One post row emitted |
reply-fetched | $0.0015 | One reply / discussion-tree row emitted |
bio-contact-resolved | $0.020 | Bio extraction + Linktree resolution ran (premium) |
monitor-delta-detected | $0.010 | New post discovered in monitor mode |
Apify auto-charges apify-actor-start per platform billing on top of these.
Typical run cost
| Scenario | Volume | Approx cost |
|---|---|---|
| 1 profile + 25 posts | 1 + 25 events | $0.005 + (25 × $0.0035) = ~$0.09 |
| 10 profiles + 25 posts each | 10 + 250 | $0.05 + $0.875 = ~$0.93 |
| 50 search results | 50 | ~$0.18 |
| 1 post + ~30 discussion posts | 1 + 30 | $0.0035 + (30 × $0.0015) = ~$0.05 |
| Daily monitor of 100 brands (5 new posts/day on average) | 500 deltas | ~$5.00 / day |
| 100 outreach profiles w/ contact extraction | 100 + 100 | $0.50 + $2.00 = ~$2.50 |
Compare against ZoomInfo + Bombora ($3,000+/month), Apollo Pro ($99+/seat), or building this in-house.
Tips & gotchas
- Some profiles return a "Threads · Log in" gate. Meta privacy-gates a fraction (~15%) of accounts from public crawling, even with social-bot UA. The actor logs a clear warning when this happens and skips the row. Most active accounts work fine.
- Posts per profile are limited to ~7-25 per fetch in v1 (whatever Threads renders in the SSR HTML). Pagination beyond that requires a logged-in session and is out of scope.
- Discussion tree, not reply tree. A post-detail fetch returns the source post + ~15-30 quote-reposts, parody/copycat posts, and discussion posts that reference it. The full nested reply chain (clickable inside the Threads app) lives behind a logged-in XHR endpoint and is not surfaced.
- Bio contact extraction is best-effort. Emails parsed are valid-format, lowercased, deduped. Phone numbers are loosely matched on digit count + structure. Linktree-style aggregator pages are fetched only when
resolveLinktree: true. - Concurrency. Default 4 parallel fetches. Bump to 8-10 if you provide an Apify residential proxy. Tested at 27 fetches/min sustained without proxy with no rate-limiting.
- Monitor mode stores per-user watermarks under
monitor_watermarks_v1in your run's Key-Value Store. Delete this key to reset.
FAQ
Do I need to log in or provide cookies? No. The actor uses Meta's crawler-friendly SSR endpoint (the same path Facebook / Twitter / Slack use for link previews).
Will Meta block my actor? We've sustained 27+ fetches/min without rate-limiting in scale tests. Apify's residential proxy is supported but optional for moderate volume. Use it for runs >500 fetches.
Can I scrape DMs / private accounts / followers list? No. This is a public-only scraper. Private profiles, follower lists, and DMs are not exposed in the public SSR HTML.
Why aren't all 350 replies on a post showing up? The full reply tree requires a logged-in session. The discussion-tree mode returns the ~15-30 publicly-indexed posts that reference or quote the source post — which is often the higher-signal data anyway (who's talking about this post).
Is this allowed by Threads' Terms of Service? Meta's TOS forbids automated collection without permission as a blanket policy, similar to Instagram. Public-data scraping case law (hiQ v LinkedIn 2022; Meta v Bright Data 2024) generally protects logged-out scraping. Use this actor responsibly: don't store sessionid cookies, don't access logged-in content, comply with applicable privacy law in your jurisdiction. You are responsible for your use.
Roadmap (post-v1)
- Pagination beyond first SSR page (cursor-based, may require proxy)
- Comment-thread resolution behind a logged-in BYO-cookie path (premium)
- AI sentiment + intent classification on posts (Gemini Flash)
- Engagement velocity (Δ-likes / Δ-replies between runs)
- Weekly trend digest CSV export
Built by constructive_calm. Questions or feature requests: open an issue on the Apify Store listing.