# Plans and limits

Self-hosted is free with no limits. SplitHub Cloud bills per project and per **exposure**: every pageview and custom event of an analytics property counts like one exposure. Goals, members, experiments and projects are unlimited.

| | Self-hosted | Cloud Free | Packs | Pro |
|---|---|---|---|---|
| Price | $0 | $0 | from $5, prepaid | $19 / project / month |
| Exposures, pageviews and events | unlimited | 50,000 / month | $5 → 250k · $10 → 550k · $25 → 1.5M · $50 → 3.2M | 500,000 / month included |
| Analytics reports (sources, funnels, retention…) | — (raw counts in the CLI) | ✓ | ✓ | ✓ |
| Dashboard, live overrides, targeting, links | — (CLI and MCP only) | ✓ | ✓ | ✓ |
| Alerts, channels, digest | — | — | — | ✓ |
| AI reviews (start, progress checks, finish, on demand) | — | — | — | ✓ |
| Packs | — | — | — | 25% more exposures per pack |
| Raw events kept | your database | 7 days | 30 days | 30 days |
| Analytics visits, then daily sums | your database | 90 days, then 400 days | 90 days, then 400 days | 90 days, then 400 days |
| Experiment numbers and verdicts | your database | while the experiment exists | while the experiment exists | while the experiment exists |
| Members | — | unlimited | unlimited | unlimited |
| Support | GitHub | email | email | priority email |

## What counts

- **An exposure**: one visitor seeing one running experiment, counted once per visitor and experiment; a returning visitor is not counted again. A page with two running experiments costs two exposures per new visitor.
- **A pageview**: one page row of a running analytics property, including each client-side navigation.
- **A custom event**: one `track()` call that reaches a running property.

Each counts as one against the same allowance. Not counted: goals and conversions (including the experiment conversions counted from your events), time on page, scroll depth and identify, exposures of paused, finished or draft experiments and rows of paused or archived properties (refused at the edge), visitors outside `traffic` or skipped by the targeting flow, and bots.

One install sends each action once: a `track('signup')` with a property is one event row that also converts the experiments measuring `signup`, so it is billed once.

## Order of consumption

Free monthly quota → Pro allowance → packs. The free quota and the Pro allowance reset on the first of the month (UTC); packs never expire.

## At the limit

Ingest answers `429 quota_exceeded` with `Retry-After`; the SDK keeps assigning variants locally and your app behaves normally, while no exposures, pageviews or events are stored. The dashboard shows usage. Pro alert rules can notify you at a configured quota threshold. Buying a pack or the month rolling over reopens the gate within a minute.

## Payments

Stripe Checkout for packs and the Pro subscription; invoices and cancellation in the Stripe customer portal from the project's Billing tab. Prices in USD, taxes added where they apply. Check the checkout and billing portal for the applicable payment and cancellation terms.

## Bigger

Several million exposures or pageviews a month, SSO, an SLA, or a reseller arrangement: hello@splithub.io with your expected volume and stack.
