Threads Scraper: Posts, Profiles & Search

Scrape public Threads profiles, recent posts, direct posts, visible replies, keyword search, engagement metrics, and media. No login required.

Data fields

FieldTypeDescription
itemTypestringProfile, post, reply, or searchResult.
profileUrlstring | nullCanonical public Threads profile URL.
usernamestring | nullThreads username without @.
displayNamestring | nullPublic display name.
biostring | nullPublic profile biography.
userIdstring | nullStable numeric Threads user identifier when exposed.
isVerifiedboolean | nullWhether Threads marks the author as verified.
followerCountnumber | nullPublic follower count.

Input preview

modeMode
usernamesThreads usernames or profile URLs
profileUrlsOrUsernamesLegacy profile URLs or usernames
postUrlsThreads post URLs
searchQueriesKeywords or hashtags
maxPostsMaximum posts per target

API and agents

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

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 profiles, recent profile posts, direct posts and visible replies, or keyword and hashtag search results—without a Threads or Instagram login.

At a glance

  • Four modes: profile details, profile posts, direct posts with replies, and keyword/hashtag search.
  • Post data: full public text, timestamps, likes, replies, reposts, quotes, media, hashtags, mentions, and author details.
  • Profile data: stable user ID, username, display name, biography, follower count, verification status, avatar, and profile URL.
  • Exports: JSON, CSV, Excel, XML, RSS, API, webhooks, and Apify integrations.
  • No login: reads only public data exposed to logged-out crawler traffic.

Who is it for?

  • Social media analysts comparing public Threads activity and engagement
  • Brand and PR teams monitoring public conversations and account posts
  • Creator marketers researching public profiles and content patterns
  • Developers connecting Threads datasets to APIs, schedules, webhooks, or AI agents

What does this Threads scraper do?

Mode Input Results
Profile details Handles or profile URLs Profile identity, bio, followers, verification, avatar
Profile posts Handles or profile URLs Profile row plus recent posts and engagement
Direct posts and replies Public post URLs Requested posts plus their visible reply window
Search Keywords or hashtags Recent matching public posts with engagement and media
Auto Any combination Processes profiles, post URLs, and searches in one run

Input examples

Recent posts from profiles

{
  "mode": "posts",
  "usernames": ["zuck", "instagram"],
  "maxPosts": 20,
  "includeProfile": true
}

Search Threads by keyword or hashtag

{
  "mode": "search",
  "searchQueries": ["artificial intelligence", "#marketing"],
  "maxPosts": 20
}

Get a post and its visible replies

{
  "mode": "post",
  "postUrls": ["https://www.threads.com/@zuck/post/DakyAavlKLZ"],
  "includeReplies": true,
  "maxRepliesPerPost": 20
}

Output example

{
  "itemType": "post",
  "profileUrl": "https://www.threads.com/@zuck",
  "username": "zuck",
  "displayName": "Mark Zuckerberg",
  "userId": "63055343223",
  "isVerified": true,
  "postId": "3937491905269768921",
  "shortcode": "DakyAavlKLZ",
  "postUrl": "https://www.threads.com/@zuck/post/DakyAavlKLZ",
  "text": "Today we're releasing...",
  "timestamp": "2026-07-09T14:00:34.000Z",
  "mediaType": "text",
  "mediaUrls": [],
  "likeCount": 2806,
  "replyCount": 708,
  "repostCount": 194,
  "quoteCount": 63,
  "isReply": false,
  "isRepost": false,
  "isQuotePost": false,
  "hashtags": [],
  "mentions": [],
  "externalUrls": [],
  "scrapedAt": "2026-07-22T11:29:03.928Z"
}

Input settings

Setting JSON key Description
Mode mode posts, profile, post, search, or auto
Usernames or profile URLs usernames Public handles, @handles, or Threads profile URLs
Legacy profile inputs profileUrlsOrUsernames Backward-compatible alias for existing tasks and API clients
Post URLs postUrls Direct public Threads post URLs
Search queries searchQueries Keywords or hashtags for public Threads search
Maximum posts maxPosts Requested post limit per username or search; public availability may be lower
Legacy maximum posts maxPostsPerProfile Backward-compatible alias for existing API clients and tasks
Include profile includeProfile Save a profile row in profile-post mode
Include replies includeReplies Save visible replies below direct post URLs
Maximum replies maxRepliesPerPost Reply-row limit per direct post
Posted at or after postedAfter Inclusive ISO 8601 timestamp filter
Posted before postedBefore Exclusive ISO 8601 timestamp filter
Proxy proxyConfiguration Automatic Apify Proxy routing by default, with one bounded direct fallback; named groups are used only when you select one your account can access

