Give your customers AI chat, dashboards, and insights on their own data without building analytics yourself. Your data team keeps one governed setup, and your engineers get back to the roadmap.
14-day trial. No credit card required.
Reports
Service performance
Last 12 weeks
Jobs completed
1,284
+8%
First-time fix rate
87%
+2 pts
Revenue per job
$412
+5%
Jobs completed per week
Furnace repairs led callbacks in September: 18 of 142 jobs came back, about twice the rate of AC maintenance.
Callback rate by job type, September
Service performance
Last 12 weeks
Jobs completed
862
+3%
First-time fix rate
91%
+1 pt
Revenue per job
$286
+2%
Jobs completed per week
Drain cleaning led callbacks in September: 11 of 204 jobs came back, slightly ahead of leak repairs.
Callback rate by job type, September
Service performance
Last 12 weeks
Jobs completed
517
−4%
First-time fix rate
83%
−3 pts
Revenue per job
$538
+6%
Jobs completed per week
Panel upgrades led callbacks in September: 9 of 58 jobs came back, well ahead of EV charger installs.
Callback rate by job type, September
Powering analytics for 5000+ teams worldwide
React SDK
Install @basedash/embed, wrap a component like BasedashDashboards or BasedashChat in its provider, and point it at an endpoint that signs a short-lived token for the signed-in user. Other frameworks load the same token in a plain iframe.
import { BasedashProvider, BasedashDashboards,} from "@basedash/embed/react"; const fetchToken = () => fetch("/api/token").then((r) => r.text()); export function AnalyticsPage() { return ( <BasedashProvider fetchToken={fetchToken}> <BasedashDashboards hideSidebar /> </BasedashProvider> );}
import { createEmbedToken } from "@basedash/embed/server"; app.get("/api/token", requireUser, async (req, res) => { const token = await createEmbedToken({ secret: env.BASEDASH_JWT_SECRET, orgId: req.user.basedashOrgId, user: { email: req.user.email }, }); res.type("text/plain").send(token); });
Multi-tenant
Create a Basedash organization for each customer through the API, with its own data sources and JWT secret. A token signed for one customer opens that organization and nothing else, and Basedash adds the user as a member the first time they load it.
Customer organizations
Created with the Basedash API · Embedding on
Embed token for [email protected]HS256
- [email protected]
- orgId
- org_7hQ2nV4k
- role
- MEMBER
- iat
- 1791382500
- Today, 2:15 PM
- exp
- 1791383100
- 10 minutes later
- Signed with
- Northside HVAC's JWT secret
- Opens
- Northside HVAC only
First load adds dana as a member of Northside HVAC.
Embed token for [email protected]HS256
- [email protected]
- orgId
- org_3pX8mR1c
- role
- MEMBER
- iat
- 1791382500
- Today, 2:15 PM
- exp
- 1791383100
- 10 minutes later
- Signed with
- Bluewater Plumbing's JWT secret
- Opens
- Bluewater Plumbing only
First load adds priya as a member of Bluewater Plumbing.
Embed token for [email protected]HS256
- [email protected]
- orgId
- org_9tL5wB6e
- role
- MEMBER
- iat
- 1791382500
- Today, 2:15 PM
- exp
- 1791383100
- 10 minutes later
- Signed with
- Summit Electric's JWT secret
- Opens
- Summit Electric only
First load adds alex as a member of Summit Electric.
Embedded AI chat
The AI analyst your team uses answers your customers in plain language, with tables and charts from their own data, and takes follow-up questions. They stop filing report requests, and you stop building one-off exports.
Which customers haven't booked a job in 90 days?
Three commercial customers last booked in June or early July. They spent $24,700 with you over the past four quarters, most of it before July.
Harbor Point ApartmentsJun 18$11,960
Greenway DentalJun 30$7,640
Elm Street BakeryJul 2$5,100
Chart their spend by quarter
Spend from the 3 lapsed customers, $K
White-label
The embed's sidebar shows your customer's organization name and icon, not Basedash's. Match your app's light or dark theme, hide the sidebar when your app owns navigation, and choose which of chat, dashboards, insights, automations, and models appear.
What do you want to know?
- Callbacks by technician
- Revenue vs. last month
- Customers due for maintenance
Theme
How embedding works
The pieces that keep an embed secure, current, and out of your engineers' way.
React SDK
Open-source components for React 18.2 and 19.
Any framework
A plain iframe and a signed URL for everything else.
Short-lived tokens
Signed with HS256, valid for 10 minutes by default.
One org per token
Each token opens one customer's organization.
Users on first load
Basedash creates the member the first time they visit.
Allowed origins
Limit which domains can load your embed.
Locked filters
Signed filter values on shared dashboards, hidden from viewers.
Self-hosted too
Point the SDK at your own Basedash instance.
“It's easy for stakeholders to generate their own reports and polished enough to sit natively inside our dashboard, especially compared with the tools we were using before.”

