Skip to main content
Free Resource

Cash Flow Tracking Spreadsheet

A complete setup guide for building a cash flow tracking system in Google Sheets. Four sheets that give you full visibility into your invoices, aging receivables, monthly projections, and collection performance.

Make a Copy in Google Sheets

Opens Google Sheets — you'll be prompted to save a copy to your own Drive.

What's Inside

This spreadsheet contains four interconnected sheets. The Invoice Log is your single source of truth — every other sheet pulls data from it automatically. Once you set it up, you only need to update one place when you send an invoice or receive a payment.

Sheet 1
Invoice Log
Every invoice you send, with status tracking and payment dates
Sheet 2
Aging Buckets
See exactly how much is overdue and for how long
Sheet 3
Monthly Cash Flow Projection
Forecast your cash position month by month
Sheet 4
Collection Rate Tracking
Measure how effectively you convert invoices to cash

Sheet 1: Invoice Log

This is the foundation of the entire system. Every invoice you issue gets a row here. The other three sheets reference this data, so accuracy matters. When a client pays, you update the Status and Date Paid columns — everything else recalculates automatically.

ColumnFormatExample
Invoice #TextINV-2026-001
Client NameTextNorthstar Logistics
Invoice DateDate2026-01-15
Due DateDate2026-02-14
AmountCurrency$3,200.00
StatusDropdownUnpaid / Partial / Paid
Date PaidDate2026-02-10
Days to PayNumber (formula)26
NotesTextPartial $1,600 received 2/1

Column Details

Invoice #
Use a consistent numbering scheme. A format like INV-YYYY-NNN keeps things sortable and makes it easy to reference specific invoices when following up with clients. Avoid reusing numbers, even for revised invoices — append a suffix like -R1 instead.
Client Name
Spell it exactly the same way every time. "Northstar Logistics" and "NorthStar Logistics LLC" will show up as two different clients in filters and pivot tables. Pick one canonical name per client and stick with it.
Invoice Date & Due Date
Use proper date formatting (not text). This is critical because the Aging Buckets sheet uses date math to calculate how overdue each invoice is. If your dates are stored as text strings, the formulas will break. In Google Sheets, format the column as Format > Number > Date.
Amount
The full invoice amount, formatted as currency. For partial payments, keep the original invoice amount here — track partial payment details in the Notes column. This keeps your SUMIFS formulas clean.
Status
Use data validation to create a dropdown with exactly three values: Unpaid, Partial, and Paid. Consistent values here are what make the aging bucket formulas work. To add data validation in Google Sheets: Select the column > Data > Data validation > List of items.
Date Paid
Leave blank until payment clears. For partial payments, enter the date of the most recent payment and note the details in the Notes column.
Days to Pay
This is a calculated column. Use the formula:
=IF(G2="", "", G2-C2)
Where G2 is Date Paid and C2 is Invoice Date. Returns blank if not yet paid.
Notes
Free-text field for anything relevant: partial payment amounts, disputed invoices, client contact info, or follow-up dates. You will thank yourself later for keeping notes here.

Sheet 2: Aging Buckets

The aging report tells you not just how much money is outstanding, but how long it has been outstanding. This is the single most important report for managing your accounts receivable. The longer an invoice goes unpaid, the less likely you are to collect it — invoices over 90 days old are collected less than 50% of the time. This sheet helps you spot trouble early.

BucketMeaningCountTotal Amount
CurrentInvoice sent but not yet due(formula)(formula)
1–30 days overdueJust past due — send a reminder(formula)(formula)
31–60 days overdueSignificantly late — follow up directly(formula)(formula)
61–90 days overdueAt risk — escalate or renegotiate(formula)(formula)
90+ days overdueSeriously delinquent — consider write-off(formula)(formula)

Count Formulas

These formulas count the number of unpaid invoices in each aging bucket. They reference the Invoice Log sheet (columns D for Due Date and F for Status).

Current (not yet due)
=COUNTIFS(InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,">="&TODAY())
1–30 days overdue
=COUNTIFS(InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY(),InvoiceLog!D:D,">="&TODAY()-30)
31–60 days overdue
=COUNTIFS(InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-30,InvoiceLog!D:D,">="&TODAY()-60)
61–90 days overdue
=COUNTIFS(InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-60,InvoiceLog!D:D,">="&TODAY()-90)
90+ days overdue
=COUNTIFS(InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-90)

Amount Formulas

