Scrape public Threads profile metadata and public post previews from Threads profile URLs or usernames.
At a glance
- Extracts: public Threads profile metadata, bios, follower/thread counts, avatar URLs, and visible post-preview rows when exposed in logged-out HTML.
- Inputs: Threads usernames, profile URLs, maximum visible post previews per profile, and optional proxy configuration.
- Best for: social monitoring, profile comparison, creator research, brand tracking, and public Threads datasets for agents or dashboards.
- Exports: Apify dataset rows downloadable as CSV, JSON, Excel, XML, RSS, or available through the API.
- Login: no Threads login is required; only publicly visible data is collected.
What can it do?
Threads Profile & Posts Scraper helps you collect structured data from public Threads profiles. Provide one or more usernames or profile URLs and the actor returns clean rows with profile metadata such as display name, bio, follower count, thread count, avatar URL, profile URL, and scrape timestamp. When Threads exposes public post previews in logged-out HTML, the actor also saves post rows with post URL, post ID, text preview, media URL array, and engagement fields when visible.
Who is it for?
- Social media analysts: track public Threads presence and visible profile changes.
- Brand teams: monitor official accounts, creator profiles, and competitor positioning.
- Journalists: research public profiles and public conversation previews.
- Growth teams: compare follower counts, profile copy, and public post previews.
- Automation builders: feed Threads profile data into datasets, APIs, dashboards, or agents.
Why use this actor?
Threads pages are optimized for browsing, not exporting. This actor turns public profile pages into structured data you can download as JSON, CSV, Excel, or access through the Apify API. It accepts simple usernames, supports multiple profiles per run, and includes proxy configuration for reliable production use.
How to use
- Open the actor on Apify.
- Add Threads usernames or profile URLs.
- Choose the maximum number of visible post previews per profile.
- Keep the direct-connection default unless you have a specific proxy requirement.
- Start the run.
- Download the dataset in JSON, CSV, Excel, XML, or HTML.
Input example
{
"profileUrlsOrUsernames": ["zuck", "https://www.threads.com/@instagram"],
"maxPostsPerProfile": 5,
"proxyConfiguration": {
"useApifyProxy": false
}
}
Output example
{
"itemType": "profile",
"profileUrl": "https://www.threads.com/@zuck",
"username": "zuck",
"displayName": "Mark Zuckerberg",
"bio": "Mostly superintelligence and MMA takes.",
"followerCount": 5600000,
"followerCountText": "5.6M Followers",
"threadCount": 150,
"threadCountText": "150 Threads",
"avatarUrl": "https://...",
"sourceUrl": "https://www.threads.com/@zuck",
"scrapedAt": "2026-06-27T21:53:47.678Z"
}
Supported profile formats
zuck@zuckhttps://www.threads.com/@zuckhttps://www.threads.net/@zuck
Tips for best results
- Use public profiles only.
- Start with 1-5 profiles while testing your workflow.
- Set
maxPostsPerProfileto0if you only need profile metadata. - Use stable profile URLs for recurring monitoring.
- Expect Threads to expose different fields for different public pages.
Limits and caveats
Threads controls what is visible to logged-out visitors. Some pages expose only profile metadata, while others may expose post previews. Private, missing, age-restricted, login-gated, or temporarily blocked profiles may return no rows. Engagement counts and timestamps are saved only when visible in public page data.
Integrations
Use the actor with:
- Google Sheets exports for profile tracking
- Make or Zapier automations through Apify webhooks
- BI dashboards that ingest Apify datasets
- CRM enrichment workflows for public creator lists
- Scheduled Apify tasks for recurring monitoring
API usage with Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/threads-profile-posts-scraper').call({
profileUrlsOrUsernames: ['zuck'],
maxPostsPerProfile: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
API usage with Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/threads-profile-posts-scraper').call(run_input={
'profileUrlsOrUsernames': ['zuck'],
'maxPostsPerProfile': 5,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~threads-profile-posts-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"profileUrlsOrUsernames":["zuck"],"maxPostsPerProfile":5}'
MCP and AI agents
Connect Apify MCP to tools that support Model Context Protocol and enable this actor with:
https://mcp.apify.com/?tools=fetch_cat/threads-profile-posts-scraper
Claude Code setup:
claude mcp add apify "https://mcp.apify.com/?tools=fetch_cat/threads-profile-posts-scraper"
MCP server JSON configuration:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=fetch_cat/threads-profile-posts-scraper"
}
}
}
Example prompts:
- "Scrape the public Threads profile for @zuck and summarize the bio and follower count."
- "Compare these Threads public profiles and return a table of follower counts."
- "Run the Threads Profile & Posts Scraper weekly and flag large follower changes."
Scheduling
Create an Apify task with your target usernames and schedule it daily, weekly, or monthly. Scheduled runs are useful for monitoring profile changes over time.
Proxy configuration
The default input uses direct requests to avoid unnecessary proxy cost. If you experience blocks on larger jobs, enable Apify Proxy in the proxy editor and choose a proxy group available in your account.
Data quality
The actor normalizes usernames, canonicalizes Threads URLs to threads.com, parses abbreviated counts such as 5.6M, and adds scrapedAt timestamps so you can track when the data was collected.
Legality
Only scrape public data you are allowed to access. Respect Threads terms, privacy rights, applicable laws, and reasonable rate limits. Do not use scraped data for spam, harassment, discrimination, or sensitive profiling.
Support
If you need a field that is publicly visible but not returned, open an issue with a sample public profile URL and the field you expected.