Threads Account Threads Scraper avatar

Threads Account Threads Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
Threads Account Threads Scraper

Threads Account Threads Scraper

Scrape a Threads user's own posts.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Categories

Share

Threads Account Posts Scraper

Extract every public post from any Threads account in bulk — full caption text, images, video, like counts, repost / quote info, timestamps, and the author profile — as clean structured JSON.

Why use this actor

  • No account / no login required — just give it a Threads username or profile URL.
  • No API key needed — Threads has no public API; this actor returns the same posts the web app shows on a user's profile.
  • Full post content — caption text, image / video URLs, link-preview cards, carousel media, like count, repost count, reply count, and parent-thread context for multi-post threads.
  • Bulk input — pass a list of usernames or URLs in one run; one dataset row per published thread.
  • Posts only (not replies) — the actor mirrors the "Threads" tab of a profile, so you get the user's own posts plus their reposts of others. Replies live in a separate sister actor (see below).
  • Stable JSON output suitable for pipelines, spreadsheets, and databases — every row carries _input, _source, _scrapedAt envelope fields so you can join results back to your input list.

How it works

  1. You provide a list of Threads usernames (e.g. zuck) or full profile URLs.
  2. The actor resolves each handle to its internal user ID, then walks the user's posts feed page by page using a paging cursor.
  3. For each thread it returns the root post plus any follow-up posts in the same thread chain, along with the author profile and engagement counters.
  4. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.

Input

{
"usernames": [
"zuck",
"https://www.threads.com/@mosseri"
],
"maxPosts": 30,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}
FieldTypeDescription
usernamesarrayList of Threads usernames or profile URLs. Both zuck and https://www.threads.com/@zuck are accepted.
maxPostsintegerMaximum number of threads returned per user. Use 0 to fetch everything. Default: 30.
proxyConfigurationobjectApify Proxy settings. Datacenter proxy works for most cases.

Output

Input: zuck, maxPosts: 3

Each row in the dataset is one thread — a list of posts (thread_items) chained by the same author, top-level post first.

{
"_input": "zuck",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:59:13.348602+00:00",
"id": "3896177221392711419",
"thread_items": [
{
"post": {
"pk": "3896177221392711419",
"id": "3896177221392711419_63055343223",
"code": "DYSAIo_FL77",
"taken_at": 1778680540,
"like_count": 2198,
"caption": {
"text": "Today we're starting to roll out Incognito Chat with Meta AI on WhatsApp and the Meta AI app -- a completely private way to interact with AI, similar to how end-to-end encryption means no one can read your conversations, even Meta or WhatsApp..."
},
"user": {
"pk": "63055343223",
"id": "63055343223",
"username": "zuck",
"is_verified": true,
"profile_pic_url": "https://instagram.fcgk12-1.fna.fbcdn.net/v/t51.82787-19/550174606_..."
},
"image_versions2": {
"candidates": [
{ "width": 1920, "height": 1400, "url": "https://instagram.fcgk12-2.fna.fbcdn.net/v/t51.82787-15/671768087_..." }
]
},
"original_width": 1920,
"original_height": 1400,
"video_versions": null,
"carousel_media": null,
"carousel_media_count": null,
"has_audio": null,
"text_post_app_info": {
"link_preview_attachment": null,
"reply_to_author": null,
"is_post_unavailable": false,
"share_info": { "quoted_post": null, "reposted_post": null }
}
},
"line_type": "none",
"should_show_replies_cta": true,
"reply_facepile_users": [],
"view_replies_cta_string": "Show replies"
},
{
"post": {
"pk": "3896177217181602913",
"id": "3896177217181602913_63055343223",
"code": "DYSAIlEFFRh",
"taken_at": 1778680539,
"like_count": 570,
"caption": {
"text": "Incognito Chat handles all AI inference in a Trusted Execution Environment that ensures your messages are not accessible to us. The conversations on your phone also disappear when you exit the session..."
},
"user": {
"pk": "63055343223",
"username": "zuck",
"is_verified": true
},
"text_post_app_info": {
"reply_to_author": { "username": "zuck", "id": "63055343223" },
"share_info": { "quoted_post": null, "reposted_post": null }
}
},
"line_type": "none",
"should_show_replies_cta": true
}
// ... 1 more follow-up post in this thread
]
}

A second thread with a link-preview attachment:

{
"_input": "zuck",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:59:13.348602+00:00",
"id": "3886015488044874110",
"thread_items": [
{
"post": {
"pk": "3886015488044874110",
"code": "DXt5n9UlLl-",
"taken_at": 1777469167,
"like_count": 1498,
"caption": {
"text": "As part of our philanthropic work to help cure all diseases, our team @biohub is announcing the Virtual Biology Initiative -- a new effort to build the imaging tools, molecular tools, and open data infrastructure needed to build AI models that can reason about cells."
}
}
},
{
"post": {
"pk": "3886015488875339430",
"code": "DXt5n-GFJ6m",
"taken_at": 1777469167,
"like_count": 727,
"caption": { "text": "This has the potential to unlock developing models that understand biology..." },
"text_post_app_info": {
"link_preview_attachment": {
"display_url": "biohub.org",
"title": "Biohub launches the Virtual Biology Initiative",
"url": "https://l.threads.com/?u=https%3A%2F%2Fbiohub.org%2Fnews%2Fvirtual-biology-initiative",
"image_url": "https://external.fcgk12-2.fna.fbcdn.net/emg1/v/t13/17965211273658538491?...",
"favicon_url": "https://external.fcgk12-2.fna.fbcdn.net/emg1/v/t13/16140870347078187614?..."
}
}
}
}
]
}

