Calrows
Updated 7 October 2026
Calrows is a Google Sheets™ add-on that turns spreadsheet rows into Google Calendar™ events and back, exports any date range of events to a sheet, and builds timesheets from calendar time. Below are short, factual answers to common questions about it, including what it does not do. Step-by-step instructions are on the help page.
On this page: Getting started · Duplicates, edits and deletions · Exporting and timesheets · Large sheets and automatic sync · Pricing and plans · Privacy and data · Other apps and alternatives
Install the free Calrows add-on from the Google Workspace Marketplace, open your spreadsheet and go to Extensions › Calrows › Open sidebar. Pick the calendar, check the column mapping (Calrows guesses it from your header names) and click Send rows to Calendar. Each row becomes an event, and a hidden _eventId column links the row to its event, so sending again later updates events instead of duplicating them. Without an add-on, you can use Google Calendar's CSV import, which creates events once and cannot update them, or write your own Apps Script.
Calrows needs one row per event and a header row in row 1, with at least a Title column and a Start column. End, All day, Description, Location, Guests and Color are optional; when End is blank, a timed event gets the default length (60 minutes unless you change it in the sidebar) and an all-day event lasts one day. Format the Start and End columns as Date time so Google Sheets stores real dates: a Start cell holding only a time, or text Calrows cannot read as a date, is not sent and gets a message in the Sync Log. The help page lists the accepted values for every column, and Extensions › Calrows › Insert sample sheet adds a working example.
No. Calrows runs inside Google Sheets with your Google account, and there is no sign-up or password on calrows.com. If you buy Pro, it is attached to the Google account email you enter at checkout, which must be the account you open Google Sheets with.
Yes. Every calendar in your Google Calendar list, including calendars other people have shared with you, appears in the Calrows calendar picker, and shared ones are marked "(shared)". To send rows to a shared calendar you need permission to make changes to its events. Importing events and building timesheets only read events, so permission to see event details is enough for those.
Calrows adds the email addresses in your Guests column to each event's guest list, but it never turns on the "send invites" option of Google's Apps Script calendar service, which Google documents as off by default. Whether the event then shows up in a guest's own calendar depends on that person's Google Calendar settings. If it matters whether your guests are notified, send one test row with your own second email address as the guest before you send the whole sheet.
Calrows reads dates and times in your spreadsheet's time zone, which is set in Google Sheets under File › Settings. If that time zone is different from where you are, events land at a different hour than you typed, and an event near midnight can move to the next or previous day. Set the spreadsheet time zone to match where you are and send again: events that were already sent are moved, not duplicated.
The Calrows sidebar does not open in the Google Sheets mobile apps, so set it up and run manual syncs on a computer. Automatic sync on the Pro plan runs on Google's servers on a schedule, so it keeps working with the sheet closed and your computer off.
No. The first time you send a sheet, Calrows adds a hidden _eventId column and writes each new event's ID into its row; on later sends, rows with an ID update their existing event, unchanged rows are skipped, and only rows without an ID create new events. If a sheet that was synced before loses that column, or has it emptied, Calrows refuses to send anything rather than create every event a second time. If a row is copied together with its hidden ID, both rows that share the ID are reported as errors instead of updating the same event twice; clear the copy's ID cell to give it its own event.
Click Send rows to Calendar again and Calrows updates the existing event in place, changing only what differs: the title and times always, and the description, location, guests and colour when those columns are mapped. New addresses in the Guests cell are added to the event, and guests missing from the cell are removed only when the cell still lists at least one address, so an empty Guests cell never removes anyone. The popup reminder is set only when an event is first created, so changing the reminder later does not affect events that already exist.
In Calrows, deleting a row never deletes its calendar event by itself. To remove those events, click Remove events for deleted rows in the sidebar and confirm, or, on Pro, tick "also remove events for deleted rows" for automatic sync. Calrows then deletes only events it created from that sheet whose rows are gone: it never deletes events you imported from a calendar, and it leaves recurring series alone. If the hidden _eventId column is missing or empty, it refuses to run rather than guess.
Calrows does not quietly re-create an event that was deleted in Google Calendar. On the next send, that row is reported in the Sync Log as an error saying its event was deleted, and Pull changes from Calendar puts a note on the row's hidden ID cell. To create the event again, unhide the _eventId column, clear that row's cell and click Send rows to Calendar.
Yes: Calrows syncs both ways for rows that are already linked to an event. Pull changes from Calendar copies each linked event's current title, times, description, location, guests and colour into the mapped columns, changing only cells that differ. It does not add rows for events created directly in Google Calendar; use Import from Calendar for those. Send makes the sheet the source of truth and Pull makes the calendar the source, so if you edited events in Google Calendar, pull before you send; automatic sync sends first, so on a schedule the sheet wins.
Calrows refuses to send from a sheet that was synced before but has lost its _eventId column or had it emptied, because sending would create every event a second time, so nothing is sent. Undo the change with Edit › Undo or restore the sheet from File › Version history, then carry on. If you really want a fresh copy of every event, copy the rows into a new tab and send from there.
Only partly. Calrows creates one event per row and has no repeat setting, so it cannot create a recurring series; fill the dates down the sheet instead, which Google Sheets can do for you. It never edits or deletes an existing recurring series. When you import a calendar, each occurrence in the date range becomes its own row with no event ID, so it is not linked to the series. If you send an imported tab back to Calendar, delete the rows for those occurrences first (their hidden _eventId cell is blank), or each one will be created as a separate one-off event.
Google Calendar has no export-to-Sheets button, and its own export is an .ics file of the whole calendar, with no way to pick a date range. With Calrows, open Extensions › Calrows › Open sidebar, pick the calendar, set From and To under Import from Calendar (both dates are included) and click Import events into a new sheet. You get a new tab with Title, Start, End, All day, Description, Location, Guests and Color columns, linked to their events (except occurrences of recurring events), so you can edit rows and send them back. The free plan imports up to 50 events at a time; Pro has no event limit, though a very busy date range can be cut short by the time limit on a single run and need splitting into shorter ranges. The export guide compares the other ways to do it.
In the Calrows sidebar, pick the calendar, set From and To under Timesheet, optionally type a word the event titles must contain (such as a client name) and an hourly rate, then click Build timesheet. You get a new tab with one row per event (date, title, start, end, hours, rate, amount and description), a total row, and a By title summary of hours and amounts. All-day events are left out, hours are rounded to two decimals, and amounts are plain numbers with no currency symbol. The free plan covers up to 50 events per timesheet and Pro has no event limit; the timesheet guide shows how to name events so that each client's hours are easy to filter and total.
Yes, as a file. Use Import from Calendar or Timesheet in Calrows to get the events into Google Sheets, then choose File › Download › Microsoft Excel (.xlsx). That gives you a one-off copy: Calrows has no live connection to Excel, so download again whenever you need fresh numbers.
There is no fixed row limit for sending rows: Calrows works through the sheet in runs of about four and a half minutes, under Google's six-minute limit per run, and normally continues on its own until the last row, with progress shown in the sidebar. The limits that do apply are the free plan's 50 new events a month and Google's own daily Apps Script quotas, such as the number of calendar events one account can create in a day (5,000 for a personal Google account and 10,000 for a Google Workspace account, according to Google's published quotas). If Google starts rate-limiting, Calrows stops at that row and says so in the Sync Log; run it again a few minutes later and it skips the rows already sent and carries on from there.
Calrows avoids the "Exceeded maximum execution time" error when it sends rows. Google stops a single Apps Script run after six minutes, and that error is what a script sees when it runs out of time. Calrows works for about four and a half minutes per run, saves the row it reached and schedules itself to continue about a minute later. If it cannot schedule that, for example because your automatic sync already uses the one timer Google allows an add-on per user in each spreadsheet, it pauses and resumes from the same row on the next automatic run or when you click Send again. A lock also stops two runs on the same spreadsheet from overlapping.
On the Pro and Team plans, Calrows can sync automatically every hour, every 6 hours or once a day, in the background as the Google account that turned it on, even with the sheet closed. Each run sends rows to Calendar first, then can pull calendar changes into the sheet (ticked by default) and remove events for deleted rows (off by default); because the send comes first, the sheet's values win over edits made in Google Calendar. It works on the one sheet that was selected when you turned it on, and you turn it off in the same section of the sidebar. It is not real-time: Google does not let add-ons run timers more often than once an hour, and on the free plan you sync by clicking the buttons.
Every Calrows run is written to a Sync Log tab in your spreadsheet, with the time, the action, the row number, the status and a message. It records each event created, updated, deleted or failed, with the reason for any failure (for example "Start is not a date"), plus a line when a run starts and finishes; rows skipped because nothing changed are counted in that summary rather than listed. While rows are being sent, the sidebar shows live progress: rows done, created, updated, skipped and errors.
Yes. The Calrows free plan has no time limit and includes manual sync in both directions, 50 new events a month per Google account, and imports and timesheets of up to 50 events at a time. Updating events that already exist does not count toward the 50, and a failed creation never uses one. The limits are shown in the sidebar before anything runs, and automatic sync needs Pro.
Calrows Pro costs $6 for 1 month or $48 for 1 year for one Google account, paid once; it never renews, so there is nothing to cancel. When the time ends, Calrows returns to the free plan and your sheets and calendars are untouched, and buying again while Pro is active adds the new time on top of what is left. Prices are in US dollars, and checkout on the pricing page is handled by Paddle, the merchant of record, which shows the final amount including any tax for your country. Subscriptions bought before 23 September 2026 renew until cancelled, which you can do in the Paddle customer portal.
Yes. The Calrows Team plan gives everyone on your team Pro for a year with a single one-time payment: $190 for up to 10 people, $390 for up to 25 and $690 for up to 50, with no auto-renewal. Email [email protected] with your company name and team size for a quote and a Paddle payment link or invoice, then send the Google account emails of the people who need Pro; they are switched on within one business day. A Google Workspace admin can install Calrows for everyone from the Admin console, adding people later is free while you stay within your team size, and teams of more than 50 can ask for a price.
Yes. Calrows works with every calendar in your Google Calendar list, so once clients share their calendars with your Google account and those calendars appear in your list, you can import their events, build a timesheet for each client, and send rows to their calendars if they give you permission to make changes to events. Pro is attached to the Google account that runs Calrows, so one Pro plan covers the work you do for every client from that account. If several people on your team do this work, the Team plan covers each of them with one payment. The guide for virtual assistants and bookkeepers walks through a monthly timesheet for each client.
Calrows purchases are final, and refunds are not offered for a change of mind or unused Pro time, which is why the free plan lets you test the same add-on first. Refunds are always given where your local law requires one (for example the 14-day withdrawal right for consumers in the EU and UK, if the paid features have not been used), where you were charged in error, or where Paddle's buyer terms require it. Paddle, the merchant of record, handles these through the link in your receipt or the Paddle customer portal; the refund policy has the details.
Calrows can open only the spreadsheet you use it in, not your other files in Google Drive. Its Google Calendar permission is broad, and Google words it as "See, edit, share, and permanently delete all the calendars you can access using Google Calendar". Calrows uses it only to list your calendars, create, update and delete events in the calendar you pick, and read events for imports and timesheets, and it deletes only events it created, only when you ask it to. It also asks to show its sidebar, to run in the background for long syncs and automatic sync, to connect to its licence server, and to see your Google account email address. The privacy policy explains why each permission is needed.
Calrows keeps its working data inside your own spreadsheet: the hidden _eventId column, a hidden _sync_state tab listing the events it created, the Sync Log tab, and your column mapping and calendar choice. Apps Script storage in your Google account holds the free plan's monthly count of new events and a cached answer about whether you have Pro, and until when. The only data that leaves Google is your email address, sent to the Calrows licence server on Cloudflare to check your plan; a licence record is kept there only for accounts that have Pro, and is deleted within 30 days of Pro ending. No spreadsheet or calendar content is ever sent to or stored on a server Calrows operates.
No. Calrows contains no AI features; it does what your rows, settings and clicks tell it to. It does not use data from your Google account to develop or train AI or machine-learning models, and it does not pass that data to anyone else for that purpose. The add-on also has no analytics, sets no cookies and never emails you.
Turn off automatic sync first if you use it, then uninstall Calrows from Extensions › Add-ons › Manage add-ons and revoke its access at myaccount.google.com/permissions. To clear what it added to a spreadsheet, delete the Sync Log tab, the hidden _sync_state tab, the hidden _eventId column and any import or timesheet tabs you no longer need; its saved settings, such as your column mapping, stay attached to the file, where only Calrows can read them. Events it created stay in your calendar until you delete them. Paying customers can email [email protected] to have their licence record deleted within 7 days.
No. Calrows connects Google Sheets and Google Calendar only, and does not sync with Outlook, Microsoft 365, Apple iCloud calendars or Excel files. To use rows from an Excel file, import them into a Google Sheets spreadsheet first; to get events into Excel, download a Calrows tab with File › Download › Microsoft Excel (.xlsx), which is a one-off copy rather than a live sync. For Outlook or Microsoft 365 calendars, an automation tool such as Zapier or Make, which connects many more apps, is a better fit.
Yes. A short Apps Script that reads each row and calls CalendarApp.createEvent() puts events on a calendar for free, and it is a good way to learn. To run it safely more than once, you also need to store each event's ID so a second run updates instead of duplicating, handle all-day end dates (Google stores the day after the last day), and work in chunks, because Google stops a script run after six minutes with "Exceeded maximum execution time". Calrows is that approach built into an add-on, with the ID column, chunked runs, pulling changes back, imports, timesheets and a Sync Log included. The Sheets to Calendar guide has a starter script, and Calrows vs Apps Script compares the two approaches in detail.
The main alternatives to Calrows for moving data between Google Sheets and Google Calendar are writing your own Apps Script, Google Calendar's built-in CSV import, an automation tool such as Zapier or Make, or another Google Sheets add-on from the Google Workspace Marketplace. Apps Script is free but you write and maintain the code; CSV import adds events once and cannot update them later, because the file has no event ID; Zapier and Make suit "new row, new event" automations and connecting other apps, and are priced by usage. Sheets add-ons differ mainly in sync direction, whether they update existing events, free-plan limits and pricing. The Calrows site has a comparison of add-on options, written by Calrows' maker, so read it as one view and check each tool's current listing too.
Calrows is made by an independent solo developer based in Bengaluru, India. It is not made by Google, and it is not affiliated with or endorsed by Google. Support is by email at [email protected], with a reply within one business day, and you never need to share your spreadsheet or calendar to get help because the Sync Log has what support needs.
Step-by-step instructions for every part of the sidebar are on the help page, and the guides walk through common uses such as shift rotas, class timetables and billable hours. For anything else, email [email protected]; replies come within one business day.