Threads Profile & Posts Scraper: Followers, Bio & Engagement
Pricing
from $2.50 / 1,000 results
Threads Profile & Posts Scraper: Followers, Bio & Engagement
Turn public Threads accounts into rows with exact followers, bio, links and verified badge, plus each recent post's likes, replies, reposts and quotes. Paste usernames, profile links or post links; empty input runs a two-profile sample. $2.50 per 1,000 rows.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Features
Share
Threads Profile & Posts Scraper
Turn any public Threads account into clean, structured rows. Paste usernames or profile links and get each profile's name, bio, bio links, exact follower count, verified badge and profile picture, followed by the latest posts shown on the profile: text, post time, likes, replies, reposts, quotes, images and videos. Individual post links work too.
No Threads account is needed. Profiles and posts that cannot be read are listed in the run summary and are not charged.
Use cases
- Influencer research: exact follower counts, bios and links for a list of creators, one row per account.
- Brand and competitor monitoring: schedule the same list and chart
followerCountand each new post'slikeCount,replyCountandrepostCountover time. - Engagement tracking: the latest posts with likes, replies, reposts and quotes, re-run on a schedule to watch them grow.
- Lead lists: names, bio links and verified badges for a set of accounts, joinable to your own records through
userIdorusername. - Content research: the latest posts, images and videos from accounts in a niche, ready to sort by engagement.
- Campaign reporting: put the campaign's post links in
postUrlsand keep one row per post with its current counts.
Your first run
You do not have to fill the form to see the output. With no input the Actor reads the same two profiles the Console prefills (nasa, netflix) with three posts each, so a complete sample arrives in seconds. The run summary carries usedExample: true and the run status says it was the example run, so it cannot be mistaken for your own data. Replace the prefilled values to collect your own accounts.
Bulk input
profiles and postUrls accept a list. In the Console, click Bulk edit in either field and paste one username, profile link or post link per line. Usernames (zuck), @ handles (@zuck), threads.com and threads.net links, and links copied from the app with extra parameters all work; duplicates are read once. Lists of a few hundred accounts are fine: allowance is maxItems rows in total, up to 100,000.
Worked costs
| What you collect | Rows | What you pay |
|---|---|---|
| The first-run sample (2 profiles, 3 posts each) | 8 | $0.025 |
100 accounts, profile rows only (includePosts: false) | 100 | $0.255 |
| 100 accounts with about 5 posts each | ~600 | $1.505 |
| 1,000 post links | 1,000 | $2.505 |
One $0.005 run start plus $0.0025 per delivered row. Failed profiles and posts are not charged. A profile takes about a second, so long lists finish well inside the default one-hour timeout.
Quick Start
{"profiles": ["zuck", "nasa", "https://www.threads.com/@natgeo"],"postUrls": ["https://www.threads.com/@mosseri/post/DeZvGAMmu4D"],"maxPostsPerProfile": 25,"maxItems": 1000}
Each profile becomes one profile row, followed by one row per recent post. Each post link becomes one post row.
Input
| Input | Type | Default | Meaning |
|---|---|---|---|
profiles | array | the two sample profiles | Threads usernames (zuck or @zuck) or profile links (https://www.threads.com/@zuck, threads.net links work too). Repeated profiles are read once. If you leave it empty, the Actor collects the same two profiles the Console prefills (nasa, netflix) and marks the run summary usedExample: true, so a first run still returns a sample. |
postUrls | array | [] | Individual post links (https://www.threads.com/@user/post/<code>). A post already returned from its profile is not repeated. |
includePosts | boolean | true | Add the latest posts shown on each profile. Turn off for profile rows only. |
maxPostsPerProfile | integer | 25 | Cap on post rows per profile, 1 to 50. |
maxItems | integer | 1000 | Total cap on rows (profiles plus posts) for the whole run, up to 100,000. |
Give at least one profile or post link, or leave both fields empty for the sample.
Example queries
{"profiles": ["netflix", "nba", "espn"]}: three brand accounts and their latest posts.{"profiles": ["mosseri", "zuck"], "includePosts": false}: profile rows only, for a long list of accounts.{"postUrls": ["https://www.threads.com/@zuck/post/DeZtp-TkQHh"]}: one post with its current counts.{"profiles": ["natgeo"], "maxPostsPerProfile": 5}: one profile and at most five posts.
What it returns
Every row has a kind: profile or post. All rows share the same columns, so profiles and posts export into one sheet; columns that do not apply to a row are null (or an empty list).
Profile rows:
| Field | Meaning |
|---|---|
username, url | The username and the profile link. |
fullName | The display name. |
biography | The bio text. |
bioLinks | Links listed on the profile. |
followerCount | Exact follower count (not rounded). |
isVerified | Whether the account has the verified badge. |
isPrivate | Whether the profile is marked private. |
profilePicUrl | The largest available profile picture. |
userId | The account's numeric ID. |
postsReturned | How many post rows follow for this profile. |
Post rows:
| Field | Meaning |
|---|---|
url, code, postId | The post link, its short code and its numeric ID. |
username, fullName, isVerified, userId | The post's author. |
text | The post text. |
createdAt | When it was posted (UTC, ISO 8601). |
likeCount, replyCount, repostCount, quoteCount | Engagement counts. likeCount is null when the author hides it. |
mediaType | text, image, video or carousel. |
images, videos | Image and video links, one per slide for carousels. Videos also carry their cover image. |
linkUrl | The web link a post previews, if any. |
quotedPostUrl | The post this post quotes, if any. |
isPinned | Pinned to the top of the profile. |
isReply | Part of a thread the author continued, or a reply. |
isRepost | Shown on the profile but written by another account. |
profileUsername | The profile the post was found on (null for rows from post links). |
Every row also carries source (profile or post), input (the value you entered), scrapedAt and error (always null in the dataset).
The run summary (OUTPUT) reports sourcesRequested, usedExample (true only for the bare-start sample), items, profiles, posts, errors and the list at sourceErrors.
Output example
{"kind": "profile", "username": "nasa", "url": "https://www.threads.com/@nasa", "isVerified": true, "userId": "28829152388", "fullName": "NASA", "biography": "Making the seemingly impossible, possible. ✨", "bioLinks": [], "followerCount": 12785923, "isPrivate": false, "profilePicUrl": "https://scontent-hel3-1.cdninstagram.com/v/t51.82787-19/669747085_18089786557960389_922072622069351626_n.jpg", "postsReturned": 5, "postId": null, "code": null, "text": null, "createdAt": null, "likeCount": null, "replyCount": null, "repostCount": null, "quoteCount": null, "mediaType": null, "images": [], "videos": [], "linkUrl": null, "quotedPostUrl": null, "isReply": null, "isPinned": null, "isRepost": null, "profileUsername": "nasa", "source": "profile", "input": "nasa", "scrapedAt": "2026-10-20T01:10:00Z", "error": null}{"kind": "post", "username": "nasa", "url": "https://www.threads.com/@nasa/post/Decc755lYhC", "isVerified": true, "userId": "28829152388", "fullName": "NASA", "biography": null, "bioLinks": [], "followerCount": null, "isPrivate": null, "profilePicUrl": null, "postsReturned": null, "postId": "4007205030373722178", "code": "Decc755lYhC", "text": "Spotted: views of a \"space jellyfish\" following today's launch of NASA’s SpaceX 35th commercial resupply mission to the International Space Station.", "createdAt": "2026-10-13T18:28:06Z", "likeCount": 41103, "replyCount": 592, "repostCount": 4378, "quoteCount": 282, "mediaType": "carousel", "images": ["https://scontent-hel3-1.cdninstagram.com/v/t51.82787-15/847998870_18123835888960389_7278135639222434691_n.jpg", "https://scontent-hel3-1.cdninstagram.com/v/t51.82787-15/846964916_18123835993960389_2780682481226156847_n.jpg", "https://scontent-hel3-1.cdninstagram.com/v/t51.82787-15/849508659_18123836011960389_1894048710237085880_n.jpg", "https://scontent-hel3-1.cdninstagram.com/v/t51.82787-15/845941405_18123836032960389_8401705155110598071_n.jpg"], "videos": [], "linkUrl": null, "quotedPostUrl": null, "isReply": false, "isPinned": false, "isRepost": false, "profileUsername": "nasa", "source": "profile", "input": "nasa", "scrapedAt": "2026-10-20T01:10:00Z", "error": null}
Image links are shortened here; real rows carry the full links.
Failed profiles and posts
A profile that does not exist, is not publicly visible, or cannot be read is listed in the run summary (OUTPUT.sourceErrors) with a short code such as NOT_FOUND, RATE_LIMITED or LOGIN_WALL, and the run goes on with the rest. These entries are not dataset rows and are not charged. A run in which nothing at all could be read fails with a clear message.
Limits and caveats
- Threads shows visitors only the first page of a profile, usually 4 to 10 recent posts; older history, replies tabs, follower lists and search are not included.
- Counts are read at run time and change quickly on popular posts.
- Some well-known handles have no public Threads profile under that name (for example
vogueorbbcnews); they are reported asNOT_FOUND. Private or restricted profiles may likewise show no posts or be reported asNOT_FOUND. - Media links are the ones Threads serves and expire after some days; download what you need soon after the run.
- Automated access is subject to Threads' terms; use this actor only where you have the necessary permissions and a lawful basis.
FAQ
Do I need a Threads or Instagram account? No. Only public information is collected.
What happens if I just press Start? The Actor collects the sample profiles nasa and netflix (three posts each) and marks the run summary usedExample: true. It is a real run and is charged normally (about $0.025), so check the rows before adding your own list.
Can I mix usernames, profile links and post links? Yes. Put usernames and profile links in profiles, post links in postUrls. Duplicates are returned once.
How many posts will I get per profile? The posts on the first page of the profile, usually 4 to 10, capped by maxPostsPerProfile. Setting the cap above about 10 rarely adds more.
Is the follower count exact? Yes, followerCount is the exact number, not a rounded label like "5.7M".
Price
$0.0025 per result (each profile row and each post row), plus $0.005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Profiles and posts that fail are not charged. Platform usage is included in these prices.
At $2.50 per 1,000 rows this matches the largest Threads scraper's per-row price ($2.50 per 1,000 on the Free plan) with a $0.005 start instead of $0.02, and it is half the platform's own Meta Threads Profile Scraper ($5.00 per 1,000 profiles). Post rows and profile rows cost the same here, so a mixed run of profiles and their posts stays at $2.50 per 1,000.