Open sourceApache 2.0

Embedded analytics

Embedded analytics for developers: build or buy

How to put customer-facing dashboards into your product: when embedding a BI tool is the right call, when to build on a code-first layer, how to keep tenants apart, and what eight tools offer today.

Definition

What is embedded analytics?

Embedded analytics is reporting that lives inside your own product: charts, dashboards and exports that your customers see in your app, each scoped to their own data. A usage page in a developer tool, a sales report in a store admin and a spend chart in a billing portal are all embedded analytics.

It differs from internal BI in two ways. The audience is your customers, so every query must be limited to one tenant. And the charts are part of your product, so they have to load fast and look like the rest of your UI.

The main decision

Embed a BI tool, or build with your own components

Embedding a BI tool means building dashboards in a vendor’s editor and placing them in your app with an iframe, a web component or the vendor’s SDK. The vendor runs the queries, draws the charts and handles filtering.

Building means your backend serves the numbers through an API and your frontend draws them with the components you already use. A code-first layer such as hypequery covers the backend half: metric definitions, tenant scoping, typed endpoints and React hooks. The charts are yours.

Embedding a BI tool compared with building on a code-first layer
Embed a BI toolBuild on a code-first layer
Who draws the chartsThe vendor. You pick chart types and theme them.You, with your own components or a chart library.
Time to first dashboardShort: connect a database, build a dashboard, embed it.Longer: you write the API, the components and the layout.
Look and feelThemeable within what the vendor exposes.Whatever your design system already does.
Where metrics are definedIn the vendor’s model or dashboard editor.In your codebase, reviewed and versioned like other code.
Tenant isolationSigned embed tokens or row-level rules set in the vendor.Enforced in your backend from the authenticated session.
Self-serve explorationOften included: filters, drill-down, sometimes a query editor.Only what you build.
Cost modelPlatform fee, per user, per viewer or usage based.Engineering time plus your database and hosting.

Tenant isolation

Every query scoped to one customer, enforced in one place

The bug that matters in embedded analytics is a missing tenant filter. If each query adds WHERE tenant_id = ? by hand, the one that forgets it shows a customer someone else’s data. The fix is the same whichever route you take: read the tenant from the authenticated session on the server, apply it centrally, and reject queries that arrive without it.

BI tools do this with signed embed tokens or row-level rules configured in the vendor. ClickHouse itself offers row policies (CREATE ROW POLICY) and separate tables or databases per tenant; the ClickHouse embedded analytics guide compares those models. With hypequery, the tenant key is part of the dataset definition and execution fails closed when tenant context is missing.

analytics/usage.ts

What the backend guarantees

  • The tenant filter is injected from runtime context, not written per query.
  • A query against a tenant-scoped dataset without tenant context throws instead of running.
  • Explicit filters on the tenant column are rejected, so callers cannot widen their own scope.
  • Over HTTP, Serve extracts the tenant from your auth result and can require it on every request. See the Serve multi-tenancy docs.

Performance

Fast dashboards on ClickHouse

Customer dashboards run the same few queries for many tenants, so the table layout matters more than the tool on top. Three habits cover most of it.

Lead the sorting key with the tenant

With ORDER BY (tenant_id, ts), ClickHouse uses the primary index to skip other tenants’ granules. On a 2 million row test table with 100 tenants, a one-tenant count read 4 of 245 granules; with ORDER BY ts it read all 245.

Pre-aggregate the heavy charts

Materialized views and projections move aggregation to insert time, so a dashboard reads daily rollups instead of raw events. The materialized views guide covers the tradeoffs.

Cache and rate limit per tenant

Dashboards repeat queries, and one large customer can crowd out the rest. Cache repeated results with a TTL and put limits on the API in front of ClickHouse. See dataset caching and rate limiting.

Vendor comparison

Embedded analytics tools compared

How each tool gets analytics into your app, whether you can read and run the code yourself, and how it is priced. Each cell was checked against the vendor’s own site on November 8, 2026; prices change, so confirm on the vendor’s pricing page before you decide.

Embedded analytics vendors compared, checked November 8, 2026
ToolHow it embedsOpen sourceSelf-hostPricing (published)
Metabaseiframe (full app or guest embeds), web components, React SDKPartly: open source edition under AGPL; paid editions under a commercial licenseYesOpen source free. Starter $100/mo plus $6/user, Pro $575/mo plus $12/user, Enterprise from $20,000/yr
LuzmoWeb components by default, iframe option, React, Vue and Angular components, Flex SDK for charts from codeNoNot by default; private deployments by arrangement on EnterpriseFrom €1,995/mo billed annually, scaling with usage
EmbeddableWeb component, with guides for React, Next.js, Vue and AngularPartly: the Remarkable UI component library and CLI are MITNo: the platform is hosted; the Cube data layer it uses can run in your environmentQuote on request; fixed price with unlimited usage
GoodDataiframe, web components, React SDK (GoodData.UI), raw data from the JS and Python SDKsPartly: Python SDK is MIT; GoodData.UI is under a commercial licenseEnterprise only, on demandProfessional: platform fee plus per workspace. Enterprise: custom. No public prices
ExploWeb component, iframeNot statedEnterprise only (on-premise deployment)Pro from $1,995/mo; Enterprise on request
Sisenseiframe, Embed SDK, Compose SDK (React, Angular, Vue, web components), REST APINo: Compose SDK source is public under an end user license agreementEnterprise: your own cloud or on-premNo public prices: Enterprise through sales, Self-Serve free trial
Cubeiframe and React Embed SDK (Premium and Enterprise plans), headless REST, GraphQL and SQL APIsYes: Cube Core, Apache 2.0Yes (Cube Core)Free tier. Starter $40 and Premium $80 per developer per month. Enterprise custom
hypequeryHeadless: typed HTTP API and React hooks over your datasets; you render the chartsYes: Apache 2.0Yes: a library that runs in your own backendOpen source, free. A hosted option is on a waitlist

