Threads Search Scraper avatar

Threads Search Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Threads Search Scraper

Threads Search Scraper

Search public Threads posts without login. Export post text, author data, engagement metrics, media, hashtags, mentions, and public profile fields for monitoring, research, and analysis.

Pricing

from $4.00 / 1,000 results

Rating

1.7

(2)

Developer

Rush

Rush

Maintained by Community

Actor stats

6

Bookmarked

337

Total users

30

Monthly active users

2 days ago

Last modified

Share

Search public Threads posts by keyword or hashtag and export clean data for monitoring, research, trend tracking, and content analysis. No Threads login is required.

What It Helps You Do

  • Monitor public conversations around brands, products, competitors, and campaigns
  • Track recent or popular posts for social listening and market research
  • Collect engagement fields such as likes, replies, reposts, shares, and public view counts when available
  • Export author, profile, media, hashtag, mention, and link fields for analysis

How To Use

  1. Enter one or more keywords or hashtags
  2. Choose Top / Popular or Recent / Newest first
  3. Choose the maximum number of posts to collect for each keyword
  4. Optionally add a date range
  5. Start the Actor and export the results from the dataset

Input Example

{
"keywords": ["AI", "#startup", "台北 餐廳"],
"search_filter": "recent",
"max_posts": 50
}

Example With a Date Range

{
"keywords": ["OpenAI"],
"search_filter": "top",
"start_date": "2026-01-01",
"end_date": "2026-02-28",
"max_posts": 100
}

Input

FieldDescription
keywordsKeywords or hashtags to search, up to 20 per run. The # is optional.
max_postsMaximum posts per keyword, from 10 to 1000, so 3 keywords at 50 can return up to 150 rows. Actual results depend on public availability at run time.
search_filtertop for popular posts, or recent for the newest matching public posts.
start_dateOptional start date. Use YYYY-MM-DD, or a relative value such as 7 days meaning 7 days ago.
end_dateOptional end date. Use YYYY-MM-DD — a relative value here counts backwards from today too, which is rarely what you want as an end date.

Output

Each dataset row is one public Threads post. Common fields include:

FieldDescription
post_urlDirect URL of the Threads post
post_codeThreads post identifier
text_contentPost text
created_atPost timestamp when available
usernameAuthor username
user_idAuthor's stable account ID when available
display_nameAuthor display name
profile_urlAuthor profile URL
followers_countPublic follower count when available
bioPublic author bio when available
like_countLikes when available
reply_countReplies when available
repost_countReposts when available
quote_countQuotes when available
share_countShares when available
view_countPublic views when available
view_count_statusWhy a row has or does not have a view count: available, not_public_yet for a post that is still too new, or not_checked when the count could not be read for that post
has_mediaWhether media is attached
media_typeMedia type when available
media_urlPrimary media URL when available
media_urlsAll media URLs for carousel posts when available
hashtagsHashtags found in the post
mentionsMentions found in the post text
mentioned_accountsUsers the post mentions, each paired with their account ID
search_keywordKeyword or hashtag associated with the row
search_filterSort order used for the run
keyword_matchWhether the post appears relevant to the searched keyword
scraped_atWhen the row was collected

Output Example

Field names and value formats below are real; the values themselves are placeholders.

{
"record_type": "post",
"post_url": "https://www.threads.com/@public_account_name/post/ABC123",
"post_code": "ABC123",
"text_content": "Example public Threads post about AI research.",
"created_at": "2026-02-15T08:30:00+00:00",
"username": "public_account_name",
"user_id": "10000000000",
"display_name": "Public Account Name",
"profile_url": "https://www.threads.com/@public_account_name",
"followers_count": 12500,
"bio": "Public profile bio",
"like_count": 152,
"reply_count": 18,
"repost_count": 7,
"quote_count": 2,
"share_count": 4,
"view_count": 4200,
"view_count_status": "available",
"has_media": true,
"media_type": "photo",
"media_url": "https://example.com/image.jpg",
"media_urls": [],
"hashtags": ["AI"],
"mentions": ["mentioned_account_name"],
"mentioned_accounts": [{ "username": "mentioned_account_name", "user_id": "20000000000" }],
"search_keyword": "AI",
"search_filter": "top",
"keyword_match": true,
"scraped_at": "2026-02-18T12:00:00+00:00"
}

