Threads Scraper: Posts, Profiles & Search avatar

Threads Scraper: Posts, Profiles & Search

Pricing

from $0.10 / 1,000 result extracteds

Go to Apify Store
Threads Scraper: Posts, Profiles & Search

Threads Scraper: Posts, Profiles & Search

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

Pricing

from $0.10 / 1,000 result extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

7 days ago

Last modified

Share

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.

Ready-to-run examples

What does this Threads scraper do?

ModeInputResults
Profile detailsHandles or profile URLsProfile identity, bio, followers, verification, avatar
Profile postsHandles or profile URLsProfile row plus recent posts and engagement
Direct posts and repliesPublic post URLsRequested posts plus their visible reply window
SearchKeywords or hashtagsRecent matching public posts with engagement and media
AutoAny combinationProcesses 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

SettingJSON keyDescription
Modemodeposts, profile, post, search, or auto
Usernames or profile URLsusernamesPublic handles, @handles, or Threads profile URLs
Legacy profile inputsprofileUrlsOrUsernamesBackward-compatible alias for existing tasks and API clients
Post URLspostUrlsDirect public Threads post URLs
Search queriessearchQueriesKeywords or hashtags for public Threads search
Maximum postsmaxPostsRequested post limit per username or search; public availability may be lower
Legacy maximum postsmaxPostsPerProfileBackward-compatible alias for existing API clients and tasks
Include profileincludeProfileSave a profile row in profile-post mode
Include repliesincludeRepliesSave visible replies below direct post URLs
Maximum repliesmaxRepliesPerPostReply-row limit per direct post
Posted at or afterpostedAfterInclusive ISO 8601 timestamp filter
Posted beforepostedBeforeExclusive ISO 8601 timestamp filter
ProxyproxyConfigurationOptional Apify Proxy route for blocked or rate-limited runs

Output fields

GroupFields
Record identityitemType, sourceUrl, scrapedAt
Author/profileusername, displayName, userId, isVerified, profileUrl, bio, followerCount, avatarUrl
Post identitypostId, shortcode, postUrl, parentPostId, rootPostId
Contenttext, timestamp, mediaType, mediaUrls, hashtags, mentions, externalUrls
EngagementlikeCount, replyCount, repostCount, quoteCount
ClassificationisReply, isRepost, isQuotePost, replyToId
SearchsearchQuery

Pricing

This Actor uses pay-per-event pricing. You pay a small start fee and for each profile, post, reply, or search-result row saved to the dataset.

EventWhat is chargedFreeStarter / BronzeScale / SilverBusiness / GoldPlatinumDiamond
startOnce per run$0.005$0.005$0.005$0.005$0.005$0.005
resultEach saved dataset row, per 1,000$0.1864$0.16209$0.12643$0.09725$0.06484$0.04538

Proxy traffic, storage, and other Apify platform usage may add cost depending on your account and configuration. Error and status information is stored in RUN_SUMMARY, not charged as dataset rows.

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.
  • Enable Apify Proxy only if the direct crawler route is rate-limited; proxy traffic can add cost.

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 falls back to server-rendered public data and reports unavailable inputs in RUN_SUMMARY rather than silently returning a misleading empty success.

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.

FAQ

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.

What happens when one target fails?

Valid targets continue. The Actor preserves their rows, records the unavailable target and reason in RUN_SUMMARY, and fails the whole run only when no requested input produces public data.

Responsible use

Only collect public data you are permitted to use. Respect Threads terms, privacy rights, applicable law, and reasonable request rates. Do not use the output for spam, harassment, discrimination, or sensitive profiling.

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.