AI Social API
Updated 2026-09-18 · Chad

3 Ways to Scrape Threads Posts by Keyword: the Official API's Real Limits, Rolling Your Own Scraper, or an Apify Actor

In one line: Threads does have an official keyword search API, but it comes with three real hurdles — Meta App Review, a 2,200-query rolling 24-hour cap, and response fields that carry zero engagement data. Rolling your own scraper gives you the most control but the most upkeep. A ready-made Apify actor skips login and tokens entirely, costs $0.005 per result, and ships full like/repost counts. Here’s how the three routes actually compare.

This post contains Apify affiliate links (no extra cost to you). Costs and comparisons are stated honestly, including where Apify is not the best fit.

“Threads has no search API” is outdated — but the real hurdles are real

Threads crossed 400 million monthly active users in August 2025 (per Instagram head Adam Mosseri, reported by TechCrunch). At that scale, anyone doing brand monitoring, competitor tracking, or influencer research runs into the same question: how do I pull Threads posts by keyword?

A lot of write-ups still claim Threads has no public search API and that scraping is your only option. That’s out of date: the official Threads API ships a keyword_search endpoint that searches public posts by keyword. But it comes with limits spelled out in the docs — you need App Review approval before it returns anything beyond your own posts, every user token is capped at 2,200 queries per rolling 24 hours, and the response fields don’t include likes, reposts, or view counts.

So whether the official API works for you depends entirely on what you’re trying to do with the data. In practice there are three routes — here’s the comparison table first.

The three routes, side by side

Route 1: Official Threads APIRoute 2: Roll your own scraperRoute 3: Ready-made Apify actor
Getting startedMeta developer account + app + pass App Review for threads_keyword_searchEngineering time (client-rendered pages, undocumented endpoints, anti-bot)Sign up for Apify, paste a JSON input, done in minutes
Query volume2,200 queries per rolling 24 hours per user token; 25 results by default, 100 max per call (official docs)You control it, but rate limits and blocks are on youUp to 100 keywords per run, up to 500 posts per keyword
Engagement data (likes/reposts/views)❌ Not in the response fieldsDepends how deep you scrape and how well you maintain it✅ Likes, replies, reposts, shares, views, quotes all included
CostNo published API fee; the cost is the App Review process and dev timeEngineer hours + proxy bills$0.005 per result (50 posts ≈ $0.25; pricing on the store page)
MaintenanceMeta maintains it; stableEvery Threads front-end change is on youMaintained by the actor’s author
Best forProduct teams already running a Meta developer pipelineTeams with engineering resources who want full controlMarketing/listening/research teams who need speed and engagement data

Here’s each route in more detail.

The official path (full docs here):

  1. Create an app in Meta for Developers and connect the Threads API.
  2. Get the threads_basic and threads_keyword_search permissions. threads_keyword_search needs to pass App Review before it can search public posts — until it does, the endpoint only returns posts from your own account.
  3. With a user access token in hand, call:
curl -s -X GET \
  -F "q=your search term" \
  -F "search_type=RECENT" \
  -F "fields=id,text,media_type,permalink,timestamp,username" \
  -F "access_token=<THREADS_ACCESS_TOKEN>" \
"https://graph.threads.net/v1.0/keyword_search"

The documented limits:

That last point is the deciding factor: if what you actually need is sentiment ranking (which post has the most reach), influencer performance (which post blew up), or competitor content analysis (which format gets the most engagement), search results with zero engagement data can’t get you there. The official API fits an alerting use case — “just tell me who’s talking about what” — for a team that’s already comfortable with Meta’s developer approval process.

Route 2: roll your own scraper

The most flexible route, and the one with the highest hidden cost. From the experience of maintaining a Threads scraper myself:

Building this once as a learning project is fine. But if this pipeline needs to feed a report or a customer every day, the real cost isn’t the first version of the code — it’s chasing every subsequent site change. Budget for that honestly before committing to this route.

Route 3: a ready-made Apify actor, running in five minutes

The third route is using a scraper someone else already maintains. Take threads-feed-scraper — the actor I publish and run myself (118 users, 4.89★ as of writing, both figures live on the store page) — its “search” mode is built for exactly this: no login, no API token, no App Review, just paste this input in the Apify Console and run it:

{
  "mode": "search",
  "keywords": ["your-brand", "your-competitor"],
  "searchSort": "recent",
  "dateFrom": "7 days",
  "maxPosts": 100
}

A few practical notes (field definitions follow the actor’s own input schema):

Cost is $0.005 per result, billed on what actually gets returned (pricing on the store page): 50 posts is $0.25, a full 500-post pull is $2.50. Once the data’s in hand, wiring it into an automated alert pipeline is a separate step — our n8n walkthrough covers exactly that, end to end.

Pick a route and start

FAQ

Does Threads actually have an official search API? Yes. The keyword_search endpoint lets you search public posts by keyword, but you need Meta App Review approval for the threads_keyword_search permission (without it, the endpoint only returns your own posts), you’re capped at 2,200 queries per rolling 24 hours, and the response fields don’t include likes, reposts, or any other engagement metric.

Is the official API’s 2,200-query cap enough? Depends on the use case. For simple alerting — checking a handful of keywords every hour — it’s plenty. But each call returns at most 100 posts and no engagement data, so it doesn’t work for ranking posts by reach or backfilling history.

Why does a multi-word keyword return zero results? Threads search matches the whole string as one phrase. A compound term often returns nothing until you split it into separate single-concept keywords and query them individually. That’s an observed behavior on the actor’s side (see its input schema notes); Meta hasn’t documented how keyword_search itself matches terms, so the same behavior is a reasonable assumption (same underlying search backend) but not officially confirmed.

Does the actor’s data include likes and view counts? Yes. Output includes likeCount, replyCount, repostCount, shareCount, viewCount, and quoteCount — that’s the biggest practical difference versus the official keyword_search endpoint.

Do I need a Threads account or API token to use the actor? No. It reads public page content, so there’s no login, no Meta developer account, and no access token required.

Is scraping like this legal? We only scrape public content, never anything behind a login, and we don’t store personal data beyond what a public page already shows. Before using any of these three methods, check that your use case complies with your local laws and the platform’s terms.

Further reading


Chad runs 40+ published Apify actors, including threads-feed-scraper used above (118 users, 4.89★ as of writing, both figures live on the store page). Every limit number for the official API links to Meta’s own docs; nothing here is written without a source to check it against.