Alwyn Cheong
Principal Product Manager · Oddle
Read case study →
“I love the attention to detail. The UI is really smooth, and since I'm kind of a design nerd myself, that matters to me.”
Greg Demoge
Co-founder & CPO · FullEnrich
Read case study →
What you can embed, how customers sign in, and how their data stays separate.
What parts of Basedash can I embed?
You can embed AI chat, the dashboards workspace, insights, automations, and models, each on its own or together in the full app, plus read-only shared dashboards. In React, each one is a component, such as BasedashChat or BasedashDashboards, and an ID prop opens a specific chat, dashboard, or automation. The full app takes props that hide the features you don't want, as long as one of the five stays visible. The embed is the real product, so new Basedash features reach your customers without a release on your side.
How do embedded users sign in?
Your app signs them in, not Basedash. When a signed-in user opens the page, your server creates a JWT with their email, the Basedash organization ID for their company, and an optional name and role, signs it with that organization's secret, and hands it to the embed. The SDK's createEmbedToken helper does this, with a 10-minute expiry by default. Basedash creates the user and their membership the first time a token is used, so there's no separate account or invite. Keep the secret on your server: anyone holding it can sign in as any user in that organization.
Should each customer get its own Basedash organization?
For customer-facing analytics, usually yes. An organization per customer, created through the Basedash API with embedding turned on, gives each one its own data sources, dashboards, members, and JWT secret, so a token for one customer can't reach another's data. If customers share one organization and one Postgres database, Basedash sets a basedash.groups session variable on every query, and your row-level security policies can filter rows by each member's groups. For shared dashboards, a signed filter token can lock a tenant ID instead.
Does the embed show the Basedash brand?
The embed's sidebar shows the organization's own name and icon rather than a Basedash logo, so customers see their company there. You can hide the organization name, remove the sidebar entirely when your app owns navigation, and pick which features appear. The theme can be light, dark, or follow the user's system setting, so it sits naturally in your app. Hiding parts of the embed is presentation only, so use Basedash permissions to control what each member can actually open.
Can customers use AI chat inside my product?
Yes. BasedashChat embeds the AI analyst on its own, and the full app includes it next to dashboards. Customers ask in plain language and get answers, tables, and charts from the data sources in their organization, limited to what their member account can access, and they can keep asking follow-up questions. You can hide the suggested prompts and open a specific chat by ID. Customer data is never used to train AI models.
Can I embed a dashboard without signing users in?
Yes. Share a dashboard to get a public link and render it with BasedashSharedDashboard or an iframe, with no Basedash user or token. Its filters stay hidden unless you choose to show them. To give each viewer only their own rows, create a filter token on your server that locks values such as a company ID: Basedash verifies the signature, applies the values server-side, and hides those filters, so viewers can't change them. Embedding a single chart on its own isn't available yet.
Which plan includes embedding?
Embedding is part of the Enterprise plan, along with self-hosting, SSO, and SCIM. You can embed Basedash Cloud or your own self-hosted instance: the SDK takes an instanceUrl, and tokens are created the same way for both. Book a demo to walk through your product, how many customer organizations you expect, and which features you want to show them.
What can't the embed do yet?
Embeds render Basedash in an iframe, including the React SDK's components, rather than as native React UI. Basedash doesn't expose a messaging API to the host page yet, so the frame doesn't resize itself, report navigation, or take commands from your app, and you give it a fixed or full height instead. Single charts can't be embedded on their own, only shared dashboards and the app itself. If one of these blocks what you're building, tell us about it.
Book a demo and we'll walk through embedding Basedash in your product, from tokens to tenants.