How to make a timesheet from Google Calendar
If your work is already in Google Calendar, your timesheet is too. You just need to get the events into a spreadsheet, work out who each one was for, and add up the hours. This guide shows how to do that with plain Google Sheets formulas, and with an add-on that does it in one go.
Updated October 2026
Step 1: get the events into Google Sheets
You need a tab with one row per event and its hours. Our guide to exporting Google Calendar to Google Sheets has a free script that does this. It gives you columns A Date, B Start, C End, D Hours and E Event, which the formulas below assume.
Step 2: tag each event with a client
Make a tab called Clients with a client name, a word that appears in that client's event titles, and an hourly rate:
| A Client | B Keyword | C Rate | |
|---|---|---|---|
| 2 | Acme | acme | 90 |
| 3 | Bluebell Bakery | bluebell | 70 |
Back on the events tab, put this in F2 and fill it down. It finds the first client whose keyword is in the event title:
=IFERROR(INDEX(FILTER(Clients!A$2:A, Clients!B$2:B<>"", REGEXMATCH(LOWER(E2), LOWER(Clients!B$2:B))), 1), "No client")
Then the rate in G2 and the amount in H2:
=IFERROR(VLOOKUP(F2, Clients!A:C, 3, FALSE), 0)
=D2*G2
Keep keywords to plain words. Characters like ., ( and + mean something special to REGEXMATCH.
Step 3: round the hours (optional)
Lots of people bill in 15-minute steps. Swap the hours in column D for one of these, where 0.25 is a quarter of an hour:
=MROUND(D2, 0.25) to the nearest 15 minutes
=CEILING(D2, 0.25) always up to the next 15 minutes
Step 4: the per-client summary
On a new tab, this one formula gives hours and amount for each client, ready to copy into an invoice:
=QUERY(Events!A1:H, "select F, sum(D), sum(H) where F is not null group by F label sum(D) 'Hours', sum(H) 'Amount'", 1)
Replace Events with the name of your events tab. Because it's a formula, the totals update as soon as you fix a client or an hour on the events tab.
Where the formula approach falls down
- Only titles are matched. Tagging by attendee email domain, event colour or calendar needs more script.
- Every month starts from scratch. You re-run the export, then copy the formulas down again.
- The script's limits carry over: overnight events on one day, the same meeting counted twice across calendars, and out-of-office entries included. The export guide has the details.
The quick way: Calendar Timesheets & Billing
Calendar Timesheets & Billing is our add-on, and it does all four steps in one press of a button:
- Match events to clients by keyword in the title, description or location, by attendee email domain (everything with
@acme.com), by a particular attendee, by event colour, or by calendar. - Give each client its own hourly rate, with a default rate for everything else.
- Round each entry to 6, 15 or 30 minutes or an hour, to the nearest step or always up.
- Get a Timesheet tab and a Client summary tab with entries, hours, rate and amount per client. The summary is built from formulas, so your edits flow through.
- Settings are saved in the spreadsheet, so next month it's Extensions → Calendar Timesheets & Billing → Rebuild with saved settings.
- Install it from the Google Workspace Marketplace.
- Choose Extensions → Calendar Timesheets & Billing → Open timesheet builder.
- Tick your calendars and pick the dates, add your clients and rates, and press Build timesheet.
It's free for one calendar, this month or last month, with clients, rates, rounding and the summary included. Pro is $5 a month or $39 a year for every calendar and any dates.
Get Calendar Timesheets & Billing
Common questions
How do I track billable hours in Google Calendar?
Put each piece of work in your calendar as an event, with the client's name in the title or the client as a guest. Then build the timesheet at the end of the week or month with either method above.
Can I have a different rate per client?
Yes. In the formula version, it's the Rate column on the Clients tab. In the add-on, each client has its own rate and anything unmatched uses the default rate.
What about meetings I declined?
The export script skips events you declined, and so does the add-on (you can turn that off). Events marked as "free" can be skipped too in the add-on's options.
Can it make invoices?
Not yet. The client summary has the hours and amounts to copy into your invoice. Invoice PDFs per client are next on the list. Email admin@onibaku.co.uk if you'd use them.