Sheet to Calendar Sync
One row, one event. Add a schedule, rota or class timetable to Google Calendar straight from your Google Sheet. Change a row and sync again: the event updates instead of being duplicated.
Updates, never duplicates
Each row remembers its event. Edit a time, title or guest list and sync again, and only the changed events are updated. Rows you haven't touched are left alone.
Times exactly as typed
09:00 in your sheet is 09:00 in Calendar, through clock changes and whatever time zone your calendar is in. Rows can carry their own time zone too.
Preview and undo
See every event that will be created, changed or deleted before anything is written, with problems flagged by row. Changed your mind? Undo the last sync in one click.
Getting started
- Install the add-on from the Google Workspace Marketplace, then open the Google Sheet with your events.
- Choose Extensions → Sheet to Calendar Sync → Open.
- Pick the sheet and the calendar to add events to. Columns are matched by their headers; change any that were guessed wrong.
- Press Preview to check what will happen, then Sync to Calendar.
Two columns are added to the right of your table: Sync status, which links each row to its event, and a hidden Event ID (sync) column. Leave the hidden column in place: it's how the add-on knows which event a row belongs to.
Starting from scratch? Open the add-on on an empty sheet and press Add example columns.
Columns
Only Title and Start are needed. Headers are matched loosely ("Event name", "Date", "Notes", "Attendees" all work), and you can pick any column by hand.
| Column | What to put in it | Example |
|---|---|---|
| Title | The event name | Team standup |
| Start | A date, or a date and time. A date with no time makes an all-day event. | 14/10/2026 09:30 |
| Start time, End time | Times, if you keep them apart from the date | 9:30 am |
| End | When it finishes. For all-day events, the last day. A time earlier than the start runs past midnight. | 14/10/2026 10:00 |
| Duration | Used when there's no end. Minutes, or "1h30", "2 days". A header saying hours means hours. | 45 |
| All day | Yes or no, or a tick box | Yes |
| Description, Location | Text | Room 4 |
| Guests | Email addresses, separated by commas, spaces or new lines | jo@acme.com, lee@acme.com |
| Repeat | Plain words or an RRULE | weekly on Mon and Wed until 18/12/2026 |
| Colour | A Calendar colour name, a plain colour, or 1–11 | Tomato, green, 7 |
| Reminders | Times before the event; "email" for email reminders; "none" | 10 min, email 1 day |
| Show as | Busy or free | free |
| Google Meet | Yes to add a Meet link | Yes |
| Calendar | Send this row to another calendar, by name or ID | Team rota |
| Time zone | For this row only, as a name like Europe/London | America/New_York |
| Delete | Yes to delete the row's event on the next sync | Yes |
Repeats understand daily, weekdays, weekly, fortnightly, monthly, yearly, every 3 weeks, every Tuesday and Thursday, and endings like until 31/12/2026, 10 times or for 6 weeks. For anything else, paste an RRULE such as RRULE:FREQ=MONTHLY;BYDAY=2TU (second Tuesday of each month).
Dates and time zones
- Dates entered as real dates in Sheets always work. Dates typed as text follow your spreadsheet's locale (14/10 or 10/14), which you can override under More options. Names work too: "Wed 14 Oct 2026 2pm".
- Times are read in the spreadsheet's time zone (File → Settings) and sent to Calendar with that zone, so they don't shift by an hour across clock changes or when your calendar is set to another zone.
Google Forms
Linked a form to the sheet? Pick the form's responses sheet in the add-on, map its questions to columns (say "Your name" as the title and "Email Address" as a guest), and sync. With Pro, tick Add an event for each new response automatically and every new response becomes an event within seconds.
Options
- Email invitations to guests are off by default, so a big import doesn't flood inboxes. Turn them on under More options.
- Re-sync rows that haven't changed puts events back the way the sheet says if someone edited them in Calendar.
- Only the rows I've selected syncs just those rows.
- Fields without a column in your sheet aren't touched, so a colour or guest set in Calendar stays put.
- Thousands of rows are fine: big syncs run in batches and carry on by themselves.
Plans
| Free | Pro | |
|---|---|---|
| Rows per sheet | The first 25 | Every row |
| Updates, deletes, preview, undo | Included | Included |
| New form responses added automatically | No | Yes |
| Price | Free | $5 a month or $39 a year |
Upgrade from the sidebar. Payment is handled by Stripe, and Pro unlocks in the sidebar within a few seconds, on the Google account you upgraded from. The receipt page shows a licence key, which you can use to move Pro to a different Google account. Cancel or change your card any time from Manage subscription in the sidebar.
Security and your data
- Calendar events only. The add-on can list your calendars and add, change and delete events. It can't change calendar sharing or settings.
- Only the current spreadsheet. It can only open the spreadsheet you're using it in, not your other files.
- Your events stay in Google. Rows are read and events written by Google Apps Script on Google's servers. They are never sent to Onibaku.
- One thing leaves Google: to check your plan, the add-on sends your Google account's email address to our licence server.
Details are in our privacy policy.
Guides
- How to add events from Google Sheets to Google Calendar (3 ways)
- How to add Google Form responses to Google Calendar
Help
A row says Error
The Sync status column says what's wrong in plain words, for example a date it can't read or an email address with a typo. Fix the row and sync again; the rest of the sheet isn't held up by it.
I deleted an event in Calendar and it came back
Syncing makes Calendar match the sheet. To remove an event for good, put Yes in a Delete column (or delete the row and the event yourself).
I copied a row and now two rows share an event
They don't: the add-on spots a copied row and gives it its own event on the next sync.
I paid but the add-on still says Free
Reopen the sidebar on the Google account you upgraded from. If you paid from a different account, choose Have a licence key? and paste the key from your receipt page. Still stuck? Email admin@onibaku.co.uk with the email on your Stripe receipt and we'll sort it the same day.
It says a permission is missing
Google lets you untick permissions when installing. Press Allow access in the sidebar and tick everything, then press check again.
Found a bug, or want a feature? Email admin@onibaku.co.uk.