Threads Scraper - Posts, Profiles & Search avatar

Threads Scraper - Posts, Profiles & Search

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Threads Scraper - Posts, Profiles & Search

Threads Scraper - Posts, Profiles & Search

Search Threads posts by keyword, or grab any profile's posts, replies and reposts. Export engagement, views when available, and media. No login.

Pricing

from $2.50 / 1,000 results

Rating

4.2

(19)

Developer

Rush

Rush

Maintained by Community

Actor stats

49

Bookmarked

6.1K

Total users

1.4K

Monthly active users

4.7 days

Issues response

4 hours ago

Last modified

Share

Threads Scraper - Posts, Reposts, Replies, Profiles & Search

Search public Meta Threads posts by keyword, collect an account's public posts, reposts or replies up to your selected limit, or find profiles by keyword. No login required. Export posts, media, public engagement metrics, and public profile data.

Before you start: Threads changes its public pages from time to time, and a change can briefly affect what any tool can collect until it is adjusted. Run a small sample first, check the output, then scale up. Results reflect what Threads shows publicly at the time of the run.

What You Can Do With It

  • Brand & Mention Monitoring: watch brands, product terms, topics and campaigns as fresh public posts appear
  • Competitor Analysis: compare public engagement across competitor accounts and posts
  • Influencer Discovery: find creators by keyword or niche, with public follower counts
  • Lead Generation: build account and prospect lists from public profile information
  • Trend & Content Analysis: collect posts on a topic, hashtag, or campaign for downstream analysis
  • Market Research: gather public posts on a product or category to read the conversation
  • Date-bounded Research: narrow a search to a specific date range for time-sensitive work

Choose Your Workflow

GoalUse this modeWhat you enter
Collect posts from one or more accountsuserThreads usernames or profile URLs
See what an account boosted, and whenuser_repostsThreads usernames or profile URLs
Read the replies an account wroteuser_repliesThreads usernames or profile URLs
Search public posts by topicsearchKeywords or hashtags
Discover account matches by keywordprofilesKeywords, niches, or local phrases
Monitor fresh public mentionssearch + recentBrand, topic, or competitor keywords
Research a specific date rangesearch + date filtersKeyword plus start/end date

Ready-Made Examples

Each one is a pre-configured run you can start and then edit. Browse them all on the Examples tab.

ExampleWhat you get
See which of your Threads posts perform bestYour posts with likes, replies, timestamps, and views when public, ready to sort
Find competitors' best-performing Threads postsSeveral competitor accounts side by side in one export
Turn a Threads account into an AI knowledge baseClean structured text with timestamps for a RAG pipeline
Audit a brand's most relevant Threads mentionsBrand mentions with public engagement fields and a keyword-relevance flag
Find creators posting about your nicheAccounts with followers, bio and profile links
See what people said about a product this weekThe last 7 days of posts, newest first
Look up Threads accounts matching a keywordAn account shortlist with follower counts

How To Use

Input Configuration

ParameterTypeDescriptionExample
modestringScraping mode: user, user_reposts, user_replies, search, or profiles (the shorter reposts / replies also work)"user"
usernamesarrayTarget usernames (for User Posts, Reposts and Replies modes, max 20). Accepts bare name, with @, or full Threads URL.["zuck", "@nike", "https://threads.com/@meta"]
keywordsarrayKeywords or hashtags (required in Search and Find Profiles, optional in the three user modes to tag matching rows, max 20)["AI", "tech"]
search_filterstringSearch mode only. top shows Threads-ranked relevant results. recent prioritizes newest matching public posts."top"
search_languagestringSearch mode only, optional (beta). english (default), japanese or chinese (Traditional). Returns more posts written in that language and fewer of the rest. Many keywords will not change at all."english"
start_datestringSearch mode only. Show posts from this date onward (YYYY-MM-DD or "7 days"). Dates are counted in UTC."7 days"
end_datestringSearch mode only. Show posts up to this date (inclusive); relative values count back from today. Dates are counted in UTC."2026-08-25"
max_postsnumberResults per user or search keyword (10-10000). In User Posts, high limits need enough public posts on that account. In Search, this is a cap and available public results may be lower. Find Profiles returns up to 10 account matches per keyword and this setting does not raise that cap.50

