Threads Scraper: Profiles, Posts, Search, Replies avatar

Threads Scraper: Profiles, Posts, Search, Replies

Pricing

$2.00 / 1,000 results

Go to Apify Store
Threads Scraper: Profiles, Posts, Search, Replies

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

Sourabh Kumar

Maintained by Community

Actor stats

2

Bookmarked

135

Total users

37

Monthly active users

12 days ago

Last modified

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.

ConcernMeta's official APIMost Apify Threads scrapersThis actor
App registration / OAuthRequiredNoneNone
Search query cap500 per 7 daysNoneNone
Modes you getPublishing + own analyticsOne per actor (profile or posts or search)All four: profile, posts, search, replies
Replies extractionOnly on your own postsOften missingYes, on any public post
Per-run start feen/aCommon ($0.005 to $0.02)None
Per 1,000 resultsFree, 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

  1. Create a free Apify account. Takes 30 seconds, no card needed.
  2. Open Threads Scraper in the Apify Console.
  3. Paste any combination of @usernames, profile URLs, post URLs, or search keywords into the URLs field.
  4. Click Start. A profile or search run usually finishes in 5 to 10 seconds. A 50-result batch takes under a minute.
  5. 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
}
FieldTypeDefaultNotes
urlsstring[]["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.
modeenum(auto)Override auto-detection. Values: profile, posts, search, replies.
maxResultsinteger50Total result cap across all entries. 0 = unlimited.

Auto-detection rules

  • https://threads.com/@zuck โ†’ profile
  • @zuck (leading @ required, ASCII handle โ‰ค30 chars) โ†’ profile
  • https://threads.com/@zuck/replies or /media โ†’ that tab's posts
  • https://threads.com/@zuck/post/<code> โ†’ replies
  • AI startups (multi-word, or word-with-spaces) โ†’ search
  • #ai (leading #) โ†’ search
  • Empty input โ†’ defaults to @zuck so 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

Fieldprofilepostssearchreply (parent)reply (child)
usernameโœ…โœ…โœ…โœ…โœ…
textnestedโœ…โœ…โœ…โœ…
likeCountnestedโœ…โœ…โœ…โœ…
repostCount / quoteCount / replyCountnestedโœ…โœ…โœ…โœ…
shareCountnestedโœ…โœ…โœ…โœ…
viewCountโ€”โ€”โ€”โœ…โ€”
hashtags / mentions / urlsnestedโœ…โœ…โœ…โœ…
linkPreviewnestedโœ…โœ…โœ…โœ…
topicTagnestedโœ…โœ…โœ…โœ…
isReply / replyToUsername / rootPostUsernamenestedโœ…โœ…โœ…โœ…
isPaidPartnership / isEdited / isPinned / hasAudionestedโœ…โœ…โœ…โœ…
accessibilityCaptionnestedโœ…โœ…โœ…โœ…
imageUrls / videoUrlsnestedโœ…โœ…โœ…โœ…
mediaWidth / mediaHeightnestedโœ…โœ…โœ…โœ…
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.

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.