Open-source alternative to Tableau embedded analytics

Software vendors and portals that embed Tableau views for customers can move that layer to self-hosted Apache Superset or Metabase, but the host application, identity and tenancy design carry most of the work.

On this page

Open-source alternative to Tableau embedded analytics: the short answer

If your product team embeds Tableau views for customers and the renewal or licensing terms now make that expensive or uncertain, the main self-hosted options are Apache Superset, which embeds dashboards with guest tokens and row-level security, and Metabase, whose embedding and tenancy features depend on the plan you choose. In both cases the outcome is decided less by the BI tool than by your host application, identity and tenancy design: who requests the token, how customer identity reaches the query, and which origins may display the dashboard. Tableau term licenses stop working when the subscription lapses, which is a different risk from a legacy perpetual key, so the exit plan should start before the renewal date rather than after it.

Apache Superset is licensed under Apache-2.0 and has no paid edition, so its licensing cost is zero, while the infrastructure, implementation, hardening and support costs remain. Your host application's server requests guest tokens from /api/v1/security/guest_token/ using a service account, and the documentation warns against calling that endpoint from client-side code. Set the EMBEDDED_SUPERSET feature flag to True, configure the Allowed Domains list for each dashboard (an empty list permits any origin), and confirm that your row-level rules match how your customers are separated in the data. Superset also requires a user-specified SECRET_KEY to start, so plan how that secret is stored and rotated.

Metabase's open source edition is free to self-host with unlimited users and dashboards, but the Metabase pricing page places SSO, row and column level permissions, and multi-tenant data segregation in the Pro and Enterprise plans. Embedding for external customers therefore needs a cost check against the plan that includes the tenancy controls you require, and your team should confirm current Pro and Enterprise terms directly with Metabase before deciding. Ask your implementation partner to map each customer-facing requirement, such as per-tenant data isolation, sign-in and audit needs, to the component that delivers it, so the decision rests on a written scope rather than on a feature list.

Which embedded capabilities map to Superset and Metabase

This table maps the embedding needs of a software vendor or portal against Apache Superset and the Metabase editions. Read each row as a question to answer for your product, then confirm the current edition behavior with the vendor before you commit. The main takeaway is that Metabase row-level permissions and SSO sit in paid plans, while Superset has these capabilities in its open-source code but requires your own host application design.

Embedding needApache Superset (Apache-2.0)Metabase Open SourceMetabase Pro or Enterprise
Dashboard embedding in a host appEmbedded SDK with EMBEDDED_SUPERSET enabledEmbedding available; confirm the terms for your useEmbedding included; confirm current behavior with Metabase
Per-customer row filteringGuest token carries row-level security rulesRow-level permissions not includedRow-level permissions included; confirm filter setup with Metabase
SSO for embedded viewersToken issued by your host server via a service accountGoogle sign-in and LDAP onlySSO included, including JWT and OIDC; confirm setup for your identity provider
Allowed domains controlPer-dashboard Allowed Domains; empty list permits any originConfirm with vendor how origin control is handledConfirm with vendor how origin control is handled
Usage auditing per tenantDepends on your logging and metadata design; confirm with your teamNot includedUsage analytics and auditing included; confirm reporting granularity
Multi-tenant data segregationDesigned in your host app and RLS rulesNot includedMulti-tenant data segregation included; confirm the model for your tenants
Air-gapped hostingSelf-hosted in your network; confirm any external asset needsSelf-hosted in your networkAir-gapped deployment offered only on Enterprise

How Superset guest tokens and row-level security work in a host app

The host server does the authentication. Your application logs in its own user through the identity system you already run, decides which dashboard that user may see, and then calls Superset's /api/v1/security/guest_token/ endpoint using a service account. The request carries the dashboard identifier and the row-level rules that restrict what the viewer can see, for example a clause that limits a sales dashboard to one customer's region. Superset returns a short-lived guest token, and the host passes that token to the browser, where the @superset-ui/embedded-sdk package mounts the dashboard. The browser never holds the service account credentials. Confirm the token lifetime and the exact request fields against the current embedding documentation for the Superset version you deploy, because these details change between releases.

Three controls decide whether this design holds up. First, the guest token endpoint must never be called from client-side code, since anyone who can read the browser's network traffic could then request tokens with arbitrary rules. Second, the EMBEDDED_SUPERSET feature flag must be set to True in the Superset configuration, or the embedded SDK and the guest token endpoint stay unavailable. Third, each embedded dashboard has an Allowed Domains setting, and an empty list accepts requests from any origin. Set it to the exact host names of your portal for production, and test from an unlisted origin to confirm the request is refused. Review the Superset embedding documentation before you finalize these settings.