Field reference

FieldTypeDescription
_inputstringThe username or URL exactly as you supplied it. Use this to join results back to your input list.
_sourcestringInternal tag for the path used to fetch the record. S1-primary is the fastest, richest path; S2-fallback indicates a fallback was used.
_scrapedAtstringISO-8601 UTC timestamp when the thread was scraped.
idstringThread ID — equal to the root post's pk. Use this to deduplicate across runs.
thread_itemsarrayOne entry per post in the thread chain. thread_items[0] is always the root post; following entries are the author's own follow-up posts.
thread_items[].post.pkstringNumeric post ID.
thread_items[].post.idstringFull post identifier in the form <post_pk>_<user_pk>.
thread_items[].post.codestringShort slug used in the public post URL: https://www.threads.com/@<username>/post/<code>.
thread_items[].post.taken_atintegerUnix timestamp (seconds) of when the post was published.
thread_items[].post.like_countintegerNumber of likes.
thread_items[].post.caption.textstringFull post caption / text body. null when the post is image-only.
thread_items[].post.userobjectAuthor profile snapshot (pk, username, is_verified, profile_pic_url).
thread_items[].post.image_versions2.candidatesarrayAll image sizes available for the post (width, height, URL). Empty when the post has no image.
thread_items[].post.video_versionsarrayVideo renditions when the post is a video, otherwise null.
thread_items[].post.carousel_mediaarraySlides when the post is a multi-image carousel, otherwise null.
thread_items[].post.carousel_media_countintegerNumber of slides in the carousel, otherwise null.
thread_items[].post.original_width / original_heightintegerDimensions of the primary media in pixels.
thread_items[].post.has_audiobooleantrue if the video has audio, null for non-video posts.
thread_items[].post.text_post_app_info.link_preview_attachmentobjectEmbedded link card with url, display_url, title, image_url, favicon_url. null when no link is attached.
thread_items[].post.text_post_app_info.reply_to_authorobjectThe user this post replies to. For the root post in a chain this is null; for follow-ups it points back to the same author.
thread_items[].post.text_post_app_info.share_info.quoted_postobjectThe post being quoted, if this is a quote-thread.
thread_items[].post.text_post_app_info.share_info.reposted_postobjectThe post being reposted, if this row is a repost from another user.
thread_items[].post.text_post_app_info.is_post_unavailablebooleantrue if the post has been removed or hidden.
thread_items[].line_typestringVisual connector flag used by the web app ("none", "line"). Usually safe to ignore.
thread_items[].should_show_replies_ctabooleantrue if the post has replies a viewer can expand.
thread_items[].reply_facepile_usersarrayUp to 3 small avatars of users who replied (used for the "Replied by" stack in the UI).

Error envelope

Usernames that can't be resolved or fail to fetch return a structured error instead of crashing the run:

{
"_input": "this-handle-does-not-exist-xyz",
"_error": "user_resolve_failed",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T10:24:10.012345+00:00"
}

Possible _error values: user_resolve_failed (handle not found / private / banned), fetch_failed (transient network or rate-limit error — accompanied by _errorDetail). Filter on _error to triage failed rows.

Pricing

This actor is billed per result: $6.00 per 1,000 threads (Tier 4). Each successful thread = 1 result. Errors are not billed.

Other Sosmed Actors

PlatformActorBest for
ThreadsThreads Account Replies ScraperReplies the user posted on other people's threads
ThreadsThreads Post Detail ScraperFull reply tree + engagement for a single thread URL
InstagramInstagram Account Posts ScraperSame author's Instagram feed
Twitter / XX Account Tweets ScraperTweets timeline for any handle
BlueskyBluesky Account Posts ScraperPosts feed for any Bluesky handle
MastodonMastodon Account ScraperPosts feed for any fediverse handle

Browse the full catalog at apify.com/xtracto.

Notes

  • Posts only, not replies. The output mirrors the "Threads" tab of a profile. Replies the user wrote on other people's posts are not included — use the Threads Account Replies Scraper for those.
  • Reposted threads are flagged. When the user reposted someone else's thread, text_post_app_info.share_info.reposted_post is populated with the original post. Filter it out if you only want original content.
  • Quote-threads are flagged via text_post_app_info.share_info.quoted_post and still count as the user's own posts.
  • Pagination is cursor-based — the actor walks the feed until it hits maxPosts or runs out of threads. Older posts cost the same as newer ones; set maxPosts: 0 if you want the full archive.
  • Private / banned / never-existed accounts return {"_error": "user_resolve_failed", "_input": "..."} and consume no result credit.
  • Counters (like_count) are eventually-consistent and may lag the live network by a few minutes.
  • The internal user.pk is the most reliable identifier — usernames can change but pk does not.