Threads User Posts Scraper avatar

Threads User Posts Scraper

Pricing

from $2.49 / 1,000 posts

Go to Apify Store
Threads User Posts Scraper

Threads User Posts Scraper

Scrape all public posts from Threads profiles: text, likes, replies, reposts, views, photos, videos, polls, hashtags, mentions, links, plus author bio, followers, and contact info. Export JSON, CSV, Excel.

Pricing

from $2.49 / 1,000 posts

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Threads User Posts Scraper

Threads User Posts Scraper extracts every public post from Threads profiles, up to 10,000 per profile, with text, likes, replies, reposts, quotes, shares, view counts, photos, videos, polls, hashtags, mentions, and links, plus the author's bio, follower count, profile links, and any email or phone number published in the bio.

Paste up to 50 usernames, @handles, or profile links and get one row per post with 73 columns, including exact public view counts, AI labels, topic tags, quoted posts, and a possibly_incomplete flag that tells you when a profile could not be fully collected.

ParseBird Threads Suite ย ย โ€ขย ย Posts, replies, profiles & search
Threads Scraper
Profiles, user posts & search
Threads Search Scraper
Search posts by keyword or hashtag
Threads Posts Scraper
Single posts with their replies
Threads User Posts Scraper
You are here

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Use Apify Actor parsebird/threads-user-posts-scraper to scrape all public posts from Threads profiles. Example with ApifyClient (Python): client.actor("parsebird/threads-user-posts-scraper").call(run_input={"usernames":["nasa","@natgeo","https://www.threads.com/@threads"],"maxPosts":100}). Inputs: usernames array of strings required (username, @handle, or threads.com/threads.net profile link; up to 50; duplicates count once); maxPosts integer default 100 (posts per profile, newest first; 0 = everything available up to 10,000); includeViewCounts boolean default true (false = faster, view_count left empty with view_count_status not_checked); proxyConfiguration object default {"useApifyProxy": false}. Output: one dataset row per post; the author's profile fields repeat on every row. Profile fields: username, user_id, display_name, profile_url, is_verified, followers_count, bio, external_links, emails, phones, bio_links, profile_pic_url, profile_pic_hd_url, fediverse_enabled, profile_tags, podcast_name, podcast_url, podcast_platform. Post fields: post_url, post_code, text_content, created_at (ISO), created_at_display, created_at_timestamp (Unix seconds), like_count, reply_count, repost_count, quote_count, share_count, view_count, view_count_status (available | not_public_yet | not_checked), has_media, media_type (text | photo | video | carousel | audio | gif), media_url, media_urls, media_width, media_height, has_audio, hashtags, mentions, mentioned_users, mentioned_accounts, urls, link_title, language, topic_tag, location_name, location_id, is_pinned, is_edited, is_paid_partnership, is_reply, reply_to_username, reply_control, is_quote_post, quoted_post_url, is_repost, reposted_post_url, is_spoiler, accessibility_caption, is_ai_generated, is_gif, is_sticker_post, sticker_count, sticker_ids, sticker_urls, poll_options, poll_votes, poll_total_votes, poll_is_closed, possibly_incomplete, record_type, scraped_at. Pricing: pay per post row. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.

What is Threads User Posts Scraper?

Threads User Posts Scraper is a Threads profile scraper and Threads API alternative that collects the public post history of Threads accounts. Give it usernames, @handles, or profile links, and it returns each post with its text, publish date, likes, replies, reposts, quotes, shares, and exact view count, the photos and videos attached to it, hashtags, mentions, and links, and the author's profile details on every row.

It reads profiles the way a logged-out visitor sees them, so you don't need a Threads or Instagram account, cookies, or a Meta API key. The easiest way to try it is to open the actor, keep the prefilled NASA, National Geographic, and Threads profiles, and click Start.