Note: Date options, sort order and preferred language apply to Search mode only. Leaving one set while you run another mode is fine: it is ignored and the run proceeds normally.

Mode 1: Scrape User Posts (with Profile Data)

Extract posts and available public profile information from a specific user:

πŸ“Ί Video tutorial: See Which Threads Posts Get More Views | Apify Tutorial

{
"mode": "user",
"usernames": ["zuck"],
"max_posts": 50
}

Optional: flag a user's posts by keyword

Add keywords in User Posts, User Reposts or User Replies mode to flag which returned rows mention your terms in their text, topic tag or link preview title. Nothing is removed; each row gets a keyword_match value you can filter later.

{
"mode": "user",
"usernames": ["zuck"],
"keywords": ["AI"],
"max_posts": 100
}

Batch Scraping Multiple Users

Scrape posts from multiple users in one run (up to 20 usernames):

{
"mode": "user",
"usernames": ["zuck", "instagram", "nike"],
"max_posts": 50
}

This returns:

  • Available public bio and follower count
  • Contact information extracted from bio (emails, phones, links)
  • Recent public posts with engagement metrics when publicly available (likes, replies, reposts, shares, views)
  • Profile verification status
  • Media attachments
  • Mentions and hashtags: mentions lists usernames found in the text, while mentioned_users and mentioned_accounts list the accounts the platform itself resolved as tagged; the two can differ on a given post

Mode 2: Search Posts by Keyword or Hashtag

Find public posts about a keyword or hashtag. Result volume depends on what Threads shows publicly for that term at run time.

πŸ“Ί Video tutorial: Find Potential Customers in Threads Discussions | Apify Tutorial

Tip: Include or omit the #: both AI and #AI work. Very specific or cross-language phrases may return fewer public results.

Understanding Search Filters

FilterBest ForWhat You Get
Top (top)Discovering notable contentThe posts Threads surfaces as most relevant for that term. Row order is not a popularity ranking.
Recent (recent)Monitoring new activityPrioritizes newest matching public posts; sort created_at descending for one combined timeline

Preferred Result Language (beta, optional)

Some keywords are used by people writing in more than one language, so the results arrive mixed together. Pick a language here and you get more of the posts written in it, and fewer of the rest.

When it helpsWhen it changes nothing
The same keyword is typed the same way in another language: a product name in Latin letters, or a word Chinese and Japanese write with the same charactersA keyword only one language uses, which already returns that language

Leave it on english to keep the behaviour you have today. Many keywords come back unchanged.

{
"mode": "search",
"keywords": ["ζ—…θ‘Œ"],
"search_language": "chinese",
"max_posts": 50
}

Top Results

{
"mode": "search",
"keywords": ["artificial intelligence", "#startup"],
"search_filter": "top",
"max_posts": 50
}

Recent Posts

{
"mode": "search",
"keywords": ["AI"],
"search_filter": "recent",
"max_posts": 50
}

Mode 3: Find Profiles (Discover Account Matches by Keyword)

Discover public Threads account matches for a keyword. Each keyword can return up to 10 accounts with public profile fields such as follower count, bio when present, links, and extracted contacts. Some keywords may return fewer than 10. Use related keywords to discover more accounts: an account matched by two of your keywords is still delivered once.

{
"mode": "profiles",
"keywords": ["coffee roaster", "specialty coffee"]
}

Output rows are account profiles (not posts), with key fields such as username, display_name, bio, followers_count, is_verified, profile_url, external_links, emails, phones, and search_keyword. Empty bio/contact fields can mean the account did not publish that information.

Every row includes record_type: post for User Posts, Reposts, Replies and Search rows, and profile for Find Profiles rows.

Local search tip: For local account discovery, include the place name in the keyword (e.g. Brooklyn coffee rather than only coffee).

Mode 4: Scrape User Reposts

(beta) Reposts and Replies are newer than the other three modes and are labelled beta in the input form. Every row carries the same columns as User Posts; in this mode the ones described below are the ones that get filled in. A run can occasionally return fewer rows than the account has; when that happens the run summary says so, and you can run it again.

Collect the posts an account boosted, rather than the posts it wrote:

{
"mode": "user_reposts",
"usernames": ["natgeo"],
"max_posts": 50
}

