Calrows
Updated 7 October 2026
If you're a virtual assistant, online business manager or bookkeeper looking after several clients, and the work is already blocked out in Google Calendar™, the hours you report are already there. Calrows, a Google Sheets™ add-on, turns a client's calendar into a timesheet, exports a date range of events to a sheet, and sends a schedule from a sheet to the client's calendar, all from your own Google account.
One row per timed event between two dates: date, title, start, end, hours, your rate and the amount, plus a total and a summary by event title.
The events between two dates as rows: title, start, end, all day, description, location, guests and colour.
Plan appointments in rows and send them to the client's calendar. Edit a row and send again: the event is updated, not duplicated.
Calrows runs as the Google account you open Google Sheets with. Its calendar picker lists every calendar in your Google Calendar list, including the ones clients have shared with you, marked "(shared)". You never need a client's password, and the client installs nothing. In Google Calendar, the client opens their calendar's Settings and sharing, goes to Shared with › Add people and groups, enters your email and picks a permission:
| You want to | Permission the client gives your account |
|---|---|
| Build timesheets and export events | See event details |
| Create and update events from a sheet | Make changes and see event details |
Google then emails you a link. Click it to add the calendar to your list; until you do, it won't appear in Calrows. "See only free/busy (hide details)" hides event names, so it isn't enough. If the client uses Google Workspace, their admin decides how far calendars can be shared outside the company, for example free/busy only, or event details without changes. If the client can't give you the permission you need, that admin setting is the one to ask about.
Hours are rounded to two decimals (45 minutes is 0.75), all-day events are left out, and amounts have no currency symbol, so any currency works.
Each spreadsheet you use Calrows in gets a Sync Log tab: time, action, row, status and message. It records every event created, updated or removed, with its title; every failed row, with the reason; and a summary of each run, including imports and timesheets with their event counts and tab names. Unchanged rows aren't listed.
It's a simple audit trail to show a client, but it's an ordinary tab that anyone with edit access can change: a working record, not a locked log.
| Plan | Price | What you get |
|---|---|---|
| Free | $0 | 50 new events per calendar month, per Google account. Timesheets and exports of up to 50 events each. Manual sync. |
| Pro | $6 for a month or $48 for a year, paid once | No 50-event limits, plus automatic sync. Tied to your Google account, not to a calendar or a spreadsheet. |
| Team | $190, $390 or $690 a year for up to 10, 25 or 50 people, paid once | Pro on each person's own Google account, switched on within one business day of receiving their emails. |
One Pro covers every client calendar shared with your account, so a VA with ten clients needs one Pro, not ten. Four yearly Pro passes would cost $192, so Team is cheaper from four people up. Over 50 people? Email [email protected] for a quote.
Calrows opens only the spreadsheet you use it in and reads events only from the calendar you pick. No sheet or calendar content reaches any Calrows server; the one outside call is a licence check that sends your Google account email. No AI features, analytics or cookies in the add-on: see the privacy policy.
Yes, as long as each calendar is shared with your Google account and added to your calendar list. Pro is tied to the account you open Google Sheets with, not to a calendar or a spreadsheet. A login on a client's own domain is a separate Google account and needs its own Pro.
No. They share their calendar with you, and you run Calrows from your account. The timesheet is an ordinary Google Sheet they can open without the add-on.
"See event details" for timesheets and exports, and "Make changes and see event details" to create or update events from a sheet. "See only free/busy (hide details)" hides event names, so it isn't enough.
Yes. Build one timesheet per client, each with its own rate and title filter. Keep one spreadsheet per client, or rename each timesheet tab, because tabs are named by date only.
No. Pro is $6 for a month or $48 for a year, paid once, with no auto-renewal. Team plans are $190, $390 or $690 a year for up to 10, 25 or 50 people, also paid once.
In your own script, CalendarApp.getCalendarById(id).getEvents(start, end) works on shared calendars in your list, and (event.getEndTime() - event.getStartTime()) / 3600000 gives hours. Filter titles per client, skip all-day events, and keep runs to about a month: Apps Script stops after six minutes.