Every 15 minutes
Create calendar events from rows in a sheet
Every row you add to your Events sheet becomes a Google Calendar event, and the event ID is written back so it is never created twice.
- Runs
- Every 15 minutes
- Apps
- Google Calendar, Google Sheets
- AI
- Not needed
- Access
- Sheet edit; Calendar write
Send this to your assistant
Create a ClickRuntime automation: create a calendar event for every row in my Events sheet that doesn't have an event ID yet, and write the ID back to the row.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A training company plans its courses for the term in a spreadsheet: dates, times, rooms and trainers. Someone then copies each row into Google Calendar by hand, which takes an afternoon and always produces a few typos in dates or times.
Keeping the sheet as the plan and letting the calendar follow means you edit one place and the events appear on their own. Schools, event organisers, clubs and training teams use it to publish a full schedule without retyping it.
What you get out of it
Plan in a sheet, publish to a calendar
Spreadsheets are easier for planning a whole term or season. The calendar fills itself from your plan.
No double entries
Each row gets its event ID written back, so it is created once even if the sheet is checked many times.
Fewer typing mistakes
Dates, times and locations are copied exactly from the sheet, instead of being retyped into a calendar form.
Add events whenever you like
New rows added later are picked up on the next check, so the calendar keeps up as the plan grows.
How it works
What happens, step by step
Every few minutes ClickRuntime reads your Events sheet.
It picks out rows that do not have an event ID yet, so rows already handled are skipped.
A calendar event is created for each of those rows with its title, times and location.
The new event's ID is written back into the row.
Before it runs live
- Connect Google Calendar
- Connect your Google Sheets account and pick the spreadsheets it may use
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Google Calendar and Google Sheets steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, report_fetched
SHEET_ID, CALENDAR_ID, TZ = "your-spreadsheet-id", "primary", "Europe/London"
@on_trigger
def run(event):
creds = Credentials(credentials.connection("google", "work"))
sheets = build("sheets", "v4", credentials=creds, cache_discovery=False).spreadsheets()
rows = sheets.values().get(spreadsheetId=SHEET_ID, range="Events!A2:E").execute().get("values", [])
new = [(i + 2, r) for i, r in enumerate(rows) if len(r) >= 3 and (len(r) < 5 or not r[4])]
report_fetched(len(new))
if not new:
return {"summary": "Nothing new"}
cal = build("calendar", "v3", credentials=creds, cache_discovery=False)
for row_no, r in new:
ev = cal.events().insert(calendarId=CALENDAR_ID, body={"summary": r[0], "location": r[3] if len(r) > 3 else "",
"start": {"dateTime": r[1], "timeZone": TZ}, "end": {"dateTime": r[2], "timeZone": TZ}}).execute()
sheets.values().update(spreadsheetId=SHEET_ID, range=f"Events!E{row_no}", valueInputOption="RAW",
body={"values": [[ev["id"]]]}).execute()
return {"created": len(new)}FAQ
Common questions
Which columns does the sheet need?
What happens if I change a row after the event is created?
Can events go to a shared calendar?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Invite new sheet registrants to your calendar event
Each new email in your registrations sheet is added as a guest to your event and gets a calendar invite.
See how it worksPut unpaid bills from a sheet into your calendar on their due dates
Every unpaid bill in your sheet shows up in your calendar on its due date with a reminder, and the event updates if the amount changes.
See how it worksKeep a Google Sheet of every work calendar event
Your sheet always lists every event on your work calendar with its title, time, guests and status, and updates when events change.
See how it worksKeep exploring
Set up “Create calendar events from rows in a sheet” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.