Each row is the original post, with its own author and engagement fields, plus three columns saying who boosted it and when: reposted_by_username, reposted_by_user_id and reposted_at.

If two of the accounts you asked for boosted the same post, you get one row per account, not one row in total.

Mode 5: Scrape User Replies

(beta) As with Reposts: the same columns as User Posts, with the ones below filled in for this mode, and a run can occasionally return fewer rows than the account has.

Collect the public replies an account wrote:

{
"mode": "user_replies",
"usernames": ["mosseri"],
"max_posts": 50
}

Each row is the account's own reply, with the same fields any other post row carries. When the conversation shows which post was answered, the row also carries that post: its code, link, author and text (replied_to_* columns). Not every conversation shows it, so on some accounts most replies arrive without it, and replied_to_available tells you row by row.

This mode collects the replies an account wrote, wherever it wrote them. If you want the other direction, the comment thread under one specific post, that is a different tool: Threads Replies Scraper.

Rows from all three user modes carry source_tab (posts, reposts or replies); Search rows leave it empty. So a combined export stays sortable by where each row came from.

Periodic Topic Monitoring

If you want to monitor keywords on a schedule (for lead generation, brand-mention tracking, or competitor monitoring), pair mode: "search" with search_filter: "recent" and run the actor automatically:

{
"mode": "search",
"keywords": ["YOUR_KEYWORD_1", "YOUR_KEYWORD_2"],
"search_filter": "recent",
"max_posts": 30
}

Suggested workflow

  1. Schedule the actor: Use Apify Schedules to trigger regular runs.
  2. Review each run's dataset: every post includes a unique identifier and timestamp.
  3. Handle your own downstream workflow:
    • Deduplicate against your existing records using each post's unique identifier
    • Optionally filter by post timestamp to keep entries within your time window
    • Trigger your own notifications or follow-up workflow
    • Append new entries to your workspace or spreadsheet

Tips

  • Each run returns a finite batch of matching public posts. For high-volume keywords, review the returned timestamps and adjust your schedule to match your monitoring needs.
  • Runs are independent: the same post can appear again in a later run, which leaves deduplication and retention entirely in your hands.

Date Filtering (Search Mode Only)

Narrow search results to a date range. The range can be a recent window (for example the last 7 or 30 days) or an earlier period. Both relative dates ("7 days", counted back from today) and absolute dates (YYYY-MM-DD) are accepted.

{
"mode": "search",
"keywords": ["AI"],
"search_filter": "recent",
"start_date": "7 days",
"max_posts": 50
}

Output Format

Viewing Your Data

Use the field-focused dataset views to inspect posts, profiles, engagement fields, or contact fields. Some views are most useful for specific modes. Switch to "All fields" when you need the complete record.

  • 🧡 Posts: post content, dates, author, media flags, and search fields
  • πŸ“Š Engagement: likes, replies, reposts, shares, views, and analysis flags
  • πŸ‘₯ Profiles: accounts found in Find Profiles mode
  • πŸ”— Contacts: public profile links and contact fields

Image and video links: media_url, media_urls and the profile picture fields point at Threads' own media servers, and those links stop working a few days after the run. Download the files you want soon after the run finishes, or run it again to get fresh links. The post and profile links (post_url, profile_url) do not expire.

Complete Post Record Example

Each post is saved as a separate record. Below is an illustrative example of the fields from user mode. The account, URL, text, dates, and numbers are fictional placeholders.

