Threads Scraper - Posts, Profiles & Comments
Pricing
from $3.00 / 1,000 results
Threads Scraper - Posts, Profiles & Comments
Scrape Threads (threads.net) posts, user profiles, and comments. Search by keyword, scrape user data (bio, followers, verified status), posts with engagement metrics, and comments.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Kovtun Vitalik
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What does Threads Scraper do?
Extract posts, profiles & comments from Threads (threads.net) — no login, no browser, HTTP-only. $3 per 1,000 results.
Run it via the Apify platform to get API access, scheduled runs, webhook integrations, and proxy rotation out of the box.
The scraper supports three modes:
- Scrape user profiles — bio, follower count, verified status, profile picture
- Scrape posts from specific users — text, likes, timestamps, images. Optionally filter by keyword.
- Scrape comments on posts — replies from other users with like counts
Why use Threads Scraper?
- Brand monitoring — Track mentions of your brand, products, or competitors on Threads
- Competitor analysis — Monitor competitor posting frequency and content strategy
- Influencer research — Evaluate influencers by follower count, verification status, and engagement
- Trend analysis — Search trending topics and hashtags to spot emerging conversations
- Market research — Gather public sentiment data for reports and dashboards
- Content strategy — Analyze what types of posts drive the most likes in your niche
How to use Threads Scraper
- Go to the Input tab on this Actor's page
- Choose your Results Type: posts, profiles, or comments
- Fill in Usernames (for posts/profiles) or Post URLs (for comments)
- Set your Max Items limit (default: 50)
- For comments, enable Residential proxy in Proxy Configuration
- Click Start and wait for the results
- Download your data in JSON, CSV, Excel, or HTML format from the Output tab
Input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
usernames | Array | For posts/profiles | Usernames to scrape (without @). Example: ["zuck", "instagram"] |
postUrls | Array | For comments | Direct URLs of posts. Example: ["https://www.threads.net/@zuck/post/ABC123"] |
resultsType | Enum | No | posts (default), profiles, or comments |
searchQuery | String | No | Filter posts by keyword. Requires usernames — fetches their posts and returns matches. |
maxItems | Integer | No | Maximum results to return (default: 50, max: 10000) |
proxyConfiguration | Object | For comments | Residential proxy required for comment scraping from Apify cloud |
Input example — scrape posts
{"usernames": ["zuck", "instagram"],"resultsType": "posts","maxItems": 50}
Input example — scrape profiles
{"usernames": ["zuck", "instagram", "threads"],"resultsType": "profiles"}
Input example — scrape comments
{"postUrls": ["https://www.threads.net/@zuck/post/DTaa5vUFB1E"],"resultsType": "comments","maxItems": 50,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
You can also provide usernames instead of postUrls — the scraper will auto-discover recent posts and scrape their comments:
{"usernames": ["zuck"],"resultsType": "comments","maxItems": 50,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Input example — search posts by keyword
{"searchQuery": "AI","usernames": ["zuck", "mosseri"],"resultsType": "posts","maxItems": 20}
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Post output example
{"type": "post","username": "zuck","text": "Meanwhile at Meta HQ","likeCount": 7065,"isReply": false,"publishedAt": "2026-03-10T00:26:46+00:00","url": "https://www.threads.net/@zuck/post/DVrwsE5EdSz","postId": "3849384441660167347","imageUrls": ["https://..."],"scrapedAt": "2026-04-04T10:00:00+00:00"}
Profile output example
{"type": "profile","username": "zuck","fullName": "Mark Zuckerberg","bio": "Mostly superintelligence and MMA takes","followerCount": 5500000,"followingCount": 0,"isVerified": true,"profilePicUrl": "https://...","isPrivate": false,"scrapedAt": "2026-04-04T10:00:00+00:00"}
Comment output example
{"type": "comment","username": "user123","text": "Great post!","likeCount": 305,"replyTo": "zuck","publishedAt": "2026-03-15T15:00:00+00:00","postUrl": "https://www.threads.net/@zuck/post/DTaa5vUFB1E","scrapedAt": "2026-04-04T10:00:00+00:00"}
Data fields reference
Posts
| Field | Type | Description |
|---|---|---|
username | String | Author's username |
text | String | Post text content |
likeCount | Number | Number of likes |
isReply | Boolean | Whether this post is a reply to another post |
publishedAt | Date | Publication timestamp (ISO 8601) |
url | String | Direct link to the post |
postId | String | Internal post identifier |
imageUrls | Array | URLs of attached images |
Profiles
| Field | Type | Description |
|---|---|---|
username | String | Username |
fullName | String | Display name |
bio | String | Profile biography |
followerCount | Number | Number of followers (approximate) |
followingCount | Number | Number of accounts followed |
isVerified | Boolean | Verification badge status |
profilePicUrl | String | Profile picture URL |
isPrivate | Boolean | Whether the account is private |
Comments
| Field | Type | Description |
|---|---|---|
username | String | Comment author |
text | String | Comment text |
likeCount | Number | Number of likes on the comment |
replyTo | String | Username this comment is replying to |
publishedAt | Date | Comment timestamp |
postUrl | String | URL of the parent post |
How much does it cost to scrape Threads?
Threads Scraper uses a pay-per-result pricing model:
| Results | Cost |
|---|---|
| 1,000 | $3.00 |
| 10,000 | $30.00 |
| 50,000 | $150.00 |
Platform compute costs are minimal since the scraper uses HTTP requests only (no browser). A typical run scraping 1,000 posts uses less than 0.01 compute units.
Comment scraping requires residential proxy which has additional Apify platform costs.
Free Apify accounts include $5 of free platform usage per month.
How it works under the hood
The scraper uses two data sources depending on what's being scraped:
- Profiles: Fetched via
facebookexternalhitUser-Agent which triggers Meta's SSR (server-side rendering) and returns OG meta tags with profile data. Enriched withis_verifiedfrom the GraphQL API. - Posts: Fetched via Threads' internal GraphQL API (
/api/graphql) using theBarcelonaProfileThreadsTabQueryendpoint. Works from any IP without proxy. - Comments: Requires
GooglebotUser-Agent to get full SSR with thread replies. Googlebot is IP-verified by Meta, so a residential proxy is needed when running from datacenter IPs (like Apify cloud). - Search: Threads search API requires authentication. As a workaround, the scraper fetches posts from provided usernames and filters by keyword.
Limitations
- Reply/repost counts are not available from the public API. Threads intentionally hides these metrics from unauthenticated endpoints. Only
likeCountis returned. - Comment scraping requires a residential proxy on Apify cloud (Googlebot UA is IP-verified by Meta).
- Search requires
usernames— it filters their posts by keyword rather than searching all of Threads. - followerCount is approximate (parsed from meta description, e.g., "5.5M" becomes 5,500,000).
Tips for optimal usage
- Start small — Test with
maxItems: 10to verify the output format before running large scrapes - Use residential proxy for comments — Enable it in Proxy Configuration with the RESIDENTIAL group
- Schedule regular runs — Set up recurring scrapes for ongoing monitoring (daily, weekly)
- Combine with integrations — Export results to Google Sheets, Slack, or webhooks via Apify integrations
- Rate limits — The scraper includes built-in retry logic and rate limiting. Very large scrapes (10,000+) may take longer due to API throttling
API usage examples
Run via Apify API
curl -X POST "https://api.apify.com/v2/acts/VitaLuE~threads-scraper/runs" \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["zuck"],"resultsType": "posts","maxItems": 50}'
Run via Python SDK
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("VitaLuE/threads-scraper").call(run_input={"usernames": ["zuck", "instagram"],"resultsType": "profiles",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Run via JavaScript SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('VitaLuE/threads-scraper').call({usernames: ['zuck'],resultsType: 'posts',maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
FAQ and support
Is it legal to scrape Threads? This scraper only collects publicly available data. Always ensure your use case complies with applicable laws and Threads' Terms of Service.
Can it scrape private profiles? No. Only public profiles and posts are accessible.
Why are reply/repost counts missing?
Threads' public API intentionally does not return reply and repost counts for unauthenticated requests. Only likeCount is available. The isReply boolean field indicates whether a post is a reply to another post.
Why do comments require a residential proxy? Comment data is only returned when Threads detects a Googlebot crawler, and Meta verifies Googlebot by IP address. From Apify's datacenter IPs, a residential proxy is needed to pass this verification.
How does search work? Threads' search API requires authentication. The scraper works around this by fetching posts from the provided usernames and filtering them by your search query keyword.
Need a custom solution? If you need additional features or a custom scraper, open an issue in the Issues tab or contact the developer.