FreshBooks projects in a live spreadsheet
Add the Projects table to a sheet as a data source named projects and its 16 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.projects.sum(fixed_price) Total fixed price. Adds up the Fixed price column over every row of Projects.
=data.projects.sum(fixed_price, project_type, A2) Fixed price per project type. With a project type in A2, the total for that one. Fill it down next to a list of them.
=list.projects(project_type) Every project type, once. Spills the distinct project type values down the column: the row labels for the formula above.
=data.projects.sum(fixed_price, due_date, ">=2026-01-01") Since a date. Only rows whose Due date is on or after 1 January 2026. Criteria such as ">=", "<" and "<>" work as in any spreadsheet.
=data.projects.count(id, project_type, "<>") Rows with a project type. Counts the rows whose Project type is not empty.
=data.projects.avg(rate) Average rate. avg, min, max, count, countd (distinct) and first work the same way as sum.
Columns
| Column | In formulas | Type |
|---|---|---|
| ID | id | Text |
| Title | title | Text |
| Description | description | Text |
| Client | client | Text |
| Client ID | client_id | Text |
| Due date | due_date | Date |
| Billing method | billing_method | Text |
| Project type | project_type | Text |
| Fixed price | fixed_price | Number |
| Rate | rate | Number |
| Budget (hours) | budget_hours | Number |
| Active | active | Yes / no |
| Complete | complete | Yes / no |
| Internal | internal | Yes / no |
| Created at | created_at | Date and time |
| Updated at | updated_at | Date and time |
Other time tables
Your projects, live
Invoices, payments, expenses and time entries become tables that formulas, pivot tables and charts read directly. Your numbers stay current without exporting.