{
"record_type": "post",
"post_url": "https://www.threads.com/@example_creator/post/EXAMPLE01",
"post_code": "EXAMPLE01",
"text_content": "Launching a new research note today...",
"created_at": "2026-01-12T18:00:30+00:00",
"created_at_display": "2026-01-12 18:00 UTC",
"created_at_timestamp": 1768240830,
"like_count": 268,
"reply_count": 81,
"repost_count": 12,
"quote_count": 4,
"share_count": 22,
"view_count": 41651,
"view_count_status": "available",
"has_media": false,
"media_type": "text",
"media_url": "",
"media_urls": [],
"media_width": null,
"media_height": null,
"has_audio": null,
"music_artist": "",
"music_title": "",
"music_song_id": "",
"poll_options": [],
"poll_votes": [],
"poll_total_votes": null,
"poll_is_closed": null,
"is_ai_generated": false,
"is_gif": false,
"is_sticker_post": false,
"sticker_count": 0,
"sticker_ids": [],
"sticker_urls": [],
"hashtags": [],
"mentions": [],
"urls": [],
"is_pinned": false,
"is_edited": false,
"is_paid_partnership": false,
"accessibility_caption": "",
"is_reply": false,
"reply_to_username": "",
"reply_control": "everyone",
"is_quote_post": false,
"quoted_post_url": "",
"is_repost": false,
"reposted_post_url": "",
"repost_code": "",
"repost_url": "",
"reposted_by_username": "",
"reposted_by_user_id": "",
"reposted_at": "",
"replied_to_post_code": "",
"replied_to_post_url": "",
"replied_to_author_username": "",
"replied_to_author_user_id": "",
"replied_to_text": "",
"replied_to_created_at": "",
"replied_to_available": null,
"replied_to_like_count": null,
"replied_to_reply_count": null,
"replied_to_repost_count": null,
"replied_to_quote_count": null,
"replied_to_share_count": null,
"conversation_id": "",
"source_tab": "posts",
"is_spoiler": false,
"language": "",
"topic_tag": "",
"location_name": "",
"location_id": "",
"link_title": "",
"mentioned_users": ["example_partner"],
"mentioned_accounts": [{ "username": "example_partner", "user_id": "10000000002" }],
"scraped_at": "2026-04-25T10:00:00+00:00",
"username": "example_creator",
"requested_username": "example_creator",
"user_id": "10000000001",
"display_name": "Example Creator",
"profile_url": "https://www.threads.com/@example_creator",
"is_verified": true,
"followers_count": 54000,
"bio": "Research notes and product updates",
"profile_pic_url": "https://...",
"profile_pic_hd_url": "https://...",
"fediverse_enabled": true,
"external_links": ["https://example.com"],
"emails": [],
"phones": [],
"bio_links": [],
"profile_tags": ["AI", "Tech"],
"podcast_name": "",
"podcast_url": "",
"podcast_platform": "",
"search_filter": null,
"search_keyword": null,
"search_keywords": [],
"keyword_match": null
}

In Search mode, search_keyword remains the first selected keyword for backward compatibility, while search_keywords lists every input keyword that independently selected that deduplicated row. keyword_match is true when the post's text, topic tag or link preview title contains at least one of those selected keywords: as typed, written without spaces, or, for a keyword of several words, with every one of those words somewhere in the same field. A keyword is listed only when it actually selected that row for delivery. In the three user modes, search_keywords is empty; search_filter stays null, and search_keyword plus keyword_match are null unless you supply keywords to tag matching rows.

If a later Search or Find Profiles keyword turns out to match a row that was already saved, Run Results includes keyword_membership_updates. Match the Dataset row using the entry's match_field and match_value, then add its added_keywords to your analysis. For a username match, compare without case. This preserves every keyword relationship without creating a duplicate Dataset row.

The same rule applies when two User Posts, Reposts or Replies inputs resolve to the same saved result, such as an old handle and its renamed handle. Run Results includes input_membership_updates: match the Dataset row with all fields in match_fields, then add added_usernames to your input-to-result mapping. The Dataset still contains one physical row.

User Posts, Reposts and Replies also include requested_username, the account you asked for. In User Posts and Replies it matches username, the author of the row. In User Reposts it does not: the row is the original post, so username is that post's author while requested_username is the account whose reposts you asked for. In all three modes, if Threads redirects an old handle after an account rename, requested_username keeps your original input.

What To Expect

