Social media · Live on Apify

Threads Scraper: Posts, Profiles, Replies and Search

Get public Threads posts without login. Use a profile, a post link or a keyword. Each post has likes, replies, reposts and author data.

About $1.50 for 1,000 results$0.0015 per result + $0.002 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

postId4007137472223477566
codeDecNkzeCX8-
urlhttps://www.threads.com/@instagram/post/DecNkzeCX8-

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: zuck in Usernames. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Scrape public Threads posts with no login: the latest posts of a profile, one post with its replies, or the top posts for a keyword. Each post is one clean JSON row with text, date, likes, replies, reposts, media, the quoted post and the author with followers.

Good for

  • Track what a brand, creator or competitor posts on Threads, with likes, replies and reposts.
  • Collect a post and its replies for sentiment or discussion analysis.
  • Find top posts about a topic or hashtag.
  • Feed clean, typed Threads rows into an AI agent, a spreadsheet or a database.

Not a good fit

  • Only public data. No DMs, no private profiles, nothing that needs login.
  • No view counts, bios, followers lists or contact data.
  • Some large profiles are shown only to logged-in visitors. They return not_found. The Actor does not try to get around this.
  • Search returns the top ~25–30 posts per keyword. There is no "recent" search or date filter without login.
  • Replies: only the first page that Threads shows without login, usually 10–15 replies.
  • Counts are a snapshot at fetch time.

Who uses it

Social media managers

Track what brands and creators post on Threads.

Influencer agencies

Compare engagement per follower across creators.

Researchers

Collect a post and its replies for sentiment analysis.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.002Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Post$0.0015 (from $0.0012 on paid Apify plans)One Threads post row saved to the Dataset (profile post, target post, reply or search result).
Empty result$0.0005One input that returned no posts: a profile that does not exist, is private, has no posts or is shown only to logged-in visitors; a missing post; a search with no results.

Examples

  • One result: about $0.0035.
  • 1,000 results: about $1.50.
  • Every day 100 results, for 30 days: about $4.56 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,300 results.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Why not use the official Threads API?

The official API needs an app, a token and a review. It mostly reads your own account.

Why is there no view count?

Threads does not show views to logged-out visitors.

Why does a big profile return not found?

Some large profiles are shown only to logged-in users.

Do I need a Threads or Instagram account?

No. The Actor reads only public pages without login, cookies or tokens.

Are the counts live?

They are a snapshot at fetchedAt. Run again to refresh them.

Is the data complete?

It is what threads.com shows a logged-out visitor at fetch time. Deleted posts, private profiles and profiles that need login are not included, and some counts can be null.

Is scraping Threads allowed?

The Actor reads only public pages at a modest rate and does not log in or bypass any wall. Meta's terms limit automated collection. You are responsible for how you collect, store and reuse the content, including personal data and authors' rights.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Keep Mode on Profile posts and keep zuck in Usernames, or add your own.
  3. Keep Max posts per input at 20 (prefill and default).
  4. Click Start.
  5. Open the Posts view in the Output tab and check text, likes and author.followers.
Use cases
TaskInputYou getKey fieldsNext step
Brand or creator monitoringmode: profile, usernamesposttext, createdAt, likes, replies, repostsSchedule the Actor, export to Sheets
Discussion analysismode: post, postUrlspost with rolerole, text, replyToUsername, likesSentiment or topic analysis
Topic researchmode: search, queriesposttext, author.username, likes, urlAI summary, content ideas
Influencer shortlistmode: profile, usernamespost with authorauthor.followers, author.verified, likesCompare engagement per follower
Tips for better results
  • Use profile mode for the newest posts of an account.
  • Search gives top posts only, so use several keywords.
  • Expect about 10 to 15 replies per post without login.
