Threads Scraper — Posts, Profiles, Replies & Search, No Login
Pricing
from $0.80 / 1,000 result items
Threads Scraper — Posts, Profiles, Replies & Search, No Login
Search Threads by keyword, or pull any public profile's posts, a post's replies, and related posts — no login, no cookies. Flat rows with text, likes, replies, reposts, media and follower counts. Monitor mode alerts on new or changed posts per keyword or profile.
Pricing
from $0.80 / 1,000 result items
Rating
0.0
(0)
Developer
Viktor Dubnytskiy
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Features
Share
Threads Scraper: Posts, Profiles, Replies & Search, No Login
Search Threads by keyword or #hashtag, or scrape a public brand or creator profile's posts, a post with its replies, and related posts, as flat rows without logging in. No account, no cookies, no session: only what Threads serves to logged-out visitors.
Try it: the prefilled example returns 6 rows in about 6 seconds. Results cost $1 per 1,000.
What you get
One row per post or profile. Real rows from the example dataset (profile @nasa, text truncated here):
| type | username | text / bio | likes / replies / reposts | takenAt |
|---|---|---|---|---|
profile | nasa | Making the seemingly impossible, possible. ✨ (followerCount 12,794,712) | ||
post | nasa | Do you want to be an astronaut? Applications are now open to join... | 1,872 / 99 / 154 | 2026-11-07T20:03:13+00:00 |
post | nasa | POV: Scenes from Day 1 of MAX POWER, an aerospace technology expo and... | 453 / 8 / 17 | 2026-11-08T01:43:22+00:00 |
post | nasa | The ‘A’ in NASA that people forget? Aeronautics. ✈️ This is a recent... | 4,782 / 148 / 159 | 2026-11-06T18:38:05+00:00 |
A search query yields the same post shape with source: "search" and searchQuery set. includeProfile controls whether the type: profile row (bio and followers of the account you asked for) is emitted per profile.
Full post row: id, url, code, username, isVerified, text, takenAt (UTC), likeCount, replyCount, repostCount, quoteCount, reshareCount, mediaType (text/image/video/carousel), images[], videos[], linkUrl, linkTitle, replyToUsername, isReply, rootPostId, language, isPaidPartnership, source (profile/post/reply/related/search), searchQuery, scrapedAt.
Post rows carry the author's handle (it is part of the post URL) and no other profile data: no user id, display name, bio or follower count. replyToUsername is filled only when a post answers its own author (a thread); a reply to someone else has it empty. @mentions in post text and link titles are replaced with @user. Profile data (name, bio, followers) appears only in the type: profile row for the accounts you list under profiles; that row has no user id or avatar, and e-mail addresses and phone numbers are removed from the bio.
Use cases
- Keyword and brand monitoring. Put keywords or #hashtags under
searches, run them on a schedule, and get the posts that appeared since the last run. - Brand and competitor tracking. Watch what a brand or creator account posts, how it performs and how its follower count moves.
- One-off reply reading. Pull a specific post's reply feed once to see what the audience said.
Try it
One-off keyword search: searches: ["climate tech", "#nasa"], maxPostsPerSearch: 20, maxItems: 40. Add postedAfter: "7" for the last 7 days only. Or use profiles: ["nasa"] or a postUrls permalink; the prefilled input (profiles: ["nasa"]) works with nothing to fill in.
Monitor mode: save the input as a task, set mode: "monitor" and a monitorStateId (e.g. "climate-tech-watch"), then schedule it (Apify, Schedules, e.g. every 3 hours). The first run stores a baseline and returns nothing. Each later run returns posts that were not seen before and were posted after the previous successful run started (minus 15 minutes), plus known posts whose like, reply or repost count changed (changeType: "changed"). Older posts that only now show up in the results are skipped and not charged: Threads reshuffles its search page on every visit, and without this rule old posts would come back as "new". Test 2026-11-09 on coffee, #espresso and nasa: the baseline stored the results; a run 3 minutes later returned 5 new posts (all posted after the baseline run started, minus 15 minutes) and 5 known posts with changed counts, and skipped 29 older posts that Threads had reshuffled into the results. In monitor mode maxPostsPerSearch is not applied: every post on the search page is compared, so none is missed. Alerts can go to webhookUrl or Telegram. Monitor-check is $0.005 per run and change is $0.001 per new or changed row.
Related actors
- Reddit Scraper (subreddit posts, search, comments, no login): the same keyword-search-and-monitor pattern, for Reddit posts and comments instead of Threads.
- Facebook Pages Search: Business Contacts, Followers, Monitor: a brand's Facebook presence and contacts instead of its Threads posts.
- Telegram Channel Search Scraper (topic, subscribers, no login): find Telegram channels by the same kind of keyword.
- YouTube Comments Scraper (no login, text + likes, monitor): audience reaction on YouTube videos instead of Threads replies.
How it works
- Searches. For each keyword the actor reads Threads' main search list (
serp_type=default,serp_type=tagsfor #hashtags), which is mostly recent posts. On 2026-11-09 that list often failed on Threads' side (a server timeout inside a normal page, or HTTP 429). When it fails, the actor reads the same query's plain search page instead, which is Threads' static top list of older popular posts, and stays on it for the rest of the run.RUN_SUMMARY.searchSurfacesshows which list each query came from (default/tagsorfallback).includeHashtagResultsalso reads the #hashtag results of one-word keywords and merges them. - Profiles. The public profile page gives one
type: profilerow (bio, followers, verified) plus the posts Threads preloads on it. - Post URLs. The post itself (
source: post), the replies the public post page carries (source: reply, about the first 10) and, withincludeRelated, the related-posts block. - Residential proxy is required (Threads serves an empty shell to datacenter IPs). Every failed page is retried once. A run that returns nothing because of a failure ends as
blocked,rate_limitedorupstream_errorinRUN_SUMMARY.emptyReason, never as "no results", and a run where only some sources failed lists them inRUN_SUMMARY.sourceFailures.
Input
| Field | Meaning | Default |
|---|---|---|
searches | Keywords or #hashtags to search Threads for | empty |
maxPostsPerSearch | Cap on rows taken per search query (scrape mode only) | 25 |
includeHashtagResults | One-word keywords: also read the #hashtag results | false |
postedAfter | Date (2026-11-01) or number of days (7) | any date |
profiles | Usernames or profile URLs, e.g. nasa | empty (prefilled with nasa) |
postUrls | Post permalinks to open with their replies | empty |
includeProfile | Emit one type: profile row per profile | true |
includeReplies | For postUrls: include the reply feed | true |
includeRelated | For postUrls: include Threads' related posts | false |
maxItems | Stop after this many rows overall | 20 |
mode | scrape, or monitor (new posts and count changes since the last run) | scrape |
monitorStateId, webhookUrl, telegramBotToken, telegramChatId | Monitor-mode state key and alert targets | empty |
Pricing
| Event | Price |
|---|---|
| result | $0.001 per row ($1 per 1,000) |
| monitor-check | $0.005 per monitor run |
| change | $0.001 per new/changed row |
You pay only for rows actually pushed. Apify platform usage (residential proxy, required) is billed on top and paid by you: about $0.002 per search query or profile page.
Found it useful? A short review on the Store page helps other people find this actor and tells us what to improve. If something is wrong, open an issue on the actor page; we answer issues within a day.
Why this actor
- No login and no cookies to supply, so your Threads account is never involved.
- Keyword and #hashtag search, profiles, and single posts with replies in one actor.
- Monitor mode that skips reshuffled old posts, with webhook and Telegram alerts.
- A run that returns nothing charges no result events, and a failure is reported as a failure, not as an empty dataset.
Limits
- Search gives one page of about 20 posts per query (up to about 28 when replies match). Logged-out Threads has no further pages, so more posts need more queries.
- The fresh main search list is unstable: on 2026-11-09 it failed on most tries, and the actor then returns Threads' top list for the query, which is mostly older posts. A date filter or a monitor on such a run finds fewer posts.
- Profiles give what the public profile page preloads, usually the newest 5 to 15 posts; posts give the first ~10 replies. Deeper pagination needs a logged-in session, which this actor does not use.
- Private profiles and age-gated content are not available. Counts are as Threads shows them at scrape time.
- Monitor mode changed on 2026-11-09 (new-post rule above); tasks created before that start with a fresh baseline run.
FAQ
Does it need a Threads or Instagram login? No. There is no account or cookie field, which is also why pagination stops where the public page stops.
How many posts do I get per profile? Whatever Threads preloads on the public profile page, usually the newest 5–15. For more history, put the post URLs you already have into postUrls.
What happens when there are no results? No rows are pushed and no result events are charged. The RUN_SUMMARY record in the run's key-value store carries emptyReason, so an empty run is distinguishable from a block.
Changelog
- 0.1 (2026-11-09, later the same day): breaking: post rows no longer have
userId, profile rows no longer haveuserIdorprofilePicUrl, andreplyToUsernameis empty when a post replies to another account.profileshas no default any more, so an API run with onlysearchesno longer adds NASA rows (the Console form is still prefilled). Replies on post pages work again (Threads moved them in its page data; 0 replies were returned since about 0.1.12). E-mails and phone numbers are removed from profile bios;@mentionsare masked in link titles too. - 0.1 (2026-11-09): #hashtag search and
includeHashtagResults;postedAfterdate filter; fallback to the plain search page when Threads' main list fails (server timeout or 429); failed pages now end the run asblocked,rate_limitedorupstream_errorinstead of "no results", and partial failures are listed inRUN_SUMMARY.sourceFailures; monitor counts a post as new only when it was posted after the previous run started; post rows no longer carry the author's user id, and@mentionsin post text are masked. - 0.1 (2026-09-26): keyword search re-verified,
maxPostsPerSearchadded, a walled run blocks even for a single keyword or profile. - 0.1: initial release with profiles, posts with replies, search and monitor mode.