Result availability

  • Result volume depends on how much public content exists for your query, so different modes and queries return different amounts.
  • If a run looks lighter than expected, open Run Results (the run summary on the run's Output tab in the Apify Console). collection_status says whether the run finished (complete) or stopped early (partial), and collection_stop_reason names why. Then broaden the query or switch the sort order.
  • In a batch run, one username or keyword can fail while others still save results. Run Results lists which ones failed and why, and gives each account its own result in user_items (each keyword in search_items), so you know which ones to run again.
  • Run Results also reports result_quality: how completely the optional extra details (such as view counts and author profiles) could be filled in. It is separate from collection_status: a run can deliver every requested row and still show partial or unavailable here. author_profiles_missing counts the post authors whose profile details could not be loaded, and view_counts_missing counts the post rows this run checked that came back without a view count. Those rows are saved as they are; running again may return the same posts with those details filled in.
  • An entry that is not a Threads username or profile link, or a keyword that cannot be searched (for example one made only of # signs, or one longer than 100 characters), is skipped and the rest is collected. The log names each skipped entry, the closing status names up to three per field, and entries_skipped in Run Results lists them all. The run stops before collecting only when none of the usernames can be used (or, in Search and Find Profiles, none of the keywords). In User Posts, User Reposts and User Replies mode it also stops when none of the keywords you added can be used, unless each of them is made only of # signs: those are skipped and the run goes on without keywords. When the run stops, its message names an entry that could not be used and says why, and entries_skipped lists it with the other entries that were skipped.
  • mixed_item_results means this run ended in more than one way, either because keywords finished differently or because one keyword stopped for more than one reason. How to read Search stopping reasons below says how to read each one.

Working without a login

This actor reads only what Threads shows publicly, so niche or uncommon keywords can return very few results, or none, even when you can see those posts while logged in. When no_results appears, it means the public search window checked in this run returned no matching rows. It does not prove that no matching post exists anywhere on Threads. If the search was interrupted before it finished, the run is marked partial, so an empty result is never presented as a confirmed one.

How to read account stopping reasons

Runs in User Posts, Reposts, Replies and Find Profiles report one of these:

  • no_more_public_posts / no_more_public_reposts / no_more_public_replies: the account had nothing further to show publicly on that tab, so the run has everything it could see.
  • no_more_public_accounts: Find Profiles had no further matching accounts to show.
  • requested_limit_reached: at least one account reached the number you asked for. In User Posts, Reposts and Replies, raising the limit can return more from that account. In Find Profiles it cannot: that mode returns up to 10 accounts per keyword whatever the limit says, so use related keywords instead.
  • no_results: nothing public was found for that account or keyword in this run.
  • temporarily_unavailable: part of the collection could not be finished this time, so some rows may be missing. Running it again may return them.
  • budget_reached, time_limit_reached and run_stopped_early mean the run ended on a limit you or the platform set, keeping everything saved up to that point. When the run reaches its time limit or is stopped, an account still being collected at that moment usually keeps the rows it had already collected and is listed in user_items as partial. An account that had no rows yet, or had not started, is listed in failed_items. Rows saved from that moment on may arrive without view counts (view_count_status is not_checked) and, in User Reposts, without the original author's profile details.

Per-account results in user_items

In User Posts, Reposts and Replies, Run Results lists in user_items every username the run could use, in the order you entered them. Entries it could not use are listed in entries_skipped instead, and a run that ends before collecting starts, or on an unexpected error, has no user_items. Each entry has requested_username (the same value as the requested_username column on that account's rows), requested, results_saved, quota_reached, status (complete, partial or failed) and stop_reason. A complete account reached the number you asked for, had nothing further to show, or could not be opened; its stop_reason says which. A partial account delivered the rows counted in results_saved and stopped early, and its stop_reason says why; run just that account again to try for the rest. A partial account whose stop_reason is budget_reached can show results_saved 0, because this run's max charge limit was reached before any of its rows could be delivered: raise the max charge limit before you run it again. A failed account saved nothing this time. Besides the reasons above, an account can report account_not_available (the account could not be opened; check the name), account_private, or one of the per-attempt codes listed under Per-keyword codes in search_items below. results_saved counts that account's confirmed rows, including a row first saved under another account in the same run, which input_membership_updates lists, so filtering the Dataset by requested_username alone can show fewer rows. Like collection_stop_reason, user_items describes this run only and never proves that every public item of the account was checked.

When any account in user_items is not complete, collection_status is partial. The other way round does not always hold: an account that reached the number you asked for is complete even if collecting stopped early after that, and collection_status can then still read partial. user_items is what tells you which accounts to run again. The run's status line may also name some of these accounts; user_items lists all of them.

How to read Search stopping reasons

  • requested_limit_reached: every keyword reached the number you asked for. Raising the limit can return more. When some keywords reached it and others ran out first, the run reports mixed_item_results instead.
  • search_window_limit_reached: the run reached the limit of what one run covers for that keyword. More posts may exist; a date range limited to the period you need reaches them most reliably.
  • date_filter_unverifiable: some posts did not carry a public date, so they could not be placed inside or outside your range. The run is marked partial rather than reported as an empty range.
  • search_depth_limit_reached: the run reached its collection limit for that keyword before your number. More posts may remain.
  • search_time_budget_reached: the time allowed for that keyword ended before reaching your number. More matching posts may remain.
  • low_yield_stop: the run stopped because it was no longer finding new posts for that keyword. More posts may still exist.
  • mixed_item_results: keywords had different completion outcomes or stopped for different reasons. It does not mean Threads has no more matching posts. Check search_items in Run Results to see which keyword was short and why; this is not proof that the shorter keywords are exhausted.
  • budget_reached: the run stopped at the limit you set for it. Everything saved before that point is kept, and a new run with a higher limit can continue past it.
  • time_limit_reached / run_stopped_early: the run ended before finishing, for example at its time limit or after being stopped, and wrapped up with what it had.
  • temporarily_unavailable: part of the collection could not be completed on this attempt, so some posts may be missing. Running it again may return them.

Per-keyword codes in search_items

Each keyword in search_items also reports its own status (complete, partial, or failed) and its own stop_reason. Besides the reasons above, a keyword can report an operational code about this run's attempt: setup_unavailable (collection could not be set up for this keyword or account this time; for an account that saved some rows, it was loading the rest that could not be set up), request_timeout or request_unavailable (a page request ran out of time or could not be completed), save_unavailable or save_incomplete (prepared rows could not be saved, or only partly saved), details_unavailable or details_incomplete (some posts were left out because their public details could not be read on this attempt), or unexpected_error. These codes describe this run's attempt, not the keyword or account itself; running again may complete them.

posts_saved counts unique physical Dataset rows. search_items[].results_saved counts confirmed keyword memberships, so one deduplicated post selected by two keywords counts once in posts_saved and once for each keyword. This is expected and does not mean the row was saved twice.

If you need content that is visible only inside your own logged-in account, this is not the right tool.

FAQ

Q: What engagement metrics can I get? A: Likes, replies, reposts and quotes come through on every public post. Views come through whenever Threads publishes them. Share counts are not published for every post, so share_count is empty on some rows and is best treated as a bonus rather than a metric to plan around. view_count_status tells you which of three things happened: available (a number was read, including 0), not_public_yet (the post is too recent for a view count to exist yet), or not_checked (the count was not read on this run; run it again to pick it up). In Run Results, view_counts_missing counts the post rows this run checked that had no view count, and view_counts_not_public_yet reports how many of those are simply too recent.

Q: How does contact information extraction work? A: Contact fields depend on the public bio text and profile links. The actor does not read text inside images or on linked pages.

Q: Is there an identifier I can join on besides the username?

A: Yes. Every post author and every profile record carries user_id next to username. A username is the account's handle; user_id is a separate identifier assigned by the platform and is not derived from it. Across our runs the same account returns the same user_id in User Posts, Search and Find Profiles alike, so it is the field to join on when a handle alone would be ambiguous. When it could not be resolved for a record it is null, never an empty string, so it is always clear which case you are looking at.

Q: How do I see the complete field set? A: In the Apify console, switch to "All fields". You will see the complete record fields, including fields that may be null for some records.

Q: Does it support batch scraping of multiple users or keywords? A: Yes. You can enter up to 20 usernames or 20 keywords in one run. Results are combined into the same dataset. If an entry cannot be used, it is skipped and named, and the others still run, as long as every field you filled in still has at least one entry the run can use. What To Expect says exactly when the run stops instead.

Q: One account in my batch was only partly collected. How do I know which one? A: user_items in Run Results lists every username the run could use, each with its own status; the run's status line may also name some of them. Run only the accounts marked partial or failed again. A new run collects each account from its most recent items again, so it can also return rows you already have.

Q: Can I tell which posts are sponsored / paid partnerships? A: Every post includes an is_paid_partnership field, and true means a paid-partnership label was publicly shown for that post. Threads rarely shows this label in public data, so false does not confirm that a post is not sponsored.

Q: Can I see quote posts and reposts, and the original they reference? A: Yes. Quotes are marked on the row itself with is_quote_post and quoted_post_url. Reposts come from πŸ” User Reposts mode, where each row is the original post and reposted_by_username, reposted_by_user_id, reposted_at and source_tab say who boosted it and when.

Q: Can I distinguish top-level posts from replies? A: Yes, when reply context is present in the returned public data. is_reply marks replies, reply_to_username shows who is being replied to, and reply_control reflects the reply-audience setting when available.

Q: What about image alt text and media size? A: When available, accessibility_caption contains an image description; otherwise it is an empty string (""). media_width and media_height contain the available media dimensions in pixels and are null when not available (for example text-only posts).

Q: Can I tell whether a post has a public AI-content label or whether a video has sound? A: is_ai_generated is true when the post carries an AI-content label, false when the checked public post has no such label, and null when it cannot be determined. has_audio is true/false for checked video posts and null for non-video posts or unavailable detail.

Q: Is there a Fediverse / ActivityPub signal? A: Yes. fediverse_enabled is true when a Fediverse sharing indicator is publicly shown on the profile; otherwise it is false or null, depending on whether profile details were available for that row.

Q: Do I need to choose between hashtag and full-text search? A: No. Enter your keyword with or without #, then pick a top or recent sort order. Results depend on what Threads makes publicly available.

Q: How does Find Profiles work, and how many accounts can it return? A: Find Profiles (mode: "profiles") returns up to 10 public account matches per keyword with profile fields such as follower count, bio when present, links, and contacts. Some keywords may return fewer than 10. To reach more accounts, use several related keywords.

Q: How can I find local accounts? A: Put the place name directly in the keyword (e.g. austin coffee) so the search phrase is what the matching is based on. Geo-targeting is not supported.

Q: Can I choose the language of my search results? A: In Search mode you can set search_language to japanese or chinese (Traditional) to get more posts written in that language; english is the default and keeps the current behaviour. It is a preference, not a filter: posts in other languages can still appear, and many keywords will not change at all. It is most useful when the same keyword is written the same way in more than one language. It does not apply to Find Profiles or the user modes.

Q: Why do search results seem unrelated to the keyword? A: Threads search ranking is not strict keyword-only matching. Results can include broadly related content and sometimes unrelated content. Use keyword_match as a relevance aid in downstream filtering; it is true when the post's text, topic tag or link preview title contains at least one keyword in search_keywords (as typed, written without spaces, or with every word of a multi-word keyword somewhere in the same field), but it is not an exact-match guarantee.

Q: Why do I get fewer results than my max_posts limit? A: max_posts is a ceiling, not a promise. One run checks a bounded public search window, so it can return fewer rows even for an active keyword. Read collection_stop_reason in Run Results: it names why the run stopped (the Search reasons are listed under How to read Search stopping reasons above). None of the short-result reasons means every matching post on Threads was checked. Threads also limits how much of a search a visitor who is not logged in can see, and that visible window changes over time; when it is what ended the run, the run is marked partial rather than complete. You can set a date range limited to the period you need, which is the most reliable way to reach posts a single run did not, or try a broader keyword, another sort order, or split the search into related keywords.

Q: Why are bio or followers_count sometimes empty in Search mode? A: Some accounts expose limited public profile fields in search results. When a field is not publicly available for that account at run time, it may be empty.

Explore Threads Workflows

Disclaimer

This Actor is provided for research and educational purposes. You are solely responsible for how you use it and for ensuring that your use of the Actor and any data it returns complies with all laws and regulations applicable to you. Data availability, completeness, and accuracy may vary over time and between runs. The developers accept no liability for how this tool or the data it returns is used.


Keywords: Threads scraper, Threads search scraper, Threads data scraper, Meta Threads scraper, Threads post extractor, Threads profile scraper, Threads hashtag search, Threads keyword search, Threads search without login, Threads data extraction, export Threads posts, download Threads data, Threads exporter, Threads posts, Threads engagement metrics, follower count scraper, Threads bio email extractor, Threads account finder, influencer discovery, Threads influencer research, social media scraper, social media monitoring, brand monitoring, competitor analysis, competitor intelligence, trend research, content research tool, social listening tool, market research, Instagram Threads, public Threads data, Threads automation, Threads search, OpenClaw, Claude Code, Gemini CLI, Antigravity, Codex, ChatGPT