Skip to content

Threads Search Scraper — Keywords, Hashtags, Accounts

Try for free

Search Meta Threads by keyword or hashtag and get every public post as a row: text, author, time, likes, replies, reposts, images, videos, links and mentions. Top, recent and tag pages in one pass, deduplicated. Finds matching accounts too. No login, no browser.

Threads Search Scraper turns a keyword or a hashtag into rows of public Threads posts: text, author, time, likes, replies, reposts, quotes and shares, images and videos, links, mentions and hashtags. It reads the top, recent and tag result pages in one pass and removes duplicates, so a search returns what Threads actually shows a visitor — not one slice of it. It can also return the accounts behind a keyword instead of their posts. No login, no cookies, no browser.

One run of Threads Search Scraper: posts for a keyword with text, author and engagement.

Paste keywords or #hashtags, click Start, export as JSON, CSV or Excel — or call it from the API and from AI agents.

What is it for?

Threads' official API only covers your own account; this Actor reads the public pages Threads serves to any visitor, so any public post is in reach.

ModeYou giveYou get
Searchkeywords, #hashtagspublic posts from the top, recent and tag pages, deduplicated
Accountskeywordspeople and brands matching the keyword, optionally with full profile details

searchTypes decides which result pages are read (top, recent, tags), postedAfter cuts everything older than a date, and filterKeywords keeps only posts that contain one of your words.

What data does it return?

FieldExample
id, code, url3977518562965884838 · Dcy_A8pGo-m · https://www.threads.net/@zuck/post/Dcy_A8pGo-m
text, language"Muse Spark 1.3 is rolling out today…" · en
createdAt, timestamp2026-09-02T19:26:23.000Z · 1788377183
username, userId, fullName, isVerified, profilePicUrl, profileUrlzuck · 63055343223 · Mark Zuckerberg · true · …
likeCount, replyCount, repostCount, quoteCount, shareCount1453 · 196 · 148 · 28 · 78
viewCountthe views Threads prints under the post, read from the post's own page; null while Threads has not made them public yet (very new posts)
mediaType, imageUrl, videoUrl, images[], videos[]carousel · … · [{url,width,height,alt}] · [{url,thumbnail,hasAudio}]
hashtags, mentions, urls, linkPreview["ai"] · ["natgeo"] · ["https://…"] · {url, title, imageUrl}
isQuote, quotedPost, isRepost, repostedPostthe quoted or boosted post, inline
source, querysearch-top · search-recent · search-tag · the keyword that found the row

Account rows carry username, userId, fullName, biography, bioLinks, websiteUrl, emails and phones from the bio, followerCount, isVerified, isPrivate, profilePicUrl, profileUrl.

How much does it cost?

Pricing on scrape.ly: the event prices below are what this Actor charges. Platform usage (compute, proxy, browser) is billed on top at your plan rates.

Pay per row, no start fee, and error rows are free. There is no browser here, so platform usage is close to zero.

RowPrice
Post$0.002 — 1,000 posts for $2
Account match$0.002
Account with full profile details$0.004

Larger monthly plans get 10–30 % off.

Bulk export: what 50,000 posts actually cost

This Actor is built for bulk jobs — put hundreds of inputs into one run, or call it from the API on a schedule. There is no fee per run and no fee per page: you pay for the rows you keep, and error rows are free. That is what decides the bill once you pull a whole market rather than a single account.

How to search Threads

  1. Put your terms in 🔎 Keywords or hashtags — bali, #ai, a brand name, one per line.
  2. Pick the result pages in 🔎 Search result pages: top is what Threads ranks highest, recent is the live feed, tags is the hashtag page.
  3. Set 📅 Only posts after when you want new posts only — that turns a repeated run into monitoring.
  4. Switch 🧭 What to get to users to search accounts instead of posts.
  5. Click Start, then export as JSON, CSV or Excel, or read the dataset from the API.

⬇️ Input

{
  "mode": "search",
  "keywords": ["#ai", "artificial intelligence"],
  "searchTypes": ["top", "recent"],
  "maxPosts": 200
}

Brand monitoring, only what is new since a date.

Accounts instead of posts:

{ "mode": "users", "keywords": ["photographer"], "maxUsersPerKeyword": 50 }

Every input field

FieldWhat it does
modesearch — posts matching your terms. users — accounts matching them.
keywordsTerms or hashtags. #ai searches the hashtag page, plain words the post index.
searchTypesWhich result pages to read: top, recent, tags. Fewer pages, fewer duplicates.
startUrlsThreads search or tag URLs, when you already have the link.
maxPostsPosts per keyword. Billing is per row, so this is your budget per term.
postedAfterDrop anything older. The field that turns this into a monitor.
filterKeywordsSecond filter applied to the text: keep only posts that also contain one of these.
includeProfileAdd a profile row for each author — followers, bio, links, contacts.
maxUsersPerKeywordAccounts per term in users mode.
includeViewsFill viewCount from each post's page (on by default, no extra charge). Turn off for the fastest bulk runs.
maxItemsCeiling on rows for the whole run.

⬆️ Output

{
  "type": "post",
  "id": "3712...",
  "code": "DdRSOdDjetX",
  "url": "https://www.threads.net/@natgeo/post/DdRSOdDjetX",
  "username": "natgeo",
  "text": "The ocean holds…",
  "language": "en",
  "createdAt": "2026-09-14T18:20:11.000Z",
  "likeCount": 812,
  "replyCount": 40,
  "repostCount": 11,
  "quoteCount": 2,
  "hashtags": ["ocean"],
  "mentions": [],
  "urls": ["https://on.natgeo.com/…"],
  "imageUrls": ["https://…"],
  "videoUrls": [],
  "searchQuery": "#ocean",
  "searchType": "top",
  "scrapedAt": "2026-09-15T09:00:00.000Z"
}

