Threads Public Post, Reply & Profile Data Extractor
Pricing
from $0.49 / 1,000 results
Threads Public Post, Reply & Profile Data Extractor
Pull posts, replies, media, reposts, keyword search, hashtag search, or a post's reply thread from Threads, with real engagement counts, captions, media, and profile bios.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
vexaloom-labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Pick a mode and this actor reads whatever that surface shows a logged-out visitor on Threads — a profile's posts, replies or media, a keyword or hashtag search, or a single post with its visible replies — and returns it as structured records.
What this actor does
- Scrapes seven surfaces via one
modeswitch: profile posts, profile replies, profile media, profile reposts, keyword search, hashtag/topic search, and a single post plus its replies. - Reads engagement counts (likes, comments, reposts, shares) directly off each post's action buttons, including true zero counts that Threads otherwise hides.
- Detects and pulls the first image and any attached external link card (URL, domain, link title) on posts that have one.
- Can emit a separate profile-metadata record (display name, bio, follower count, verification, linked Instagram) alongside a profile mode's posts.
- Omits any field a given post or profile doesn't actually have — you never see a placeholder like
"N/A"or an empty string.
Output per post
| Field | Description |
|---|---|
recordType | Always "post" for this record type. |
mode | The mode that produced this record. |
postUrl | Full URL of the post on Threads. |
shortcode | Threads' short ID for the post. |
authorUsername | Username of the post's author. |
postText | Caption text, when the post has one. |
publishedAt | ISO 8601 timestamp of when the post was published. |
likeCount, commentCount, repostCount, shareCount | Engagement counts read from the post's action buttons (true zero is reported, not omitted); a count is left out only if that button isn't rendered on the card. |
hasImage, hasVideo | Whether the post includes an image or video (always present, true or false). |
imageUrl | URL of the post's first image, when present. |
externalLinkUrl | Resolved destination URL of an attached link card, when present. |
externalLinkDomain | Domain shown on the link card. |
externalLinkTitle | Title text shown on the link card. |
isMainPost | In postReplies mode only: true for the post itself, false for each reply under it. |
scrapedAt | ISO 8601 UTC timestamp of when the record was scraped. |
Output per profile (when includeProfileInfo is on)
Only the four profile modes produce this record, at most one per run, and it does not count toward maxItems. It is skipped if the profile header can't be read.
| Field | Description |
|---|---|
recordType | Always "profile" for this record type. |
mode | The profile mode that produced this record. |
username | The profile's username. |
profileUrl | Full URL of the profile on Threads. |
displayName | The account's display name. |
bio | Bio text, when set. |
followersCount | Follower count. |
threadsCount | Total number of Threads posted by the account. |
isVerified | Present and true only when a verification badge is found on the rendered profile page. |
instagramUrl | The first Instagram link found on the rendered profile page, normally the account's connected Instagram profile. |
scrapedAt | ISO 8601 UTC timestamp of when the record was scraped. |
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | String (select) | profile | profile, profileReplies, profileMedia, profileReposts, search, tag, or postReplies. Required. |
username | String | – | Threads username without @. Required for the four profile modes. |
searchQuery | String | – | Keyword or phrase to search. Required for search mode. |
tag | String | – | Hashtag/topic without #. Required for tag mode. |
postUrl | String | – | Full Threads post URL. Required for postReplies mode. |
sortBy | String (select) | default | default (top/relevance) or recent, for search mode. |
includeProfileInfo | Boolean | true | Also emit a profile-metadata record for profile modes. Ignored in search, tag and postReplies. |
maxItems | Integer | 25 | Maximum post/reply records to return (1–100). The optional profile record is not counted. |
proxyConfiguration | Object | {"useApifyProxy": true} | Apify proxy configuration. |
Example: a profile's recent posts
{ "mode": "profile", "username": "zuck", "maxItems": 25 }
Example: keyword search, most recent first
{ "mode": "search", "searchQuery": "openai", "sortBy": "recent", "maxItems": 25 }
Example: hashtag search
{ "mode": "tag", "tag": "ai", "maxItems": 25 }
Example: a post and its visible replies
{ "mode": "postReplies", "postUrl": "https://www.threads.com/@zuck/post/DZpPDXbCeTt", "maxItems": 25 }
Use cases
- Social listening — track mentions of a brand, product, or topic via keyword or hashtag search.
- Competitor monitoring — watch a competitor's Threads profile for new posts and engagement trends.
- Partnership vetting — check an account's follower count, bio, and recent post performance before reaching out.
- Content curation — pull recent posts on a topic to feature in a newsletter or roundup.
- Thread analysis — measure reply and repost activity on a specific post.
FAQ
Do I need a Threads or Instagram account? No. Everything returned here is visible to anyone browsing Threads while logged out.
Do I need to configure a proxy? No. proxyConfiguration defaults to Apify Proxy with its automatic (datacenter) selection, and you can also turn it off to send requests directly.
Why do I only get a handful of results per run? Threads caps how much content it shows a logged-out visitor — after a bounded window of recent posts it shows a "Log in to see more" wall. This actor returns exactly that visible window (typically 4-25 items depending on the page) and can't go further without a login, which it doesn't use.
Why is postText missing on some posts? Image- or video-only posts can have no caption at all; the field is simply left out rather than filled with a placeholder.
Is likeCount: 0 a real value or a missing field? It's real. Threads hides a button's numeric badge entirely when the count is zero; this actor reads each engagement button individually and reports the true count, including zero.
Are the engagement counts exact? They reflect what Threads itself displays (e.g. "1.2K" parsed to 1200), which is Threads' own abbreviated public count for larger numbers, not a guaranteed exact figure.
Can I scrape private accounts? No. Only public profiles and posts are reachable without logging in.
What happens if nothing is visible? If the page doesn't exist (404), shows only a login wall, or has no posts in the logged-out window, the run finishes with an explanatory status message and an empty dataset. No placeholder records are written.
Is this affiliated with Threads or Meta? No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.