Common workflows

  • Brand monitoring: schedule profile-post and keyword searches to watch brand and competitor activity.
  • Creator research: compare followers, verification, posting cadence, content formats, and engagement.
  • Social listening: search product names, campaigns, executives, topics, and hashtags.
  • Conversation analysis: collect a known post and the public reply window below it.
  • Content datasets: export post text, media, timestamps, and engagement to CSV or a data warehouse.
  • AI pipelines: run the Actor through Apify API or MCP and summarize matching public conversations.

Tips for better results

  • Start with 1–5 targets and a result limit of 10–20.
  • Use mode: "profile" when you only need identity, bio, followers, and verification.
  • Use direct post URLs when replies are the main goal.
  • Search exact brand names and distinctive phrases; broad queries can be noisy.
  • Add postedAfter and postedBefore for recurring reporting windows.
  • Keep automatic Apify Proxy routing enabled for the most reliable shared-cloud route. Select a named proxy group only when your Apify account has access to it.

Limits and practical notes

Threads controls the public logged-out window. A profile currently exposes roughly its 15 most recent non-reply posts, and public search exposes a small recent result window. Setting a higher maxPosts does not invent unavailable history. Direct post pages can expose a larger visible reply window, but not every reply shown to a logged-in user is necessarily public to logged-out traffic.

Private, deleted, age-restricted, login-gated, or unavailable content is not returned. Threads can rotate internal public queries or rate-limit a route; the Actor uses automatic Apify Proxy routing, makes one bounded direct fallback when needed, and reports unavailable inputs in RUN_SUMMARY.

API usage

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({
  mode: 'posts',
  usernames: ['zuck'],
  maxPosts: 20,
  includeProfile: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

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={
    'mode': 'search',
    'searchQueries': ['artificial intelligence'],
    'maxPosts': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~threads-profile-posts-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"mode":"post","postUrls":["https://www.threads.com/@zuck/post/DakyAavlKLZ"],"includeReplies":true}'

MCP and AI agents

Use the official Apify MCP server with only this Actor enabled:

https://mcp.apify.com?tools=fetch_cat/threads-profile-posts-scraper

Claude Code:

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/threads-profile-posts-scraper"

JSON configuration:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/threads-profile-posts-scraper"
    }
  }
}

Example prompts:

  • “Get the latest public Threads posts from @zuck with engagement metrics.”
  • “Search Threads for my brand name and return the matching posts as a table.”
  • “Get this Threads post and summarize the visible replies.”
  • “Compare these five Threads creators by followers and recent-post engagement.”

Scheduling and integrations

Save the input as an Apify task and schedule it daily or weekly. Send new datasets through webhooks, Make, Zapier, Google Sheets, Slack, a data warehouse, or your own API. For monitoring, use a consistent date window and deduplicate exported rows by postId.

Support

If a run fails or output looks wrong, open an issue from the Actor page. Include the Apify run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL from Threads. Do not share private credentials, cookies, or non-public content.

Privacy and data handling

The Actor uses your supplied handles, URLs, search terms, filters, and limits only to fetch the requested public Threads data and write results to your Apify dataset and key-value store. FetchCat does not retain run data outside Apify storage or send it to advertising networks, data brokers, or model-training services.

Common questions

Questions and answers reused from the canonical actor README.

Does this require a Threads or Instagram account?

No. It reads public data available to logged-out crawler traffic and does not ask for cookies, credentials, or an API key.

Can it search Threads by keyword or hashtag?

Yes. Use mode: "search" and searchQueries. Threads exposes a limited recent public search window, so result counts may be below maxPosts.

Can it scrape replies?

Yes. Use direct post URLs with includeReplies: true. The Actor saves the requested post plus the visible public reply window.

Why did I receive fewer than maxPosts?

maxPosts is a ceiling, not a promise. Logged-out profile and search pages expose a limited recent window. The Actor returns everything honestly available within that window.

Can I export to CSV, Excel, or JSON?

Yes. Open the run dataset and choose CSV, Excel, JSON, XML, HTML, or another supported Apify format, or retrieve the rows through the API.