Threads Scraper: Profiles, Posts, Search, Replies
Pricing
$2.00 / 1,000 results
Threads Scraper: Profiles, Posts, Search, Replies
Scrape Meta Threads profiles, posts, keyword search results, and post replies in one actor. Paste a username, a profile URL, a post URL, or a keyword and the mode is detected for you. No login, no OAuth, no app review.
Pricing
$2.00 / 1,000 results
Rating
0.0
(0)
Developer
Sourabh Kumar
Maintained by CommunityActor stats
2
Bookmarked
135
Total users
37
Monthly active users
12 days ago
Last modified
Categories
Share
Meta Threads scraper: profiles, posts, keyword search and replies, no login
Scrape Meta Threads profiles, posts, search results, and replies, in one actor, with one input field, no login, no app review. Mode is auto-detected from whatever you paste.
$2 per 1,000 results. No per-run fee, no monthly minimum, no subscription.
Works for any public account on threads.com worldwide. Posts in any language come back unchanged: the actor doesn't translate or strip non-Latin scripts.
Why this scraper, vs. Meta's official API or other actors
Meta's Threads API is real and free. It is also capped at 500 keyword search queries per rolling 7-day window, requires OAuth + app review, and only exposes most analytics on the developer's own posts. That's enough for first-party publishing. It's not enough for monitoring competitors, scraping a competitor's profile, or backfilling historical posts.
The Apify alternatives split this into pieces. Profile here. Post-only there. Replies somewhere else. You stitch four scrapers together to do one job.
| Concern | Meta's official API | Most Apify Threads scrapers | This actor |
|---|---|---|---|
| App registration / OAuth | Required | None | None |
| Search query cap | 500 per 7 days | None | None |
| Modes you get | Publishing + own analytics | One per actor (profile or posts or search) | All four: profile, posts, search, replies |
| Replies extraction | Only on your own posts | Often missing | Yes, on any public post |
| Per-run start fee | n/a | Common ($0.005 to $0.02) | None |
| Per 1,000 results | Free, but capped | $2.50 to $20 | $2.00 |
What data can you extract?
| ๐ค Username, full name, bio | โ Verified flag, follower count | ๐ผ๏ธ Profile picture (HD) | ๐ Bio links |
| ๐ Post text + post code | โค๏ธ Like, repost, quote, reply count | โ๏ธ Share count (reshare_count) | ๐๏ธ View count (replies mode) |
| ๐ท Image URLs (single + carousel) | ๐ฌ Video URLs (direct MP4) | ๐ Pinned status | โ๏ธ Edited flag |
| ๐ท๏ธ Topic tag | @๏ธโฃ Mentions array | ๐ URLs array | ๐ค Paid-partnership flag |
| ๐ Link preview card | โฉ๏ธ Reply linkage (who a post replies to) | ๐ Stable user ID | ๐ Media dimensions |
The actor extracts everything Threads serves to a logged-out browser. It does not extract likers lists, follower lists, or per-post analytics. Those live behind login.
Profile mode
A single record per username, with the user's most recent posts nested inside posts[] (measured 15 to 24 across accounts). Each nested post carries the full set of engagement fields plus hashtags, mentions, URLs, paid-partnership flag, and accessibility caption.
Posts mode
The same fetch as profile mode, but emits one flat record per post. Use this when you want a tabular dataset of posts without the profile wrapper.
Search mode
One record per matching post, with the same full field set as posts mode: engagement counts, media, link preview, hashtags, mentions and reply linkage. No second run needed to get engagement on search results.
Replies mode
One record for the parent post (the only place viewCount is populated) plus one record per reply, each carrying the full post field set. A single post returned 43 replies in testing; depth varies by post.
How to scrape Threads: step by step
- Create a free Apify account. Takes 30 seconds, no card needed.
- Open Threads Scraper in the Apify Console.
- Paste any combination of
@usernames, profile URLs, post URLs, or search keywords into the URLs field. - Click Start. A profile or search run usually finishes in 5 to 10 seconds. A 50-result batch takes under a minute.
- Export as JSON, CSV, or Excel, or fetch via the Apify API.
How much does Threads Scraper cost?
Pay-per-result pricing.
- Per 1,000 results: $2.00
- Free-plan yield (Apify's $5/month credits): roughly 2,500 results.
- Starter-plan yield ($29/month): about 14,500 results per month.
- No per-run fee. No subscription lock-in.
Threads is HTTP-only, with no headless browser, so compute on top of the result fee is negligible.
Input
Paste anything. The actor figures out the mode.
{"urls": ["@zuck","https://www.threads.com/@nike","https://www.threads.com/@nike/post/DV_RsjcEdYz","AI startups","#threads"],"maxResults": 50}
| Field | Type | Default | Notes |
|---|---|---|---|
urls | string[] | ["https://www.threads.com/@zuck"] | Mix of profile URLs, @usernames, post URLs, profile /replies and /media tabs, or search keywords. Mode is auto-detected per entry. |
mode | enum | (auto) | Override auto-detection. Values: profile, posts, search, replies. |
maxResults | integer | 50 | Total result cap across all entries. 0 = unlimited. |
Auto-detection rules
https://threads.com/@zuckโ profile@zuck(leading@required, ASCII handle โค30 chars) โ profilehttps://threads.com/@zuck/repliesor/mediaโ that tab's postshttps://threads.com/@zuck/post/<code>โ repliesAI startups(multi-word, or word-with-spaces) โ search#ai(leading#) โ search- Empty input โ defaults to
@zuckso the daily Apify health check passes
Share-link tracking parameters (?ref=share, ?fbclid=..., ?utm_source=...) and URL fragments (#section) are stripped before parsing, so social-media share links work as-is.
Recipes (ready-to-paste)
Get a Threads profile and its latest posts
{ "urls": ["@zuck"], "maxResults": 1 }
Returns one profile record with posts[] containing the user's most recent posts (15 to 24 in testing).
Pull engagement on a specific Threads post
{ "urls": ["https://www.threads.com/@nike/post/DV_RsjcEdYz"] }
Returns the parent post with viewCount, likeCount, share/repost/quote counts, plus the visible reply tree.
Search Threads by hashtag or keyword
{ "urls": ["#ai", "AI startups", "Apify"], "maxResults": 100 }
Each entry runs as a separate search and contributes up to its share of maxResults.
Bulk-scrape multiple profiles in one run
{ "urls": ["@zuck", "@instagram", "@nike", "@apple"], "maxResults": 0 }
maxResults: 0 removes the cap. Apify's run-level memory limit still applies.
Force posts-only output (skip the profile wrapper)
{ "urls": ["@nike"], "mode": "posts", "maxResults": 20 }
Output
Real values pulled from a live run. Fields shown as null are genuinely null in that mode: they aren't omitted to save space.
Profile record (auto-detected from @username or profile URL)
{"type": "profile","username": "nike","fullName": "Nike","bio": "Just Do It.","followerCount": 14942853,"isVerified": true,"profilePicUrl": "https://instagram.fpat2-2.fna.fbcdn.net/v/...","posts": [{"postCode": "DW6egjCEZ2N","text": "8 Cities. 8 Stories.\n\nDrawn from deep-rooted history...","likeCount": 102,"repostCount": 10,"quoteCount": 1,"replyCount": 8,"shareCount": null,"viewCount": null,"postedAt": "2026-04-09T14:07:54.000Z","imageUrls": ["https://instagram.fpat2-2.fna.fbcdn.net/v/..."],"postUrl": "https://www.threads.com/@nike/post/DW6egjCEZ2N","hashtags": [],"mentions": [],"urls": ["http://Nike.com"],"isPaidPartnership": false,"isEdited": false,"isPinned": true,"hasAudio": false,"accessibilityCaption": "May be an image of batting and text..."}],"scrapedAt": "2026-04-28T08:48:00.000Z","url": "https://www.threads.com/@nike"}
Post record (mode: "posts")
Same shape as a single entry inside profile.posts[], plus type: "post", username, and scrapedAt at the top level.
Search record (mode: "search" or auto-detected)
{"type": "search","query": "AI startups","username": "yujjin_solo","postCode": "DbS_fXBDRRu","text": "Building an AI startup and currently looking for a technical co-founde","likeCount": 60,"postUrl": "https://www.threads.com/@yujjin_solo/post/DbS_fXBDRRu","scrapedAt": "2026-08-18T10:23:06.170Z","repostCount": 0,"quoteCount": 0,"replyCount": 41,"shareCount": 2,"viewCount": null,"postedAt": "2026-07-27T12:43:27.000Z","imageUrls": [],"hashtags": [],"mentions": [],"urls": [],"isPaidPartnership": false,"isEdited": false,"isPinned": false,"hasAudio": false,"accessibilityCaption": null,"videoUrls": [],"linkPreview": null,"isReply": false,"replyToUsername": null,"rootPostUsername": null,"topicTag": "startup","mediaWidth": 612,"mediaHeight": 612}
Search records carry the same field set as posts mode, so there is no need to re-run a result to get its engagement. viewCount is the one exception: it is only available when you scrape a post URL directly.
Reply record (auto-detected from /post/<code> URL)
{"type": "reply","parentPostCode": "DV_RsjcEdYz","parentUsername": "nike","isParent": true,"username": "nike","text": "Mute the gallery. Introducing Nike Powerbeats Pro 2...","likeCount": 169,"viewCount": 18047,"postedAt": "2026-03-17T10:00:00.000Z","postUrl": "https://www.threads.com/@nike/post/DV_RsjcEdYz","scrapedAt": "2026-04-28T08:48:00.000Z"}
The parent record (isParent: true) carries viewCount for video posts. Reply records (isParent: false) have viewCount: null because Threads only exposes view counts on the parent.
Field availability by mode
| Field | profile | posts | search | reply (parent) | reply (child) |
|---|---|---|---|---|---|
username | โ | โ | โ | โ | โ |
text | nested | โ | โ | โ | โ |
likeCount | nested | โ | โ | โ | โ |
repostCount / quoteCount / replyCount | nested | โ | โ | โ | โ |
shareCount | nested | โ | โ | โ | โ |
viewCount | โ | โ | โ | โ | โ |
hashtags / mentions / urls | nested | โ | โ | โ | โ |
linkPreview | nested | โ | โ | โ | โ |
topicTag | nested | โ | โ | โ | โ |
isReply / replyToUsername / rootPostUsername | nested | โ | โ | โ | โ |
isPaidPartnership / isEdited / isPinned / hasAudio | nested | โ | โ | โ | โ |
accessibilityCaption | nested | โ | โ | โ | โ |
imageUrls / videoUrls | nested | โ | โ | โ | โ |
mediaWidth / mediaHeight | nested | โ | โ | โ | โ |
followerCount / bio / profilePicUrl | โ | โ | โ | โ | โ |
userId / isPrivate / bioLinks / profileTags | โ | โ | โ | โ | โ |
"nested" means the field appears inside the profile record's posts[] array, not at the top level.
A note on hashtags. Threads has largely moved away from inline #hashtags: across 114 posts from six large accounts, not one caption contained a #. Threads groups posts under a single topic tag instead, which is what topicTag gives you. An empty hashtags array is almost always the truth about the post, not a gap in the data.
FAQ
How much does Threads Scraper cost?
Threads Scraper uses pay-per-result pricing. You pay $2 for 1,000 results. The Apify Free plan gives you $5 in usage credits a month, enough for around 2,500 results. If you run regularly, the $29/month Starter plan covers about 14,500 results.
No subscription lock-in. Pause whenever.
Is it legal to scrape Threads?
Scraping public data is generally allowed in the US and most of the EU, as long as you don't collect personal data covered by GDPR or CCPA without a lawful basis. This actor only touches publicly accessible pages: anything you'd see in a browser without logging in. How you use the output is on you.
Apify's full breakdown: Is web scraping legal?.
Can I integrate Threads Scraper with other tools?
Push results into Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and more. Apify treats every actor as a webhook source, so anything that consumes webhooks or pulls from an API works.
Full list: Apify integrations.
Can I use Threads Scraper with the Apify API?
Yes. Every run is available via the Apify REST API:
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~threads-scraper/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["@zuck"], "maxResults": 1}'
Docs: Apify API reference.
Can I use Threads Scraper through an MCP Server?
Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude Desktop, Cursor, and any other MCP-capable client can call Threads Scraper directly. Setup: Apify MCP docs.
Your feedback
Bug, missing field, or odd behavior? Drop a note in the Issues tab. Reports go to a human and fixes usually ship the same week.