FreshBooks invoices in a live spreadsheet
Add the Invoices table to a sheet as a data source named invoices and its 20 columns become names your formulas, pivot tables and charts use. Sheets reads it from your FreshBooks business each time the sheet opens or refreshes.
Formulas on this table
=data.invoices.sum(total) Total total. Adds up the Total column over every row of Invoices.
=data.invoices.sum(total, payment_status, A2) Total per payment status. With a payment status in A2, the total for that one. Fill it down next to a list of them.
=list.invoices(payment_status) Every payment status, once. Spills the distinct payment status values down the column: the row labels for the formula above.
=data.invoices.sum(total, date, ">=2026-01-01") Since a date. Only rows whose Date is on or after 1 January 2026. Criteria such as ">=", "<" and "<>" work as in any spreadsheet.
=data.invoices.count(id, payment_status, "<>") Rows with a payment status. Counts the rows whose Payment status is not empty.
=data.invoices.avg(outstanding) Average outstanding. avg, min, max, count, countd (distinct) and first work the same way as sum.
Reports that use it
=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.
Columns
| Column | In formulas | Type |
|---|---|---|
| ID | id | Text |
| Invoice no. | invoice_no | Text |
| PO number | po_number | Text |
| Date | date | Date |
| Due date | due_date | Date |
| Client | client | Text |
| Client ID | client_id | Text |
| Total | total | Number |
| Outstanding | outstanding | Number |
| Paid | paid | Number |
| Discount | discount | Number |
| Payment status | payment_status | Text |
| Days overdue | days_overdue | Whole number |
| Ageing | ageing | Text |
| Status | status | Text |
| Paid status | paid_status | Text |
| Paid on | paid_on | Date |
| Currency | currency | Text |
| Archived | archived | Yes / no |
| Updated at | updated_at | Date and time |
Other sales tables
Your invoices, live
Invoices, payments, expenses and time entries become tables that formulas, pivot tables and charts read directly. Your numbers stay current without exporting.