100 free credits on signup · no card required

Threads Search API

One keyword in. Clean JSON out.

Search public Threads posts by keyword and get back a list of matching posts as JSON — text, author handle, engagement counts and timestamps. Results are sorted recent-first, not by an opaque relevance score, so this reads as a keyword feed rather than a ranked page. One thing to know up front: Threads does not publish view counts for most posts, so there is no views field in the response.

Credits 4 / result
Input ?query=
Cache 15m–7d
Paging limit
GET · BEARER
Request composing…
Fresh when it matters
age-aware cache

Availability: Threads does not publish view counts for most posts, so `views` is omitted from responses. Reply threads and post transcripts are planned for v2.

Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="x1a2b3c x9k2m1 xdt5ytf" data-pressable-container="true"><div class="x78zum5 xdt5ytf"><div class="x9f619 x1n2onr6"><span class="x1lliihq x1plvlek"><span dir="auto" class="x1lliihq xjkvuk6">Everyone building ai agents keeps rediscovering the same three problems.</span></span></div><div class="x6s0dn4 x78zum5 xl56j7k"><div role="button" tabindex="0" class="x1i10hfl x1qjc9v5"><svg aria-label="Like" role="img" viewBox="0 0 24 24"><path d="M16.792 3.904..."></path></svg><span class="x17qophe">88.4K</span></div><div role="button" tabindex="0" class="x1i10hfl"><svg aria-label="Reply"></svg><span>2,314</span></div></div><time datetime="2026-07-07T09:40:00.000Z" class="x1rg5ohu">2h</time></div><script>requireLazy(["ServerJS"],function(f){f().handle({"__bbox":{"complete":true,"require":[["ScheduledServerJS"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 13 typed fields
{
"data": [
{
"id": "C2isac0P7c7",
"url": "https://www.threads.com/@zuck/post/C2isac0P7c7",
"text": "Everyone building ai agents keeps rediscovering the same three problems.",
"posted_at": "2026-07-07T09:40:00Z",
"metrics": {
"likes": 88410,
"replies": 2314,
"reposts": 1290,
"quotes": 214
}
}
],
"meta": {
"count": 2,
"limit": 20,
"item": "result"
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Whole posts, not just ids

An array of post objects, one per match. Each carries the post text, the handle that wrote it, four engagement counters (likes, replies, reposts, quotes), the publish timestamp, and two booleans telling you whether the post is itself a reply or a repost of something else. That last pair matters more than it sounds — a keyword feed on Threads is heavily diluted by replies, and you will usually want to filter on them.

02 Recent-first, not ranked

The search runs in recent mode. You are getting posts that recently matched your keyword, ordered by time, which is the right shape for monitoring and the wrong shape for finding the all-time best post about a topic. If you need the latter, sort the results yourself on likes after you have them.

03 limit is your cost control

Set limit to control how many posts come back; the default is 20. Billing is per returned post, not per call, so a limit of 100 is a 100-post decision, not a free one. Ask for what you will actually read. One call returns one batch of up to limit posts — there is no cursor, no page token and no way to ask for the next page, so limit is the whole depth control you get.

Field explorer Pick a key to see its type and the caveats.
string|null Nullable Per item
author

The poster's handle as a bare string, no leading @. This is a handle, not a nested object — follower counts and bio live on the Threads Profile API.

{
"id": "C2isac0P7c7",
"shortcode": "…",
"url": "https://www.threads.com/@zuck/post/C2isac0P7c7",
"text": "Everyone building ai agents keeps rediscovering the same three problems.",
"author": "…",
"likes": 88410,
"replies": 2314,
"reposts": 1290,
"quotes": 214,
"posted_at": "2026-07-07T09:40:00Z",
"is_reply": false,
"is_repost": false,
"media_type": "…"
}
Good fit

Reach for this when

  • Brand and product monitoring: run a keyword on a schedule, store shortcodes you have already seen, and alert on new ones.
  • Watching a topic or launch in the hours after it happens, where recency beats ranking and you want the raw stream.
  • Building a dataset of how a phrase, ticker or feature name gets discussed, with engagement attached so you can weight it.
  • Finding accounts worth following on a subject — pull a keyword, count which handles keep appearing, then look them up individually.
Different job?

There's an endpoint for that

  • You already know whose posts you want. Use the Threads Posts API with a handle; it is the right tool for one account's timeline and does not make you filter a keyword feed.
  • You want the account's bio, follower count or verification state — that is the Threads Profile API.
  • You want the replies under a specific post. Search returns reply posts that happen to match your keyword, not the reply tree of a post you name. Reply threads are planned for v2.
  • You are searching a different network. The X Search API and the Instagram Reels Search API cover those, with their own query behaviour.

Pricing

Start free, pay for what comes back

Each returned post is 4 credits — about 2¢ on the monthly plan. A default 20-post search runs ~40¢, and an empty search costs just 1 credit.

Estimate your bill
$13/ month
30 results/day × 4 credits × 365 days = 43,800 credits/yr, or $150/yr on the annual plan plus 32 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 43,800
Plan Annual $54/yr
Per result

Estimate only, on a full-year basis. 4 credits per returned result. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Threads does not publish view counts on most posts the way X or TikTok do. Rather than return a column that is null nine times out of ten, we leave it out of the response entirely. If your model needs impressions, Threads is not the platform to source them from.

Likes, replies, reposts and quotes are what you get. For reach-shaped analysis, quotes plus reposts is the closest available proxy, and it is a proxy, not a measurement.

Threads conversation is reply-heavy, and a keyword search returns replies alongside original posts. Both is_reply and is_repost are on every item so you can filter. A mention count that does not drop reposts will overstate volume, sometimes badly, because one viral post can reappear a dozen times under different handles.

Filtering happens after billing. You pay for the posts returned, including the ones you throw away, so a narrow keyword is cheaper than a broad one plus client-side filtering.

There are no boolean operators, no field prefixes, no exclusions. Pass a phrase and Threads decides what matches it. Multi-word queries behave loosely. If you need AND-style precision, run two narrow searches and intersect the shortcodes yourself.

Very rare keywords can legitimately return an empty array. That is a successful call with zero results, not an error — but it is still billed, because every successful call has a one-credit floor regardless of how many items came back. An empty search costs 1 credit, not 4 and not 0.

Responses are cached in the fast class, so re-running the same keyword inside the window returns from cache in milliseconds with x-cache: hit. Cache hits cost the same as fresh calls. For a monitoring loop that must not miss anything, pass fresh=true on the poll itself and let the incidental repeats hit cache.

id, url, media_type and the counters are all nullable — the upstream listing is thinner on some posts than others. text is null only on media-only posts. Write your parser to tolerate nulls rather than assuming a full row; a missing counter is a normal response, not a failed one.

Questions

Frequently asked

Send a GET to /v1/threads/search with a query parameter and your API key. You get back a JSON array of recent public posts matching that keyword. There is no Threads developer account to apply for and no OAuth step, because the endpoint reads public content logged out. Meta's own Threads API only reaches posts on accounts that have authorised your app.

4 credits per post returned. Credits are $0.005 each on monthly and $0.0045 on annual, so 20 posts costs about 40 cents at monthly pricing. Because billing is per result, the limit parameter is your cost control — set it to the number of posts you will actually process rather than leaving headroom.

Threads does not publish view counts publicly for most posts, so we do not return a views field. Documenting a column that would be null almost every time would be worse than leaving it out. Likes, replies, reposts and quotes are the four counters Threads does expose, and all four are in every response.

No. The query is a plain keyword or phrase, matched by Threads' own search, with no AND, OR, NOT or field prefixes. For an intersection, run two searches and match the shortcodes in your own code. For an exclusion, filter the returned text yourself — remembering that you are billed for posts before you discard them.

No, results come back recent-first. That is deliberate for a search API — the common job is monitoring, where a post from ten minutes ago matters more than a popular one from last month. If you want the highest-engagement posts for a keyword, request a larger limit and sort on likes or quotes after the response lands.

Not from this endpoint. Search returns posts that match your keyword, and some of those happen to be replies, flagged with is_reply. It does not return the reply tree beneath a post you specify. Reply threads and post transcripts are planned for v2. Until then, the reply count on each item tells you how much conversation exists without giving you the text.

Store the shortcode of every post you have processed and skip repeats. Shortcodes are stable per post, unlike the id field, which falls back to the shortcode when the upstream listing omits a numeric id. Also drop items where is_repost is true before counting; the same underlying post can surface repeatedly through different accounts.

Next

Pairs well with

Full Threads API reference →
/v1/threads/posts
Threads Posts API Recent public posts from a Threads account, newest first. 3 cr / post
/v1/threads/profile
Threads Profile API Public profile for a Threads account: follower count, bio, verification status, and profile link. 4 cr / profile
/v1/twitter/search
X/Twitter Search API Keyword and advanced-search over public posts on X. 2 cr / result
/v1/instagram/reels-search
Instagram Reels Search API Keyword search over Instagram reels. 3 cr / result

More Threads endpoints

/v1/threads/stats Engagement stats and text for a single Threads post: likes, replies, reposts, quotes, media, and author. 3 credits / post /v1/threads/profile Public profile for a Threads account: follower count, bio, verification status, and profile link. 4 credits / profile /v1/threads/posts Recent public posts from a Threads account, newest first. 3 credits / post

Try the Threads Search endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/threads/search
Get your free API key