FreshBooks time entries in a live spreadsheet
Add the Time entries table to a sheet as a data source named time_entries and its 14 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.time_entries.sum(hours) Total hours. Adds up the Hours column over every row of Time entries.
=data.time_entries.sum(hours, note, A2) Hours per note. With a note in A2, the total for that one. Fill it down next to a list of them.
=list.time_entries(note) Every note, once. Spills the distinct note values down the column: the row labels for the formula above.
=data.time_entries.sum(hours, 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.time_entries.count(id, note, "<>") Rows with a note. Counts the rows whose Note is not empty.
=data.time_entries.avg(duration_seconds) Average duration (seconds). avg, min, max, count, countd (distinct) and first work the same way as sum.
Reports that use it
=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).
Columns
| Column | In formulas | Type |
|---|---|---|
| ID | id | Text |
| Started at | started_at | Date and time |
| Date | date | Date |
| Hours | hours | Number |
| Duration (seconds) | duration_seconds | Whole number |
| Note | note | Text |
| Client | client | Text |
| Client ID | client_id | Text |
| Project | project | Text |
| Project ID | project_id | Text |
| Billable | billable | Yes / no |
| Billed | billed | Yes / no |
| Team member ID | team_member_id | Text |
| Created at | created_at | Date and time |
Other time tables
Your time entries, live
Invoices, payments, expenses and time entries become tables that formulas, pivot tables and charts read directly. Your numbers stay current without exporting.