Planning in a spreadsheet is fast. Retyping every row into Google Calendar isn’t. This guide connects the two: each row becomes a calendar event, and when you change a date or title in the sheet, the event changes too. It’s free, needs no add-on, and has no monthly event limit.
It uses Sheets to Calendar, a free, MIT-licensed Apps Script.
Put headers in row 1. Only Title and Start are required:
| Title | Start | End | Location | Description | Guests |
|---|---|---|---|---|---|
| Team offsite | 11/12/2026 | 11/13/2026 | Lake House | Agenda in the shared drive | |
| Client call: Northwind | 11/03/2026 14:00 | 11/03/2026 14:30 | Google Meet | Q4 review | ana@example.com |
| Publish blog post | 11/05/2026 |
Make sure the Start and End columns are real dates, not text: Format → Number → Date or Date time.
Code.gs, and Save.To add events to a calendar other than your main one, open that calendar’s Settings and sharing in Google Calendar, copy its Calendar ID from the “Integrate calendar” section, and paste it into CALENDAR_ID at the top of the script.
Choose 🗓️ Calendar → Sync to Calendar. Google asks for permission the first time (“Google hasn’t verified this app” → Advanced → Go to (your project name) → Allow; it’s your own script).
The events appear in Google Calendar, and a Calendar Event column now holds each row’s event ID. That ID is how the script knows which event belongs to which row.
Change a time, rename an event or add a guest in the sheet, then choose Sync to Calendar again. The existing events are updated, not duplicated, and unchanged rows are left alone.
For hands-off syncing, choose 🗓️ Calendar → Turn On Hourly Sync. The sheet then pushes changes to Calendar every hour, even when it’s closed.
Is it free? Yes, with no event limit. It runs on your own Google account under Google’s normal Calendar quotas, which a personal schedule won’t come close to.
Does deleting a row delete the event? No. That avoids losing events by accident. Delete the event in Calendar directly.
I deleted an event in Calendar and it came back. The row still exists, so the next sync recreated it. Delete the row (or clear its Start) to stop that.
Times are off by a few hours. Set the spreadsheet’s time zone (File → Settings) to match your calendar’s.
How do I make a fresh copy of an event? Clear that row’s Calendar Event cell and sync again.
Get the script on GitHub · Also free: Mail Merge for Google Sheets · Deadline reminders from Google Sheets