Scout Browser
Pricing
from $0.005 / actor start
Scout Browser
Full browser automation for AI agents: navigate, click, extract, screenshot, search, crawl, and more — all through MCP tools. Run it anywhere, plug in any LLM.
Pricing
from $0.005 / actor start
Rating
0.0
(0)
Developer
Ridwan Olanrewaju
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Scout Browser Agent
Give an AI model a browser and a task. It opens pages, reads them, and reports what it found, using your own model provider or AI gateway key, so the run spends your account for the model and Scout's pricing covers only the browser.
How it works
- You give it a task, a key, and optionally the domains it may visit.
- A model — yours — is handed a set of browser tools and works through the task one step at a time.
- When it has an answer, or runs out of steps, budget or time, it writes one result to the dataset.
Hitting a limit is never a failure: the model is asked to say what it found so far and what it could not find, and that is the result. Only a run with nothing at all to report fails, and a run that fails is not charged for a result.
Input
| Field | Required | What it is |
|---|---|---|
prompt | yes | The task, in plain words. |
apiKey | yes | The key for the account model starts with. Stored encrypted, used only to call that account, never shown to the agent or logged. |
model | no | Whose key the run spends, then the model as they name it: anthropic/claude-sonnet-5-5, openrouter/anthropic/claude-sonnet-5.5. deepseek/deepseek-flash when not given. |
baseUrl | no | For a custom/… model only: the https address of an OpenAI-compatible endpoint. |
allowedDomains | no | Domains the agent may navigate to, with their subdomains. Empty means any public page. |
maxSteps | no | The most model turns before it must answer (1–50, default 25). A turn can run several tools. Turns are not charged; tool calls are. |
tools | no | Browser tools by name, picked from a list in the form. Empty means the default set below. |
The browser's own settings (timeouts, snapshot limits, proxy) are further down the input form and have sensible defaults.
Providers and gateways
model starts with whose key the run spends. A provider is the vendor that makes the model, called directly with that vendor's key: anthropic/claude-sonnet-5-5. A gateway is a router in front of many vendors, called with the gateway's key, and what follows it is the name the gateway uses: openrouter/anthropic/claude-sonnet-5.5. One value carries the whole route, so a model cannot end up on the wrong account.
Because the key is yours, every provider Scout can reach is available:
| Provider | model starts with | Spoken to |
|---|---|---|
| Alibaba, Arcee, ByteDance, DeepSeek, Interfaze, Mistral, Moonshot, OpenAI, Sakana, StepFun, Tencent, xAI, Xiaomi, Z.ai | alibaba/, arcee/, bytedance/, deepseek/, interfaze/, mistral/, moonshotai/, openai/, sakana/, stepfun/, tencent/, xai/, xiaomi/, zai/ | Chat completions, at the address Scout keeps for each |
| Google (Gemini) | google/ | Google's OpenAI-compatible endpoint |
| Cohere | cohere/ | Cohere's OpenAI-compatible endpoint |
| Anthropic | anthropic/ | Anthropic's own Messages API |
| Anything else | custom/, with baseUrl | Chat completions, at a public https address you give |
Gateways: openrouter/, vercel/, kilo/, trustedrouter/.
Models change faster than this page can. Nothing here pins a model name except the default, which DeepSeek's own documentation tells callers to use (deepseek-flash). The input form suggests current names, each titled with the key it needs, but it is a list of suggestions and not a limit: any name your key can use works. The list comes from models.dev: only names, never addresses. To refresh it, run pnpm --filter @scouting/runtime-browser models:refresh and commit the form. Before a run starts, a key for a named provider is checked with that provider, so a mistyped one fails at once and costs nothing (a gateway or custom address finds out at the first request); and if the provider refuses a model name, the failure lists the models your key can use that are nearest to it.
{"prompt": "What does example.com say its purpose is?","apiKey": "…","allowedDomains": ["example.com"]}
{"prompt": "Summarise the pricing page.","model": "anthropic/claude-haiku-5-5","apiKey": "…"}
{"prompt": "Find the pricing page and summarise the plans.","model": "openrouter/deepseek/deepseek-v4.1-flash","apiKey": "…"}
Output
One dataset item per run, also stored as OUTPUT:
{"answer": "example.com describes itself as…","prompt": "What does example.com say its purpose is?","model": "deepseek-flash","route": { "provider": "deepseek" },"steps": 4,"toolCalls": 3,"stoppedBecause": "answered","usage": { "promptTokens": 9120, "completionTokens": 310 },"screenshots": ["SCREENSHOT-1"]}
stoppedBecause is answered, max-steps, budget, time, or error (the provider failed part-way, was cut off at its token limit, ran out of context, or declined; error then says which, and answer is whatever the model had said). usage is what your provider account was charged for, so you can see it without opening that account; cachedPromptTokens is the part of the input the provider served from its own cache, which is billed at a fraction of the rest.
What else a run leaves
| Record | Where | What it is |
|---|---|---|
TRACE | Key-value store | Every step: what the model said, each tool it called with what it was given, and what came back. Kept for failed runs too. |
SCREENSHOT-1, -2, … | Key-value store | The pictures the browser took, up to 25 a run. The model cannot see them; they are for you, and the result lists their keys. |
The trace shows what the model saw, which can include page content. It never contains your API key.
Limits and safety
- Allowed domains. Navigation outside the list is refused by the browser itself, including redirects that leave it. What an allowed page loads into itself — scripts, images, frames — is not restricted, or no page would render. Private and internal addresses are always refused.
- Pages are untrusted. The agent is told that page text is information, not instructions. It is given only the tools below, and your key is never in its reach.
- Your key. It goes to the one endpoint you named and nowhere else. A
custombase URL must be a publichttpsaddress. - Budget. The run stops short of the maximum charge you set on it, keeping back enough to charge for the answer.
- Time. The run stops working about three minutes before its timeout (a quarter of the way before, on a short one) so that it can still answer. Give a long task a longer timeout.
Default tools
browser-open, browser-navigate, browser-snapshot, browser-find, browser-element, browser-interact, browser-extract, browser-search, browser-wait, browser-tabs, browser-close.
The rest of the browser's tools can be selected in the form or named in tools. Those left out of the default reach further than reading does — rewriting request headers, running script in a page, cookies and storage, files — so give them deliberately. The form marks the ones to be most careful with as Sensitive.
Pricing
Pay per event, with Apify platform usage included:
| Event | Price | When |
|---|---|---|
tool-call | $0.01 | Each time the agent runs a browser tool. |
result | $0.05 | Once, for the answer the run ends with. |
Model tokens are not part of this: they are billed by your own provider or gateway.
All browser tools (70)
Every tool the browser offers. Select the ones you want in the form, or name them in tools; the agent finds sessionRef and tabRef (which identify a browser session and a tab) on its own.
Navigation & Page Control
| Tool | Description |
|---|---|
browser-launch | Launch a new local Chromium with extensive configuration (flags, geolocation, locale, color scheme, network, devices, emulation) |
browser-open | Launch Chromium with a persistent user-data directory for saved sessions, cookies, and profiles |
browser-connect | Connect to an existing Chrome/Chromium instance by domain and port |
browser-remote | Connect to a remote Playwright browser server via WebSocket endpoint |
browser-close | Close the current browser session or all tracked sessions |
browser-disconnect | Release a tracked Playwright browser session |
browser-navigate | Page navigation — goto, reload, back, forward (with waitUntil options) |
browser-wait | Wait for conditions — load state, delay, selector, text, URL, JS function, navigation |
browser-search | Run a search query through Google, DuckDuckGo, Bing, Brave, Yandex, Baidu, and more |
browser-find | Text-search within a browser tab, returning match count and position |
browser-resize | Resize the browser window to specified width and height |
Tabs & Frames
| Tool | Description |
|---|---|
browser-tabs | Manage tabs — list, create, switch, close, activate |
browser-frames | Manage iframes — list frames, switch between them |
Interacting with the Page
| Tool | Description |
|---|---|
browser-interact | Full interaction suite — check, clear, click, dblclick, focus, hover, fill, press, scroll, selectOption, setChecked, tap, type, uncheck |
browser-pinch | Perform a pinch gesture at a page coordinate to zoom in/out |
browser-attach | Attach files by targeting a file input element with local file paths or file refs |
browser-inject | Inject inline JavaScript or CSS into a page (inject/status/remove lifecycle) |
browser-evaluate | Evaluate a JavaScript expression in a tab context, optionally targeting a specific frame |
Reading the Page
| Tool | Description |
|---|---|
browser-snapshot | Snapshot the page's accessibility tree with intelligent filtering — deduplication, disambiguation, role filtering, depth flattening |
browser-screenshot | Capture a screenshot (JPEG or PNG, with optional ref annotation overlay) |
browser-pdf | Generate a PDF from the current page with layout and formatting options |
browser-extract | Extract values from the DOM — frame properties (article, HTML, markdown, text, title, URL) or element state (box, checked, enabled, focused, HTML, markdown, text, value, visible, attribute) |
browser-source | Capture document HTML, stylesheet sources, script sources, or image asset metadata |
browser-styles | Retrieve computed CSS styles for a targeted element |
browser-image | Read a snapshot-issued image ref and return it as PNG or JPEG |
browser-clipboard | Read or write clipboard text in the browser session |
browser-element | Inspect one element by @ref or selector: position, size, visibility, content, attributes, styles, accessibility, state or value |
browser-layout | Overlay a layout-debugging view on one element and return its geometry, optionally with measurement guides |
Content Extraction & Export
| Tool | Description |
|---|---|
browser-crawl | Multi-URL crawling with site-wide configuration, resource blocking, browser diversity, and result collection |
browser-pipe | Evaluate a browser expression and write the result to a file in YAML, JSON, text, or base64 format |
browser-download | Track and manage file downloads — get, list, clear |
Console, Network, Storage
| Tool | Description |
|---|---|
browser-console | Inspect browser console logs — clear, get, list with type and pattern filtering |
browser-exceptions | Inspect uncaught page exceptions — clear, get, list with pattern filtering |
browser-network | Track and inspect network requests — list, get with URL pattern filtering |
browser-route | Intercept network requests — abort, continue (with header override), fulfill, fallback |
browser-unroute | Remove one or all previously registered network interception routes |
browser-har | Control HAR recording — start, stop |
browser-throttle | Apply network throttling — latency, throughput, offline mode |
browser-security | Control TLS/certificate validation error handling |
browser-cookies | Manage cookies — get, set, delete, clear |
browser-storage | Access localStorage or sessionStorage — get, set, remove, clear |
browser-request | Issue a controlled request from the session network layer and return a bounded raw response; the network guard applies to every redirect hop |
Browser State & Metadata
| Tool | Description |
|---|---|
browser-history | Inspect or clear recorded navigation history |
browser-scene | Save and restore page state (URL, title, scroll position) — capture, restore, list, delete |
browser-emulate | Emulate device, locale, timezone, and User-Agent Client Hints |
browser-metrics | Retrieve performance and runtime metrics |
browser-memory | Inspect runtime memory state |
browser-heap | Capture heap information, optionally forcing garbage collection first |
browser-cpu | Adjust CPU throttling to simulate slower device performance |
browser-trace | Control Chrome performance trace recording with configurable categories |
browser-file | Inspect/clear tracked file references used for uploads |
browser-probe | Declare a bounded experiment against the current page, so what is done to it is attributable to one named experiment |
Media & Accessibility
| Tool | Description |
|---|---|
browser-media | Control and inspect media elements — info, mute, unmute, play, pause, seek |
browser-transcribe | Extract raw audio bytes from video or audio elements as base64 |
browser-still | Capture a still image from a media element at a specific timestamp |
browser-screencast | Capture video frames or MP4 screencast with configurable interval, format, and resolution |
browser-vision | Apply vision-deficiency filters for accessibility testing — blurred vision, reduced contrast, achromatopsia, deuteranopia, protanopia, tritanopia |
browser-highlight | Visual highlighting with measurement overlay — element bounds, size, viewport distances, border-radius |
Dialogs & Notifications
| Tool | Description |
|---|---|
browser-dialog | Handle browser dialogs — accept, dismiss, dismissAll, get |
browser-notifications | Retrieve browser notifications, optionally clearing them |
WebSocket & Runtime
| Tool | Description |
|---|---|
browser-websocket | Inspect/clear tracked WebSocket connections with pattern filtering |
browser-animation | Control animation playback — pause, resume, set playback rate |
Canvas
| Tool | Description |
|---|---|
canvas-diff | Compare two canvas or screenshot images pixel by pixel |
canvas-inspect | Inspect a canvas's dimensions, bounds, contexts and pixel export |
canvas-interact | Point-based pointer and keyboard input, or low-level events, inside a canvas |
Extensions
| Tool | Description |
|---|---|
extension-launch | Launch Chromium with an unpacked extension loaded |
extension-open | Open an extension page (popup, side panel, options) in a new tab |
extension-background | Evaluate JavaScript in the extension's background service worker |
extension-reload | Reload the extension and wait for its service worker to come back |
extension-storage | Read or write the extension's chrome.storage areas |


