QueryPanel vs ThoughtSpot Embedded
Search-driven analytics at scale.
ThoughtSpot popularized AI-assisted search over governed models. Embedded scenarios often emphasize consistent answers on top of curated metrics and a strong operations story for analytics teams.
Comparison at a glance
This table summarizes typical positioning. Every vendor changes over time—validate details against current documentation and your security review.
| Dimension | ThoughtSpot Embedded | QueryPanel |
|---|---|---|
| In-app experience for end users | Embedded search experiences often wrap vendor-managed UI; integration and hosting patterns vary by edition. | 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. |
| Experience shape | Search-first exploration on curated business objects and metrics. | Customer questions on your routes, rendered by your React tree, routed to tenant-safe SQL against your operational schema. |
| Trainable knowledge & steering | Search quality is driven by governed business objects and metric definitions; layering ad-hoc SQL libraries next to product code is less central to the platform story. | 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). |
| Integration owner | Analytics and data platform teams typically lead modeling and rollout. | Product engineering owns the embedded surface; data stays in your existing Postgres / warehouse. |
| Flexibility vs guardrails | Strong guardrails when metrics are modeled carefully upstream. | Faster iteration for product teams that accept owning validation, review, and rollout of generated SQL. |
| Stack fit | Best when the ThoughtSpot stack aligns with your enterprise data architecture choices. | Postgres, ClickHouse, BigQuery, and MySQL today—fits teams that want to stay close to operational stores. |
| Buyer motion | Often a top-down analytics platform decision with POCs across data leadership. | Bottom-up trial: add `@querypanel/react-sdk` to a route, wire `@querypanel/node-sdk` in an API handler, connect a database, ship. |
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 ThoughtSpot Embedded is the better fit
Honest tradeoffs help your team pick faster—and match how buyers actually decide.
- Search and drill across a wide enterprise metric layer is the primary experience you are selling.
- You already invest in governed semantic layers and want AI on top of that foundation.
- You need a brand-name analytics platform with a long enterprise track record.
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 embedded analytics as native React—`QuerypanelEmbedded` or composable provider pieces—so customers never deal with a boxed iframe app inside your SaaS.
- You are embedding analytics into a multi-tenant SaaS product, not rolling out another enterprise BI portal.
- You want developers to own the stack: React components in your app, Node SDK on your API for auth and `ask()`, not a separate BI release train.
- You want lightweight onboarding: connect the database, describe tenants, ship dashboards on a normal product route.
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 ThoughtSpot Embedded and QueryPanel?
Start on the free tier, embed one dashboard, and compare implementation time against your current shortlist.