What can Threads User Posts Scraper do?

  • ๐Ÿ“š Scrape a profile's full post history: page back through every public post, up to 10,000 per profile, newest first.
  • ๐Ÿ‘ฅ Scrape many profiles at once: up to 50 usernames, @handles, or threads.com / threads.net profile links in one run, mixed freely.
  • ๐Ÿ‘€ Get exact view counts: the public view count of every post, not the rounded "200K views" label.
  • ๐Ÿ–ผ๏ธ Get media: photo, video, and carousel URLs with dimensions, alt text, and whether a video has sound.
  • ๐Ÿท๏ธ Get hashtags, mentions, and links: handles as typed and as linked accounts with their IDs, plus every link the post points to, unwrapped from Threads' redirect.
  • ๐Ÿ—ณ๏ธ Spot special posts: polls, quote posts, replies, pinned posts, edited posts, paid partnerships, spoilers, GIFs, stickers, and posts with an AI label.
  • ๐Ÿ“‡ Get profile and contact details: bio, followers, verified badge, bio links, profile tags, linked podcast, and any email or phone number the account published in its bio.
  • โฑ๏ธ Automate with Apify schedules, the Apify API, webhooks, and integrations such as Google Sheets, Make, Zapier, and Slack.
  • ๐Ÿ“ Export results as JSON, CSV, Excel, HTML, or XML.

What data can you extract from Threads profiles?

The results table opens on a short Overview; switch it to Full Details for all 73 columns. The main ones:

FieldDescription
post_url, post_code, text_contentLink to the post, its shortcode, and the full post text
created_at, created_at_display, created_at_timestampPublish time as ISO 8601, a readable UTC date, and a Unix timestamp
like_count, reply_count, repost_count, quote_count, share_countEngagement counts
view_count, view_count_statusPublic view count and how it turned out: available, not_public_yet, or not_checked
media_type, media_url, media_urls, media_width, media_height, has_audiotext, photo, video, carousel, audio, or gif, with media addresses and size
hashtags, mentions, mentioned_users, mentioned_accounts, urls, link_titleHashtags, handles as typed, handles Threads linked (lower case, with account IDs), links, and the link preview headline
topic_tag, language, reply_control, location_id, location_nameTopic tag, post language, who can reply, and the tagged place
is_reply, reply_to_username, is_quote_post, quoted_post_url, is_pinned, is_editedReply, quote, pinned, and edited flags
is_paid_partnership, is_spoiler, is_ai_generated, is_gif, is_sticker_post, sticker_countOther post flags
poll_options, poll_votes, poll_total_votes, poll_is_closedPoll details (see the FAQ)
username, user_id, display_name, is_verified, followers_count, bioThe author's profile, repeated on every row
external_links, bio_links, emails, phones, profile_tags, podcast_name, podcast_urlLinks, contact details published in the bio, profile tags, and linked podcast
possibly_incompletetrue when the profile's posts could not all be collected on this run

How to scrape Threads posts from a profile

  1. Open Threads User Posts Scraper and click Try for free or Start.
  2. In Threads profiles, enter one profile per line: nasa, @natgeo, or https://www.threads.com/@threads all work.
  3. Set Max posts per profile. Enter 0 to take everything available, up to 10,000 per profile.
  4. Optionally turn off Include view counts for a faster run.
  5. Click Start, then open the Output tab or export the results as JSON, CSV, or Excel.

Input parameters

ParameterTypeRequiredDefaultDescription
usernamesarrayYesโ€”Threads usernames, @handles, or profile links. Up to 50; the same profile written twice counts once
maxPostsintegerNo100Most posts to take from each profile, newest first. 0 takes everything available, up to 10,000
includeViewCountsbooleanNotrueRead each post's public view count. Turn off for faster runs
proxyConfigurationobjectNo{"useApifyProxy": false}Optional proxy. When Threads rate-limits a connection, the actor moves to Apify Proxy automatically

Example input:

{
"usernames": ["nasa", "@natgeo", "https://www.threads.com/@threads"],
"maxPosts": 100
}

Output example

One real row from a run on natgeo. Only the media query strings are removed so it fits the page; they arrive complete in your data.