All eight document a ClickHouse connection. Embeddable connects to databases through Cube. hypequery is listed last because it is ours.

An honest answer

When a BI embed is the better choice

Building on a code-first layer is not always the right call. Embed a BI tool such as Metabase, Luzmo or GoodData when:

  • You need many dashboards soon and have no frontend engineers to build them.
  • Customers expect to explore data themselves: build their own charts, drill down, or write queries.
  • Non-engineers on your team should be able to create and change customer dashboards without a deploy.
  • Analytics is a reporting add-on rather than part of the product’s core experience.
  • You already run that BI tool internally and the same models can serve customers.

Build when the charts are part of the product, need to match your design system, are also served through an API or to AI agents, or when per-viewer pricing grows faster than your revenue per customer. Many teams start with an embed and move the most-used views into their own components later.

Questions

Embedded analytics FAQ

What is embedded analytics?

Embedded analytics means showing charts, dashboards and reports inside your own product, to your own customers, scoped to their data. It differs from internal BI, where employees look at data across the whole company.

Should I embed a BI tool or build my own dashboards?

Embed a BI tool when you need many dashboards fast, want customers to explore data on their own, or have no frontend capacity. Build when analytics is part of the core product, needs to match your design system, or is served through an API as well as a UI.

How do I keep one customer from seeing another customer’s data?

Take the tenant from the authenticated session on the server, apply it to every query in one place, and reject queries that arrive without it. With a BI embed, that usually means a signed token carrying the tenant; with a code-first layer, it is a tenant key on the dataset.

Is ClickHouse a good database for embedded analytics?

ClickHouse suits customer-facing analytics because it aggregates large tables quickly. Put the tenant column first in the table’s sorting key so single-tenant queries read only that tenant’s granules, and pre-aggregate heavy dashboards with materialized views or projections.

What does embedded analytics cost?

In the table on this page, published starting prices run from free open source editions to about 2,000 a month (Luzmo from €1,995, Explo Pro from $1,995), and several vendors quote only on request. Building costs engineering time instead of license fees.

Which embedded analytics tools are open source?

Of the tools compared here, Metabase (AGPL open source edition), Cube (Cube Core, Apache 2.0) and hypequery (Apache 2.0) have open-source cores. Embeddable and GoodData publish parts of their SDKs under MIT.

Guides

Embedded analytics guides and docs

Deeper reading on each part of an embedded analytics stack on ClickHouse. For the metric definitions behind the dashboards, see the ClickHouse semantic layer; for clients and SQL patterns, see ClickHouse for TypeScript and Python developers.

Sources

Vendor pages used for the comparison table, all fetched on November 8, 2026.

Metabase
www.metabase.com/pricing/
www.metabase.com/docs/latest/embedding/introduction
github.com/metabase/metabase
Luzmo
www.luzmo.com/pricing
developer.luzmo.com/guide/embedding--component-api-reference
developer.luzmo.com/
www.luzmo.com/compare/metabase
Embeddable
embeddable.com/pricing
docs.embeddable.com/deployment/embedding
embeddable.com/security
github.com/embeddable-hq
GoodData
www.gooddata.ai/pricing/
www.gooddata.ai/docs/cloud/embed-visualizations/
github.com/gooddata/gooddata-ui-sdk
github.com/gooddata/gooddata-python-sdk
Explo
www.explo.co/pricing-two-tier
docs.explo.co/embedding-documentation/web-component-vs-iframe
Sisense
www.sisense.com/pricing/
developer.sisense.com/guides/choosing-an-integration.html
github.com/sisense/compose-sdk-monorepo/blob/main/LICENSE.md
Cube
cube.dev/pricing
docs.cube.dev/embedding
github.com/cube-js/cube

Next step

Serve one tenant-scoped chart from your own backend

Define a dataset with a tenant key, serve it over HTTP and render it with a React hook. Open source, and it runs in your own backend. Want it hosted?

Get early access to hypequery cloud.

Cloud hosts the same model you run in your backend, with a managed API and MCP server, versions, and rollback. We're letting teams in a few at a time. Join the waitlist and we'll reach out when your project can go live.

How do you want to build your analytics layer? (Optional)
What features do you most need? (Optional)

Pick as many as you like.

Only your email is required. All other questions are optional.