App Logo
search.brave.com

Brave search

Search the web on Brave, one page of results at a time. Returns each result's title, url, snippet and date, plus the query it actually ran. An empty result list always means Brave itself reported nothing for the query, and the reason is returned alongside it — the script raises an error rather than quietly returning nothing when the page cannot be read, so an empty answer can be trusted as a fact about the query. Search operators (site:, quoted phrases, OR) are honored. site:domain also covers subdomains, and site:domain/path narrows to a path prefix. When too few pages match, Brave drops the operators and answers a looser query instead; the result says so, and those results should not be treated as filtered. For coverage questions, site:domain on its own is a ranked sample rather than a full inventory — add search terms, and judge by whether real articles come back or just homepages and section pages. Paging deeper does not enumerate a domain either: the pool behind a single query is finite and Brave re-serves earlier pages once it runs out, so dedupe results by url, stop when a page adds nothing new, and widen coverage with more query strings rather than more pages. Brave sometimes shows a rate-limit challenge; the script clears it automatically, and if it persists it raises an error — wait 30-60 seconds before retrying.

Input

query required

Search query. Operators site:/""/OR are honored. site:domain also covers its subdomains (site:example.com returns docs.example.com), and site:domain/path narrows to a path prefix — the cheapest way to slice a large site.

offset optional

0-based page index (0 = first page, ~20 results). The pool behind one query string is limited and its depth varies by query; Brave does not signal when you reach the end and instead re-serves earlier pages. Dedupe results by url across pages and stop paging once a page adds nothing new — never assume N pages means 20N results. Default 0.

exactMatch optional

Meant to force the literal query, but currently unreliable — Brave does not always announce the rewrite this depends on, especially for typo corrections. To pin a literal string, quote it in `query` instead. Default false.

Output

count required

How many result cards were extracted from THIS page — literally results.length. Not a match count and not an estimate of what Brave holds for the query; there is no such number on the page. A full page reads ~16-20.

query required
offset required
results required

The page's organic web results, in rank order. Empty only when Brave itself reported nothing for the query (see emptyBecause) — the script raises an error rather than returning an empty list when it cannot read a page that Brave answered normally.

emptyBecause required

Why `results` is empty, in Brave's own terms — and null whenever `results` is non-empty. One of: the operators were relaxed (too few documents matched them), Brave's no-matches banner, or its no-results message.

operatorsApplied required

Whether Brave honored the operators in `query`. false = Brave found too few matching documents, dropped the operators and answered a relaxed query instead: `results` are then soft relevance over the whole web, not filtered, so treat them as empty for any hard-filter use such as a site: coverage check. Only meaningful when `query` contains an operator — for an operator-free query it is vacuously true.

rewrittenTo optional

What Brave actually searched if it announced an auto-rewrite, else null. null means 'no rewrite was announced', not 'the literal query was searched' — Brave sometimes corrects a query silently.

FAQ

Search the web on Brave, one page of results at a time. Returns each result's title, url, snippet and date, plus the query it actually ran.
Required: query. Optional: offset, exactMatch.
It returns count, query, offset, results, rewrittenTo, emptyBecause, operatorsApplied.
No. It only uses pages of search.brave.com that are reachable without signing in.
It only reads. It looks things up on search.brave.com and changes nothing there.
Ask an AI agent connected to Reduck to run reduck/search.brave.com/search, or run it from a terminal with the Reduck CLI: npx @reduck-ai/cli@latest run --script reduck/search.brave.com/search
It is part of Reduck's official curated catalogue.

Start building not clicking