From 92bc4b3cba1beb7aa443c4dcbb1e741ece3a5deb Mon Sep 17 00:00:00 2001 From: Igor Soarez Date: Mon, 3 Aug 2026 22:17:46 +0100 Subject: Record measured rate-limit behaviour per engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Concrete numbers from development rather than a vague warning: Google tolerates a lot then blocks for ~90 minutes, Brave challenges after one or two queries and clears in ~15-20, and DuckDuckGo and Bing never challenged at all. That last fact is the useful one — it says which engine to reach for when several searches are needed in a row. --- README.md | 12 ++++++++---- src/engines.ts | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 684bd96..6dac8a7 100644 --- a/README.md +++ b/README.md @@ -121,10 +121,14 @@ The browser is shared and belongs to a person. Worth being aware of: in the search engine's account history if that profile is signed in. - Tabs open and close on someone's screen. `background: true` keeps them from stealing focus, but they are visible. -- Searching hard trips rate limiters for the whole host — a handful of queries in - a few seconds is enough to earn a challenge that affects the human using that - browser too. Measured on Google: roughly 30 queries in a few minutes cost about - 90 minutes of blocking. Brave challenges considerably sooner than that. +- Searching hard trips rate limiters for the whole host, and the challenge + affects the human using that browser too. Measured during development: + **Google** tolerated a lot, then roughly 30 queries in a few minutes cost about + 90 minutes of blocking. **Brave** is far stricter — it challenges after as few + as one or two queries and clears again in roughly 15–20 minutes. **DuckDuckGo** + and **Bing** never challenged once across the whole of development, which is + why DuckDuckGo is the one to reach for when you need to run several searches + in a row. - **A decaying block does not look like a block.** Once the challenge page stops being served, engines return an *empty results page* for a while instead — indistinguishable from a query with no hits. It surfaces as `NoResultsError`, diff --git a/src/engines.ts b/src/engines.ts index a71b9c8..ef8baef 100644 --- a/src/engines.ts +++ b/src/engines.ts @@ -172,7 +172,7 @@ const BING: EngineDefinition = { const BRAVE: EngineDefinition = { id: "brave", label: "Brave Search", - note: "independent index and unwrapped links; challenges quickly under repeated queries", + note: "independent index, direct links; challenges after 1-2 queries, clears in ~15-20 min", // Left empty deliberately — see the note in README. Brave's filter UI is // client-rendered and the `tf=` values could not be confirmed against a page // that was not simultaneously serving a bot check, so no window is claimed -- cgit v1.3.1