Financial Operations Dashboard

Type: Execution Recipe Confidence: 0.88 Sources: 6 Verified: 2026-03-12

Purpose

This recipe produces a startup financial operations dashboard that integrates with the accounting system (QuickBooks or Xero), displays actual vs planned P&L, calculates real-time cash runway projections, tracks burn rate trends, and computes unit economics (LTV, CAC, CAC payback). The output is a deployed internal tool giving founders and finance leads a single source of truth for financial health, replacing manual spreadsheet updates. [src6]

Prerequisites

Constraints

Tool Selection Decision

Which path?
├── User is non-technical AND budget = free
│   └── PATH A: No-Code Free — Google Sheets + QBO/Xero export + manual update
├── User is non-technical AND budget > $0
│   └── PATH B: No-Code Paid — Retool + Supabase + Apideck ($49/mo)
├── User is semi-technical or developer AND budget = free
│   └── PATH C: Code + Free — Metabase + PostgreSQL + cron sync script
└── User is developer AND budget > $0
    └── PATH D: Code + Paid — Retool + PostgreSQL + n8n + direct API
PathToolsCostSpeedOutput Quality
A: No-Code FreeGoogle Sheets + CSV exports$02-3 hoursBasic — manual weekly updates
B: No-Code PaidRetool + Supabase + Apideck$49/mo4-6 hoursGood — auto-sync, interactive
C: Code + FreeMetabase + PostgreSQL + cron$06-8 hoursGood — full SQL control
D: Code + PaidRetool + PostgreSQL + n8n$25-50/mo5-7 hoursExcellent — real-time, custom

Execution Flow

Step 1: Design the Financial Data Model

Duration: 30-60 minutes · Tool: SQL client

Create the 6-table schema: chart_of_accounts, actuals_monthly, budget_monthly, cash_balance, revenue_metrics, and unit_economics with appropriate indexes.

Verify: All 6 tables created successfully. If failed: Check PostgreSQL connection and permissions.

Step 2: Build Accounting Data Sync

Duration: 1-2 hours · Tool: n8n, custom script, or Apideck

Connect to QuickBooks or Xero API using OAuth2. Extract monthly P&L report data and upsert to actuals_monthly. Sync cash balance daily from bank account totals.

Verify: SELECT month, SUM(amount) FROM actuals_monthly GROUP BY month; returns monthly totals matching accounting system. If failed: Check OAuth2 token refresh flow. QuickBooks tokens expire every 60 minutes; Xero tokens every 30 minutes.

Step 3: Build Financial Analytics Queries

Duration: 1-2 hours · Tool: SQL

Write 5 core analytics queries: P&L actual vs budget with variance, monthly burn rate with 3-month moving average, runway calculation from cash balance and average net burn, unit economics (LTV/CAC/payback), and revenue trend with MRR growth rate.

Verify: P&L query returns categories with non-zero actuals. Runway calculation returns positive months. If failed: Check chart_of_accounts mapping — type/sub_type must match accounting system categories.

Step 4: Assemble the Dashboard UI

Duration: 1-2 hours · Tool: Retool or Metabase

Build 6-section layout: KPI row (Cash Balance, Runway, Net Burn, MRR, LTV:CAC), P&L actual vs budget chart, runway projection area chart with zero-cash date line, monthly burn rate trend, MRR waterfall, unit economics trend lines, and expense breakdown table.

Verify: All 6 sections render. Cash balance matches accounting system. If failed: Check query bindings and data source connections.

Step 5: Configure Financial Alerts

Duration: 30-60 minutes · Tool: n8n or Pipedream + Slack/Email

Set up weekly alerts for: runway below 6 months, category spend exceeding 120% of budget, LTV:CAC ratio below 1.0, and MRR month-over-month decline.

Verify: Test alert fires in Slack/email with sample data. If failed: Check webhook URL and workflow execution.

Step 6: Deploy and Share Access

Duration: 30 minutes · Tool: Dashboard platform settings

Share with CEO, CFO/finance lead, and board observer. Set viewer permissions for department heads, editor for finance team only. Configure monthly email report for investors and enable PDF export for board meetings.

