Threads Search Scraper
Goldmine ยท @goldmine
Search Threads posts by keyword or hashtag, no login. Returns text, author, likes, replies, reposts, quotes, media and links as JSON, CSV or Excel.
About
Threads Search Scraper โ search Threads posts by keyword or hashtag, no login

Search Threads the way its own search box does and get the matching posts back as structured data. This Threads search scraper (a Threads.net scraper, now threads.com) takes keywords, phrases or hashtags and returns every post Threads shows for them: text, author, likes, replies, reposts, quotes, media URLs, links and mentions. People use it for brand and keyword monitoring, trend and hashtag research, creator discovery, and building Threads datasets for analysis or AI agents.
Give it a query such as nature or #photography and get back the Top, Recent or Tags results, or all three de-duplicated, as JSON, CSV or Excel. No Threads account, cookies or API key needed.
๐ Key Features
- ๐ Keywords, hashtags or URLs โ search Threads posts by any word or phrase, a
#hashtag(with or without the#), or paste athreads.com/search?q=...URL - ๐๏ธ Every search tab โ read the Top, Recent or Tags tab, or all three in one run with duplicates removed
- ๐งพ Full post data โ text, publish time, like / reply / repost / quote / reshare counts, image and video URLs, link previews, hashtags, mentions and URLs in the text
- ๐ค Author details on every post โ username, display name, user ID, verified and private flags, profile picture and profile URL
- ๐ Per-query limits โ
maxItemscaps posts per search query, not per run, so a list of queries stays balanced - ๐ฌ Replies optional โ keep only top-level posts (default) or also save the replies Threads shows under each result
- ๐
Date window โ keep only posts published between
postedAfterandpostedBefore - ๐ก๏ธ No login, proxy optional โ reads what Threads shows a logged-out visitor; proxies included
- ๐ค Multiple export formats โ JSON, CSV, Excel, XML via the Bytwell dataset
- ๐ Schedulable runs โ run the same queries hourly or daily to track a topic over time
๐ฅ Who Is This Actor For?
- ๐ฃ Social media and brand managers โ monitor mentions of a brand, product or campaign hashtag on Threads
- ๐ Marketers and trend researchers โ see which posts Threads ranks on top for a topic and what is being posted right now
- ๐งโ๐ค Creator and influencer teams โ find accounts posting about a niche and measure their engagement
- ๐ง Analysts and data scientists โ build keyword datasets for sentiment, share-of-voice or content studies
- ๐ค AI builders โ feed fresh Threads posts on a topic into an agent, a RAG pipeline or a summarisation workflow
๐ก Common Use Cases
- Scrape Threads posts that mention a brand name and export them to a spreadsheet every morning
- Track a hashtag such as
#photographyand log the most-liked posts each week - Search Threads for a competitor's product and collect the replies people leave
- Collect Threads keyword search results for a news topic to see what is spreading
- Discover creators who post about a niche by searching the Tags tab and sorting by followers later in your own pipeline
๐ Supported query types
| Query type | Example |
|---|---|
| Keyword or phrase | nature, climate change |
| Hashtag | #photography or photography with search type tags |
| Threads search URL | https://www.threads.com/search?q=climate%20change&serp_type=default (the URL's tab wins over searchType) |
| Threads tag URL | https://www.threads.com/tags/nature |
๐ฅ Input
| Field | Type | Description | Default |
|---|---|---|---|
searchQueries | Array | Keywords, phrases, hashtags (with or without #) or Threads search URLs. Each query is searched separately. | Required |
searchType | String | Which Threads search tab to read: top, recent, tags or all (Top, Recent and Tags in that order, de-duplicated). | top |
maxItems | Integer | Maximum number of posts to save per search query. | 20 |
includeReplies | Boolean | Also save the replies Threads shows under matching posts as their own items. | false |
postedAfter | String | Keep only posts published on or after this date (YYYY-MM-DD, UTC). | โ |
postedBefore | String | Keep only posts published before this date (YYYY-MM-DD, UTC). | โ |
proxyConfiguration | Object | Proxies are included in the price and chosen automatically. Select "Own proxies" to use your own. | { "useApifyProxy": true } |
Example Input
{
"searchQueries": ["nature", "#photography"],
"searchType": "all",
"maxItems": 40,
"includeReplies": false,
"proxyConfiguration": { "useApifyProxy": true }
}
๐ค Output
Each dataset item is one Threads post:
| Field | Type | Description |
|---|---|---|
id | String | Threads post ID. |
code | String | Post shortcode, the last part of the post URL. |
url | String | Public post URL. |
text | String | Post text. Posts whose body is a text attachment return that text here. Empty for media-only posts. |
attachmentText | String | The text of an attachment the app shows as a collapsed snippet, or null when the post has none. |
createdAt | String | Publish time as an ISO 8601 timestamp (UTC). |
timestamp | Integer | Publish time as unix seconds. |
likeCount | Integer | Likes. |
replyCount | Integer | Direct replies. |
repostCount | Integer | Reposts. |
quoteCount | Integer | Quote posts. |
reshareCount | Integer | Shares outside Threads. |
username | String | Author username. |
fullName | String | Author display name, or null when Threads does not include it. |
userId | String | Author user ID. |
isVerified | Boolean | Author has a verified badge. |
isPrivate | Boolean | Author's profile is private. |
profilePicUrl | String | Author profile picture URL. |
profileUrl | String | Author profile URL. |
mediaType | String | text, image, video or carousel. |
hasMedia | Boolean | The post carries at least one image or video. |
mediaCount | Integer | Number of media attachments. |
images | Array | Image URLs at the largest size Threads serves; video posts include their poster frame. |
videos | Array | Direct video URLs. |
hasAudio | Boolean | A video has an audio track. |
accessibilityCaption | String | Threads' alt-text for the media, when present. |
hashtags | Array | Hashtags found in the text, without #. |
mentions | Array | Usernames mentioned in the text, without @. |
urls | Array | Links in the text. |
linkPreview | Object | { url, displayUrl, title, imageUrl } of the attached link card, or null. |
isReply | Boolean | The item is a reply to another post. |
replyToUsername | String | Username the reply answers, or null. |
rootPostCode | String | Shortcode of the post a reply belongs to, when it was in the same search result. |
threadId | String | ID of the conversation the post belongs to. |
isQuotePost | Boolean | The post quotes another post. |
quotedPostUrl | String | URL of the quoted post, or null. |
isEdited | Boolean | The text was edited after posting. |
isPaidPartnership | Boolean | Marked as a paid partnership. |
replyControl | String | Who may reply: everyone, accounts_you_follow or mentioned_only. |
searchQuery | String | The query, exactly as given in the input. |
searchType | String | The tab the post came from: top, recent or tags. |
scrapedAt | String | When the post was scraped (ISO 8601). |
Example Output
{
"id": "3914153076311647543",
"code": "DZR3XweDuU3",
"url": "https://www.threads.com/@__neha_t.r.__/post/DZR3XweDuU3",
"text": "โโโ๐๐ฆโโโ\n โฆโ๏ธ๐ง๐๐ญ๐ฎ๐ซ๐๐โฆ",
"attachmentText": null,
"createdAt": "2026-06-07T09:10:29.000Z",
"timestamp": 1780823429,
"likeCount": 295,
"replyCount": 15,
"repostCount": 3,
"quoteCount": 0,
"reshareCount": 20,
"username": "__neha_t.r.__",
"fullName": "โจยจ*:ยท.ฮท๏ธาฝโฒ๐ โก",
"userId": "80785690060",
"isVerified": false,
"isPrivate": false,
"profilePicUrl": "https://instagram.fadd1-1.fna.fbcdn.net/v/t51.82787-19/657724346_17856282243690061_615697399606468911_n.jpg?...",
"profileUrl": "https://www.threads.com/@__neha_t.r.__",
"mediaType": "carousel",
"hasMedia": true,
"mediaCount": 3,
"images": [
"https://instagram.fadd1-1.fna.fbcdn.net/v/t51.82787-15/719009716_17865345288690061_1741070913251517281_n.webp?...",
"https://instagram.fadd1-1.fna.fbcdn.net/v/t51.82787-15/719202633_17865345306690061_1719386697182439391_n.webp?...",
"https://instagram.fadd1-1.fna.fbcdn.net/v/t51.82787-15/719099709_17865345297690061_3947244394621738741_n.webp?..."
],
"videos": [],
"hasAudio": false,
"accessibilityCaption": null,
"hashtags": [],
"mentions": [],
"urls": [],
"linkPreview": null,
"isReply": false,
"replyToUsername": null,
"rootPostCode": null,
"threadId": "3914153076311647543",
"isQuotePost": false,
"quotedPostUrl": null,
"isEdited": false,
"isPaidPartnership": false,
"replyControl": "everyone",
"searchQuery": "nature",
"searchType": "top",
"scrapedAt": "2026-09-03T23:29:12.612Z"
}
You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML from the Console or via the Bytwell API.
๐ฐ Pricing
Monthly Rental $29.99/month
โ FAQ
What is the Threads Search Scraper?
It is a Threads search scraper that runs a Threads keyword search for each query you give it and saves the matching public posts as structured data. Think of it as the search box on threads.com with an export button.
Do I need an account, cookies or an API key?
No. The Actor reads what Threads shows a logged-out visitor, so there is nothing to log in with and no account of yours at risk.
Do I need a proxy?
Proxies are included in the price and chosen automatically, so the default works without changes. To use your own proxies, select "Own proxies" in the input and enter their URLs.
How many results can I get per run?
maxItems caps posts per search query. Threads shows a logged-out visitor one page per search tab, roughly 15 to 35 posts, and offers no further pages, so a single tab cannot exceed that. Use searchType: "all" to read the Top, Recent and Tags tabs together; in our runs that returns several dozen distinct posts per query. Broad queries return more than niche ones, and a query with no matching posts is listed under ERRORS in the run's key-value store.
What is the difference between Top, Recent and Tags?
Top is what Threads ranks highest for the query, usually posts with the most engagement. Recent is the newest posts mentioning the query. Tags is the posts filed under the matching topic tag, which is what a #hashtag search shows on Threads.
Why do my Top results show searchType: "recent"?
Threads often does not serve Top results to logged-out visitors and shows its latest posts from across the site instead, which have nothing to do with the query. The Actor detects that page, skips it, and reads the Recent tab for the query instead, logging a warning. Each item's searchType records the tab it actually came from.
Does it handle pagination automatically?
The Actor reads every result Threads serves for a tab and, with searchType: "all", moves on to the next tab until maxItems is reached. Threads does not serve further pages to logged-out visitors, so there is nothing more to paginate.
Can I filter by author or date?
postedAfter and postedBefore keep only posts in a date window. They filter what Threads returned; they do not make Threads search further back in time. Author filtering is a logged-in Threads feature and is not available here; filter on username in the exported data instead.
Why does the Recent tab return posts that only loosely match my query?
Threads search matches on words, tags and topics it associates with the query, so results can include broadly related posts. Narrow the query or add a hashtag when that happens.
Is there a Threads API I could use instead?
Meta's official Threads API needs a Meta developer app, app review and an authorised Threads account, and its keyword search is scoped to that app. This Threads search scraper takes keywords, hashtags or search URLs and returns the matching public posts with no app or token, including the Recent tab and date filters.
Can I schedule it or integrate it with my app?
Yes โ every Bytwell Actor exposes a REST API, webhooks, and integrations with Zapier, Make, Google Sheets and Slack, and can be called from an AI agent via the Bytwell MCP server.
Is it legal to scrape Threads?
This Actor accesses only publicly available pages. You are responsible for making sure your use complies with Threads' terms of service and the laws in your jurisdiction.
๐ฌ Contact & Support
- Issues & feature requests: use the Issues tab on this Actor's page โ that is where every fix starts.
- Email:
[email protected] - If this Actor saved you time, please leave a โญ rating on the Bytewells Store. It helps us keep it maintained.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Fields
searchQueriesKeywords, phrases, hashtags (with or without #) or Threads search URLs (https://www.threads.com/search?q=...). Each query is searched separately.
searchTypeWhich Threads search tab to read. Top returns the posts Threads ranks highest, Recent the newest posts, Tags the posts filed under the matching topic tag. All reads the three tabs in that order and removes duplicates, which returns the most posts per query. When Threads does not serve Top results to a logged-out visitor, the Actor reads Recent instead.
maxItemsMaximum number of posts to save per search query. Threads shows a logged-out visitor one page per search tab, so a single tab returns roughly 15 to 35 posts; use the All search type to get more.
includeRepliesSearch results sometimes carry a reply underneath the matching post. Turn this on to save those replies as their own items; off saves only the top-level posts.
postedAfterKeep only posts published on or after this date (YYYY-MM-DD, UTC). Applied to the posts Threads returns; it does not make Threads search further back.
postedBeforeKeep only posts published before this date (YYYY-MM-DD, UTC).
proxyConfigurationProxies are included in the price and chosen automatically, so you can leave this as it is. To route requests through your own proxies, select "Own proxies" and enter their URLs.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console โ Settings โ API access). The Actor ID is goldmine/threads-search-scraper (or goldmine~threads-search-scraper in URLs).
JavaScript ยท apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"searchQueries": [
"nature"
],
"searchType": "top",
"maxItems": 20,
"includeReplies": false,
"proxyConfiguration": {
"useApifyProxy": true
}
};
const run = await client.actor('goldmine/threads-search-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python ยท apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"searchQueries": [
"nature"
],
"searchType": "top",
"maxItems": 20,
"includeReplies": False,
"proxyConfiguration": {
"useApifyProxy": True
}
}
run = client.actor("goldmine/threads-search-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP ยท curl
curl -X POST "https://bytewells.com/api/v2/acts/goldmine~threads-search-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["nature"],"searchType":"top","maxItems":20,"includeReplies":false,"proxyConfiguration":{"useApifyProxy":true}}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.