Pricing & Plans
Emban has four standard plans plus a custom enterprise path. Each plan caps two usage meters (events ingested per month, widget/dashboard queries per month) and a handful of per-account limits (published dashboards, editor seats, API keys). Entitlements are enforced at the API layer, not by the UI — if a plan doesn't include a feature, the endpoint returns 402 Payment Required with a machine-readable violation code.
Plans at a glance
| Plan | Price | Events/mo | Queries/mo | Published dashboards | Editor seats | API keys |
|---|---|---|---|---|---|---|
| Free | $0/mo | 250,000 | 2,500 | 1 | 1 | 2 |
| Starter | $149/mo | 1,000,000 | 10,000 | 3 | 3 | 5 |
| Growth | $399/mo | 10,000,000 | 100,000 | Unlimited | 10 | 15 |
| Scale | Custom | 100,000,000 | 1,000,000 | Unlimited | Unlimited | Unlimited |
Features by plan
| Feature | Free | Starter | Growth | Scale |
|---|---|---|---|---|
| Core event ingestion and dashboards | ✓ | ✓ | ✓ | ✓ |
| Query Builder (adhoc SQL) | ✓ | ✓ | ✓ | ✓ |
| Alerts + scheduled reports | ✓ | ✓ | ✓ | ✓ |
| Remove “Powered by Emban” branding on embeds | — | ✓ | ✓ | ✓ |
| Custom dashboard theme (colors, typography) | — | ✓ | ✓ | ✓ |
| Audit log access (admin-side + API) | — | — | ✓ | ✓ |
| Embed permissions (locked filters, hidden widgets) | — | — | ✓ | ✓ |
GET /v1/query API path; broader dashboard, report, alert, and adhoc-SQL metering is part of the billing hardening work before GA.How usage meters work
Two counters are tracked per org and reset at the start of each UTC calendar month:
/v1/events POST since the 1st of the month (UTC). Each accepted event counts as one; dropped/invalid events are not counted.
emban.events is one tick.
Both counters live in the usage_daily table and can be read via GET /v1/billing:
{
"plan": "growth",
"status": "active",
"events_limit": 10000000,
"events_used": 3142857,
"queries_limit": 100000,
"queries_used": 41200,
"trial_ends_at": null,
"available_plans": [...]
}
What happens when you hit a limit
| Limit hit | Endpoint behavior | Violation code |
|---|---|---|
events_used ≥ events_limit | POST /v1/events returns 402 | events_limit_reached |
queries_used ≥ queries_limit | Widget/dashboard/query endpoints return 402 | queries_limit_reached |
published_dashboards ≥ max_published | POST /v1/dashboards/{id}/publish returns 402 | published_dashboards_limit |
editors ≥ max_editors | POST /v1/members/invite or PATCH /v1/members/{id} returns 402 | editor_seats_limit |
api_keys ≥ max_api_keys | POST /v1/api-keys returns 402 | api_keys_limit |
| Plan doesn't include audit log | GET /v1/audit returns 402 | audit_unavailable |
Every 402 response body carries a machine-readable violation:
{
"code": "published_dashboards_limit",
"message": "Starter plan allows 3 published dashboards",
"plan": "starter",
"upgrade_to": "growth",
"limit": 3,
"used": 3
}
upgrade_to is the next paid tier that removes the violation — useful for rendering an inline upgrade prompt in your app. The admin UI surfaces these violations as pricing-gated tooltips on the relevant buttons.
Overages, grace, and billing status
Emban does not auto-bill overages today. When you hit a limit, the corresponding endpoint returns 402 until usage resets at the start of the next month, or until you upgrade. There is no auto-upgrade and no surprise invoice — the bill equals your plan price, nothing more.
Billing status is an independent dimension:
| Status | Effect |
|---|---|
active / paid | All endpoints work subject to plan limits. |
trialing | All endpoints work subject to plan limits until trial_ends_at. |
past_due | Write endpoints blocked; reads continue for up to 14 days. |
canceled | Account downgraded to Free limits; data remains but feature flags reset. |
Enterprise
Enterprise is not a fixed SKU. We work backwards from requirements — event volume, audit retention, compliance commitments, self-host, SLAs, dedicated infrastructure — and issue a signed license that overrides the standard plan limits. A license can raise any field on PlanSpec: events_limit, queries_limit, max_published_dashboards, max_editors, max_api_keys, and feature flags like audit_log_access and embed_permissions.
Pricing starts conversation-driven and depends on the license profile. Email hello@emban.sidelabs.dev to scope an engagement.
Picking a plan
402.