These sum the dollar amounts in each bucket instead of counting invoices. Use SUMIFS with the same date logic, referencing column E (Amount).

Current (not yet due) — Total Amount
=SUMIFS(InvoiceLog!E:E,InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,">="&TODAY())
1–30 days overdue — Total Amount
=SUMIFS(InvoiceLog!E:E,InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY(),InvoiceLog!D:D,">="&TODAY()-30)
31–60 days overdue — Total Amount
=SUMIFS(InvoiceLog!E:E,InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-30,InvoiceLog!D:D,">="&TODAY()-60)
61–90 days overdue — Total Amount
=SUMIFS(InvoiceLog!E:E,InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-60,InvoiceLog!D:D,">="&TODAY()-90)
90+ days overdue — Total Amount
=SUMIFS(InvoiceLog!E:E,InvoiceLog!F:F,"Unpaid",InvoiceLog!D:D,"<"&TODAY()-90)

Tip: Name the Invoice Log data range as a named range (Data > Named ranges) so your formulas stay readable. If you name the sheet tab "InvoiceLog" (no space), the formulas above will work as written. If your tab name has a space, wrap it in single quotes: 'Invoice Log'!F:F.

Sheet 3: Monthly Cash Flow Projection

This sheet projects your cash position for the next six months. The goal is simple: know whether you can cover your expenses before the month starts, not after. Each column represents a month. The row structure flows from your beginning balance through income and expenses down to an ending balance that carries forward as the next month's beginning balance.

RowJanFebMar...
Beginning Balance$12,000(formula)(formula)...
Expected Income(formula)(formula)(formula)...
Actual Income$8,400$—$—...
Expenses$6,200$6,500$6,200...
Net Cash Flow(formula)(formula)(formula)...
Ending Balance(formula)(formula)(formula)...

Row-by-Row Formulas

Assume months are in columns B onward (B = Jan, C = Feb, etc.) and the rows are numbered 2–7. Adjust to match your actual layout.

