Threads Scraper - Posts, Replies, Reposts & Profiles avatar

Threads Scraper - Posts, Replies, Reposts & Profiles

Pricing

from $1.00 / 1,000 post rows

Go to Apify Store
Threads Scraper - Posts, Replies, Reposts & Profiles

Threads Scraper - Posts, Replies, Reposts & Profiles

Scrape public Threads profiles, posts, replies and reposts with like, reply, repost and quote counts, plus optional views. Find accounts and ranked posts by keyword. No login.

Pricing

from $1.00 / 1,000 post rows

Rating

0.0

(0)

Developer

Eli J

Eli J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Collect public Threads profiles, posts, replies, reposts, single posts by URL, accounts by keyword and top-ranked keyword search results. Use the rows for brand monitoring, creator discovery and content research.

Try it

The form prefills NASA as a first example. In posts mode it returns one profile row and up to ten posts. The prefill is not an API default: an empty input returns no rows and a guidance message.

Example input:

{"mode":"posts","usernames":["nasa"],"maxPosts":10}

For accounts or search, supply keywords instead:

{"mode":"accounts","keywords":["coffee_roaster"],"maxPosts":10}

For post mode, supply public post URLs in postUrls. The post is returned without its comment thread. Profile modes accept usernames or profile URLs, including batches.

Input

FieldTypeDefaultMeaning
modestringpostsposts, replies, reposts, post, accounts or search.
usernamesarrayNone; form prefill NASAUsernames/profile URLs for the three profile modes.
postUrlsarrayNonePost URLs for post mode.
keywordsarrayNone; form prefill coffeeKeywords for accounts or top-ranked search.
maxPostsinteger10Maximum content/account rows per target or keyword; the profile row is additional. Zero performs no work.
postedAfterstringNoneInclusive UTC lower bound, profile modes only. Date or timestamp with offset.
postedBeforestringNoneInclusive UTC upper bound, profile modes only. Date-only includes the whole day.
includeViewsbooleanfalseFetch a view count from each post page (one extra request per post, billed as a views event). Missing counts stay null and are not charged.
proxyConfigurationobjectAutomatic datacenterOptional proxy override; no account-specific groups are forced.

Date bounds apply to the target's own posts and replies, and to the time the target reposted an item. Older reply parents do not count or stop collection. Pinned posts do not end traversal early. Each current thread is processed before stopping at the first unpinned target root older than the lower bound. Self-thread children use their own publication times.

Output

The dataset contains profile, post and account records. Every record carries recordType, requestedTarget, sourceTab and scrapedAt. requestedTarget keeps what you sent; the author fields hold the resolved identity. Example with values abbreviated:

{"recordType":"post","requestedTarget":"nasa","sourceTab":"posts","scrapedAt":"…","postId":"…","postCode":"…","authorUsername":"nasa","authorUserId":"…","text":"…","takenAt":"…","likes":null}
RecordFields
ProfileuserId, username, fullName, bio, followers, verified, profilePicture, bioLinks, profileTags, isPrivate, emails, phones.
AccountuserId, username, fullName, bio, followers, verified, emails, phones.
Post identity/contentpostId, postCode, url, authorUsername, authorUserId, authorVerified, text, takenAt.
Post countslikes, replies, reposts, quotes, reshares.
Media and attachmentsmediaType, mediaUrls, topicTag, linkPreview, poll, music, quotedPost, replyToAuthor, repliedToPost.
Source metadatalocationName, locationId, language, fediverseEnabled, isEdited, genAiLabel, isPinned, replyControl, isSpoiler, isReply.
RepostsOriginal post fields plus repostedBy and repostedAt.
Views enabledviewCount and viewCountStatus: available or unavailable.

IDs are strings. Counts are numbers; missing values are null. Timestamps are UTC ISO strings. mediaType describes the image, video or carousel structure; mediaUrls keep the source variants. emails and phones are strings found in the public bio, unverified. Attachment objects keep the source metadata. Location, language and fediverse fields may be null.

Status and completeness

Missing and unavailable targets produce explicit uncharged records in ERRORS and per-target status in SUMMARY. A missing account is reported only when the username lookup returns no user. Private and otherwise gated accounts are reported as unavailable_logged_out, without distinguishing them; a source-supplied private flag is retained when available and named in the reason. Renames or a different resolved identity are reported rather than substituted.

SUMMARY reports target content-row counts, pages, collectionStatus, sourceExhausted, total dataset rows, requests, decodedBytes and browserFallbacks. Its per-target rows exclude the additional profile record; its total rows includes every dataset record. A limit, missing/repeated cursor, operation failure, date boundary or browser page limit is distinct from verified source exhaustion. Earlier valid rows survive a later partial read.

Billing and views

You pay per profile, post and account row, plus one views event per available view count when includeViews is on, plus the Actor start. Status and error records are not charged. Tier prices are on the Pricing tab. Collection stops when a row or views charge reaches your maximum total charge for the run.

In profile and search modes, views cost one extra post-page request per post, paced like every other request, so they lengthen runs: in our measured 10-post NASA run, views raised the run time from about 6 to about 35 seconds. Post mode reuses the page it already read. Views are off by default. Views are never estimated: a missing view count stays null and is not charged.

Limits and access

  • Recent/date-bounded keyword search is not offered; cause unresolved on the anonymous surfaces measured. In our measurement, none of the posts another tool returned as recent appeared in the public ranked window, so sorting or date-filtering that window does not reproduce recent search. Search rejects postedAfter/postedBefore with guidance.
  • Search returns one public ranked window, measured at about 12–27 posts per keyword. It is not a search archive. Accounts returns up to ten accounts per keyword; no deeper page is promised.
  • Requests are made logged out through Apify datacenter proxies, at least 1.05 seconds apart. Large page transfers can stall. A transient failure gets one retry with a fresh identity; an empty or changed source is reported, not retried.
  • In a batch, the first profile loads the full page; later profiles use smaller queries and still return bio links and tags.
  • After some non-login blocks, a browser fallback fetches the first page of a profile or search, or a single post. It cannot paginate or search accounts, runs one call at a time at least 1.05 seconds apart, and is counted in SUMMARY as browserFallbacks. Login redirects and unresolved accounts are reported as statuses and do not trigger it.
  • A run reads the source for at most 270 seconds, then writes results, and can end partial. Each extra profile in a batch costs three paced queries before its feed, so keep batches small. maxPosts is a ceiling, not a guarantee.
  • Signed media URLs expire. This Actor returns links and does not download media.
  • Media tabs, profile sitemaps, trending-page collection, logged-in surfaces and comment threads beneath a post are excluded.
  • Threads' robots rules disallow automated collection and its Terms prohibit automated extraction and commercial exploitation. Assess your own use.
  • Examples use brands, news outlets and public figures. Support, health and recovery communities are not used as examples or defaults.

Help

Check SUMMARY and ERRORS before treating a short result as an exhausted source. When reporting an issue, send the mode, the target and the run URL. Do not send credentials or cookies.