Kayabyte

How to add events from Google Sheets to Google Calendar (and keep them in sync)

By Caner Kaya, Kayabyte

Google Calendar has no setting that links it to a spreadsheet. There are three free ways to get rows from Google Sheets into Calendar:

All three can create events. Where they differ is what happens when a row changes, when a row is deleted, and when you run them twice. Below is each one step by step.

How do I import events from a spreadsheet into Google Calendar?

Google Calendar can import a CSV file. Google describes it in Import events to Google Calendar.

  1. Give your sheet these column headers, in English and spelled exactly like this: Subject and Start Date are required. Start Time, End Date, End Time, All Day Event, Description, Location and Private are optional.
  2. Fill in one event per row. Google’s examples use dates like 05/30/2020 and times like 10:00 AM. All Day Event and Private take True or False.
  3. In Google Sheets, choose File > Download > Comma Separated Values (.csv).
  4. Open Google Calendar on a computer. Importing isn’t possible in the mobile app.
  5. Click Settings, then Import & export.
  6. Choose your CSV file, pick the calendar to add the events to, and click Import. Without a choice, events go into your primary calendar.

Things to know before you rely on it:

Tip: import into a calendar of its own. Next to Other calendars, click Add other calendars > Create new calendar (Google’s steps). If the import goes wrong, you can delete that calendar and start again instead of removing events one by one.

How do I add events from Google Sheets with Apps Script?

Apps Script is free and built into Google Sheets. A script can read your rows and create events with CalendarApp. The important part is to write each event’s ID back into the sheet. Without that, every run creates the same events again.

  1. Make a sheet with Title in column A, Start in B, End in C and an empty Event ID in D. Start and End must be real date-and-time cells, not text.
  2. Choose Extensions > Apps Script (Google’s guide).
  3. Replace the code with this, save, and click Run. The first time, Google asks you to authorize the script.
function syncToCalendar() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getDataRange().getValues();
  const calendar = CalendarApp.getDefaultCalendar();

  for (let i = 1; i < rows.length; i++) { // row 1 holds the headers
    const [title, start, end, eventId] = rows[i];
    if (!title || !(start instanceof Date) || !(end instanceof Date)) continue;

    const event = eventId ? calendar.getEventById(eventId) : null;
    if (event) {
      event.setTitle(title);
      event.setTime(start, end);
    } else {
      const created = calendar.createEvent(title, start, end);
      sheet.getRange(i + 1, 4).setValue(created.getId());
    }
  }
}

Run it again after you change a row and the same event is updated, because the script finds it by the stored ID (getEventById returns null if the event doesn’t exist or you can’t access it, and then the script creates a new one). To run it on a schedule, open Triggers in the Apps Script editor, click Add Trigger and choose a time-driven trigger (Google’s guide).

What this script doesn’t do:

Also note that CalendarApp needs full access to your calendars (the calendar scope in Google’s reference), so the consent screen asks for access to all the calendars you can use. That’s fine for your own script, but read the screen before you allow it.

Google’s own conference sign-up sample uses the same idea: it creates one event per row and saves the event ID in the sheet. It’s built for a one-time setup, though, not for re-running.

Can Zapier or Make sync Google Sheets with Google Calendar?

Yes, for new rows. Tools like Zapier and Make watch a sheet and run an action when something changes. A typical setup is “when a new row is added, create a Google Calendar event”. Zapier’s Google Sheets and Google Calendar integration, for example, has triggers for new and updated rows and actions to create, update, find and delete events (Zapier’s integration page).

Where it gets harder:

Where the built-in options stop

None of the free routes gives you all of this at once:

Free workarounds worth trying first

An add-on that keeps rows and events in sync

Full disclosure: I built Kayabyte Calendar Sync & Timesheets, an add-on for Google Sheets™ that turns rows into Google Calendar™ events.

What it doesn’t do: on the free plan you sync by hand, up to 100 rows or events per run, and changes made in Calendar don’t come back into the sheet. Two-way sync, hourly automatic sync and timesheets are part of Pro ($5 per user per month, with a 14-day free trial). Each run stops before the Apps Script time limit, so a very long sheet takes more than one run. It works in Google Sheets only, not Excel.

It’s on the Google Workspace™ Marketplace.

FAQ

Does Google Calendar sync with Google Sheets automatically? No. There’s no built-in link. Imported events are a one-time copy, so you need a script, an automation tool or an add-on to keep them in step.

Why do I get duplicate events every time I run my script? The script doesn’t remember which events it already made. Save each event’s ID in the sheet when you create it, and update that event on the next run instead of creating a new one.

Can I import a spreadsheet into Google Calendar on my phone? No. Google says importing works on a computer only.

Can I invite guests from a spreadsheet? Not with CSV import, which doesn’t bring in guests. With Apps Script, the guests and sendInvites options of createEvent add them. Test with your own address first, because invitations go out straight away.

Last checked: 22 October 2026

Questions or corrections: support@kayabyte.dev. Google Sheets™, Google Calendar™, Google Workspace™ and Google Apps Script™ are trademarks of Google LLC. Zapier and Make are trademarks of their owners. Kayabyte is an independent developer and is not affiliated with or endorsed by Google LLC.