Threads Profile Scraper — Followers, Bio, Links, Emails
Pricing
from $1.40 / 1,000 posts
Threads Profile Scraper — Followers, Bio, Links, Emails
Every public Threads profile as a row: follower count, full name, bio, bio links, website, emails and phones from the bio, verification, HD avatar, linked Instagram and the latest post. The account's own posts in the same run. No login, no browser.
Pricing
from $1.40 / 1,000 posts
Rating
5.0
(1)
Developer
Matvey
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
10
Monthly active users
11 hours ago
Last modified
Categories
Share
Threads Profile Scraper turns a list of usernames into full public profiles: follower count, full name, biography, the links in the bio, the website, the emails and phone numbers written in the bio, verification, private flag, the HD avatar, the linked Instagram account and the latest post with its text and date. Ask for the account's own posts in the same run and they arrive alongside. No login, no cookies, no browser.

Paste usernames or profile URLs, click Start, export as JSON, CSV or Excel — or call it from the API and from AI agents.
Tested head-to-head — 24 September 2026

The same request went to this Actor and to the four most-used Actors on the Apify Store that return a Threads profile by username, on the same afternoon from a fresh free account: five public accounts (zuck, mosseri, nasa, natgeo, nytimes), one row each. Follower counts were checked against what Threads itself shows.
| This Actor | The 4 others | |
|---|---|---|
| Accounts with the correct Threads follower count | 5 of 5 | 5 of 5 at two; Instagram's count at one; nothing at one |
| Date of the latest post in the row | Yes | Only one of the four |
| What this request cost | $0.020 | $0.021 – $0.045 (the one that returned nothing cost $0) |
What is it for?
Influencer and creator research (who has the audience, and is the account alive), lead generation from bio contacts, competitor tracking, and AI agents asked "who is this account". Threads' official API only covers your own account; this Actor reads the public profile pages Threads serves to any visitor.
| Mode | You give | You get |
|---|---|---|
| Profile | usernames or profile URLs | the full profile row below |
| Posts | usernames | the account's own posts, paged through the whole profile |
What data does it return?
| Field | Example |
|---|---|
username, userId, profileUrl | zuck · 63055343223 · https://www.threads.net/@zuck |
fullName, biography | Mark Zuckerberg · "Building things…" |
followerCount | 4183562 |
bioLinks, websiteUrl | [{url, title}] · https://… |
emails, phones | pulled out of the bio text, ready for outreach |
isVerified, isPrivate | true · false |
profilePicUrl, instagramUrl | HD avatar · the linked Instagram profile |
latestPostAt, latestPostUrl, latestPostText | is the account still posting, and about what |
Post rows (Posts mode) carry id, code, url, text, language, createdAt, author fields, likeCount, replyCount, repostCount, quoteCount, shareCount, viewCount (read from each post's own page), media URLs, hashtags, mentions, urls, linkPreview, the quoted or reposted post, isPinned, isEdited and thread position.
How much does it cost?
Pay per row, no start fee, and error rows are free. There is no browser here, so platform usage is close to zero.
| Row | Price |
|---|---|
| Profile | $0.004 — 1,000 profiles for $4 |
| Post (Posts mode) | $0.002 |
Larger monthly plans get 10–30 % off.
Bulk export: what 50,000 profiles actually cost
This Actor is built for bulk jobs — put hundreds of inputs into one run, or call it from the API on a schedule. There is no fee per run, no fee per page and no proxy charge: you pay for the rows you keep, and error rows are free. That is what decides the bill once you pull a whole market rather than a single account.
| Job | This Actor | Most-used Actor in this category |
|---|---|---|
| 50,000 profiles across 100 runs | $200 | $252 |
Checked on the Apify Store on 24 September 2026 against the Actor with the most monthly users in this category; its per-run fee is counted in, as ours would be if we charged one. Some Actors here ask less per row — this table compares against the one buyers actually use most.
How to scrape Threads profiles
- Put the accounts in 👤 Usernames —
zuck,@natgeo, or a fullthreads.net/@namelink, one per line. - Leave 🧭 What to get on profile for one row per account, or switch to posts to page through what the account has written.
- Keep 👤 Full profiles on. With it off you get only what the account list already carries, and no contacts.
- Click Start. Export as JSON, CSV or Excel, or read the dataset from the API.
⬇️ Input
{"mode": "profile","usernames": ["zuck", "natgeo", "nasa"],"includeProfileDetails": true,"maxItems": 100}
Posts of an account, newest first, with a profile row on top:
{ "mode": "posts", "usernames": ["mkbhd"], "maxPosts": 100, "includeProfile": true }
Only the posts that mention something, published since a date:
{ "mode": "posts", "usernames": ["natgeo"], "maxPosts": 200, "postedAfter": "2026-09-01", "filterKeywords": ["ocean"] }
Every input field
| Field | What it does |
|---|---|
mode | profile — one row per account. posts — the account's own posts. |
usernames | Accounts to read. zuck, @zuck and the profile URL all work. |
startUrls | Profile links instead of usernames, for when your list is already URLs. |
maxPosts | Posts per account in posts mode. |
postedAfter | Skip posts older than this date — turns a repeat run into monitoring. |
filterKeywords | Keep only posts containing one of these words. Filtering happens before billing. |
includeProfile | Add a profile row alongside the posts. |
includeProfileDetails | Open each profile page for followers, bio, links and contacts. Leave on. |
includeViews | Fill viewCount on posts from each post's page (on by default, no extra charge). Turn off for the fastest bulk runs. |
maxItems | Hard ceiling on rows for the whole run — your budget. |
concurrency | Accounts read in parallel. Four is polite and fast enough. |
⬆️ Output
{"type": "profile","username": "natgeo","userId": "63454848350","fullName": "National Geographic","biography": "Taking our understanding and awareness of the world further.","followerCount": 2100000,"bioLinks": [{ "url": "https://on.natgeo.com/threads", "title": "on.natgeo.com" }],"websiteUrl": "https://on.natgeo.com/threads","emails": [],"phones": [],"isVerified": true,"isPrivate": false,"profilePicUrl": "https://…","instagramUrl": "https://www.instagram.com/natgeo","latestPostAt": "2026-09-14T18:20:11.000Z","latestPostUrl": "https://www.threads.net/@natgeo/post/DdRSOdDjetX","scrapedAt": "2026-09-15T09:00:00.000Z"}
An account that does not exist, or that Threads refuses, arrives as a type: "error" row with the reason. Error rows are free and the run still finishes green.
Use cases
Influencer and creator research
Pull a shortlist of accounts and sort by followerCount, then use latestPostAt to drop the ones that stopped posting months ago.
Lead generation from bios
emails, phones, websiteUrl and bioLinks are extracted from the bio text, which is where small businesses and creators actually publish their contacts.
Competitor tracking
Run the same username list on a schedule and watch follower counts and bio changes move over weeks.
Audience and content audit
Switch to posts mode and read an account's whole output with engagement counts, to see which topics earned replies.
AI agents
An agent asked "how big is this account and how do I contact them" gets both from a single profile row.
🤖 For AI agents and LLM apps
Compact reference for agents calling this Actor through the Apify MCP server or the API (lergassy/threads-profile-scraper).
Purpose: resolve a Threads handle into a full public profile — size, bio, links, contacts — and optionally its posts.
Minimal input:
{ "mode": "profile", "usernames": ["zuck"], "includeProfileDetails": true }
Behaviours an agent should know:
followerCountis the number to quote for reach;latestPostAttells you whether the account is alive.- Contacts come from the bio only. An empty
emailsarray means the account published none, not that the lookup failed. - A private account returns its public header with
isPrivate: trueand no posts. That is the complete answer, not a failure. - A handle that does not exist returns an error row, free of charge — check
typebefore reading fields. - Billing is per row: one profile row per account, plus one row per post in posts mode. Set
maxItemsto cap the spend. - No login, cookies or API key are involved, so nothing expires between runs.
Use via API
Run this Actor from your own code or pipeline. Get your token in Apify Console → Settings → API & Integrations. Every input field below has the same name as in the JSON tab of the input form.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("lergassy/threads-profile-scraper").call(run_input={"mode": "profile","usernames": ["zuck"],"maxPosts": 100,"includeProfileDetails": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('lergassy/threads-profile-scraper').call({"mode": "profile","usernames": ["zuck"],"maxPosts": 100,"includeProfileDetails": true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL (runs the Actor and returns the results in one call)
curl -X POST "https://api.apify.com/v2/acts/lergassy~threads-profile-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "profile", "usernames": ["zuck"], "maxPosts": 100, "includeProfileDetails": true}'
Limitations, stated plainly
- Public data only. Follower lists, following lists and anything behind a private account are not available to a logged-out visitor and are not returned here.
- Counts are what the page shows. Threads rounds large numbers on some surfaces; the Actor reports the figure the profile serves.
- Contacts are only as good as the bio. No email guessing, no pattern invention — if it is not written on the profile, it is not in the row.
- Posts mode reads the account's own posts. Replies, reposts and whole conversations live in Threads Replies Scraper.
Integrations
Runs from the Apify API, the Python and JavaScript clients, and from n8n, Make or Zapier through the Apify app. Schedule it and push rows into Google Sheets or your own webhook. AI agents reach it through the Apify MCP server with no extra setup.
❓ FAQ
Do I need a Threads or Instagram account?
No. The Actor reads the public profile pages Threads serves to any visitor — no login, no cookies, no tokens to refresh.
Can I get followers or following lists?
No. Threads does not show those to a logged-out visitor, so no honest scraper can return them.
Where do the emails and phone numbers come from?
From the bio text and the bio links. They are extracted, never guessed. If you need work addresses derived from a company domain, that is Email Finder.
What happens with a username that does not exist?
You get an error row saying so, free of charge, and the rest of the list is still scraped.
How many accounts can one run handle?
Thousands. Profiles are read a few at a time; maxItems is what actually limits the run.
Is a private account still worth a row?
It returns the public header — name, avatar, follower count, isPrivate: true — and no posts. Many buyers use exactly that to filter a list.
How do I track changes over time?
Schedule the run daily or weekly on the same username list. Each run appends a snapshot with scrapedAt, and the differences are your trend.
Is scraping Threads legal?
The Actor reads public pages at a normal rate without logging in, which is ordinary public-data collection. What you do with personal data afterwards is your responsibility — GDPR and similar rules apply to you, not to the page.
You might also like
| Actor | What it does |
|---|---|
| Threads Scraper | All modes in one: search, posts, replies, profiles |
| Threads Search Scraper | Keyword and hashtag search with filters |
| Threads Replies Scraper | Replies, reposts and whole conversations |
| Email Finder | Work email addresses from names and company domains |
Also known as
People look for this Actor as a Threads profile scraper, a Threads user API, Threads follower count checker, Threads bio scraper, Threads contact extractor and a Threads influencer research tool.
Notes
Public accounts only: a private profile returns its public header, never its posts. A username that does not exist comes back as an error row, and error rows are free.
Looking for posts by keyword, or for replies and whole conversations? Those live in Threads Search Scraper, Threads Replies Scraper and the all-in-one Threads Scraper.