Your metrics, compiled before you ask.
Doe runs SQL against your database, computes week-over-week trends from timestamped data, and delivers a formatted spreadsheet every Monday. Every query is visible, editable, and logged.
Doe automates weekly KPI reporting by running SQL against your Postgres or MySQL database, computing week-over-week and month-over-month trends, and delivering a formatted Google Sheets spreadsheet every Monday morning. Connects to Neon, Supabase, and PlanetScale. Every query is visible, editable, and logged so any number can be traced to its source.
What changes
| Dimension | Before | With Doe |
|---|---|---|
| Prep time | Monday morning spent fixing queries and pasting into sheets | Delivered before you wake up |
| Query maintenance | Breaks silently when schemas change, nobody notices for weeks | Validated before each run, failures flagged immediately |
| Auditability | Numbers in a spreadsheet with no way to trace how they were computed | Results include the source queries so any number can be verified |
| Ad-hoc follow-ups | "I'll follow up after the meeting" (takes all afternoon) | Segment breakdowns already included in the spreadsheet |
How Doe builds your KPI report
MRR, net new, expansion, and churn broken down by plan tier and customer segment, computed against your targets. SQL visible in the execution log.
DAU, activation rate, and feature adoption computed from PostHog events and native product tables. WoW and MoM trends derived from timestamp data.
Doe calculates NRR and churn rate by segment from raw query results, then flags any metric with unusual week-over-week movement. Sandbox code is inspectable.
Doe delivers executive summary, detailed trends, and raw data in separate tabs. A metadata tab logs every query that ran and the row counts returned.
The weekly metrics meeting starts in 30 minutes. The spreadsheet is stale.
All the data is technically in one place. Stripe syncs to Supabase via Fivetran, PostHog events land in the same Postgres cluster, product tables are native. But the queries were written by a data hire who left in August. One references a materialized view that stopped refreshing after a schema migration. Another joins on a column that was renamed from user_id to account_id in Q3 and silently returns fewer rows than it should.
Monday morning becomes re-deriving everything by hand. The data exists. The queries should be simple. The gap between those two things is filled with broken views, stale CTEs, and tribal knowledge that left six months ago.
Get started in under 10 minutes
Connect your tools
One-click OAuth for each integration. No API keys, no engineering.
Describe what you need
“Every Monday, pull MRR, active users, churn rate, and NPS from our Supabase database. Compute WoW and MoM trends, then deliver the spreadsheet to #metrics in Slack.”
It runs on schedule
Every Monday morning, the updated spreadsheet lands in your team channel.
Automated KPI Report FAQ
Yes. Every query is visible before execution. You can edit the SQL, adjust joins, or add filters. Execution logs show what ran, how long each query took, and how many rows returned. Nothing runs as a black box.
Stop doing the work your tools should do for you.
Set it up once. Doe runs it every time.