Row-level rules are only as reliable as the values the host sends. If your application builds the rule from a client-supplied tenant identifier, a viewer can change that value and see another customer's rows, so the host must derive the tenant from its server-side session. Plan a test matrix with at least two tenants and check that each guest token returns only that tenant's data in the database query, not just in the chart. Ask your implementation partner or internal team to document who owns the service account, how its secret is rotated, and how token issuance is logged. These decisions belong in the host's identity and tenancy design, and they should be reviewed before the first customer sees a dashboard.

Choosing between Superset embedding and Metabase embedding by plan

Apache Superset embeds dashboards with the @superset-ui/embedded-sdk package, and your host application requests a guest token from the server side with a service account. Because the license is Apache-2.0 with no paid edition, the software itself carries no license fee. The cost sits in the components you run: the Flask and React application, a PostgreSQL or MySQL metadata database, and, for alerts, async queries and thumbnails, a caching layer with Celery workers. Superset fits teams that want a full authoring environment, row-level security set per guest token, and no per-user charge for viewers.

  • Token ownership: Your backend mints guest tokens, so the host application owns who sees which rows. The docs warn against calling the guest token endpoint from client code.
  • Feature flag: EMBEDDED_SUPERSET must be set to True before the SDK and guest token endpoint work.
  • Component stack: Plan for the web app, metadata database and, if you need them, the caching layer and workers as separate operating concerns.
  • Identity: Viewers reach dashboards through guest tokens, while internal authors sign in through database, LDAP or OAuth2 with Flask-AppBuilder.
  • Operations: Upgrades require a metadata database backup, superset db upgrade, superset init and staging tests.

Confirm with your platform team which components you will operate, and ask any implementation partner to price the token service, the Allowed Domains policy and the upgrade routine as separate line items.

Options for embedded dashboards and when each fits

Embedding Tableau views for customers raises three questions: how the host application obtains access, how each viewer sees only their own rows, and what the license or plan allows. The options below answer those questions differently, so the choice depends on your tenancy model, identity stack and tolerance for paid tiers.

Apache Superset embedded

Superset embeds dashboards with the @superset-ui/embedded-sdk package, which requires the EMBEDDED_SUPERSET feature flag set to True. Your host application's server requests a guest token from the guest token endpoint using a service account, and that token can carry row-level security rules per viewer. The docs warn against calling that endpoint from client code, so the token exchange belongs on your backend. Check the Allowed Domains setting on each dashboard, since an empty list permits any origin. Licensing is Apache-2.0 with no paid edition, so the cost is the infrastructure and the engineering time to build the host integration.

Metabase Open Source embedding

The free Open Source edition of Metabase is self-hosted with unlimited users and dashboards, but the embedding features you need for multi-customer delivery sit on paid tiers. Check the Metabase pricing page against your exact embedding requirement before you build on the free edition. The open-source image is AGPL-3.0 licensed, so review what modifications you distribute to customers. Expect to validate signed embedding and access controls yourself, and confirm with Metabase which embedding options the free edition includes at your version.

Metabase Pro

Pro adds SSO, row and column level permissions, multi-tenant data segregation and usage analytics and auditing, according to the pricing page. Those are the controls a software vendor typically needs when customers share one instance and must not see each other's data. Starter at $100 per month, or $90 per month billed yearly, includes only 5 users and omits row-level permissions, so it does not fit a multi-tenant design. Pro is listed at $575 per month, or $517.50 per month billed yearly, with 10 users included and extra users at $12 per month. Confirm current prices and the user count for your tenant model with Metabase.

Metabase Enterprise

Enterprise is the tier with quote-based pricing starting at $20,000 per year, and it is the only plan that offers air-gapped deployment. It suits vendors who must run analytics inside a customer-controlled or isolated network, or who need terms beyond Pro. Ask Metabase for the written scope covering embedding limits, support levels, and what the enterprise image includes compared with the open-source image. The cost is recurring and set by quote, so compare it with the engineering effort saved against building the same controls on Superset.

Lightdash and Grafana as narrower options

Lightdash is open core: content outside the packages/backend/src/ee directory is MIT licensed, while the ee directory follows a separate license, so confirm which features you would depend on. Grafana was relicensed from Apache-2.0 to AGPL-3.0-only starting with Grafana 8.0, while releases up to 7.5 remain Apache-2.0. Grafana suits operational time-series dashboards more than customer-facing business reporting, so treat it as a fit only for metrics views. Check license terms with counsel before distributing either tool inside a commercial product.