Verify: CEO can view dashboard. Finance lead can edit budget figures.

Output Schema

{
  "output_type": "financial_operations_dashboard",
  "format": "deployed web application",
  "components": [
    {"name": "pl_actual_vs_budget", "type": "chart", "description": "P&L categories with actual, budget, and variance columns", "required": true},
    {"name": "runway_projection", "type": "chart", "description": "Cash balance projection with zero-cash date indicator", "required": true},
    {"name": "burn_rate_trend", "type": "chart", "description": "Monthly net burn with 3-month moving average", "required": true},
    {"name": "mrr_waterfall", "type": "chart", "description": "New, expansion, and churned MRR stacked by month", "required": true},
    {"name": "unit_economics", "type": "chart", "description": "LTV, CAC, and payback period trend lines", "required": true},
    {"name": "kpi_cards", "type": "metrics", "description": "Cash balance, runway months, net burn, MRR, LTV:CAC", "required": true}
  ],
  "refresh_interval": "daily (accounting sync) + real-time (cash balance)",
  "data_source": "PostgreSQL synced from accounting system"
}

Quality Benchmarks

Quality MetricMinimum AcceptableGoodExcellent
Data freshness< 48 hours lag< 24 hoursSame-day sync
P&L accuracyWithin 5% of accountingWithin 1%Exact match (automated)
Runway accuracyWithin 2 months of actualWithin 1 monthWithin 2 weeks
Unit economics coverageLTV and CAC only+ payback + marginFull cohort analysis
Budget completenessRevenue + top 3 expensesAll P&L categories+ headcount plan + cash flow

If below minimum: Check accounting API sync logs. P&L discrepancies usually mean unmapped accounts or timing differences between accrual and cash basis.

Error Handling

ErrorLikely CauseRecovery Action
QuickBooks API 401OAuth2 access token expiredRefresh token via POST to token endpoint; if refresh fails, re-authorize
Xero API 429 (rate limit)More than 60 requests/minuteImplement rate limiter with 1-second delay between calls
P&L totals don't match accountingUnmapped accounts or accrual vs cash basis mismatchAudit chart_of_accounts mapping, verify reporting basis matches
Runway shows "infinite" for unprofitable companyNet burn calculation includes non-cash items or timing offsetUse cash-basis burn or exclude depreciation/amortization from burn calc
Unit economics show extreme valuesSmall customer count amplifies outliersApply minimum sample size (50+ customers) before calculating LTV/CAC
Cash balance negative or zeroSync picked up pending transactions or wrong accountFilter to posted transactions only, verify bank account ID mapping

Cost Breakdown

ComponentFree TierPaid TierAt Scale (Series A+)
Dashboard (Retool)$0 (5 users)$10/user/mo$50/mo (5 users)
Database (Supabase)$0 (500MB)$25/mo$25/mo
ETL (n8n)$0 (self-hosted)$20/mo$50/mo
Accounting API (Apideck)N/A$49/mo$49/mo
Total$0$104/mo$174/mo

Anti-Patterns

Wrong: Calculating runway from revenue minus expenses without cash basis

Accrual accounting includes non-cash items (depreciation, prepaid amortization) and timing differences (invoiced but uncollected revenue). Runway calculated from accrual P&L overstates remaining months by 10-30%. [src3]

Correct: Use cash balance and cash-basis burn rate

Runway = actual bank balance / average net cash outflow over last 3 months. For SaaS with annual prepayments, adjust for deferred revenue timing.

Wrong: Showing LTV:CAC ratio without minimum cohort size

With 10 customers, one whale customer or one unusual acquisition can distort LTV:CAC from 0.5 to 5.0. Presenting this as reliable leads to bad investment decisions. [src5]

Correct: Display confidence interval alongside unit economics

Show LTV:CAC with sample size and confidence range. Below 50 customers, label metrics as "directional estimate" and flag for manual review.

When This Matters

Use when a startup has at least 3 months of bookkeeping data and needs automated financial visibility beyond manual spreadsheets. Critical for companies with less than 12 months of runway or preparing for board meetings and fundraising. This recipe builds the dashboard — for financial planning or modeling, use a playbook card instead.

Related Units