nodes / builtin / integration
Google Calendar
Integrate with Google Calendar to create, list and update events.
Create, read, update and delete Google Calendar events, list your calendars, and check when you are free or busy.
What it does
Section titled “What it does”The Google Calendar node works on three kinds of things (Resource):
- Event: Create, Update, Delete, Get one event, or List events in a time range.
- Calendar: List the calendars in your account, with their ids.
- Free/busy: Query the busy times of one or more calendars between two moments.
Without a Calendar ID, the node uses your main calendar (primary). Update only changes the fields you fill; the rest of the event stays as it is. List expands recurring events into single occurrences and sorts them by start time, up to Max results (50 by default).
When you fill Source URL, it is added at the end of the description as Source: …, so an event created from a booking page or a webinar sign-up keeps the link.
When to use it
Section titled “When to use it”- Turn a booking confirmation, event page or deadline you are reading into a calendar event.
- Send yourself a morning summary of today’s events.
- Check free/busy before proposing a meeting slot.
- Use Microsoft 365 instead for an Outlook calendar.
Inputs and settings
Section titled “Inputs and settings”| Setting | Type | What it does |
|---|---|---|
| Credential (required) | Credential | The Credential to use to make request. |
7 choices · pick resource and operation to see its settings
Settings for Event · Create
| Setting | Type | What it does |
|---|---|---|
| Calendar ID | Text | The calendar to use — "primary" (default) or an ID from Calendar → List. |
| Title (required) | Text | The event title (summary). |
| Description | Text | The event description. |
| Source URL | Text | The page URL to attach — appended to the event description when present. |
| Location | Text | The event location. |
| Start (date-time) | Text | Timed-event start as an RFC3339 date-time, e.g. 2026-09-10T09:00:00. |
| End (date-time) | Text | Timed-event end as an RFC3339 date-time. |
| Start (all-day date) | Text | All-day start as YYYY-MM-DD (use instead of the date-time fields). |
| End (all-day date) | Text | All-day end as YYYY-MM-DD (exclusive). |
| Time Zone | Text | IANA time zone for the start/end, e.g. America/New_York (timed events). |
| Attendees | List | Email addresses to invite. |
| Recurrence | List | RRULE strings, e.g. RRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=8. |
Settings for Event · Update
| Setting | Type | What it does |
|---|---|---|
| Event ID (required) | Text | The event to act on. |
| Calendar ID | Text | The calendar to use — "primary" (default) or an ID from Calendar → List. |
| Title | Text | The event title (summary). |
| Description | Text | The event description. |
| Source URL | Text | The page URL to attach — appended to the event description when present. |
| Location | Text | The event location. |
| Start (date-time) | Text | Timed-event start as an RFC3339 date-time, e.g. 2026-09-10T09:00:00. |
| End (date-time) | Text | Timed-event end as an RFC3339 date-time. |
| Start (all-day date) | Text | All-day start as YYYY-MM-DD (use instead of the date-time fields). |
| End (all-day date) | Text | All-day end as YYYY-MM-DD (exclusive). |
| Time Zone | Text | IANA time zone for the start/end, e.g. America/New_York (timed events). |
| Attendees | List | Email addresses to invite. |
| Recurrence | List | RRULE strings, e.g. RRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=8. |
Settings for Event · Delete
| Setting | Type | What it does |
|---|---|---|
| Calendar ID | Text | The calendar to use — "primary" (default) or an ID from Calendar → List. |
| Event ID (required) | Text | The event to act on. |
Settings for Event · Get
| Setting | Type | What it does |
|---|---|---|
| Calendar ID | Text | The calendar to use — "primary" (default) or an ID from Calendar → List. |
| Event ID (required) | Text | The event to act on. |
Settings for Event · List
| Setting | Type | What it does |
|---|---|---|
| Calendar ID | Text | The calendar to use — "primary" (default) or an ID from Calendar → List. |
| Time min | Text | Lower bound (RFC3339 date-time) for the query. |
| Time max | Text | Upper bound (RFC3339 date-time) for the query. |
| Max results | Number | Maximum number of events to return (1-2500). Default: 50 |
Settings for Calendar · List
No further settings.
Settings for Free/busy · Query
| Setting | Type | What it does |
|---|---|---|
| Time min (required) | Text | Lower bound (RFC3339 date-time) for the query. |
| Time max (required) | Text | Upper bound (RFC3339 date-time) for the query. |
| Calendar IDs | List | Calendars to check for free/busy (defaults to primary). |
Showing settings for Event · Create
- For a timed event, fill Start (date-time) and End (date-time), for example
2026-09-10T09:00:00, and set Time Zone (for exampleEurope/Paris) so the time is not misread. - For an all-day event, fill Start (all-day date) and End (all-day date) instead, as
YYYY-MM-DD. The end day is not included: a one-day event on 10 September ends on2026-09-11. - Time min and Time max need a full date-time with a time zone offset, for example
2026-09-10T00:00:00Zor2026-09-10T00:00:00+02:00. - Recurrence takes one rule per entry, for example
RRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=8for eight Mondays.
Outputs
Section titled “Outputs”-
Output
- Create, Update and Get return the event, including its
id(reuse it in Event ID) andhtmlLink(a link that opens it in Google Calendar). - Event → List returns the events in
items. Use Split Out onitemsto get one item per event. - Calendar → List returns your calendars in
items, each with itsid. - Free/busy → Query returns, for each calendar, its
busyperiods withstartandend. - Delete returns
success: true.
Dependencies and credentials
Section titled “Dependencies and credentials”- Credential (connection, OAuth2): required. See Create a connection.
Google Calendar connects by signing in to your Google account (OAuth). You first create your own Google OAuth client once, with the Google Calendar API enabled: follow Create your OAuth client. Then create a Google Calendar credential, paste the Client ID and Client Secret, click Check connection and approve the Google window. AWFlow asks to read and edit your events and to read your calendars. The sign-in is kept and refreshed for you. See also Create a credential.
Example workflow
Section titled “Example workflow”- A Context Menu trigger runs when you right-click a webinar page.
- Get All Text reads the page.
- Information Extractor pulls out
title,startandendas date-times. - Google Calendar, Event → Create, Title
{{ $input.title }}, Start (date-time){{ $input.start }}, End (date-time){{ $input.end }}, Time ZoneEurope/Paris, Source URL{{ $('Context Menu').pageUrl }}.
Common issues
Section titled “Common issues”- The event is at the wrong time. The start and end have no time zone. Set Time Zone, or write the offset in the date-time, such as
2026-09-10T09:00:00+02:00. - “Google Calendar Error: … Not Found”. The Event ID does not exist in this Calendar ID. Check both; an event from another calendar needs that calendar’s id.
- “… Bad Request” on Event → List or Free/busy. Time min or Time max lacks a time zone offset. Add
Zor+02:00at the end. - “… insufficient authentication scopes” or a 403 error. The Google Calendar API is not enabled for your OAuth client, or the sign-in predates a permission change. Enable the API, then click Check connection again on the credential.
Related nodes
Section titled “Related nodes”- Gmail: email the agenda.
- Information Extractor: read dates from a page.
- Format Date: turn dates into the format the fields expect.
- Microsoft 365: Outlook calendar instead.