searchQuery and searchType say which term and which result page produced the row — necessary when you search several keywords at once. Posts that fail arrive as type: "error" rows and are free.

Use cases

Brand and product monitoring

Search your brand name with postedAfter set to yesterday, schedule it daily, and you have a feed of every new mention with its engagement.

Hashtag and trend research

Read a hashtag's top and recent pages together to see both what performed and what is being posted right now.

Finding accounts in a niche

Users mode turns a keyword into a list of accounts with follower counts — the first step of any influencer shortlist.

Sentiment and language filtering

Every post carries language and its engagement counts, so you can cut to English-only posts above a like threshold before analysis.

AI agents and RAG

An agent asked "what are people saying about X on Threads" runs one search and reads the text fields straight off the rows.

🤖 For AI agents and LLM apps

Compact reference for agents calling this Actor through the scrape.ly MCP server or the API (freshowl21/threads-search-scraper).

Purpose: find public Threads posts or accounts for a keyword or hashtag, with engagement numbers attached.

Minimal input:

{ "mode": "search", "keywords": ["bali"], "maxPosts": 50 }

Behaviours an agent should know:

  • Threads returns fewer results for a rare term than maxPosts asks for. A short list is the platform's answer, not an error.
  • searchTypes decides the flavour: top for the posts that performed, recent for what is happening now.
  • Use postedAfter for anything time-sensitive; without it you get the whole index the search page offers.
  • filterKeywords narrows on the text after the search — the way to remove homonyms ("apple" the company vs the fruit).
  • Rows are deduplicated across search types, so a post ranked both top and recent is billed once.
  • includeProfile adds a separate, more expensive profile row per author. Leave it off unless you need contacts.

Use via API

Run this Actor from your own code or pipeline. Get your token in scrape.ly Console → Settings → API & Integrations. Every input field below has the same name as in the JSON tab of the input form.

Python

JavaScript

cURL (runs the Actor and returns the results in one call)

Limitations, stated plainly

  • What a logged-out visitor can see. Threads shows a slice of its index to visitors; this Actor reads that slice honestly rather than pretending to have the whole platform.
  • No date filter inside search. Threads has none, so postedAfter is applied to the results after they arrive.
  • An empty result explains itself. If nothing comes back, you get one free notice row saying whether Threads found nothing for your words or found posts that postedAfter / filterKeywords removed — with the counts.
  • Hashtags and plain words behave differently. #ai reads the tag page; ai reads the post index. Ask for both if you want both.
  • Replies and whole conversations are elsewhere — Threads Replies Scraper handles those.
  • Refusals. When Threads refuses a request, it is retried on a new address and then once through a residential proxy (DataImpulse, or the scrape.ly residential proxy billed at your plan rates when DataImpulse is unavailable). If Threads keeps refusing most of a run, the Actor pauses once, then stops instead of grinding: the keywords it did not get to are listed in the NOT_ATTEMPTED record and in the status message (not charged — run them again later). Refused pages are free error rows.

Integrations

Runs from the scrape.ly API, the Python and JavaScript clients, and from n8n, Make or Zapier through the scrape.ly app. Schedule it, push the rows into Google Sheets, Slack or a webhook, or let an agent call it through the scrape.ly MCP server.

Data sent outside scrape.ly

To collect the data, this Actor sends requests through a residential proxy provider (DataImpulse) and, as a last resort, a backup unblocking proxy service, which receive the Threads page addresses being requested. Only what is needed for the request is sent; no scrape.ly credentials, account data or results are shared.

❓ FAQ

Do I need a Threads account or cookies?

No. It reads the public search pages Threads serves to any visitor.

Why did I get fewer posts than I asked for?

Because the term has fewer public results. Broaden the keyword, add recent to searchTypes, or search several related terms in one run.

Can I filter by date?

Yes, with postedAfter. Threads itself offers no date filter, so the Actor applies yours to the results.

Do the results contain my keyword?

Yes — and if you add filterKeywords, rows that do not contain your words are dropped before you are billed.

Will I pay twice for the same post?

No. A post found on more than one result page is deduplicated inside the run.

Can I search hashtags and plain keywords together?

Yes. Put both in keywords; #tag goes to the tag page and plain words to the post index.

How do I find accounts rather than posts?

Set mode to users. You get one row per account with followers, bio and links.

Is scraping Threads search legal?

The Actor reads public pages at a normal rate without logging in, which is ordinary public-data collection. What you do with the data afterwards is on you.

Also known as

People look for this Actor as a Threads search scraper, Threads hashtag scraper, Threads keyword API, Threads brand monitoring tool, Threads mentions tracker and a Threads trend research tool.

Notes

Threads shows search results to logged-out visitors, and that is exactly what this Actor reads — public posts only. Private accounts are never opened. How many results a keyword has is Threads' decision, not ours: rare keywords return a handful of posts, and maxPosts caps the rest.

Need an account's own posts, its profile and contacts, or a whole conversation? Those live in Threads Profile Scraper, Threads Replies Scraper and the all-in-one Threads Scraper.

//From the blog\\

Latest articles

All articles

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.