Finance & Accounting

Integrated P&L, Cash Flow & Balance Sheet Model

Marc SeanMay 14, 20267 min read

This article covers the tab architecture, cross-tab formula patterns, and the balance sheet check formula that catches errors before your CFO does.

Why "Simple" Doesn't Mean Fewer Tabs

The word "simple" here doesn't mean a single sheet with everything crammed together. It means a model that's clean enough to audit, fast enough to run scenarios on, and tight enough that numbers tie automatically.

A production-ready integrated model needs at minimum:

  • Assumptions — inputs only, no calculations
  • P&L — revenue through net income
  • Cash Flow — operating, investing, financing sections
  • Balance Sheet — assets = liabilities + equity, every period
  • Returns (optional but standard for PE decks)

The tab architecture determines where formulas live. A formula on the Cash Flow tab should pull from P&L, not recalculate anything. That separation is what makes the model auditable.

Wiring the P&L Tab

Start with Assumptions. Every driver — revenue growth rate, gross margin, SG&A as a % of revenue, tax rate — lives in one place.

Assumptions!$B$3  = revenue Year 1 = $18,000,000
Assumptions!$B$4  = growth rate = 12.0%
Assumptions!$B$5  = gross margin = 38.5%
Assumptions!$B$6  = SG&A % of revenue = 16.2%
Assumptions!$B$7  = D&A = $650,000
Assumptions!$B$8  = tax rate = 26.0%
Assumptions!$B$9  = capex = $800,000

On the P&L tab, Year 2 revenue:

='P&L'!C4 * (1 + Assumptions!$B$4)

EBITDA:

='P&L'!C4 * Assumptions!$B$5 - 'P&L'!C4 * Assumptions!$B$6

Net income (after D&A and taxes):

=('P&L'!C8 - Assumptions!$B$7) * (1 - Assumptions!$B$8)

With $18M in Year 1 revenue at 38.5% gross margin and 16.2% SG&A, EBITDA runs around $4.0M. After $650K D&A and a 26% tax rate, net income lands near $2.5M. Those numbers feed everything downstream.

Building the Cash Flow Statement (Indirect Method)

According to FASB ASC 230-10-45-28, the indirect method — starting with net income and adjusting for non-cash items and working capital changes — is the standard presentation for operating cash flows, and it's used by the overwhelming majority of U.S. public companies precisely because it reconciles directly back to the P&L.

The operating section pulls from three places: the P&L (net income), the P&L again (D&A add-back), and the balance sheet (working capital changes).

// Net income from P&L
='P&L'!C12

// Add back D&A (non-cash charge)
=Assumptions!$B$7

// Working capital changes — sign conventions matter here
// Increase in AR = cash outflow = negative
=-('Balance Sheet'!C8 - 'Balance Sheet'!B8)

// Increase in AP = cash inflow = positive
='Balance Sheet'!C16 - 'Balance Sheet'!B16

The sign convention on working capital trips up a lot of models. An increase in accounts receivable means you've recognized revenue but haven't collected cash — that's a use of cash, so it's negative. An increase in accounts payable means you owe more but haven't paid yet — that's a source of cash, so it's positive. Get this backwards and your cash flow statement will be off by the entire working capital swing.

The investing section:

// Capex (cash outflow, negative)
=-Assumptions!$B$9

// Proceeds from asset sales (if applicable)
=Assumptions!$B$10

Financing is where debt draws and repayments live. For a standalone operating model it's typically just revolver draws and scheduled debt repayment:

='Debt Schedule'!C5 - 'Debt Schedule'!C6

Closing Cash and Feeding the Balance Sheet

The cash flow statement's ending cash becomes an input to the balance sheet. This is the link that makes the model integrated rather than just three parallel schedules.

// Cash Flow tab: Ending Cash
='Cash Flow'!C5 + 'Cash Flow'!C15 + 'Cash Flow'!C22

// Balance Sheet tab: Cash (pulls from Cash Flow, never hardcoded)
='Cash Flow'!C25

Retained earnings updates as:

='Balance Sheet'!B24 + 'P&L'!C12

Where B24 is prior-period retained earnings and C12 is current-period net income. This single formula is what causes equity to change when earnings change — and what closes the loop between all 3 statements.

The Balance Sheet Check Formula

Every integrated model needs a check. The balance sheet check confirms assets = liabilities + equity. If it shows anything other than zero, something is wrong.

='Balance Sheet'!C30 - ('Balance Sheet'!C40 + 'Balance Sheet'!C50)

Format this cell with conditional formatting: green for zero, red for anything else. Add it to every period column. If you're building a 5-year model, that's 5 check cells, and all 5 should be green before you send anything to a bank or board.

Common sources of a non-zero check: cash on the balance sheet is hardcoded rather than linked to the Cash Flow tab, or retained earnings isn't picking up current-period net income. Both are formula errors, not structural ones — which is exactly why the check cell exists.

Handling Circular References: The Revolver

Interest expense on the revolver depends on the revolver balance. The revolver balance depends on ending cash. Ending cash depends on net income. Net income includes interest expense. That's a circular reference.

Google Sheets handles this with iterative calculation. Per Google's Sheets documentation, enable it under File → Settings → Calculation → Iterative calculation. Set maximum iterations to 50 and threshold to 0.001. As of 2026, this setting persists at the file level, not the user level — important if you're sharing the model with a bank syndicate or co-investor who opens it on their own account.

Without iterative calculation, the model either errors out or requires a manual override cell to break the loop. For LBOs with complex debt waterfalls, you often need to break the circularity manually using a prior-period rate assumption.

Contribution Margin by Segment: A Common Add-On

If your model covers multiple products or business units, the standard extension is computing contribution margin by SKU or segment and rolling it into the consolidated P&L. The formula pattern:

=SUMIFS('Revenue Detail'!D:D, 'Revenue Detail'!B:B, 'P&L'!$A5,
        'Revenue Detail'!C:C, ">=" & Assumptions!$B$3)

This pulls segment revenue where the segment matches the P&L row label and the period falls within scope. The same pattern works for COGS by segment, giving you contribution margin at the SKU level without breaking the consolidated model's flow.

Sensitivity Tables on the Integrated Model

A sensitivity table on an integrated model shows how every output shifts when you stress an input. For a three-statement model, the highest-value sensitivities are typically:

  • Revenue growth vs. EBITDA margin: bounds the range of free cash flow outcomes ($2.1M–$2.5M in the base case)
  • Capex vs. revenue: shows how investment intensity affects FCF and cash
  • Terminal multiple vs. discount rate: standard DCF output at a 14.2x EBITDA exit

In Google Sheets, =IFERROR(INDEX($B$2:$F$6, MATCH($H8,$A$2:$A$6,0), MATCH(I$7,$B$1:$F$1,0)),"—") pulls the right output cell into any sensitivity layout. Build the output table by varying Assumptions inputs directly; the integrated model recalculates everything automatically.

Using ModelMonkey to Accelerate the Build

The mechanical parts of this build — wiring the same formula pattern across 5 years, making sure every cross-tab reference points to the right column, setting up conditional formatting on the check cells — take time that doesn't add analytical value. ModelMonkey can generate the cross-tab reference structure, write the iterative working capital formulas, and flag when a balance sheet reference is pointing to the wrong period column. It works inside Google Sheets, so you're not exporting anything or breaking your tab structure.

The part that still requires judgment: the assumptions themselves. No tool tells you that 38.5% gross margin is realistic for a SaaS business in your sector, or that a 14.2x EBITDA exit multiple is defensible to a bank. That stays with you.


Frequently Asked Questions