Threads Scraper - Scrape Posts, Profiles, Search & Hashtags avatar

Threads Scraper - Scrape Posts, Profiles, Search & Hashtags

Pricing

from $1.00 / 1,000 actor run starteds

Go to Apify Store
Threads Scraper - Scrape Posts, Profiles, Search & Hashtags

Threads Scraper - Scrape Posts, Profiles, Search & Hashtags

Threads scraper for public posts, profiles, keyword search and hashtags: scrape without a login or a Threads API key. Get post text, timestamps, likes, replies, reposts, quotes, media URLs and profile follower counts as JSON, CSV or Excel. $0.002 per post, $0.001 to start.

Pricing

from $1.00 / 1,000 actor run starteds

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 hours ago

Last modified

Security

Limited permissions

Share

Threads Scraper

Threads Scraper collects public posts from profiles, keyword searches, hashtags and individual post URLs. Use this Threads scraper for brand monitoring, creator research and social listening: get post text, publication times, engagement counts, media URLs and profile summaries without supplying a login or a Threads API key. You can mix target types in one run and download the resulting posts from the default dataset as JSON, CSV or Excel.

What the Threads scraper returns

  • One dataset row per post, with like, reply, repost, quote and reshare counts
  • The post text, its publication time as ISO 8601 and as a Unix timestamp
  • Author handle, account identifier and verification flag on every row
  • Media type plus image and video URLs, and the link preview when a post carries one
  • For profile targets: the follower count on every row and a full profile record (name, biography, picture, profile URL) in the run summary
  • For post URLs: the related public posts Threads shows on that post's page
  • A list of targets that returned nothing, each with a code and an English message

Threads Scraper modes

Profile: enter a handle such as zuck or @mosseri, or paste a profile URL. The results contain recent public posts and the account's follower count. The summary also holds its username, account identifier, display name, biography, verification flag, profile picture URL and profile URL. These account records are separate from the post dataset, so a profile without public posts can still appear in the summary.

Post: paste a public Threads post URL. The actor returns the related posts supplied on that page in their original order, with relation: related. These can be posts about the requested post or recommendations chosen by Threads. Their content can change between requests. The requested post itself is included only when it occurs in that same list; it is not added as an extra dataset row, so you pay only for the posts in that list. The results are not a complete conversation export. reply_count reports the count supplied by Threads for each returned post, even when its replies are not available as rows.

Search: enter a phrase such as climate change. The actor collects the public posts offered for that search. Search results change as Threads changes its ranking, so repeating a search can return different posts and engagement values.

Tag: enter a hashtag such as #ai. The actor reads the posts currently offered under that tag. Some tags return no posts at a given time. Such a target is reported in the errors record rather than becoming a made-up post.

Auto mode decides separately for each target. A bare word is tried as a handle first. If no profile is found, that word is searched once instead. An explicit handle beginning with @, or a profile URL, stays a profile request. Use a fixed mode when you want ambiguous words to be treated consistently, such as a list of single-word search terms.

How to use the Threads scraper

  1. Open the actor and add one or more targets: handles, profile URLs, post URLs, search phrases or hashtags.
  2. Leave the mode on auto, or pick a fixed mode when every target is of one kind.
  3. Set posts_per_target and max_targets to the volume your workflow needs.
  4. Start the run, then export the dataset or read it through the Apify API, and read the summary and errors records from the key-value store.

Input

targets is the list to process. It accepts a list of strings, or a string with entries separated by commas or newlines. Surrounding whitespace, empty entries and repeated targets are removed. Target order is retained. max_targets then limits the normalized list, with a default of 50 and an upper bound of 500.

The mode default is auto; the other choices are profile, post, search and tag. posts_per_target defaults to 100 and supports an upper bound of 500. It is a limit on returned rows, not a promise that a page contains that many posts. The actor returns what the public page supplies and does not retrieve a profile's entire history.

concurrency defaults to 5 and retries defaults to 3. They control how targets are requested and how many attempts are made when a page cannot be read. The optional country field accepts a two-letter country code such as us or gb. It selects the request location; it does not translate post text or change the meaning of the language output field.

An example input for two profiles:

{
"targets": ["zuck", "mosseri", "instagram"],
"mode": "profile",
"posts_per_target": 3,
"max_targets": 2,
"concurrency": 2,
"retries": 2,
"country": "us"
}

Only the first two profiles are requested because max_targets is 2. Each supplies at most three dataset rows. The third target remains outside that run's scope.

Output

Every dataset row contains these post fields: post_id, code, url, username, user_id, is_verified, text, posted_at, posted_timestamp, like_count, reply_count, repost_count, quote_count, reshare_count, is_reply, language, media_kind, image_urls, video_urls, link_url, link_title, position, source_mode and source_target.

profile_follower_count appears only when the target supplied a profile. Missing source values remain null. Image and video URL fields are always lists, which may be empty. media_kind distinguishes text, image, carousel and video posts. Media links are supplied by Threads and may expire; download them while they remain available if you need a lasting copy.

Additional fields include source, platform, fetched_at and relation. Common social field names such as post_url, author_handle, author_id, likes, comments_count and shares are also present as aliases, so you can read either naming style; the field names listed above stay stable for existing integrations.

