Executive summary
The headline metrics for the period and any metric the run flagged for unusual week-over-week movement.
- MRR
- Net new
- Expansion
- Churn
- DAU
- Activation rate
Agent use case · Data & Analytics
ZeroTwo runs your KPI queries on a schedule, computes week-over-week and month-over-month trends, and writes a formatted Google Sheet with the queries it ran logged alongside the numbers.
SQL against your database. The example uses Supabase.
Week-over-week, month-over-month, derived ratios, flagged movement.
Separate tabs for summary, trends, raw data and a query log.
Example schedule: Mondays at 6:00 AM. You choose the cadence and the destination.
The deliverable
The report is a Google Sheet your team already knows how to read. What changes is that the tabs separate the answer from its evidence.
The headline metrics for the period and any metric the run flagged for unusual week-over-week movement.
Week-over-week and month-over-month change for each metric, with segment breakdowns where you ask for them.
The query results the numbers came from, so a figure can be checked against its inputs.
Every query that ran and the number of rows it returned. Ask for this tab in the goal; it is what lets a reader trace a number back to SQL.
Before the first run
A KPI report is only as consistent as its definitions. The run repeats what the goal says, so settle these once.
| Metrics | Source in the example | How it is derived | Decide before the first run |
|---|---|---|---|
| MRR, net new, expansion, churn | Stripe tables synced into the database | Aggregated by plan tier and customer segment, compared with targets you provide. | Which plans roll up into a tier, and what counts as expansion rather than new. |
| DAU, activation rate, feature adoption | PostHog events and product tables | Counted from event and timestamp data. | What counts as active, and which event marks activation. |
| NRR and churn rate by segment | The raw query results | Computed in a code sandbox from those results. | The formula and the cohort window your team treats as the definition. |
| WoW and MoM trends | Timestamps in the same tables | Each period compared with the previous week or month. | Where a week starts and which time zone applies. |
What changes
The weekly metrics meeting starts in 30 minutes and the spreadsheet is stale. Billing data syncs into the database, product events land in the same cluster, and the queries were written by someone who has since left. The data exists; the gap is re-deriving it by hand every Monday.
Manual todayMonday morning goes to fixing queries and pasting into sheets.
Scheduled runThe sheet is waiting at the time you scheduled the run.
Manual todayA query breaks when the schema changes and nobody notices for weeks.
Scheduled runA query that fails is reported, so a broken metric is not delivered as if it were current.
Manual todayNumbers in a spreadsheet with no way to see how they were computed.
Scheduled runA metadata tab lists the queries and row counts, when your goal asks for it.
Manual today"I'll follow up after the meeting" takes the afternoon.
Scheduled runSegment breakdowns can already be in the trends tab, so the usual follow-up is answered.
How it runs
Four steps in one scheduled task. Read-only queries run first; writing the sheet is the step with a consequence.
MRR, net new, expansion and churn by plan tier and customer segment, compared with the targets you give it. Ask the run to log the SQL it used.
DAU, activation rate and feature adoption from PostHog events and native product tables, with week-over-week and month-over-month trends derived from timestamps.
NRR and churn rate by segment are calculated from the raw query results. Any metric with unusual movement, by a threshold you set, is flagged. The sandbox code can be inspected.
Summary, detailed trends and raw data go in separate tabs. A metadata tab logs the queries that ran and their row counts.
Before you trust it
ZeroTwo has not published a measured accuracy result for this workflow, so verify it on your own data first.
One line per metric in the goal: source table, formula, and time window. The run repeats whatever the goal says.
For the first run, compare two or three headline numbers with the source system for the same period, such as the billing dashboard.
Run it once by hand before scheduling. Check the summary, the trends, the raw data and the query log.
Pick cadence, time zone and where the sheet link goes. The example runs Mondays at 6:00 AM.
Set the movement threshold that gets flagged, and confirm that a failed query is named in the report instead of silently using old numbers.
Replace the bracketed threshold and the table names with your own, then run it once by hand before scheduling.
Every Monday, pull MRR, net new, expansion and churn by plan tier from our Supabase database, plus DAU, activation rate and feature adoption. Compute week-over-week and month-over-month trends, and NRR and churn rate by segment. Write the results to a Google Sheet with Executive summary, Trends, Raw data and Metadata tabs. On the Metadata tab list every query that ran and its row count. Flag any metric that moved more than [threshold] week over week, and name any query that failed instead of using old numbers. Share the sheet link in #metrics in Slack.
Yes, in the way you set the task up. Ask ZeroTwo to show the SQL for the first run, adjust joins or filters, and have it list every query with its row count on the metadata tab. The run history also records the plan, the apps used and the output of each run.
ZeroTwo has Stripe and PostHog connectors, so a run can read them directly. If you already sync with Fivetran or Airbyte, pointing the queries at the database keeps your existing pipeline as the source of truth and means one connection instead of several.
A scheduled run reports a source it cannot read rather than guessing. Put it in the goal to name the specific metric that failed, so a renamed column shows up as a failed line in the report and not as a stale number.
Yes. Net revenue retention, churn rate by segment and custom ratios can be computed from the raw query results. Write the formula into the goal once, and check the sandbox code the first time to confirm the math matches your definition.
Give the run a read-only database role and a sensible query timeout, and point it at a read replica if the tables are large. ZeroTwo can only read what that role is allowed to read.
That is a setting for you to decide. Writing a sheet and posting a message change something outside ZeroTwo, so a scheduled run can stop at an approval gate before it does either. See scheduled tasks for how approvals and run history work.
Keep going