Plans and limits
Free, packs and Pro side by side, what counts toward the allowance (exposures, pageviews, events), what happens at the limit.
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 | 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.