What the host application, identity and tenancy design must handle

The most important point is that tenant isolation is the vendor's application responsibility, not something the BI tool does for you. In a Superset embedding, the host application's server requests a guest token from /api/v1/security/guest_token/ using a service account, and that request carries the row-level security rules that decide which rows an embedded viewer can see. If the host omits a rule, a filter is built with the wrong value, or the token is requested from client-side code, the viewer may see another customer's rows with no error raised. Treat each guest token request as a data access decision, and write tests that prove one tenant's token cannot return another tenant's records. Also decide early between a shared dataset filtered by row-level rules and separate datasets or databases per tenant. The shared model is easier to operate, but a single missing rule exposes data; separate datasets reduce that blast radius at the cost of more objects to manage. Lock down each dashboard's Allowed Domains setting, because an empty list permits any origin.

Identity mapping has to be designed on both sides of the token. Superset's AUTH_ROLES_MAPPING maps LDAP or OAuth groups to roles for people who sign in to Superset itself, and that mapping is useful for internal analysts. Customers viewing an embedded dashboard usually do not hold Superset accounts at all, so their access is defined by the guest token claims that the host builds from its own session. Confirm with your identity team which claims the host trusts, how they are validated, and what happens when a customer's account is disabled between token issue and expiry. Keep the host's session, token lifetime and tenant identifier in one code path so that a change to one does not silently break the others. Metabase handles this differently: its open source and Starter plans lack JWT, SAML and SCIM, and row and column permissions require Pro or Enterprise, so confirm the plan before you design the identity flow around those features.

Secrets and audit trails need the same discipline. Superset requires a user-specified SECRET_KEY to start, and PREVIOUS_SECRET_KEY supports rotation, so store the key and the service account credentials in a secrets manager, restrict who can read them, and rehearse rotation in staging before you need it. Rotate the service account credential on a schedule your security policy sets, and remove it from build logs and client bundles. For audit logging, decide what must be recorded: which customer or user requested a token, which dashboard and filter values were applied, and when. Superset's own logs and the host's logs record different events, so confirm with your security team which layer is the system of record. Metabase's usage analytics and auditing sit in the paid Pro and Enterprise plans, so confirm whether the open source edition meets your evidence needs before you rely on it.

Running embedded Superset or Metabase beside the existing Tableau views

Embedded products rarely switch over in one step, because each customer tenant sees different data and depends on a host application. The four cards below cover how traffic is routed, how views are rendered during cutover, which data sources both stacks share, and how credentials stay separate until the old views are retired.

Route new customers to the new embed

Keep existing tenants on their current Tableau views and send new sign-ups to the Superset or Metabase embed from the start. This avoids moving live customers during the build and gives the team a controlled group to test with. Decide the routing rule in the host application (a tenant flag or plan attribute), record it, and confirm who can move a tenant between the two paths. The routing logic is where most cutover mistakes happen, so test it with a sample of accounts before launch.

Dual rendering during cutover

During cutover, some views may be shown from Tableau and others from the new embed. Compare the same filters, totals and date ranges in both tools before moving a tenant, and agree on which numbers are authoritative if they differ. Superset dashboards are embedded through the @superset-ui/embedded-sdk package, which requires the EMBEDDED_SUPERSET feature flag. Check that layout, fonts and filter behavior are close enough that customers do not see a jarring change.

Shared data sources with separate access paths

Both stacks can read the same warehouse or database, but they should not share a single database user or a Tableau extract. Give Superset or Metabase its own read-only role, with row-level restrictions applied through guest token rules or Metabase permissions. Document which tables feed each tool so a schema change does not break one view silently. Ask the data team to confirm that refresh schedules line up, so both tools show the same data at the same time.

Separate credential store and export before retirement

Keep the Superset guest token service account or Metabase API keys in a secrets manager that is separate from Tableau's credentials, and rotate them on a set schedule. Do not let a single identity administer both systems during the overlap. Before retiring Tableau, export workbooks through the Tableau REST API Download Workbook method, which returns .twb or .twbx files, and store them with the access logs and tenant mapping. Confirm with your Tableau administrator which content and extracts are covered by the export.

Migrating embedded views from Tableau to Superset or Metabase

