QueryPanel vs Luzmo vs Explo vs Toucan
A practical compare page for SaaS teams evaluating embedded analytics suites.
Luzmo, Explo, and Toucan all serve SaaS teams that want analytics inside their product without building every reporting surface from scratch. This comparison is most useful when your team is deciding between a managed embedded analytics suite and a lighter QueryPanel path for AI-native, tenant-aware customer questions.
Comparison at a glance
This table summarizes typical positioning. Every vendor changes over time—validate details against current documentation and your security review.
| Dimension | Luzmo vs Explo vs Toucan | QueryPanel |
|---|---|---|
| In-app experience for end users | These tools generally focus on embedded dashboards, reports, or guided analytics surfaces that can be branded and integrated into a SaaS product. | First-class `@querypanel/react-sdk` components—`QuerypanelEmbedded` for a full dashboard, or `QueryPanelProvider` with `QueryInput` / `QueryResult` for a bespoke flow. They render in your React tree like any other product screen (layout, router, modals, tokens)—not a separate iframe "mini app" on another origin. Mint short-lived JWTs on your server; never ship your workspace private key to the browser. |
| Primary product shape | Managed embedded analytics suites with builders and configuration workflows for customer-facing reporting. | AI-native React workspace plus headless Node `ask()` calls for teams that want customer questions, SQL, and charts in one product loop. |
| Trainable knowledge & steering | Definitions, metrics, and dashboard behavior live primarily in the vendor platform and your surrounding data model. | Gold SQL queries (curated examples the model prioritizes), database annotations (business context on tables/columns, re-embedded with schema), glossary (domain terms and definitions), and tenant-level definitions (isolation field, enforcement, and per-tenant sync context so every ask() is grounded in the right customer slice—not a one-size global prompt). |
| Natural language workflow | Coverage varies by vendor and edition; evaluate current docs for AI assistant, report builder, and exploration depth. | Natural language to SQL and chart generation are central paths for both embedded users and server-side SDK calls. |
| Developer ownership | Lower front-end assembly work when the vendor's packaged dashboard and reporting model matches your needs. | More code-adjacent control: React components in your app, Node SDK in your API routes, and SQL execution in your environment. |
| Multi-tenant SaaS fit | Commonly positioned for customer-facing SaaS analytics; implementation details depend on your tenant model and data connection strategy. | Tenant id and isolation rules are part of the generated-query contract for embedded dashboards and NL questions. |
| Best first win | Launch branded dashboards or reporting surfaces with a vendor-managed analytics workflow. | Ship a tenant-scoped AI analytics route where customers ask questions and receive SQL-backed charts. |
Four layers your team—and your tenants—can train for better answers
Natural language is only as good as the context the model sees. QueryPanel's knowledge system lets you steer retrieval and SQL with curated examples, business meaning on the schema, shared glossary terms, and tenant-aware definitions—so customer-facing analytics matches how your product actually defines revenue, usage, and risk.
Gold queries
Save vetted SQL for recurring questions. Gold examples are retrieved with schema context and treated as the strongest pattern signal when they match the end user's intent—so joins, filters, and metrics follow what your team already proved in production.
Database annotations
Attach free-text business meaning to tables and columns. Annotations are merged into embedded schema chunks (“Business Context”) so search and generation see how revenue, activation, or ARR are really defined in your warehouse—not only raw column names.
Glossary
Define terms customers actually say (“active seat”, “net MRR”, “expansion”). Glossary entries are embedded alongside schema so the model resolves ambiguous language the way your finance and product teams mean it.
Tenant-level definitions
Per-tenant isolation settings and tenant-scoped schema sync mean each customer’s ask() carries the right tenant id and rules—so retrieval and generated SQL respect dynamic per-tenant shape, not a single global tenant-agnostic prompt.
Manage gold SQL and glossary from the dashboard knowledge base; annotations attach business context to schema objects; tenant isolation and sync keep per-customer context aligned. See documentation for SDK routes and ingestion APIs.
When Luzmo vs Explo vs Toucan is the better fit
Honest tradeoffs help your team pick faster—and match how buyers actually decide.
- You want a vendor-managed analytics builder for dashboards, reporting, or guided customer analytics.
- Your main need is branded dashboard delivery rather than natural-language SQL generation inside your product workflow.
- You prefer configuring an embedded analytics platform over owning more of the query-generation and validation loop in code.
When QueryPanel is the better fit
Especially strong for B2B SaaS shipping customer-facing analytics on Postgres and similar databases.
- You want a trainable knowledge system—gold queries, DB annotations, glossary, and tenant-aware definitions—so NL→SQL and charts reflect your business, not generic schema-only guesses.
- You want customer questions to become SQL and charts directly inside your React app, with your backend signing JWTs and executing queries.
- You need the same AI ask() contract for embedded dashboards, admin workflows, and custom product screens.
- You want tenant context to be part of generation from the start instead of treating multi-tenant filtering as integration glue.
- You prefer a smaller developer-owned surface over a broad embedded analytics suite.
Keep comparing the implementation details
Vendor fit depends on more than a feature matrix. These guides cover the security, embedding, and buying choices that usually decide a SaaS analytics rollout.
Ship the customer UI with React—not an iframe
Most teams lead with @querypanel/react-sdk: drop QuerypanelEmbedded on a normal product route, or compose QueryPanelProvider with QueryInput / QueryResult. It behaves like any other React subtree—your app shell, router, modals, and design tokens—not a separate cross-origin iframe "mini app" with its own layout chrome.
The browser talks to the QueryPanel API with a JWT you mint on your server (RS256). Never ship your workspace private key to the client.
import { QuerypanelEmbedded } from "@querypanel/react-sdk";
// Render like any other page — not an iframe. Mint tenantJwt (RS256) on your server
// with @querypanel/node-sdk; pass only the JWT to the client.
export function CustomerAnalytics({ tenantJwt }: { tenantJwt: string }) {
return (
<QuerypanelEmbedded
dashboardId="your-dashboard-id"
apiBaseUrl="https://api.querypanel.io"
jwt={tenantJwt}
allowCustomization
/>
);
}Headless Node SDK (optional, for your API)
Use @querypanel/node-sdk on your backend to attach database clients, sync schema, sign JWTs for the React embed, and call ask() from API routes when you want a fully custom pipeline. SQL still runs with your drivers. Full quickstart in documentation.
import { QueryPanelSdkAPI } from "@querypanel/node-sdk";
const qp = new QueryPanelSdkAPI(
process.env.QUERYPANEL_URL!,
process.env.PRIVATE_KEY!,
process.env.QUERYPANEL_WORKSPACE_ID!,
);
// After attachPostgres / syncSchema — tenant comes from your auth layer
const result = await qp.ask("Revenue by country last quarter?", {
tenantId: org.id,
database: "analytics",
});
// result.sql, result.params, result.rows, result.chart — you execute SQL with your driverStill evaluating Luzmo vs Explo vs Toucan and QueryPanel?
Start on the free tier, embed one dashboard, and compare implementation time against your current shortlist.