The key-value store's summary record contains target and post counts, engagement totals and profiles, the list of profile records. errors identifies targets that could not be read, with a code and an English message. A target error does not prevent other targets from returning posts. Use post_id to deduplicate across separate runs; posts returned under separate targets can intentionally appear more than once within a run.

A real dataset row from the profile run above, fetched on 2 October 2026. The counts are the values at that moment:

{
"post_id": "3996155940894885511",
"code": "Dd1MqfcG0aH",
"url": "https://www.threads.com/@zuck/post/Dd1MqfcG0aH",
"username": "zuck",
"user_id": "63055343223",
"is_verified": true,
"text": "We believe superintelligence will create significant new opportunities for all people and businesses. Meta already serves billions of people at scale and helps hundreds of millions of businesses reach customers. Today we are starting the next major pillar of our business, Meta Enterprise Platform, to help businesses use AI to grow and transform in new ways as well.",
"posted_at": "2026-09-28T12:35:32Z",
"posted_timestamp": 1790598932,
"like_count": 2616,
"reply_count": 2446,
"repost_count": 162,
"quote_count": 150,
"reshare_count": 174,
"is_reply": false,
"language": null,
"media_kind": "text",
"image_urls": [],
"video_urls": [],
"link_url": null,
"link_title": null,
"source": "threads-scraper",
"platform": "threads",
"fetched_at": "2026-10-02T17:14:25.647Z",
"relation": "listed",
"post_url": "https://www.threads.com/@zuck/post/Dd1MqfcG0aH",
"author_handle": "zuck",
"author_id": "63055343223",
"likes": 2616,
"comments_count": 2446,
"shares": 162,
"source_mode": "profile",
"source_target": "zuck",
"profile_follower_count": 5746166,
"position": 1
}

Use cases

  • Brand and product monitoring: search for a brand name or campaign hashtag and track how many posts mention it and how much engagement they draw.
  • Creator and influencer research: compare follower counts, posting frequency and average likes or replies across a list of accounts before a partnership.
  • Competitor tracking: follow the public posts of competing companies and see which announcements receive the most replies and reposts.
  • Social listening and research: collect posts on a topic for sentiment analysis, trend reports or academic work, with timestamps for each snapshot.
  • Related-post analysis: start from a post URL to read the related public posts Threads offers on that page, with each returned post's engagement counts.

Threads Scraper compared with other options

Threads ScraperOfficial Threads APIBrowser extensionsOpen-source scripts
Login or app reviewNot neededMeta developer app and access tokenYour own logged-in browserDepends on the script
Other people's public postsProfiles, posts, search, hashtagsMainly your own account's contentOne page at a timeYes, if maintained
Engagement countsLikes, replies, reposts, quotes, resharesInsights for your own postsVariesVaries
Scheduling and API accessApify schedules, webhooks, APIYour own codeManualYour own servers
Maintenance when Threads changesOursMeta'sThe extension authorYours
CostPay per delivered postFree within limitsOften a subscriptionYour time and servers

The official Threads API is the right choice for publishing to and measuring your own account. Use this actor when you need public data about other accounts, keywords or hashtags without setting up a developer app.

Pricing

Threads Scraper uses pay-per-event pricing: $0.001 when a run starts and $0.002 for each post actually delivered to the dataset. A run with no posts has the start fee and no post charges. Profile summaries are free: there is no separate profile event. For post URLs you pay only for the related posts that are returned.

Users without a paid Apify plan receive at most ten dataset rows per run. The cap applies across all targets, preserving the first delivered rows in target order. Paid users retain their requested volume. To control result volume, set both max_targets and posts_per_target to the amount your workflow needs.

For example, a run that delivers 100 posts costs $0.001 + 100 × $0.002 = $0.201.

FAQ

Does Threads Scraper require an account?

No account or login information is required for public data. Private or unavailable content is not included. Check the errors record when a requested target has no results.

Can I download every historical post or every reply?

The actor collects the posts available on the public page. It does not promise a complete history or a complete reply tree. Post URLs return the related public posts available in the page's list; Threads may offer recommendations instead of posts about the requested post.

Why do results or counts change between runs?

Posts, recommendations, hashtag availability and engagement counts change over time. posted_at describes publication time; fetched_at describes when the actor read that row. Compare those fields when storing repeated snapshots.

Where are profile biographies and failures?

Read summary.profiles in the summary key-value record for profile information. Read the errors record for unavailable targets. The default dataset contains post rows, including their author fields and, where available, profile follower counts.

Is this the same as the Threads API?

No. The official Threads API from Meta is built mainly for managing your own account: publishing, replies to your posts and insights. Threads Scraper reads public posts, profiles, searches and hashtags of any public account and needs no developer app or access token.

Can I schedule runs or call the Threads scraper from my own code?

Yes. Use Apify schedules to run it hourly or daily, and webhooks to be notified when a run finishes. Every run can also be started and read through the Apify API or the official Python and JavaScript clients.

In which formats can I export the data?

The dataset downloads as JSON, CSV, Excel, XML or HTML from the run page or the API. Image and video URL fields are lists, so in CSV they appear as numbered columns.