Plans & billing

Per-organisation pricing — no per-seat surprises. Four tiers (Hobby, Pro, Growth, Enterprise), each with per-product event quotas, retention windows, and feature gates.

Sankofa charges per organization, not per seat. Add as many members as you need on Pro and above without thinking about cost — the only metered dimensions are monthly events, replays, deploy patches, and per-product feature gates.

This page is the canonical tier matrix. Every quota and feature gate documented here is enforced server-side (/server/engine/ee/billing/plans.go); changes here track the engine's source of truth.

The four tiers

TierPriceBest for
Hobby$0 / monthSolo devs, side projects, evaluating Sankofa
Pro$29 / monthSmall teams shipping production apps
Growth$99 / monthMid-sized teams + higher traffic
EnterpriseCustomCompliance-bound + multi-region orgs

Pricing is per organization. There's no per-seat charge on Pro and above.

Headline limits

HobbyProGrowthEnterprise
Events / month100K1M10MUnlimited
Session replays / month1K5K20KUnlimited
Deploy patches / month5K50K1MUnlimited
Event retention30 days90 days365 daysCustom (up to indefinite)
Replay retention7 days30 days90 daysCustom
Max members3UnlimitedUnlimitedUnlimited

Hobby is genuinely free — no card required at sign-up. Pro is a card-only checkout; Growth + Enterprise unlock invoicing and dedicated support.

Per-product feature gates

Each product has its own internal tier ladder. The headlines above are the org-wide tier; per-product tier is computed from your org tier (with custom Enterprise overrides).

Catch (errors + transactions + vitals + profiles)

HobbyProGrowthEnterprise
Error events / month100K5M25MCustom
Vitals capture
Transactions + spans
Profiles
Symbol uploads5 GBunlimitedunlimitedunlimited
Slack + webhook alerts
Auto-rollback (halt webhook)

Switch (flags + variants)

HobbyProGrowthEnterprise
Flags≤ 10unlimitedunlimitedunlimited
Variants per flag1 (boolean only)up to 10up to 25unlimited
Schedule rollouts
Halt webhook
Per-call exposure tracking (web)
SSO + audit export

Remote Config

HobbyProGrowthEnterprise
Items≤ 25unlimitedunlimitedunlimited
Fetches / month100K10Munlimitedunlimited
Cohort overridesbasic
A/B item experimentsup to 5 activeup to 25 activeunlimited
Version history30 days90 dayscustom

Pulse (surveys)

HobbyProGrowthEnterprise
Surveys≤ 3unlimitedunlimitedunlimited
Responses / month1K50K500Kunlimited
Branching logiclinear only
Custom renderer
Cohort entry / exit triggersbasic

Deploy (OTA)

HobbyProGrowthEnterprise
Releases / month5unlimitedunlimitedunlimited
Bundle size50 MB200 MB500 MBunlimited
Geo CDNshareddedicateddedicated + multi-regiondedicated + region pinning
Auto-rollbackbasic✓ + Catch-driven✓ + custom rules✓ + per-device gating

Plan (tickets, sprints, releases, pages)

HobbyProGrowthEnterprise
Boards1unlimitedunlimitedunlimited
Tickets / sprint50unlimitedunlimitedunlimited
Pages5unlimitedunlimitedunlimited
Jira importonceunlimited re-importsunlimited + custom workflows

Vision (5-surface strategy)

HobbyProGrowthEnterprise
Boards1unlimitedunlimitedunlimited
Editors / board3unlimitedunlimitedunlimited
OKR cycles1 activeunlimitedunlimitedunlimited
Initiatives5 activeunlimitedunlimitedunlimited
Public read-only sharinglink+ password+ custom domain
Multiplayer (Yjs)

Analytics (events + replay + heatmaps)

The headline event quota above (100K → 1M → 10M → unlimited) is the Analytics quota. Replay + heatmaps share the replay-quota row above.

Org-level features

HobbyProGrowthEnterprise
Audit log retention90 days1 year2 years7 years (SOX-compliant)
Audit log CSV export
Audit log webhook stream✓ + per-rule audit
Outbound webhooksbasic✓ + dead-letter replay
SSO (SAML 2.0 / OIDC)
SCIM 2.0 user provisioning
Data residency pinning✓ + custom region rollout
Service-level agreement99.9%99.95% + dedicated CSM

How metering works

Each metered dimension counts independently:

  • Events — every track, identify, setPerson, alias (and the Catch ingest equivalents). Counted once per request, regardless of batch size.
  • Replays — every session that the SDK uploads a non-empty replay file for.
  • Deploy patches — every JS-only patch shipped via sankofa patch (base releases don't count).
  • Catch events — separate quota from analytics events. catch.captureException and captureMessage count here.

Quotas reset on the 1st of every calendar month UTC. The dashboard's usage card warns at 80% and 95%. Past 100%:

  • Hobby — events past the cap are rejected at ingest with 429 quota_exceeded. Decisions still resolve to defaults.
  • Pro / Growth — overage billing kicks in (per-event rate documented at checkout). Service is uninterrupted.
  • Enterprise — custom contract terms; typically no overage, just an annual true-up.

Billing surface

ActionWhere
Upgrade / downgrade/dashboard/account/billing → Plan
Add a payment method/dashboard/account/billing → Payment methods
View invoices/dashboard/account/billing → Invoices
Switch to ACH (Pro+)/dashboard/account/billing → Payment methods → Add ACH
Request invoice billing (Growth+)Contact [email protected]

Card payments are processed via Stripe. ACH and invoice paths use direct ACH / wire transfer. Tax handling: VAT (EU), GST (UK / Australia), and US sales tax are computed at checkout.

Cancellations + downgrades

  • Cancel anytime — no commitment, no early-termination fees.
  • Downgrades are pro-rated; the new tier's quotas apply immediately.
  • Downgrade rejection — you can't downgrade if your current usage exceeds the target tier's quota for the current month. Wait for the next reset or reduce usage first.
  • Data preservation — downgrading from Pro to Hobby preserves your data, but the longer-tier retention windows truncate (e.g. 90-day events → 30-day events trims older rows).

What's next

Edit this page on GitHub