This sequence moves each customer-facing Tableau view into a self-hosted Superset or Metabase integration, with tenant isolation tested before any customer is switched over. The output is a documented cutover that retires Tableau embedding without exposing data across tenants.

  1. Inventory embedded views and filters per customer

    The product or engineering owner lists every Tableau view embedded in the portal, the workbook and sheet behind it, the filters customers can change, and which tenants see which content. Include the code paths that request Tableau trusted tickets or the equivalent, and any customer-specific branding or data rules. Done when each embedded view has a row in a register that names its source workbook, its data sources and the tenants that depend on it.

  2. Export workbooks through the Download Workbook method

    The Tableau administrator calls the REST API Download Workbook method, which returns each workbook as a .twb or .twbx file, using a service account with rights to the embedded content. Store the files in version control with the register from the previous step, and record the Tableau API version used. Done when every workbook in the register is saved, and a checksum list confirms the files match what was exported.

  3. Rebuild datasets and row-level rules

    Data engineers recreate each Tableau data source as a Superset dataset or a Metabase question and model, pointing at the same warehouse tables, and rebuild calculated fields in SQL. Tenant isolation is rebuilt as row-level security rules in Superset guest token requests or as row and column permissions in a plan that includes them. Done when a test tenant sees only its own rows on each rebuilt view and the figures match the Tableau view for the same filters.

  4. Build the host application integration in staging

    Application engineers add the Superset embedded SDK or the Metabase embedding flow to the host application, with token issuance on the server only. For Superset, the host backend requests guest tokens with a service account, and the EMBEDDED_SUPERSET feature flag is enabled in staging. Set the Allowed Domains list for each dashboard to the portal origins. Done when staging renders each embedded view for test accounts and a client-side call to the guest token endpoint is confirmed to fail.

  5. Run a pilot with a few tenants

    Product and security owners choose a small set of tenants whose data needs are well understood and enable the new views for them alongside Tableau, keeping both paths available. Watch access logs, query performance and support tickets, and compare each pilot view with its Tableau counterpart. Done when the pilot tenants have signed off on the figures and no cross-tenant access has been recorded in testing or support reports.

  6. Cut over and retire Tableau embedding

    The team moves the remaining tenants to the new views in batches, then removes the Tableau embedding code and the Tableau connections from the portal. The Tableau subscription is not renewed for embedding use once the last customer has moved, and access to exported content is restricted. Done when no portal page calls Tableau, and the cutover record lists the date each tenant moved and who approved it.

  7. Keep Superset and Metabase upgrades on a schedule

    Platform engineers treat upgrades as ongoing work: back up the metadata database, test each new release in staging, run the Superset upgrade steps (superset db upgrade and superset init) and check UPDATING.md for breaking changes. For Metabase, back up the application database, expect automatic migrations, and follow its version support page to pick LTS or current releases. Done when each upgrade has a staging test record and a rollback plan, and embedded views are re-checked for tenant isolation afterwards.

Questions buyers ask before hiring help with embedded analytics

What drives the cost of replacing Tableau embedded views with Superset or Metabase?

The main cost is engineering time to build the host application integration, identity mapping and tenant-aware row-level security, not the software license. Superset and the Metabase Open Source edition carry no license fee, so the recurring costs are hosting, the metadata database, caching and workers, upgrades and support. Ask for each component to be quoted separately: discovery, integration build, security review, hosting setup, backup and upgrade routines, and any support retainer. The number of embedded dashboards, the number of tenants and the complexity of data access rules move the estimate most.

How long does it take to get the first embedded dashboard working?

The timeline depends on how many systems the first view touches: the host application, identity provider, data warehouse permissions and the Superset or Metabase instance. A proof of concept with one dashboard, one data source and a single guest token flow is far smaller than a multi-tenant rollout with production hosting. No duration is fixed here. Ask for a written milestone plan that separates the first working view in a staging environment from production readiness, and confirm which dependencies (access to the data platform, SSO configuration, network routes) the plan assumes you will provide.

What skills does the work need from the vendor's engineers?

The engagement needs engineers who can work across four areas: Superset or Metabase configuration, Flask-based authentication and OAuth or LDAP mapping, backend services that request tokens safely, and SQL data modeling. Superset's guest token endpoint must be called from the host application's server with a service account, never from browser code, so the integration engineer must own that boundary. Ask for named roles, their experience with these areas, and how they will test that row-level security holds for each tenant.

Can a small team run embedded analytics without outside help?

A small team with strong backend and data skills can run a single-tenant proof of concept alone, using the Apache-2.0 Superset or the AGPL Metabase edition and the official documentation. The harder parts are production hosting with a proper metadata database, the caching and worker layer for alerts and async queries, backup, and a repeatable upgrade routine. Be honest about on-call capacity. If the team cannot staff those tasks, a fixed-scope implementation with a retainer for upgrades and testing may suit better.

