Threads Profile & Posts Scraper

Export public Threads profile metadata, bios, follower counts, avatars, and visible post previews from usernames or profile URLs.

Data fields

FieldTypeDescription
itemTypestringWhether the row is a profile or visible post preview.
profileUrlstringCanonical Threads profile URL.
usernamestringThreads username without @.
displayNamestring | nullPublic profile display name.
biostring | nullPublic profile bio when available.
followerCountnumber | nullParsed follower count.
followerCountTextstring | nullRaw follower count text.
threadCountnumber | nullParsed thread count.

Input preview

profileUrlsOrUsernamesProfile URLs or usernames *
maxPostsPerProfileMaximum posts per profile
proxyConfigurationProxy configuration

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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

  1. Open the actor on Apify.
  2. Add Threads usernames or profile URLs.
  3. Choose the maximum number of visible post previews per profile.
  4. Keep the direct-connection default unless you have a specific proxy requirement.
  5. Start the run.
  6. 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
  • @zuck
  • https://www.threads.com/@zuck
  • https://www.threads.net/@zuck

Tips for best results

  • Use public profiles only.
  • Start with 1-5 profiles while testing your workflow.
  • Set maxPostsPerProfile to 0 if 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.

Common questions

Questions and answers reused from the canonical actor README.

Why did a profile produce no rows?

The profile may be private, missing, renamed, temporarily unavailable, or redirected to login. Check the profile in a logged-out browser and verify that it is public.

Why are post fields empty?

Threads may not expose post timelines to logged-out visitors for that profile. The actor saves post fields only when public post previews are visible.

Why do counts differ from the app?

Threads may round counts in public metadata and may update app counters faster than public web metadata.