Burn Rate & Cash Runway - revised

Burn Rate & Cash Runway - revised: a 6-step workflow for QuickBooks / spreadsheet data over columns like section, account, 2025-09, 2025-10. Every step is plain SQL you can read — open it, connect your data, and make it your own. No data is shared in this template, only the recipe.

6 steps · September 1, 2026
Make it your own →
No data is shared in this template. It contains only the recipe — column names and SQL logic. When you run it, your data is processed in your own browser and never leaves your machine.

What data it expects

QBO_ProfitAndLoss_Month.csv
section · VARCHARaccount · VARCHAR2025-09 · DOUBLE2025-10 · DOUBLE2025-11 · DOUBLE2025-12 · DOUBLE2026-01 · DOUBLE2026-02 · DOUBLE2026-03 · DOUBLE2026-04 · DOUBLE2026-05 · DOUBLE2026-06 · DOUBLE2026-07 · DOUBLE2026-08 · DOUBLETotal · DOUBLE

Connect QuickBooks Online or drop a CSV / Excel export with a similar layout — the AI adapts the workflow if your columns differ.

How it works — every step, readable

  1. 01Load 12-month P&L
    SELECT * FROM read_csv_auto('QBO_ProfitAndLoss_Month.csv', header=true)
  2. 02Unpivot to monthly lines
    WITH typed AS (
        SELECT
            section,
            account,
            TRY_CAST(COLUMNS(* EXCLUDE (section, account)) AS DOUBLE)
        FROM input_1
    )
    UNPIVOT typed
    ON COLUMNS(* EXCLUDE (section, account))
    INTO NAME period VALUE amount
  3. 03Monthly income, spend, net
    SELECT period,
      ROUND(SUM(CASE WHEN section ILIKE 'income%' THEN amount ELSE 0 END), 0) AS income,
      ROUND(SUM(CASE WHEN section NOT ILIKE 'income%' THEN amount ELSE 0 END), 0) AS spend,
      ROUND(SUM(CASE WHEN section ILIKE 'income%' THEN amount ELSE -amount END), 0) AS net
    FROM input_1 GROUP BY period ORDER BY period
  4. 04Burn trend (3-month average)
    SELECT period, income, spend, net,
      ROUND(AVG(net) OVER (ORDER BY period ROWS BETWEEN 2 PRECEDING AND CURRENT ROW), 0) AS net_3mo_avg
    FROM input_1 ORDER BY period
  5. 05YOUR cash balance - edit me
    SELECT 50000 AS cash_on_hand
  6. 06Months of runway
    WITH burn AS (SELECT -AVG(net) AS avg_monthly_burn FROM (SELECT net FROM input_2 ORDER BY period DESC LIMIT 3))
    SELECT c.cash_on_hand, ROUND(b.avg_monthly_burn, 0) AS avg_monthly_burn_last3,
      CASE WHEN b.avg_monthly_burn <= 0 THEN NULL ELSE ROUND(c.cash_on_hand / b.avg_monthly_burn, 1) END AS months_of_runway
    FROM input_1 c, burn b

Run this on your books

Free to try — no sign-up, no card. The workflow runs in your browser; your data never leaves your machine.

Make it your own →