Beginning Balance (Row 2)
January: enter manually (your current bank balance)
February onward: =B7  (previous month's Ending Balance)

The first month is a manual entry. Every subsequent month pulls from the prior month's ending balance, creating a rolling chain.

Expected Income (Row 3) — from unpaid invoices due this month
=SUMIFS(InvoiceLog!E:E, InvoiceLog!F:F, "Unpaid", InvoiceLog!D:D, ">="&DATE(YEAR(B1),MONTH(B1),1), InvoiceLog!D:D, "<"&DATE(YEAR(B1),MONTH(B1)+1,1))

Where B1 contains the month header date (e.g., 2026-01-01). This sums all unpaid invoices whose due dates fall within that calendar month.

Actual Income (Row 4)
=SUMIFS(InvoiceLog!E:E, InvoiceLog!F:F, "Paid", InvoiceLog!G:G, ">="&DATE(YEAR(B1),MONTH(B1),1), InvoiceLog!G:G, "<"&DATE(YEAR(B1),MONTH(B1)+1,1))

Sums invoices marked as "Paid" where the Date Paid (column G) falls within the month. Update this as payments come in.

Expenses (Row 5)
Enter manually each month. Include:
- Software subscriptions
- Contractor payments
- Rent / coworking
- Insurance, taxes, etc.

For a more detailed breakdown, add sub-rows for each expense category and sum them into the Expenses row.

Net Cash Flow (Row 6)
=B4-B5

Actual Income minus Expenses. A negative number means you spent more than you collected that month. For future months (before actual income is known), use =B3-B5 (Expected Income minus Expenses) to get a projected net.

Ending Balance (Row 7)
=B2+B6

Beginning Balance plus Net Cash Flow. This carries forward to become the next month's Beginning Balance.

Tip: Use conditional formatting to highlight any Ending Balance that drops below a threshold (e.g., one month of expenses). In Google Sheets: Format > Conditional formatting > Less than > your threshold. Set the background to red. This gives you an early warning when a cash crunch is coming.

Sheet 4: Collection Rate Tracking

Your collection rate is the percentage of invoiced revenue you actually receive. Healthy freelance businesses typically run above 95%. If yours is below 90%, you have a systemic problem — either your clients are unreliable, your payment terms are too loose, or your follow-up process has gaps. This sheet helps you track the trend month over month so you can see whether changes to your process are working.

MetricJanFebMar...
Total Invoiced$14,200$11,850(formula)...
Collected Within Terms$10,400(formula)(formula)...
Collected Late$2,600(formula)(formula)...
Outstanding$800(formula)(formula)...
Write-offs$400$0$0...
Collection Rate %94.2%(formula)(formula)...

Formulas

Each metric can be calculated from the Invoice Log. Assume column B is January, and Row 1 contains the month header date.

Total Invoiced
=SUMIFS(InvoiceLog!E:E, InvoiceLog!C:C, ">="&DATE(YEAR(B1),MONTH(B1),1), InvoiceLog!C:C, "<"&DATE(YEAR(B1),MONTH(B1)+1,1))

Sum of all invoice amounts where the Invoice Date (column C) falls within the month.

Collected Within Terms
=SUMIFS(InvoiceLog!E:E, InvoiceLog!C:C, ">="&DATE(YEAR(B1),MONTH(B1),1), InvoiceLog!C:C, "<"&DATE(YEAR(B1),MONTH(B1)+1,1), InvoiceLog!F:F, "Paid", InvoiceLog!G:G, "<="&InvoiceLog!D:D)

Invoices from this month that were paid on or before their due date. Note: this SUMIFS may need to be implemented as an ARRAYFORMULA or helper column in Google Sheets since SUMIFS cannot directly compare two ranges. A practical alternative:

=SUMPRODUCT((InvoiceLog!C2:C1000>=DATE(YEAR(B1),MONTH(B1),1)) * (InvoiceLog!C2:C1000<DATE(YEAR(B1),MONTH(B1)+1,1)) * (InvoiceLog!F2:F1000="Paid") * (InvoiceLog!G2:G1000<=InvoiceLog!D2:D1000) * InvoiceLog!E2:E1000)
Collected Late
=SUMPRODUCT((InvoiceLog!C2:C1000>=DATE(YEAR(B1),MONTH(B1),1)) * (InvoiceLog!C2:C1000<DATE(YEAR(B1),MONTH(B1)+1,1)) * (InvoiceLog!F2:F1000="Paid") * (InvoiceLog!G2:G1000>InvoiceLog!D2:D1000) * InvoiceLog!E2:E1000)

Same as above but where Date Paid is after Due Date.

Outstanding
=SUMIFS(InvoiceLog!E:E, InvoiceLog!C:C, ">="&DATE(YEAR(B1),MONTH(B1),1), InvoiceLog!C:C, "<"&DATE(YEAR(B1),MONTH(B1)+1,1), InvoiceLog!F:F, "Unpaid")

Invoices from this month that are still unpaid. Add a separate SUMIFS for "Partial" status if you want to include those.

Write-offs
Enter manually. These are invoices you've decided
you will never collect. Add a "Written Off" status
to your Invoice Log dropdown if you want to track
these with a formula instead.
Collection Rate %
=(B3+B4)/(B2-B6)*100

(Collected Within Terms + Collected Late) / (Total Invoiced - Write-offs) * 100. Write-offs are excluded from the denominator because they represent revenue you intentionally abandoned, not a failure to collect.

Benchmark: Track this number monthly. If your collection rate is consistently below 90%, look at which clients are responsible. Often 80% of late payments come from 20% of clients. Consider requiring deposits, shorter payment terms, or milestone billing for those clients.

Setup Checklist

Follow these steps to get the spreadsheet working for your business.

  1. Make a copy of the spreadsheet to your own Google Drive.
  2. Rename the InvoiceLog tab if needed, but update all cross-sheet references if you do.
  3. Add data validation to the Status column (Unpaid / Partial / Paid) in the Invoice Log.
  4. Format date columns as actual dates (Format > Number > Date), not text.
  5. Enter your current bank balance as the Beginning Balance in the Cash Flow Projection sheet.
  6. Enter your monthly expenses in the Cash Flow Projection sheet.
  7. Backfill your existing invoices into the Invoice Log. Start with anything currently unpaid, then add historical data if you want accurate collection rate trends.
  8. Set up conditional formatting on the Ending Balance row (highlight red if below your expense threshold) and on the Aging Buckets amounts (highlight 61+ day buckets).
Make a Copy in Google Sheets

Opens Google Sheets — you'll be prompted to save a copy to your own Drive.

Outgrow the spreadsheet?

Payment Hunter automates everything this spreadsheet tracks manually — invoice extraction, payment reminders, aging reports, and collection rate dashboards. Upload your invoices and let AI handle the follow-ups.

Start free trial

30-day free trial. No credit card required.