Startup CFO

6-Month Cash Flow Forecast β€” Updated Every Monday Morning

Single-point forecast β†’ 1,000-scenario probability distributionStartup Finance5 min read

Key Takeaway

Warren generates a rolling 6-month cash flow forecast every Monday using Monte Carlo simulation with 1,000 scenarios, giving us P10/P50/P90 confidence bands instead of a single guess.

The Problem

Cash flow forecasting is the most important and most wrong exercise in corporate finance.

Important because running out of cash kills companies. Wrong because every forecast is built on assumptions that are partially fictional. "We'll close 3 new clients in Q2" β€” maybe. "Payment from Client X arrives in 30 days" β€” sometimes it's 60.

At PyratzLabs, the standard forecast was a spreadsheet. One row per month. Known recurring revenue, expected new deals, known expenses, planned hires. A single number per month that was almost certainly wrong.

The problem isn't the model. The model is fine. The problem is that a single-point forecast creates false confidence. "We have 8 months of runway" means nothing if the P10 scenario (where some deals slip and a payment is delayed) shows 4 months.

I don't want a forecast. I want a probability distribution.

The Solution

Warren builds a rolling 6-month cash flow forecast with a Monte Carlo layer. Known items (recurring revenue, signed contracts, payroll) are deterministic. Uncertain items (pipeline deals, payment timing, new client acquisition) are probabilistic. The agent runs 1,000 simulations and outputs confidence bands: P10 (pessimistic), P50 (expected), and P90 (optimistic).

Every Monday morning, the forecast updates automatically. Warren reviews it. If something material shifted, it escalates to me. If not, it logs quietly and we move on.

The Process

Forecast input structure:

yamlShow code
# cash-flow-forecast config
schedule: "0 6 * * 1"  # Monday 6AM UTC
forecast_horizon: 6  # months
simulations: 1000
currency: EUR

deterministic_items:
  recurring_revenue:
    - source: "Billy SaaS"
      monthly: 180000
      confidence: 0.99  # effectively certain
    - source: "Consulting retainers"
      monthly: 45000
      confidence: 0.95
  fixed_expenses:
    - item: "Payroll (all entities)"
      monthly: 320000
    - item: "Cloud infrastructure"
      monthly: 28000
    - item: "Office + admin"
      monthly: 15000

probabilistic_items:
  pipeline_revenue:
    - client: "Enterprise Deal A"
      amount: 150000
      probability: 0.60
      expected_close: "month_2"
      payment_delay_days: { mean: 45, std: 15 }
    - client: "Enterprise Deal B"
      amount: 85000
      probability: 0.35
      expected_close: "month_3"
      payment_delay_days: { mean: 30, std: 10 }
  variable_expenses:
    - item: "New hire (senior engineer)"
      monthly_cost: 12000
      probability: 0.70
      start_month: 2
    - item: "Conference + travel"
      quarterly: 15000
      variance: 0.30

alerts:
  min_cash_buffer: 200000
  alert_on: "P10"  # alert if pessimistic scenario breaches buffer

Monte Carlo engine:

pythonShow code
def monte_carlo_forecast(config, n_simulations=1000):
    results = []

    for _ in range(n_simulations):
        monthly_cash = [config.current_balance]

        for month in range(1, config.horizon + 1):
            inflow = config.deterministic_revenue(month)
            outflow = config.deterministic_expenses(month)

            # Probabilistic items: coin flip per simulation
            for deal in config.pipeline:
                if random.random() < deal.probability:
                    close_month = deal.expected_close
                    delay = max(0, np.random.normal(
                        deal.payment_delay_mean, deal.payment_delay_std
                    ))
                    payment_month = close_month + int(delay / 30)
                    if payment_month == month:
                        inflow += deal.amount

            for expense in config.variable_expenses:
                if random.random() < expense.probability:
                    if expense.applies_to(month):
                        outflow += expense.sample_amount()

            net = inflow - outflow
            monthly_cash.append(monthly_cash[-1] + net)

        results.append(monthly_cash)

    # Calculate percentiles
    results_array = np.array(results)
    p10 = np.percentile(results_array, 10, axis=0)
    p50 = np.percentile(results_array, 50, axis=0)
    p90 = np.percentile(results_array, 90, axis=0)

    return ForecastResult(p10=p10, p50=p50, p90=p90, raw=results_array)

Monday morning output:

View details
πŸ“Š CASH FLOW FORECAST β€” Week of March 9, 2026
Rolling 6-month view | 1,000 simulations

Month    | P10 (Pessimistic) | P50 (Expected) | P90 (Optimistic)
---------|-------------------|----------------|------------------
Mar 2026 | €1,240K           | €1,310K        | €1,380K
Apr 2026 | €1,080K           | €1,195K        | €1,340K
May 2026 | €920K             | €1,110K        | €1,350K
Jun 2026 | €780K             | €1,040K        | €1,410K
Jul 2026 | €650K             | €985K          | €1,480K
Aug 2026 | €510K             | €940K          | €1,560K

⚠️ ALERT: P10 scenario breaches €200K minimum buffer in month 6
At the 10th percentile, cash drops to €510K in August β€” above buffer,
but trending toward it.

Key drivers of downside:
β€’ Enterprise Deal A (€150K) doesn't close: -€150K
β€’ Enterprise Deal B (€85K) delays to Q4: -€85K
β€’ Payment delays extend to 60 days: -€90K working capital impact
β€’ New hire starts on schedule despite revenue miss: -€72K

Recommendation: Consider accelerating Deal A closing or establishing
a €200K credit line as insurance against the P10 path.

Ξ” vs last week: P50 improved by €35K (Billy MRR increase recognized)

The Results

MetricStatic Spreadsheet (Before)Monte Carlo Agent (After)
Forecast typeSingle-pointProbability distribution
Update frequencyMonthly (manual)Weekly (automated)
Scenarios modeled11,000 per run
Time to produce4-6 hoursAutomated (0 hours)
Early warning capabilityNone (reactive)P10 alerts (proactive)
Accuracy (P50 vs actual, 3-month)Β±18%Β±7%

Try It Yourself

Install the startup-financial-modeling and monte-carlo-financial-simulator skills on Mr.Chief. Configure your known revenue, expenses, and pipeline with probability estimates. The agent runs the simulations and delivers the forecast on your schedule.

The key insight: you don't need a perfect forecast. You need to know the range of outcomes. When the pessimistic scenario still looks fine, you sleep well. When it doesn't, you act early.


A single-point forecast is a lie you tell yourself. A probability distribution is the truth with error bars. I'll take the truth.

cash-flow-forecastMonte-CarlorunwayCFOfinancial-planning

Want results like these?

Start free with your own AI team. No credit card required.

6-Month Cash Flow Forecast β€” Updated Every Monday Morning β€” Mr.Chief