Threads Scraper — Posts, Profiles, Replies & Search, No Login avatar

Threads Scraper — Posts, Profiles, Replies & Search, No Login

Pricing

from $0.80 / 1,000 result items

Go to Apify Store
Threads Scraper — Posts, Profiles, Replies & Search, No Login

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

Viktor Dubnytskiy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Search Threads by keyword, or scrape any public 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.

What you get

One row per post or profile. Real rows from the example dataset (profile @nasa, text truncated here):

typeusernametext / biolikeCount / replyCount / repostCounttakenAt
profilenasaMaking the seemingly impossible, possible. ✨ (followerCount 12716327)——
postnasaMain character energy unlocked! 👩‍🚀 NASA astronaut Jessica Meir and @europeanspaceagency…3124 / 60 / 1182026-08-31T22:23:09+00:00
postnasa(text null — image post), linkTitle Expedition 75 is Go for Tuesday's Navigation and Science Maintenance Spacewalk - NASA771 / 4 / 202026-08-31T22:23:16+00:00

A search query yields the same post shape with source: "search" and searchQuery set. includeProfile controls whether the type: profile row (bio + followers) is emitted per profile.

Full post row: id, url, code, username, userId, 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.

Use cases

  • Keyword and brand monitoring — put a keyword under searches, run it on a schedule, get only the posts that are new since the last run.
  • Creator and competitor tracking — watch what a profile posts, how it performs, how fast its follower count moves, on a recurring schedule.
  • One-off reply mining — pull a specific post's reply feed once, to read what the audience actually said.

Try it in 10 seconds

One-off keyword search — searches: ["climate tech"], maxPostsPerSearch: 25, maxItems: 25. Or swap in profiles: ["nasa"] / a postUrls permalink; the default input (profiles: ["nasa"]) already works with nothing to fill in.

Monitor mode — save either input as a Task, set mode: "monitor" and a monitorStateId (e.g. "climate-tech-watch"), then schedule it (Apify → Schedules → cron 0 */6 * * * for every 6 hours). Each run then returns only posts that are new for that keyword/profile or whose like/reply/repost counts changed since the previous run, and can post the diff to webhookUrl or Telegram — monitor-check is $0.005 per run, change is $0.001 per new/changed row, so a quiet 6-hourly check on one keyword costs about $0.02/day even before any matching row.

How it works

  1. Searches → the logged-out Threads search preload for each query, capped per query by maxPostsPerSearch (there is no continuation to page through — verified 2026-09-26 that even a high-volume query's preload carries has_next_page: false).
  2. Profiles → the public profile page is loaded; you get one type: profile row (bio, followers, verified) plus the posts Threads preloads on that page.
  3. Post URLs → the post itself (source: post), its reply feed (source: reply) and, with includeRelated, the related-posts block.
  4. Residential proxy is required — Threads serves an empty shell to datacenter IPs — and the actor raises a block instead of quietly returning an empty dataset, even when a single query or profile is walled.

Input

FieldMeaningDefault
searchesKeyword queries to search Threads forempty
maxPostsPerSearchCap on rows taken per search query25
profilesUsernames or profile URLs, e.g. nasa["nasa"]
postUrlsPost permalinks to open with their repliesempty
includeProfileEmit one type: profile row per profiletrue
includeRepliesFor postUrls: include the reply feedtrue
includeRelatedFor postUrls: include Threads' related postsfalse
maxItemsStop after this many rows overall20
modescrape or monitor (only new/changed since last run)scrape
monitorStateId, webhookUrl, telegramBotToken, telegramChatIdMonitor-mode state key and alert targetsempty

Pricing

EventPrice
result$0.001 per row ($1 per 1,000)
monitor-check$0.005 per monitor run
change$0.001 per new/changed row

Charged only for rows actually pushed; the proxy traffic (residential, required — Threads serves an empty shell to datacenter IPs) is billed by Apify on top.

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 — issues are answered within a day.

Why this actor

  • No login and no cookies to supply — your Threads account is never involved and cannot be flagged.
  • Keyword search, profiles, and single posts with replies live in one actor, so one input shape covers three jobs.
  • Monitor mode with webhook and Telegram alerts on new or changed posts, per keyword or per profile.
  • A run that returns nothing pushes nothing and charges no result events; a real block is reported as a block, not as an empty dataset — even when only one keyword or profile is fed in.

Limits

  • Logged-out Threads exposes what its public pages preload: roughly the newest 5–15 posts per profile, the first ~25 replies per post and the first page of search. Deeper pagination needs a logged-in session, which this actor deliberately does not use (no account risk for you).
  • Private profiles and age-gated content are not available.
  • Counts are as rendered by Threads at scrape time.

FAQ

Does it need a Threads or Instagram login? No. There is no account or cookie field. That 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, feed the individual 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: initial release — profiles, posts with replies, search, monitor mode. Updated 2026-09-26: keyword search re-verified against a fresh platform fetch; added maxPostsPerSearch; a walled run now blocks even for a single keyword/profile instead of reporting an empty run; re-positioned title/description/README around search + monitor.