1
Install
webrouter; the import name is web_router. Put the keys you hold in your environment or a .env file; none is required. .env.example names each variable.2
Search with no key
quickstart.py
Example output
Example output
3
Read the pages you found
4
Name a provider
Once you have a key for one, name it. A backend that does not map an option you set, such as
Provider is an enum of the built-in backends, so your editor completes it and a typo is caught where you type it.country, raises UnsupportedParameterError rather than quietly running the search unfiltered. See Providers for which keys unlock which backends.Async
Async
Install options
You can install fewer extras by naming them in place ofall. Extras are named after the methods you call, not the backends behind them: search brings in every provider that can serve one, so choosing between them stays a runtime decision.
open_browser needs no Playwright: a vendor session opens over httpx, which [all] installs, and local needs only the standard library and a Chrome or Chromium.
From source
From source
For contributors or to track Using a coding agent? Tell it “clone https://github.com/Nimbleway/webrouter
and set it up”. CLAUDE.md walks it through the rest. To use the
clone from another project, install it in editable mode
(
main: the one prerequisite is
uv, which fetches
the right Python itself.uv add --editable "/path/to/webrouter[all]" or
pip install -e "/path/to/webrouter[all]"), so git pull && make setup in the
clone is the whole update.Runnable examples
examples/ has a script per topic (routing, every error
and its fix, depth measured across backends, adding your own provider), and
most need no credentials, routing through the keyless backends;
browser_session.py drives a local Chromium
with none. main.py is a guided tour of search and extract
in one file: