Threads Scraper - Posts, Profiles & Comments avatar

Threads Scraper - Posts, Profiles & Comments

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Threads Scraper - Posts, Profiles & Comments

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

Kovtun Vitalik

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

  1. Go to the Input tab on this Actor's page
  2. Choose your Results Type: posts, profiles, or comments
  3. Fill in Usernames (for posts/profiles) or Post URLs (for comments)
  4. Set your Max Items limit (default: 50)
  5. For comments, enable Residential proxy in Proxy Configuration
  6. Click Start and wait for the results
  7. Download your data in JSON, CSV, Excel, or HTML format from the Output tab

Input parameters

ParameterTypeRequiredDescription
usernamesArrayFor posts/profilesUsernames to scrape (without @). Example: ["zuck", "instagram"]
postUrlsArrayFor commentsDirect URLs of posts. Example: ["https://www.threads.net/@zuck/post/ABC123"]
resultsTypeEnumNoposts (default), profiles, or comments
searchQueryStringNoFilter posts by keyword. Requires usernames — fetches their posts and returns matches.
maxItemsIntegerNoMaximum results to return (default: 50, max: 10000)
proxyConfigurationObjectFor commentsResidential 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

FieldTypeDescription
usernameStringAuthor's username
textStringPost text content
likeCountNumberNumber of likes
isReplyBooleanWhether this post is a reply to another post
publishedAtDatePublication timestamp (ISO 8601)
urlStringDirect link to the post
postIdStringInternal post identifier
imageUrlsArrayURLs of attached images

Profiles

FieldTypeDescription
usernameStringUsername
fullNameStringDisplay name
bioStringProfile biography
followerCountNumberNumber of followers (approximate)
followingCountNumberNumber of accounts followed
isVerifiedBooleanVerification badge status
profilePicUrlStringProfile picture URL
isPrivateBooleanWhether the account is private

Comments

FieldTypeDescription
usernameStringComment author
textStringComment text
likeCountNumberNumber of likes on the comment
replyToStringUsername this comment is replying to
publishedAtDateComment timestamp
postUrlStringURL of the parent post

How much does it cost to scrape Threads?

Threads Scraper uses a pay-per-result pricing model:

ResultsCost
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 facebookexternalhit User-Agent which triggers Meta's SSR (server-side rendering) and returns OG meta tags with profile data. Enriched with is_verified from the GraphQL API.
  • Posts: Fetched via Threads' internal GraphQL API (/api/graphql) using the BarcelonaProfileThreadsTabQuery endpoint. Works from any IP without proxy.
  • Comments: Requires Googlebot User-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 likeCount is 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: 10 to 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 ApifyClient
client = 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.