{
"record_type": "post",
"possibly_incomplete": false,
"username": "natgeo",
"user_id": "63269174602",
"display_name": "National Geographic",
"profile_url": "https://www.threads.com/@natgeo",
"is_verified": true,
"followers_count": 18350158,
"bio": "Step into wonder and find your inner explorer with National Geographic ๐ŸŒŽ",
"external_links": ["https://on.natgeo.com/instagram"],
"emails": [],
"phones": [],
"bio_links": [{ "url": "https://on.natgeo.com/instagram", "title": null }],
"profile_pic_url": "https://instagram.fkul15-1.fna.fbcdn.net/v/t51.82787-19/684235167_17961318525110603_2950335531617183679_n.jpg",
"profile_pic_hd_url": "https://instagram.fkul15-1.fna.fbcdn.net/v/t51.82787-19/684235167_17961318525110603_2950335531617183679_n.jpg",
"fediverse_enabled": null,
"profile_tags": [],
"podcast_name": null,
"podcast_url": null,
"podcast_platform": null,
"post_url": "https://www.threads.com/@natgeo/post/DcWL2E0DZqC",
"post_code": "DcWL2E0DZqC",
"text_content": "Forever bonded by their acts of bravery, the first responders, co-workers, and strangers finally reunite 25 years after the September 11 attacks.\n\n9/11 Reunited is now streaming on @DisneyPlus and @hulu.",
"created_at": "2026-08-22T15:00:31+00:00",
"created_at_display": "2026-08-22 15:00:31 UTC",
"created_at_timestamp": 1787410831,
"like_count": 145,
"reply_count": 6,
"repost_count": 11,
"quote_count": 1,
"share_count": 3,
"view_count": 200064,
"view_count_status": "available",
"has_media": true,
"media_type": "photo",
"media_url": "https://scontent-phx1-1.cdninstagram.com/v/t51.82787-15/780486744_17982177534110603_2682855866760696822_n.jpg",
"media_urls": [],
"media_width": 2400,
"media_height": 3000,
"has_audio": null,
"hashtags": [],
"mentions": ["DisneyPlus", "hulu"],
"mentioned_users": ["disneyplus", "hulu"],
"mentioned_accounts": [
{ "username": "disneyplus", "user_id": "63235183573" },
{ "username": "hulu", "user_id": "63042084759" }
],
"urls": [],
"link_title": null,
"language": "en",
"topic_tag": null,
"location_name": null,
"location_id": null,
"is_pinned": false,
"is_edited": false,
"is_paid_partnership": false,
"is_reply": false,
"reply_to_username": null,
"reply_control": "everyone",
"is_quote_post": false,
"quoted_post_url": null,
"is_repost": false,
"reposted_post_url": null,
"is_spoiler": false,
"accessibility_caption": null,
"is_ai_generated": true,
"is_gif": false,
"is_sticker_post": false,
"sticker_count": 0,
"sticker_ids": [],
"sticker_urls": [],
"poll_options": null,
"poll_votes": null,
"poll_total_votes": null,
"poll_is_closed": null,
"scraped_at": "2026-10-03T01:25:47.043943+00:00"
}

Download the dataset in JSON, CSV, Excel, HTML, or XML from the Output tab or through the API.

Use cases

  • Competitor and brand monitoring: track what competitors and brands post on Threads and how each post performs.
  • Influencer research: compare views, likes, and reply rates across creators before a partnership.
  • Content strategy: find which topics, formats (photo, video, carousel, text), and posting times get the most views.
  • Lead generation: collect bios, profile links, and the emails or phone numbers accounts chose to publish.
  • Research and AI datasets: build datasets of posts with text, language, engagement, and media for analysis or model training.
  • Archiving: keep a record of an account's posts, edits, and pinned posts over time.

How it works

  1. Each entry is turned into a username, so nasa, @nasa, and https://www.threads.com/@nasa are the same profile and are scraped once.
  2. The actor opens the public profile, reads the profile details, then pages back through the profile's posts, newest first, until it reaches maxPosts or the oldest post.
  3. With Include view counts on, it reads each post's public view count.
  4. Posts the profile replied to are left out, so every row is a post written by that profile. Replies the author wrote are kept and marked is_reply.
  5. If Threads rate-limits a connection, the actor continues through Apify Proxy (datacenter, then residential) from the same place in the feed. Progress is saved, so a run that is moved to another server continues where it stopped.

How much does it cost to scrape Threads profiles?

Threads User Posts Scraper uses pay-per-event pricing. You pay for each post row in the dataset; profiles and pages themselves are free.

EventApify planPrice per postPrice per 1,000 posts
post-scrapedFree$0.00399$3.99
post-scrapedBronze$0.00349$3.49
post-scrapedSilver$0.00299$2.99
post-scrapedGold$0.00249$2.49