Dataset Views

  • Posts: post text, URL, date, author, media, and search fields
  • Engagement: likes, replies, reposts, quotes, shares, and public views
  • Authors: author fields attached to search results
  • Bio Links: public author bio links and contact fields when present

How to Read Run Results

Every run writes a short summary (the OUTPUT record) next to your dataset. Three fields tell you what you got:

  • collection_statuscomplete means the run delivered everything it found for your request. partial means something was left short.
  • result_quality — how complete the delivered rows themselves are. complete means the extra per-post signals were read as well; partial means some rows are missing one or more of them (a view count, for example). It is about the rows you received, not about how many.
  • reason — a short word for how the run ended, when one can be named. It appears both when a run came up short and when a search simply had nothing to return. A partial run occasionally has no reason to give, and the run message is then the better guide:
    • no_results — the keyword had no public matches. This comes with complete: nothing was missed, there was nothing there. Try a broader keyword or a different sort order.
    • details_incomplete — the public details of some posts could not be confirmed this run. Usually your posts arrive and only the extra signals (such as view counts) are missing; when none of the posts could be confirmed, the run says so rather than reporting an empty keyword.
    • temporarily_unavailable — the source was briefly unavailable partway through, so the run stopped early. Everything collected up to that point was delivered.
    • scraping_errors — one or more keywords hit an error; the others still delivered. Check failed_reasons for the keyword-by-keyword picture.
    • storage_incomplete / storage_unavailable — some or all results could not be saved. A new run collects from the beginning rather than continuing this one, and writes to its own dataset; within a run the same post is never written twice.
    • invalid_input — the run stopped before searching; the message explains what to change.
    • unexpected_error — something went wrong that the Actor could not put in any of the categories above. The run ends without delivering the remaining results.

For multi-keyword runs, failed_items lists any keyword that could not finish and failed_reasons gives each one a short cause: request_timeout and temporarily_unavailable mean that keyword was interrupted rather than empty; request_unavailable means the public search page could not be read for that keyword just then; save_unavailable / save_incomplete concern saving rather than searching; details_incomplete means the keyword's rows arrived but some extra signals did not; unexpected_error covers anything that did not fit the categories above.

A quiet keyword is not an error: a keyword with no public matches simply contributes zero rows, the run still succeeds, and the summary says so plainly.

Tips

  • Use short, focused keywords for broader discovery
  • Use recent for monitoring newer public conversations
  • Use date filters when you need a specific research window
  • Use keyword_match to separate posts that match your keyword from broader related results
  • Searching several keywords at once? Sort the exported created_at values for one combined timeline

Limitations

  • Threads can change what it shows publicly over time
  • Some posts are left out when their public details cannot be confirmed; others arrive with individual fields empty
  • Very new, deleted, private, restricted, or partially available posts may return incomplete fields
  • Search ranking may include broadly related posts, not only exact keyword matches
  • A keyword can return fewer rows than requested

Need Another Threads Workflow?

FAQ

Does this require a Threads login?

No. The Actor is designed for publicly accessible Threads data and does not require you to provide a Threads account.

Why did I get fewer results than requested?

Result count varies by keyword and by run. Try a broader keyword, a different sort order, or a wider date range.

Why are some fields empty?

Some posts and profiles expose only partial public data. Empty fields usually mean the information was not public or not available at collection time.

Are top and recent exact filters?

They reflect the public search ordering available at run time. recent prioritises the newest matching public posts, and some related older posts may still appear. When you search several keywords at once, sort the exported created_at values for one combined timeline.

Disclaimer

Use this Actor responsibly and ensure your usage complies with applicable laws, platform terms, and your organization's policies. Data availability and accuracy may vary over time.

Keywords: Threads Search Scraper, Threads keyword search, Threads hashtag search, Threads data scraper, Meta Threads scraper, Threads post extractor, Threads engagement metrics, Threads monitoring, Threads analytics, social listening, social media monitoring, competitor research, trend research, market research, brand monitoring, public Threads data, export Threads posts, OpenClaw, Claude Code, Gemini, Antigravity, Codex, ChatGPT