Threads Keyword Search
Last updated October 31, 2026
Search Threads by keyword and get one row per post that contains it: text, author, date, likes, replies, reposts, and the post link. Exact phrase matching, deduped across keywords, only new posts on a schedule. No login or key. CSV or Clay ready.
Features
- Up to 50 keywords per run.
- A post is kept only when your keyword is in its text, and posts set aside aren't charged.
- A post found by several keywords comes back once.
- Only new posts on a schedule, plus one free summary row per keyword.
- Pay per event: Post row at $0.0025.
Input
keywordsarrayoptionalWords or phrases to search Threads for, one per line. Up to 50 per run. A post found by several keywords is returned once, with every keyword it matched in matched_keywords. A run with no keyword returns one free row that says so.
max_posts_per_keywordstringoptionalAt most this many posts per keyword, up to 50. Threads shows a visitor who is not logged in one page of about 20 to 25 results per search, so a keyword rarely returns more than that.
match_modestringoptionalphrase (default): keep a post only when the keyword's words are in its text, next to each other and in order (case and punctuation ignored, so cold email matches Cold-emails). all_words: keep a post when every word of the keyword is in its text, in any order. off: keep every post Threads returns. Posts set aside are not charged.
since_daysstringoptionalOptional. Set aside posts older than this many days. 0 or empty: no date limit.
min_likesstringoptionalOptional. Set aside posts with fewer likes than this.
include_repliesstringoptionalOn (default): replies that match are returned too, with is_reply true. Off: only top level posts.
only_newstringoptionalOn: a post an earlier run already returned for the same keywords (or the same state key) is skipped and not charged, so a scheduled run returns only new posts. The ids are kept in a key-value store in your own Apify account. Off (default): every post is returned.
state_keystringoptionalOptional. A name for the only new posts memory, so two schedules keep separate memories.
max_charge_usdstringoptionalOptional. The run stops before a charge that would pass this amount. Summary rows are always returned.
proxy_modestringoptionalauto (default): searches go through the Apify proxy pool, and a search the pool cannot get through is retried on residential addresses. residential: every search uses residential addresses. A reliability setting only; it does not change what you pay.
Output schema
{
"row_type": "string",
"keyword": "string",
"matched_keywords": "array",
"match_type": "string",
"post_id": "string",
"post_code": "string",
"post_url": "string",
"text": "string",
"author_username": "string",
"author_full_name": "string",
"author_is_verified": "boolean",
"author_profile_url": "string",
"published_at": "string",
"like_count": "integer",
"reply_count": "integer",
"repost_count": "integer",
"quote_count": "integer",
"media_type": "string",
"link_url": "string",
"is_reply": "boolean",
"is_new": "boolean",
"posts_found": "integer",
"rows_delivered": "integer",
"skipped_seen": "integer",
"skipped_filtered": "integer",
"row_status": "string",
"error_reason": "string",
"billable_events_json": "string",
"scraped_at": "string"
}Pricing
| Event | Free plan price |
|---|---|
| Post row | $0.0025 |
| Actor Start | $0.0015 |
Pay per event on the Apify platform. Paid Apify plans pay less per event. No subscription, no seat license.
On the Apify free plan the actor stops at $1.50 of charges a month, about 600 post rows. Any paid Apify plan removes the cap.
Limits
- About 20 to 25 posts per keyword per run: Threads shows a visitor who is not logged in one page of results, ranked by Threads, not newest first.
- Some short or unusual keywords return no posts to a visitor who is not logged in, even when posts with those words exist.
- Like, reply, and repost counts are read at the time of the run.
- Posts from private profiles are not shown by Threads search, so they are not returned.