For example, the prefilled run (3 profiles ร— 20 posts) costs about $0.24 on the Free plan, and 10 profiles ร— 100 posts costs about $3.99. You can set a maximum cost per run in the run options; the actor stops at that limit and marks the affected profile's rows possibly_incomplete. In our tests a run collected about 400 posts per minute with view counts and about 1,800 per minute without them.

FAQ

Can I scrape Threads without logging in? Yes. The actor only reads what Threads shows to logged-out visitors, so you don't need a Threads or Instagram account, cookies, or a Meta API key.

How many posts can I get from one profile? Everything the profile has publicly, up to 10,000 per profile. In our tests the actor paged back to each account's first post, for example 1,819 posts for natgeo going back to July 2023. A profile with fewer posts returns what it has.

What does possibly_incomplete mean? It is true when that profile's posts could not all be collected on this run, either because Threads stopped returning the next page or because the run reached your maximum cost. The rows you received are still accurate. For very large profiles, rows saved before the problem keep false; the run's status message always lists profiles that may be incomplete.

What does view_count_status mean? available means a view count was read. not_public_yet means Threads doesn't show a count for the post yet, which can happen for very new posts. not_checked means no count was read on this run, for example when Include view counts is off.

Why are poll options and votes empty? Threads doesn't publish poll results to logged-out visitors, so poll_options, poll_votes, and poll_total_votes are blank, which means unknown rather than zero. poll_is_closed is still filled in, so you can see that a post had a poll.

Why is location_name often empty? Threads usually shares only the place ID with logged-out visitors. location_id is filled whenever the author tagged a place, and location_name when Threads includes the name.

How is language detected? Threads doesn't publish its own language detection to logged-out visitors. The actor detects the language from the post text with a language-identification model and returns an ISO 639-1 code such as en or es. Very short posts, or posts where the model isn't confident, get an empty value.

Are reposts included? No. Threads shows reposts on a separate tab and leaves them out of the profile's posts, so is_repost is false on the rows you get. Quote posts are included and marked is_quote_post.

How do I get only standalone posts, without replies? Filter on is_reply. Replies the author wrote are rows with is_reply set to true and the account they replied to in reply_to_username.

Which handle column should I use? Use mentioned_users for matching: it holds the handles Threads linked to an account, always lower case, and mentioned_accounts adds their account IDs. mentions holds every handle as the author typed it.

Do media links expire? Yes. Media and profile picture addresses come from Meta's CDN and stop working some time after collection, so download anything you need to keep.

How do I call it from Python?

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/threads-user-posts-scraper").call(run_input={
"usernames": ["nasa", "@natgeo"],
"maxPosts": 200,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["username"], post["created_at"], post["view_count"], post["text_content"][:60])

How do I call it from JavaScript?

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/threads-user-posts-scraper').call({
usernames: ['nasa', '@natgeo'],
maxPosts: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((post) => console.log(post.username, post.view_count, post.post_url));

See the Python client docs, the JavaScript client docs, or the actor's API tab for HTTP endpoints.

Can I monitor profiles on a schedule? Yes. Use Apify schedules to run daily or weekly with a small maxPosts to pick up new posts, and integrations or webhooks to send them to Google Sheets, Slack, Make, Zapier, or your own API.

Something isn't working. What should I do? Open an issue in the Issues tab with the username and run link, and we'll look into it.

Threads User Posts Scraper only collects data that Threads shows publicly to logged-out visitors, and contact details only when the account published them in its own bio. It does not access private accounts or data behind a login. Results can still include personal data, which may be protected by the GDPR in the EU and by other regulations elsewhere. Don't scrape personal data unless you have a legitimate reason, and check the Threads Terms of Use for your use case. If you're unsure, consult a lawyer. Read more in Apify's post Is web scraping legal?

Other Threads scrapers

ActorWhat it does
Threads Posts ScraperScrape single Threads posts and their replies from post URLs
Threads Search ScraperSearch public Threads posts by keyword or hashtag
Threads ScraperScrape Threads profiles, recent user posts, and search results in one actor
Instagram Reels Search & Trend DiscoveryFind Instagram Reels by keyword with engagement data