Cost model
Every completed run carries a cost object derived from what actually happened— wall-clock duration, real token counts, and provider-reported charges — never a static catalog price, except for hosted agents whose APIs don't report a charge (those are clearly labeled estimates).
The cost object
"cost": {
"total_usd": 0.0031,
"currency": "USD",
"basis": "mixed", // compute | browser-time | per-task | tokens | mixed
"breakdown": [
{ "label": "browser time 0.42 min × $0.012/min", "amount_usd": 0.005 },
{ "label": "gpt-4o 3.1k in / 0.4k out tok", "amount_usd": 0.0121 }
],
"estimated": true,
"note": "Model token usage was not reported for this run — token cost not included."
}total_usd— the sum of the breakdown, rounded to 3 significant figures.basis— what the run is fundamentally billed on:compute,browser-time,per-task,tokens, ormixed(browser/compute + tokens).breakdown— one line per cost component, each with alabelandamount_usd.estimated—truewhen any component uses a catalog/published price rather than a measured or provider-reported figure.note— an honesty note, e.g. when a model's token usage couldn't be counted or when proxy bandwidth was estimated.
A run that never started (timing_ms 0) has no cost object at all.
How total is computed
The builder picks the first branch that matches the runner, in this order:
- Provider reported a real charge (
provider_cost_usdset by the adapter) → surfaced as-is,basis: per-task,estimated: false. - Hosted agent without a reported charge → the catalog per-task price, flagged
estimatedwith a note. - Read-only API→ the provider's published per-request price, plus token lines if the Gemini extraction layer ran.
- Hosted cloud browser → real browser-time × the published per-minute rate, plus a proxy-bandwidth line for Browserbase Stealth, plus token lines.
- Self-hosted OSS engine → the Cloud Run compute this run consumed, plus token lines.
Compute
Self-hosted engines are billed on the Cloud Run compute the run consumes. This service runs at 4 vCPU / 4 GiB on on-demand tier-1 pricing ($0.000024/vCPU-s + $0.0000025/GiB-s), so wall-clock time is charged at ≈ $0.000106/second.
Browser-time
Hosted cloud browsers are billed per browser-minute at each provider's published rate:
| Provider | USD / browser-minute |
|---|---|
| lightpanda | $0.003 |
| browserless | $0.006 |
| steel | $0.008 |
| kernel | $0.009 |
| hyperbrowser | $0.010 |
| browserbase / browserbase-stealth | $0.012 |
| anchor | $0.015 |
Browserbase Stealth adds a separate residential-proxy line at $10/GB, attributed from the session's reported proxyBytes(or a small ~5 MB estimate when the provider hasn't reported it yet — in which case the total is flagged estimated).
LLM tokens
When an LLM backend runs, its real token usage is tracked per provider (prompt + output, where output includes thinking/reasoning tokens billed at the output rate) and priced at, per 1M tokens:
| Provider | Input / 1M | Output / 1M |
|---|---|---|
| Gemini 2.5 Pro (default) | $1.25 | $10.00 |
| Gemini 2.5 Flash | $0.30 | $2.50 |
| GPT-4o | $2.50 | $10.00 |
| Claude Sonnet 5 | $3.00 | $15.00 |
If an engine's label implies an LLM ran but no token usage was reported, the token cost is omitted and a note says so — the total is never padded with a guess.
What estimated means
estimated: false means every line is a measured or provider-reported figure (a real charge, real browser-time × published rate, or real token counts × published rate). estimated: true means at least one line uses a catalog/published per-task or per-request price, or a proxy-bandwidth estimate. The published per-minute and per-token rates are always applied to real measured usage.
See also
- Create a response — how runs are created and billed
- Framework + LLM — which runs incur token cost