Limits and good to know
  • Empty result: one per input that returned no posts: a profile that does not exist, is private, has no posts or is shown only to logged-in visitors; a missing post; a search with no results. It covers the requests made for that input
  • Actor start: charged by Apify once per run, per GB of memory. The default 512 MB counts as one
  • Free: error rows (Threads failed), duplicate posts and duplicate inputs
  • Up to 50 usernames, post URLs or keywords per run, and up to 500 posts per input
  • About 3,500 posts per run. In tests, 20 profiles × 200 posts gave 3,444 posts in 142 seconds. A bigger request stops at the Actor's internal time limit with PARTIAL and SAFETY_LIMIT, keeps the posts saved so far, and charges only for them. For more data, use several runs
  • A profile ends where its public feed ends, even if maxItems is higher
  • Search: top ~25–30 posts per keyword. Replies: the first page only, usually 10–15 per post

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. Some values are changed for privacy. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "postId": "4007137472223477566",
  "code": "DecNkzeCX8-",
  "url": "https://www.threads.com/@instagram/post/DecNkzeCX8-",
  "mode": "profile",
  "input": "instagram",
  "role": "profile_post",
  "author": {
    "username": "instagram",
    "fullName": "Instagram",
    "userId": "63404918397",
    "verified": false,
    "followers": 38354704,
    "profilePicUrl": "https://scontent-den2-1.cdninstagram.com/v/…"
  },
  "text": "@example_user made a whole retro wall phone by hand ☎️✨",
  "createdAt": "2026-10-13T16:14:12.000Z",
  "likes": 170,
  "replies": 10,
  "reposts": 6,
  "quotes": 1,
  "shares": 2,
  "mediaType": "video",
  "media": [
    { "type": "video", "url": "https://scontent-den2-1.cdninstagram.com/o1/v/…mp4?…", "width": 720, "height": 1280, "thumbnailUrl": "https://scontent-den2-1.cdninstagram.com/v/…jpg?…" }
  ],
  "quotedPost": null,
  "repostedPost": null,
  "isReply": false,
  "replyToUsername": null,
  "linkUrl": null,
  "linkTitle": null,
  "topic": null,
  "pinned": false,
  "fetchedAt": "2026-10-14T15:36:27.390Z"
}

Use it from code

Actor ID: cliqtomedia/threads-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/threads-scraper").call(run_input={
    "mode": "profile",
    "usernames": [
        "zuck"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~threads-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "profile", "usernames": ["zuck"]}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/threads-scraper")
result = tool.invoke({"run_input": {"mode": "profile", "usernames": ["zuck"]}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (28)
FieldTypeMeaning
statusstringcomplete = a post (one post event). not_found = unknown, private or empty input (one empty-result event). error = input failed (free).
statusReasonstringWhy a not_found or error row has no post.
errorCodestringMachine-readable reason, e.g. PRIVATE_PROFILE, NO_POSTS, NO_RESULTS, BLOCKED.
postIdstringThreads post ID.
codestringShort post code from the URL.
urlstringPost URL (or the input URL for not_found rows).
modestringMode of the run.
inputstringUsername, post URL or keyword this row came from.
rolestringprofile_post, search_result, target (the requested post), self_thread (author's thread continuation) or reply.
authorobjectusername, fullName, userId, verified, followers (profile mode only, else null), profilePicUrl.
textstringPost text.
createdAtstringPublish time, ISO 8601 UTC.
likesintegerLike count.
repliesintegerDirect reply count.
repostsintegerRepost count.
quotesintegerQuote count.
sharesintegerShare count.
mediaTypestringtext, photo, video, carousel or other.
mediaarrayPhotos and videos: type, url, width, height, thumbnailUrl. Media URLs are signed and expire after some days.
quotedPostobjectQuoted post: postId, url, username, text, createdAt.
repostedPostobjectReposted post: postId, url, username, text, createdAt.
isReplybooleanTrue when the post is a reply.
replyToUsernamestringUsername this post replies to.
linkUrlstringLink attached to the post (Threads redirect removed).
linkTitlestringTitle of the attached link.
topicstringTopic tag of the post.
pinnedbooleanPinned to the author's profile.
fetchedAtstringWhen the row was scraped, ISO 8601 UTC.
Input settings (7)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Mode requiredmodestring"profile"
Usernamesusernamesarray["zuck"]
Post URLspostUrlsarray
Search keywordsqueriesarray
Max posts per inputmaxItemsinteger20
Include replies (post mode)includeRepliesbooleantrue
ProxyproxyConfigurationobject{"useApifyProxy": true}

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure