AI-powered data storytelling
Connect a Google Sheet. Write a few lines of DSL—or hand it to your favorite AI agent. Publish an interactive chart, dashboard, or slide deck at its own URL, with version history and viewer analytics built in.
Google sign-in · No credit card · No install
Data: [google sheets url]
Title: Revenue vs plan — FY24
series: line(showmarkers)
x: Month
y: Revenue [indigo 3px]
zoneby: y 100,crimson,140,goldenrod,mediumseagreen
plotlines: 140,Plan [gray dash]; 180,Stretch [indigo dash]
Nine lines. Zones, target lines, and interaction come free.
From raw data to a shareable link in under a minute.
Paste a Google Sheets URL, upload a CSV, or type data inline. Pvt keeps a live connection—your charts update when your spreadsheet does.
The DSL is short and declarative—a few lines per chart. Write it yourself, or paste the schema into Claude, ChatGPT, or Cursor and get a working chart back on the first try.
One click to publish. Choose public, unlisted, password-protected, or domain-restricted access. Track who views your work with built-in analytics.
Pvt uses a concise markup language instead of Python or JavaScript. Here's why that matters.
Five lines tell you exactly what a chart does: what data, what axes, how it's grouped, how it's styled. No scrolling through 40 lines of matplotlib boilerplate.
series: column(stack)
x: Quarter
y: Revenue
groupby: Region
format: legend-right
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('revenue.csv')
pivot = df.pivot_table(
values='Revenue',
index='Quarter',
columns='Region',
aggfunc='sum'
)
ax = pivot.plot(
kind='bar', stacked=True,
figsize=(10, 6)
)
ax.legend(loc='center right')
plt.title('Revenue by Region')
plt.tight_layout()
plt.show()
pvt.app/@you/storyAsk an LLM for a chart and you get a single-file artifact—great for a one-off question, useless for an exec review. Pvt's DSL composes charts, dashboards, and slides into one document that publishes to its own URL—with version history and viewer analytics built in. Same AI. Finished product.
No pip install. No Jupyter. No version conflicts. No “works on my machine.” Open your browser, connect your data, get a chart. It runs everywhere because there's nothing to run.
$ pip install pandas matplotlib seaborn
$ jupyter notebook
$ # fix numpy version conflict...
$ # google "matplotlib tight_layout warning"
$ # export to PNG, email it, lose interactivity
None of this.
Write it once. Present it however your audience needs it—no copy-paste, no re-export.
40+ chart types powered by Highcharts. Tooltips, zoom, drill-down, and responsive design by default. Line, bar, scatter, heatmap, treemap, sankey, gauge, and more.
Browse chart types →KPI modules, sparklines, data tables with conditional formatting, and drill-down hierarchies. Connected to Google Sheets for real-time updates.
See dashboard examples →Full-screen presentations with speaker notes, transitions, multi-column layouts, and embedded live charts. Present from your browser—no PowerPoint needed.
See presentation examples →Real web pages with their own URLs. Public, unlisted, password-protected, or domain-restricted. Version history and viewer analytics built in.
Learn about publishing →If you've tried these tools, you know the gap Pvt fills.
| Pvt | Google Charts | Python / Jupyter | Hex / Observable | |
|---|---|---|---|---|
| Learning curve | DSL in minutes, or let AI write it | Point and click | Python required | SQL + Python |
| Chart types | 40+ interactive | ~15 basic | Unlimited (manual) | Good selection |
| Live data connection | ✓ | ✓ | ✗ | ✓ |
| Dashboards + KPIs | ✓ | ✗ | With frameworks | ✓ |
| Slide presentations | ✓ | ✗ | ✗ | ✗ |
| Publishing + access control | ✓ | Embed only | Manual hosting | ✓ |
| No install required | ✓ | ✓ | ✗ | ✓ |
Every chart type, every feature, with live DSL you can copy and tweak.
Free to start. No credit card. Works in any browser.
Get started with Google