Semaphor vs Metabase
One platform for internal BI and customer-facing analytics: no per-viewer billing, no SQL-editor security bypass, no Enterprise-tier gates on the features you need.
Last verified July 2026 · Based on publicly available documentation. Spot an error? Email hello@semaphor.cloud.
Metabase is a fine free way to start with internal dashboards. The moment analytics becomes part of your product, its model works against you: every signed-in viewer is billable, row security has documented bypasses, and everything embedding needs sits behind the upper tiers. Semaphor covers both jobs from one governed core, with multi-tenancy, white-labeling, and fully interactive embedding on every paid tier, at flat pricing that ignores viewer count.
- You are embedding analytics for many customers and need tenant isolation on every paid tier
- Per-viewer pricing breaks your unit economics as embedded usage grows
- You need security enforced at query build time, with no SQL-editor bypass
- You want custom visualizations beyond built-in chart types
- You want dashboards version-controlled in GitHub with commit, history, and restore
- You want agents (Claude, Codex) to build and maintain governed dashboards via MCP
- You want free, open-source BI for your own team and are comfortable self-hosting
- Your embedding needs are view-only guest embeds with modest interactivity
- You want a large OSS community around your BI tool
- Per-user pricing works for your team size and viewer count
- The 15+ built-in chart types cover your visualization needs
At a glance
| Dimension | Semaphor | Metabase |
|---|---|---|
| Primary focus | Customer-facing embedded analytics and internal BI from one governed core | Internal self-serve BI, with embedding capabilities added over time |
| Pricing model | Flat platform pricing; cost does not scale with users or viewers | Per-user on every paid tier; signed-in embedded viewers are billable |
| Embedding | JWT-signed iframe embedding, fully interactive and white-labeled, on all paid tiers | Guest embeds are view-only; interactive embedding and the SDK require Pro or Enterprise |
| Beyond dashboards | Data App SDK for building complete governed data apps; briefings deliver what changed, why, and where to look, on a schedule | Dashboard subscriptions and alerts email static results |
| Multi-tenancy | First-class tenants with their own users, roles, and groups; three isolation levels enforced at query build time | Groups plus user attributes on Pro/Enterprise; row security applies to query-builder queries only |
| Semantic layer | Semantic Domains: relationships, auto-join resolution, calculated metrics and dimensions | Models and Metrics: curated datasets, not a governed join layer |
| Version control | GitHub integration with commit, full history, restore, and environment promotion | 15-revision history; YAML serialization on Pro/Enterprise, excluding permissions and users |
| AI and agents | Agent-native: MCP server, agents build governed dashboards verified against live queries | Metabot for NL questions and SQL help; managed AI service is Cloud-only |
| Custom visuals | Bring your own React components via the plugin system | 15+ built-in chart types; no plugin system for custom visuals |
| Self-hosting | Docker-based self-hosting on paid tiers | Free AGPL open-source core; Pro/Enterprise self-hosted at Cloud prices |
Two different starting points
Metabase is open-source internal BI at its core, and it is good at that job. Embedding came later, and the pricing and permission model still reflect the internal-BI origin: users sign in, users are billed, and security is organized around groups.
Semaphor was built for customer-facing embedding from the start. Multi-tenancy, white-labeling, fully interactive embedding, and query-time security are core architecture, not tier upgrades. The same governed core also serves internal BI, so your team and your customers see the same numbers.
Pricing
Metabase prices per user on every paid tier, and the detail that surprises teams embedding at scale: end users who sign in through SSO-backed embedding or the React SDK count as billable users. Your bill grows with every customer you onboard, and only view-only guest embeds escape it. Meanwhile the features embedding actually needs (the React SDK, SSO embedding, row security, white-labeling) all sit in the upper tiers.
Semaphor uses flat platform pricing with no per-user fees. Embedding, multi-tenancy, and white-labeling are included in all paid tiers, so your cost does not increase as your team grows or as you roll analytics out to more customers, and the free tier lets you validate before spending anything.
Embedding
Metabase offers three embedding modes: guest embedding (signed JWT iframes, view-only, all tiers), full-app embedding (the whole Metabase app in an iframe with SSO, Pro/Enterprise), and a React SDK for component-level embedding (Pro/Enterprise). The SDK is GA and genuinely component-level, further along than most BI vendors, with documented constraints: React 18/19 only, no server-side rendering, and one dashboard per page.
Semaphor embeds through JWT-signed URLs on all paid tiers, and unlike guest embeds, they are fully interactive: filters, drill-downs, and self-service exploration, white-labeled, in any framework. Past the dashboard, the Data App SDK builds complete governed data apps in your own React code, custom visuals plug in as React components, agents build over MCP, and briefings deliver what changed on a schedule.
Multi-tenancy and security
Metabase implements tenancy with groups and user attributes on Pro and Enterprise. Row and column security filters a table by a user attribute, or swaps the table for an admin-owned SQL question. The official documentation notes the limits that matter for customer-facing use: security applies only to query-builder queries, so users with native SQL access can bypass it; a user cannot be in two row-security policies on the same table; and public links bypass security entirely.
Semaphor enforces security policies when the query is built, before SQL reaches your database, regardless of how the query originates. There is no SQL-editor bypass. Tenant isolation comes in three levels on all paid tiers: row-level (filter by tenant), schema-level (schema per tenant), and connection-level (separate databases per tenant).
Beyond isolation, Semaphor gives tenancy a management model. Organizations, tenants, and tenant users are first-class objects: each tenant carries its own users, roles, groups, sharing boundaries, and defaults, down to per-tenant fiscal calendars and number formats, and organization-level appearance controls white-label the whole surface. Tenant users build and share dashboards strictly inside their tenant, enforced server-side. In Metabase, the equivalent is assembled from groups, user attributes, SSO, and collections, and appearance settings remain instance-wide: one look for every customer.
Semantic layer
Metabase has Models and Metrics: curated datasets with descriptions and field types that act as starting points for exploration. It is a useful curation layer, but not a governed entity layer; there is no relationship graph that resolves joins for end users.
Semaphor has Semantic Domains: datasets, fields, relationships, calculated metrics, and calculated dimensions defined once and shared everywhere. End users drag fields from any dataset and Semaphor resolves the joins automatically, including multi-hop joins. This matters in embedded contexts because your customers do not write SQL; they pick fields, and the system does the rest. Domain setup is AI-assisted: labels, aggregation defaults, and relationships are proposed for you.
Version control
Metabase stores the last 15 revisions of each dashboard. On Pro and Enterprise, serialization exports collections and dashboards as YAML for git-based staging-to-production workflows, with documented gaps: users, groups, permissions, and alerts are not exported, and source and target instances must run the same major version.
Semaphor integrates with GitHub directly. Connect a repository once, and a Commit button appears in the dashboard toolbar. Every change is tracked with author, timestamp, and message; restore any commit from the history. There is no version limit, you review diffs in GitHub, and dashboards can be promoted across dev, staging, and production projects via the API.
AI and agents
Metabot, Metabase’s assistant, creates charts from natural language, writes and fixes SQL, and answers questions in Slack. The managed AI service is Cloud-only; self-hosted instances bring their own LLM key.
Semaphor is agent-native rather than assistant-equipped. An MCP server exposes the governed platform to any agent: Claude or Codex can discover your semantic model, build dashboards and data apps, and verify every number against a live governed query. The same security policies apply to agent-built queries as to human-built ones, and briefings deliver what changed to your inbox without anyone asking.
Where Metabase still has the edge
Credit where it is due. Metabase keeps the edge in these areas:
- A free, open-source core under AGPL with unlimited users. If budget is zero, it is a reasonable starting point.
- Good for simple internal BI: connect a database and start exploring quickly.
- A component-level React SDK with an embedded query builder, within its documented constraints.
- A sizable ecosystem of tutorials, integrations, and community answers.
Every strength above fades once analytics becomes a feature of your product: the free tier cannot do the job, and the paid tiers bill you per user, per viewer, per customer, while leaving security gaps you have to manage around. Semaphor covers the internal job and the customer-facing job from one governed core, with none of those gaps, and its free tier lets you prove it before you spend anything.
Migrating from Metabase
Teams that move from Metabase to Semaphor typically run both in parallel and cut over gradually. Most migrations take 2-4 weeks depending on dashboard complexity.
- 1Connect Semaphor to the same databases and define a Semantic Domain for your core datasets
- 2Recreate key dashboards, or have your coding agent rebuild them via MCP from a description of each
- 3Embed Semaphor for a subset of customers to validate multi-tenancy and theming
- 4Migrate remaining customers and decommission the Metabase embed
Sources
- Metabase pricing
- Metabase billing: how embedded users are counted
- Metabase embedding overview
- Metabase Embedding SDK for React
- Metabase row and column security
- Metabase serialization
- Metabase AI (Metabot)
- Metabase on GitHub
All third-party pricing and feature claims reflect public documentation as of July 2026 and may have changed since.