Reports on FreshBooks data
Each report is one formula on live data. Type it in a cell; when a formula refers to A2, list the values in column A first (for example with =list.<table>(<column>)) and fill the formula down.
=data.invoices.sum(outstanding, payment_status, "Overdue") Overdue receivables. Everything clients owe past the due date. Sheets computes the Payment status column (Draft, Open, Overdue or Paid) from what is outstanding and the due date.
=data.invoices.sum(outstanding, ageing, A2) Receivables ageing. Outstanding invoices in the buckets accountants use (Current, 1-30, 31-60, 61-90, Over 90). Put a bucket name in A2.
=data.invoices.sum(outstanding, client, A2, payment_status, "<>Paid") Receivables by client. Put the clients in column A with =list.invoices(client) and what each one still owes beside it.
=data.invoices.sum(total, date, ">=2026-01-01", payment_status, "<>Draft") Invoiced this year. Total invoiced since 1 January, drafts left out; change the date to compare periods.
=data.payments.sum(amount, method, A2) Payments received per method. Cash in by payment method, per row in column A.
=data.expenses.sum(amount, category, A2) Expenses by category. Spending per expense category, ready for a pivot table or a bar chart.
=data.time_entries.sum(hours, project, A2) Hours per project. Logged hours per project from your time entries. List the projects with =list.time_entries(project).
=data.bills.sum(outstanding, payment_status, "Overdue") Bills overdue. Vendor bills past due, the cash you need to set aside.
Build it on your own data
Invoices, payments, expenses and time entries become tables that formulas, pivot tables and charts read directly. Your numbers stay current without exporting.