Scout Browser avatar

Scout Browser

Pricing

from $0.005 / actor start

Go to Apify Store
Scout Browser

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

Ridwan Olanrewaju

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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

  1. You give it a task, a key, and optionally the domains it may visit.
  2. A model — yours — is handed a set of browser tools and works through the task one step at a time.
  3. 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

FieldRequiredWhat it is
promptyesThe task, in plain words.
apiKeyyesThe key for the account model starts with. Stored encrypted, used only to call that account, never shown to the agent or logged.
modelnoWhose 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.
baseUrlnoFor a custom/… model only: the https address of an OpenAI-compatible endpoint.
allowedDomainsnoDomains the agent may navigate to, with their subdomains. Empty means any public page.
maxStepsnoThe most model turns before it must answer (1–50, default 25). A turn can run several tools. Turns are not charged; tool calls are.
toolsnoBrowser 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:

Providermodel starts withSpoken to
Alibaba, Arcee, ByteDance, DeepSeek, Interfaze, Mistral, Moonshot, OpenAI, Sakana, StepFun, Tencent, xAI, Xiaomi, Z.aialibaba/, 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
Coherecohere/Cohere's OpenAI-compatible endpoint
Anthropicanthropic/Anthropic's own Messages API
Anything elsecustom/, with baseUrlChat 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

RecordWhereWhat it is
TRACEKey-value storeEvery 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 storeThe 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 custom base URL must be a public https address.
  • 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:

EventPriceWhen
tool-call$0.01Each time the agent runs a browser tool.
result$0.05Once, 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.

ToolDescription
browser-launchLaunch a new local Chromium with extensive configuration (flags, geolocation, locale, color scheme, network, devices, emulation)
browser-openLaunch Chromium with a persistent user-data directory for saved sessions, cookies, and profiles
browser-connectConnect to an existing Chrome/Chromium instance by domain and port
browser-remoteConnect to a remote Playwright browser server via WebSocket endpoint
browser-closeClose the current browser session or all tracked sessions
browser-disconnectRelease a tracked Playwright browser session
browser-navigatePage navigation — goto, reload, back, forward (with waitUntil options)
browser-waitWait for conditions — load state, delay, selector, text, URL, JS function, navigation
browser-searchRun a search query through Google, DuckDuckGo, Bing, Brave, Yandex, Baidu, and more
browser-findText-search within a browser tab, returning match count and position
browser-resizeResize the browser window to specified width and height

Tabs & Frames

ToolDescription
browser-tabsManage tabs — list, create, switch, close, activate
browser-framesManage iframes — list frames, switch between them

Interacting with the Page

ToolDescription
browser-interactFull interaction suite — check, clear, click, dblclick, focus, hover, fill, press, scroll, selectOption, setChecked, tap, type, uncheck
browser-pinchPerform a pinch gesture at a page coordinate to zoom in/out
browser-attachAttach files by targeting a file input element with local file paths or file refs
browser-injectInject inline JavaScript or CSS into a page (inject/status/remove lifecycle)
browser-evaluateEvaluate a JavaScript expression in a tab context, optionally targeting a specific frame

Reading the Page

ToolDescription
browser-snapshotSnapshot the page's accessibility tree with intelligent filtering — deduplication, disambiguation, role filtering, depth flattening
browser-screenshotCapture a screenshot (JPEG or PNG, with optional ref annotation overlay)
browser-pdfGenerate a PDF from the current page with layout and formatting options
browser-extractExtract 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-sourceCapture document HTML, stylesheet sources, script sources, or image asset metadata
browser-stylesRetrieve computed CSS styles for a targeted element
browser-imageRead a snapshot-issued image ref and return it as PNG or JPEG
browser-clipboardRead or write clipboard text in the browser session
browser-elementInspect one element by @ref or selector: position, size, visibility, content, attributes, styles, accessibility, state or value
browser-layoutOverlay a layout-debugging view on one element and return its geometry, optionally with measurement guides

Content Extraction & Export

ToolDescription
browser-crawlMulti-URL crawling with site-wide configuration, resource blocking, browser diversity, and result collection
browser-pipeEvaluate a browser expression and write the result to a file in YAML, JSON, text, or base64 format
browser-downloadTrack and manage file downloads — get, list, clear

Console, Network, Storage

ToolDescription
browser-consoleInspect browser console logs — clear, get, list with type and pattern filtering
browser-exceptionsInspect uncaught page exceptions — clear, get, list with pattern filtering
browser-networkTrack and inspect network requests — list, get with URL pattern filtering
browser-routeIntercept network requests — abort, continue (with header override), fulfill, fallback
browser-unrouteRemove one or all previously registered network interception routes
browser-harControl HAR recording — start, stop
browser-throttleApply network throttling — latency, throughput, offline mode
browser-securityControl TLS/certificate validation error handling
browser-cookiesManage cookies — get, set, delete, clear
browser-storageAccess localStorage or sessionStorage — get, set, remove, clear
browser-requestIssue 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

ToolDescription
browser-historyInspect or clear recorded navigation history
browser-sceneSave and restore page state (URL, title, scroll position) — capture, restore, list, delete
browser-emulateEmulate device, locale, timezone, and User-Agent Client Hints
browser-metricsRetrieve performance and runtime metrics
browser-memoryInspect runtime memory state
browser-heapCapture heap information, optionally forcing garbage collection first
browser-cpuAdjust CPU throttling to simulate slower device performance
browser-traceControl Chrome performance trace recording with configurable categories
browser-fileInspect/clear tracked file references used for uploads
browser-probeDeclare a bounded experiment against the current page, so what is done to it is attributable to one named experiment

Media & Accessibility

ToolDescription
browser-mediaControl and inspect media elements — info, mute, unmute, play, pause, seek
browser-transcribeExtract raw audio bytes from video or audio elements as base64
browser-stillCapture a still image from a media element at a specific timestamp
browser-screencastCapture video frames or MP4 screencast with configurable interval, format, and resolution
browser-visionApply vision-deficiency filters for accessibility testing — blurred vision, reduced contrast, achromatopsia, deuteranopia, protanopia, tritanopia
browser-highlightVisual highlighting with measurement overlay — element bounds, size, viewport distances, border-radius

Dialogs & Notifications

ToolDescription
browser-dialogHandle browser dialogs — accept, dismiss, dismissAll, get
browser-notificationsRetrieve browser notifications, optionally clearing them

WebSocket & Runtime

ToolDescription
browser-websocketInspect/clear tracked WebSocket connections with pattern filtering
browser-animationControl animation playback — pause, resume, set playback rate

Canvas

ToolDescription
canvas-diffCompare two canvas or screenshot images pixel by pixel
canvas-inspectInspect a canvas's dimensions, bounds, contexts and pixel export
canvas-interactPoint-based pointer and keyboard input, or low-level events, inside a canvas

Extensions

ToolDescription
extension-launchLaunch Chromium with an unpacked extension loaded
extension-openOpen an extension page (popup, side panel, options) in a new tab
extension-backgroundEvaluate JavaScript in the extension's background service worker
extension-reloadReload the extension and wait for its service worker to come back
extension-storageRead or write the extension's chrome.storage areas