QueryPanel vs Qrvey

Multi-tenant analytics automation for SaaS vendors.

Qrvey markets heavily to SaaS vendors embedding analytics. The platform bundles data workflows, visualization, and tenant-oriented packaging so teams can standardize on one vendor for customer analytics.

Comparison at a glance

This table summarizes typical positioning. Every vendor changes over time—validate details against current documentation and your security review.

DimensionQrveyQueryPanel
In-app experience for end usersPackaged SaaS analytics may rely on hosted embed surfaces or iframe-oriented patterns for part of the customer UI.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.
Platform shapeBundled analytics platform aimed at SaaS embedding use cases.Focused toolkit: React embeds + AI generation + optional headless `ask()` on your API, on top of your databases.
Trainable knowledge & steeringKnowledge is bundled with the vendor’s analytics pipeline; fine-grained SQL exemplars and column-level business notes next to your repo are less of a first-class workflow.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).
Data planeOften includes hosted components for parts of the analytics pipeline.Designed so customer data stays in infrastructure you control; QueryPanel does not store warehouse passwords.
CustomizationConfiguration inside the vendor platform and standard embed patterns.Code-adjacent: `@querypanel/react-sdk` for the dashboard shell, `@querypanel/node-sdk` in your middleware for signing and queries.
AI workflowVaries; evaluate current product docs for NL and automation coverage.Natural language is the default input for new charts in the embedded experience.
Best first winStandardize a single embedded vendor for many customer tenants.Prove NL→SQL + one embedded dashboard in a single product area, then expand.
Trainable knowledge base

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.

01

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.

02

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.

03

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.

04

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 Qrvey is the better fit

Honest tradeoffs help your team pick faster—and match how buyers actually decide.

  • You want a packaged embedded analytics suite with less custom glue between data prep and UI.
  • You prefer a vendor-managed path for parts of the analytics data plane.
  • You value automation-oriented features across the embedded lifecycle.

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 the customer UI as real React (`@querypanel/react-sdk`)—not a hosted iframe shell—while keeping SQL execution and credentials on your servers.
  • You want SQL generation and execution clearly separated: you run queries; QueryPanel never needs your warehouse passwords.
  • You are optimizing for a developer-first integration: React in the browser, Node SDK in API routes, your auth model.
  • You want AI-native flows (question → SQL → chart) wired directly into your product screens.

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.

React — QuerypanelEmbedded (tsx)
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.

Node — QueryPanelSdkAPI (typescript)
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 driver

Still evaluating Qrvey and QueryPanel?

Start on the free tier, embed one dashboard, and compare implementation time against your current shortlist.