Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion auth/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@ See [Profiles — Multiple auth connections per profile](/auth/profiles#multiple

## How is Managed Auth billed?

Managed Auth is included on all paid plans with no per-connection fees. It uses browser sessions to log in and keep your sessions fresh—these count toward your browser usage like any other browser session.
Managed Auth is included on all plans with no per-connection fees. It uses browser sessions to log in and keep your sessions fresh—these count toward your browser usage like any other browser session.

Auth sessions are fast (typically 5-30 seconds each). Kernel monitors session health and re-authenticates automatically when sessions expire—most stay valid for days. For example, keeping 100 auth connections logged in typically costs less than $5/month in browser usage. See [Pricing & Limits](/info/pricing#managed-auth) for details.
51 changes: 26 additions & 25 deletions info/pricing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,54 +25,55 @@ import { PricingCalculator } from '/snippets/calculator.jsx';
| Feature | Developer (free + usage) | Hobbyist ($30 / mo + usage) | Start-Up ($200 / mo + usage) | Enterprise |
| --- | --- | --- | --- | --- |
| Included credits / mo | $5 | $10 | $50 | Custom |
| Extended browser timeouts | ✅ | ✅ | ✅ | ✅ |
| Browser live view | ✅ | ✅ | ✅ | ✅ |
| Extended browser timeouts | ✅ | ✅ | ✅ | ✅ |
| Browser telemetry | ✅ | ✅ | ✅ | ✅ |
| Configurable browser viewports | ✅ | ✅ | ✅ | ✅ |
| Managed stealth mode | ✅ | ✅ | ✅ | ✅ |
| Stealth mode | ✅ | ✅ | ✅ | ✅ |
| Browser profiles | ✅ | ✅ | ✅ | ✅ |
| File i/o | ✅ | ✅ | ✅ | ✅ |
| Computer controls API | ✅ | ✅ | ✅ | ✅ |
| Browser replays | ❌ | 7 days | 30 days | Custom |
| Browser profiles | ❌ | ✅ | ✅ | ✅ |
| Managed auth profiles | ❌ | ✅ | ✅ | ✅ |
| File uploads & downloads | ❌ | ✅ | ✅ | ✅ |
| Configurable browser extensions | ❌ | ❌ | ✅ | ✅ |
| Browser replays | 1 day | 7 days | 30 days | Custom |
| Managed auth connections | 3 | unlimited | unlimited | unlimited |
| Configurable browser extensions | 1 | 1 | unlimited | unlimited |
| Configurable & BYO proxies | ❌ | ❌ | ✅ | ✅ |
| Browser pools | ❌ | ❌ | ✅ | ✅ |
| GPU acceleration | ❌ | ❌ | ✅ | ✅ |
| Projects | 1 | 1 | unlimited | unlimited |
| Support | Discord | Discord | Email | Shared Slack |
| SOC2 compliance | ✅ | ✅ | ✅ | ✅ |
| GPU acceleration | ❌ | ❌ | ✅ | ✅ |
| HIPAA compliance (BAA) | ❌ | ❌ | ❌ | ✅ |

> Note: Included monthly credits apply to usage costs only.

## Reserved browsers (browser pools)

With Browser Pools, you pay the standard usage-based price per GB-second while browsers are running. Idle browsers in a pool incur no disk charges — you only pay when a browser is actively in use.

> Note: GPU acceleration is not available for browser pools.

## Managed Auth

Managed Auth is included on all paid plans with no per-connection fees. Under the hood, it uses browser sessions to log in and keep your sessions fresh—these count toward your browser usage and concurrency like any other browser session.

Auth sessions are fast (typically 5-30 seconds each). Kernel monitors session health and re-authenticates automatically when sessions expire—most stay valid for days. For example, keeping 100 auth connections logged in typically costs less than $5/month in browser usage.

## Concurrency limits

Kernel enforces a single concurrency limit covering all browsers you run at oncewhether created on demand with `browsers.create()` or reserved in a [browser pool](/browsers/pools/overview). Your full limit is available to either API in any mix.
Kernel enforces a single concurrency limit covering all browsers you run at oncewhether created on demand with `browsers.create()` or reserved in a [browser pool](/browsers/pools/overview). Your full limit is available to either API in any mix.

| Feature | Developer (free + usage) | Hobbyist ($30 / mo + usage) | Start-Up ($200 / mo + usage) | Enterprise |
| --- | --- | --- | --- | --- |
| Concurrent browsers | 5 | 10 | 150 | Custom |
| App invocations | 5 | 10 | 50 | Custom |
| App invocations | 5 | 10 | 150 | Custom |
| App invocations (per-app) | 5 | 10 | 20 | Custom |
| Managed auth health check interval | N/A | 1 hour minimum | 20 minutes minimum | Custom |

> Note: Reserved capacity in a [browser pool](/browsers/pools/overview) counts toward your concurrency limit whether or not the browsers are currently acquired — a pool sized to 40 browsers uses 40 of your limit. Browser pools are available on Start-Up and Enterprise plans.
#### Notes
- Reserved capacity in a [browser pool](/browsers/pools/overview) counts toward your concurrency limit whether or not the browsers are currently acquired—a pool sized to 40 browsers uses 40 of your limit.
- Browsers in [Standby Mode](/browsers/standby) count against your concurrency limit.
- Limits are org-wide by default unless stated otherwise. `Managed auth connections` refer to profiles with active auth connections that Kernel maintains using your stored [Credentials](/auth/credentials) or [1Password connection](/integrations/1password). A single profile can have multiple auth connections (one per domain)—see [Profiles](/auth/profiles#multiple-auth-connections-per-profile) for details.

## Browser pools

With Browser Pools, you pay the standard usage-based price per GB-second while browsers are running. Idle browsers in a pool incur no disk charges—you only pay when a browser is actively in use.

GPU acceleration is not available for browser pools.

> Note: Browsers in [Standby Mode](/browsers/standby) count against your concurrency limit.
## Managed Auth

Managed Auth is included on all plans with no per-connection fees. Under the hood, it uses browser sessions to log in and keep your sessions fresh—these count toward your browser usage and concurrency like any other browser session.
Comment thread
cursor[bot] marked this conversation as resolved.

Auth sessions are fast (typically 5-30 seconds each). Kernel monitors session health and re-authenticates automatically when sessions expire—most stay valid for days. For example, keeping 100 auth connections logged in typically costs less than $5/month in browser usage.

> Note: Limits are org-wide by default unless stated otherwise. `Managed auth profiles` refer to profiles with active auth connections that Kernel maintains using your stored [Credentials](/auth/credentials) or [1Password connection](/integrations/1password). A single profile can have multiple auth connections (one per domain) — see [Profiles](/auth/profiles#multiple-auth-connections-per-profile) for details.

## Rate limiting

Expand Down
19 changes: 8 additions & 11 deletions snippets/calculator.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ export const PricingCalculator = () => {
const labelStyle = { fontWeight: 600, fontSize: '0.875rem', minWidth: '10rem', flexShrink: 0, maxWidth: '10rem' };
const rowStyle = { display: 'flex', alignItems: 'center', gap: '0.5rem', minHeight: '2.25rem' };
const inputStyle = { minWidth: 0, flex: 1, maxWidth: '100%', boxSizing: 'border-box', background: 'transparent' };
const numberInputStyle = {
borderBottom: '1px solid #81b300', textAlign: 'right'
};
const selectStyle = {
...inputStyle,
appearance: 'none',
Expand All @@ -82,7 +79,7 @@ export const PricingCalculator = () => {
const btnStyle = (active) => ({
padding: '0.25rem 0.5rem',
borderRadius: '0.375rem',
border: `1px solid ${active ? '#81b300' : 'var(--btn-border)'}`,
border: '1px solid var(--btn-border)',
fontSize: '0.875rem',
background: active ? 'var(--btn-selected-bg)' : undefined,
});
Expand All @@ -99,11 +96,11 @@ export const PricingCalculator = () => {
</div>
<div style={rowStyle}>
<label style={labelStyle}>Session length (seconds)</label>
<input type="number" style={{...inputStyle, ...numberInputStyle}} value={avgSessionLength} onChange={(e) => { hasInteracted.current = true; setAvgSessionLength(parseInt(e.target.value)); }} />
<input type="number" style={{...inputStyle}} value={avgSessionLength} onChange={(e) => { hasInteracted.current = true; setAvgSessionLength(parseInt(e.target.value)); }} />
</div>
<div style={rowStyle}>
<label style={labelStyle}>Number of sessions</label>
<input type="number" style={{...inputStyle, ...numberInputStyle}} value={numSessions} onChange={(e) => { hasInteracted.current = true; setNumSessions(parseInt(e.target.value)); }} />
<input type="number" style={{...inputStyle}} value={numSessions} onChange={(e) => { hasInteracted.current = true; setNumSessions(parseInt(e.target.value)); }} />
</div>
<div style={rowStyle}>
<button class="btn btn-primary dark:text-white" style={btnStyle(browserType === 'headless')} onClick={() => handleBrowserTypeChange('headless')}>Headless</button>
Expand All @@ -113,15 +110,15 @@ export const PricingCalculator = () => {
<div style={rowStyle}>
<span style={{ width: '100%', fontSize: '0.8rem', fontStyle: 'italic' }}>
${(usagePrices * multiplier).toFixed(8)}/second
{browserType === 'gpu' && <span style={{ marginLeft: '0.5rem', color: '#81b300' }}>(Startup tier required)</span>}
{browserType === 'gpu' && <span style={{ marginLeft: '0.5rem' }}>(Startup tier required)</span>}
</span>
</div>
</Card>
<Card title="Price" icon="circle-dollar">
<div style={rowStyle}><span style={labelStyle}>Base plan:</span> <span style={{ background: flash ? '#81b300' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>${planPrices[plan].toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Usage:</span> <span style={{ background: flash ? '#81b300' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>+${usageCost.toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Free credits:</span> <span style={{ background: flash ? '#81b300' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>-${includedUsageCredits.toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Total cost:</span> <span style={{ background: flash ? '#81b300' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>${price.toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Base plan:</span> <span style={{ background: flash ? '#CAB168' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>${planPrices[plan].toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Usage:</span> <span style={{ background: flash ? '#CAB168' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>+${usageCost.toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Free credits:</span> <span style={{ background: flash ? '#CAB168' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>-${includedUsageCredits.toFixed(2)}</span></div>
<div style={rowStyle}><span style={labelStyle}>Total cost:</span> <span style={{ background: flash ? '#CAB168' : 'transparent', transition: 'background 0.5s ease', marginLeft: 'auto' }}>${price.toFixed(2)}</span></div>
</Card>
</Columns>
);
Expand Down
Loading