Meta Threads Scraper - Posts, Reply Trees, Bio Contacts avatar

Meta Threads Scraper - Posts, Reply Trees, Bio Contacts

Pricing

Pay per event

Go to Apify Store
Meta Threads Scraper - Posts, Reply Trees, Bio Contacts

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

Omar Eldeeb

Maintained by Community

Actor stats

2

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

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_id rotations 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

PersonaUse case
Social-listening agencyTrack brand mentions, competitor activity, sentiment across Threads
Growth / SDR teamPull bio contacts for cold outreach (creators, founders, brand owners)
Brand-monitoring leadDaily monitor mode: alert on negative posts about your brand
ASO / mobile growthTrack creator+app mentions in hashtag feeds
Researcher / journalistDiscovery via search; archive a public post's discussion tree

How to use

  1. Pick a mode (most users start with posts_by_user)
  2. Enter usernames, post URLs, search query, or hashtag depending on the mode
  3. (Optional) Enable extractBioContacts for outreach-grade contact data (premium event)
  4. 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

FieldTypeNotes
recordTypestringprofile / post / reply
usernamestringWithout @
userId (pk)stringStable Meta numeric id
followerCountnumberProfile only
bioLinksarrayURL, title, link_type
extractedEmails / extractedPhonesstring[]Only when extractBioContacts: true
textstringCaption text (post)
takenAtISO datetimeConverted from unix
likeCount / replyCount / repostCount / quoteCountnumberEngagement
mediaUrlsstring[]Image / carousel / video best-resolution URL(s)
mediaTypeenumtext / image / carousel / video
parentPostIdstring | nullSet on reply rows
depthnumber0 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.

EventPriceFires when
profile-fetched$0.005One profile row emitted
post-fetched$0.0035One post row emitted
reply-fetched$0.0015One reply / discussion-tree row emitted
bio-contact-resolved$0.020Bio extraction + Linktree resolution ran (premium)
monitor-delta-detected$0.010New post discovered in monitor mode

Apify auto-charges apify-actor-start per platform billing on top of these.

Typical run cost

ScenarioVolumeApprox cost
1 profile + 25 posts1 + 25 events$0.005 + (25 × $0.0035) = ~$0.09
10 profiles + 25 posts each10 + 250$0.05 + $0.875 = ~$0.93
50 search results50~$0.18
1 post + ~30 discussion posts1 + 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 extraction100 + 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_v1 in 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.