When does Metabase need a Pro plan for SSO and row-level permissions?

Metabase Pro is needed when you require row and column level permissions, SSO through JWT, OIDC or SAML, or multi-tenant data segregation, because the pricing page places these in the Pro and Enterprise plans only. Open Source and Starter include Google sign-in and LDAP, but not the advanced SSO or permission features. For embedding, confirm how the signed embedding setup matches your tenancy model before choosing a plan. Ask the vendor to show the feature matrix against your exact requirements, and check current prices directly on the Metabase pricing page.

How do Superset upgrades and the Kubernetes Operator affect operations?

Each Superset upgrade requires backing up the metadata database, running superset db upgrade and superset init, testing in staging first, and checking UPDATING.md for breaking changes. The Helm chart for Kubernetes is marked deprecated in current development documentation, which points new deployments to the Apache Superset Kubernetes Operator. That means the deployment method your team chooses now determines the upgrade path later. Ask the vendor which deployment method they will use, how it will be documented, and who owns the upgrade calendar.

What should a written scope confirm before work starts?

A written scope should list the dashboards and datasets in each embedded view, the identity provider and token flow, the tenancy and row-level security rules with test cases, the allowed domains for each dashboard, the hosting target and metadata database, backup and upgrade responsibilities, and the acceptance criteria. It should also state who provides access to data sources and environments, and what happens to the work after handover. Confirm the deliverables, timelines and support terms in writing before any work begins.

How DeployOpen scopes, builds and tests an embedded analytics layer

DeployOpen plans, implements, integrates, hardens, backs up and documents a self-hosted Apache Superset or Metabase deployment inside your own cloud account, data center or air-gapped network. For an embedded layer, the first scoping decision is which tool fits the tenancy model: Superset's embedded SDK with guest tokens and row-level security, or Metabase embedding under a plan that includes the permissions and identity features you need. Scope also has to name the host application that requests tokens, the identity provider behind it, and the tenant identifiers that drive row-level rules. Engagements are fixed-scope, with those decisions, deliverables and timelines agreed in writing before work starts.

The build concentrates on the boundary between your application and the analytics server. The token-issuing service runs server side under a dedicated service account that calls /api/v1/security/guest_token/, and the EMBEDDED_SUPERSET flag must be enabled first. Each dashboard's Allowed Domains list is set to your production origins rather than left empty, and row-level rules are generated from the authenticated tenant, never from values the browser supplies. Metadata storage goes on PostgreSQL or MySQL, with the caching layer and Celery workers added where alerts, async queries or thumbnails are needed. Secrets such as SECRET_KEY are managed outside source control, and the upgrade path is documented before go-live.

Testing covers the embed and its tenant boundaries as an attacker would approach them. DeployOpen's security testing team can check whether a token issued for one tenant can read another tenant's rows through filters, URL parameters or cached results, whether origin restrictions hold, and whether the token service rejects unauthenticated requests. Ask for written test scope, the environments used, and how findings are retested. Retainers can then cover version upgrades, which Superset's upgrade documentation describes as a staged process with a metadata database backup and staging test first.

How DeployOpen delivers embedded analytics replacement

DeployOpen plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source platforms in the client's own cloud accounts, data centers or air-gapped networks. For embedded analytics, that means treating the host application, identity, tenancy and dashboard security as one design, agreed in writing before build work starts.

How we scope

  • Written scope lists which Tableau views move into embedded dashboards and which stay in internal Tableau use.
  • Scope records the host application, identity provider and tenant model that guest tokens must respect.
  • Scope names the row-level security rules, allowed domains and metadata database each environment needs.

How we build

  • Build covers Superset or Metabase deployment, the embedding SDK integration and a server-side guest token service.
  • Build includes row-level security tests that confirm one tenant cannot view another tenant's rows.
  • Build sets Allowed Domains for production origins and keeps service account credentials out of client code.

How we hand over

  • Handover includes runbooks for upgrades, secret rotation and metadata database backups before go-live.
  • Documentation maps each embedded dashboard to its datasets, security rules and owning team.
  • Delivery includes a tested rollback path and a staging environment for each Superset or Metabase upgrade.

How we support

  • Engagements are fixed-scope, and ongoing support, upgrades and continuous testing are available as retainers.
  • Retainers can cover security testing of the embedded endpoints as the host application changes.
  • Ask any quote to separate one-time build work from recurring hosting, upgrade and support effort.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.