Reference · Tools
Google Calendar Trigger
Starts workflow when Google Calendar events occur
The Google Calendar Trigger node polls the Google Calendar API and fires a workflow whenever a calendar event is created, updated, cancelled, started, or ended. Connect it with Google Calendar OAuth2 and pick an event type to automate things like sending Slack notifications when a meeting begins or logging cancelled events to a spreadsheet.
- Node type
- Polling trigger
- Parameters
- 9
- Outputs
- Output
- Credentials
- Google Calendar OAuth2
Google Calendar Trigger
Trigger workflows on Google Calendar event changes
Overview
The Google Calendar Trigger node polls the Google Calendar API for event changes. It detects five types of calendar events: created, updated, cancelled, started, and ended. Each event type uses a different query strategy against the Calendar API — updatedMin for modifications, timeMin/timeMax for time-window events. Supports free-text search filtering via the match term option. Handles pagination for calendars with many events. Uses Google OAuth2 with automatic token refresh.
Category: Productivity
Tool Name: google_calendar_trigger
Version: 1
Appearance: Icon: si-googlecalendar | Color: #4285f4
Node Type
Trigger — polling (checks for new data on a schedule)
Input / Output
| Direction | Port(s) |
|---|---|
| Input | None (trigger node) |
| Output | Output |
Credentials
This tool requires Google Calendar OAuth2 credentials. See the Credentials Guide for setup instructions.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Authentication | options | No | oAuth2 | Authentication method to use. |
Options: oAuth2 (recommended), serviceAccount | ||||
| Google Account | credential | No | — | Connect or select your Google account. (shown when Authentication is oAuth2) |
| Service Account Email | string | Yes | — | The email address of the Google service account. (shown when Authentication is serviceAccount) |
| Private Key | string | Yes | — | The private key from the service account JSON key file. (shown when Authentication is serviceAccount) |
| Calendar ID | string | Yes | primary | The Google Calendar ID to monitor (email format, or “primary” for the default calendar). |
| Trigger On | options | Yes | eventCreated | Which calendar event type to trigger on. |
Options: eventCreated, eventUpdated, eventCancelled, eventStarted, eventEnded | ||||
| Options | collection | No | {} | Additional options for filtering calendar events. |
| — Match Term | string | No | — | Free text search terms to filter events that match these terms in any field, except for extended properties. |
| Poll Interval | number | No | 1 | How often to check for new calendar events. |
| Poll Interval Unit | options | No | minutes | Unit for the poll interval. |
Options: seconds, minutes, hours |
Output Data
Each matching calendar event becomes one output item. The event is emitted exactly as the Calendar API returns it, plus two trigger markers:
{
"kind": "calendar#event",
"id": "6q9c1r4kbhk8ecpm6p9g8b9k6c",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=...",
"created": "2026-08-15T08:40:00.000Z",
"updated": "2026-08-15T08:52:11.000Z",
"summary": "Project review",
"description": "Quarterly checkpoint",
"location": "Room 4",
"creator": { "email": "you@example.com", "self": true },
"organizer": { "email": "you@example.com", "displayName": "", "self": true },
"start": { "dateTime": "2026-08-15T10:00:00.000Z", "timeZone": "UTC" },
"end": { "dateTime": "2026-08-15T11:00:00.000Z", "timeZone": "UTC" },
"iCalUID": "6q9c1r4kbhk8ecpm6p9g8b9k6c@google.com",
"sequence": 0,
"attendees": [],
"reminders": { "useDefault": true },
"eventType": "default",
"_trigger": "google_calendar_polling",
"_timestamp": "2026-08-15T09:00:00.000Z"
}
status—confirmed,tentativeorcancelled. Cancelled events are only returned when Trigger On iseventCancelled.start/end— carrydateTimefor timed events anddatefor all-day events._trigger— alwaysgoogle_calendar_polling._timestamp— when the poll that produced the item ran.
Reference event data downstream by expression, e.g. {{ $json.summary }} or {{ $json.start.dateTime }}.
Usage Examples
- Start a workflow when a new meeting is created on your calendar
- Trigger a notification when a calendar event is cancelled
- Send a reminder when a meeting is about to start
- Log completed meetings when events end
- Detect calendar updates and sync to an external system
Example Configuration
Watch the primary calendar for newly created events:
{
"type": "google_calendar_trigger",
"parameters": {
"calendarId": "primary",
"triggerOn": "eventCreated",
"pollInterval": 5,
"pollIntervalUnit": "minutes"
}
}
Watch a shared calendar for edits to events matching a search term:
{
"type": "google_calendar_trigger",
"parameters": {
"calendarId": "work@company.com",
"triggerOn": "eventUpdated",
"pollInterval": 2,
"pollIntervalUnit": "minutes",
"options": {
"matchTerm": "project review"
}
}
}
React quickly to cancellations:
{
"type": "google_calendar_trigger",
"parameters": {
"calendarId": "primary",
"triggerOn": "eventCancelled",
"pollInterval": 30,
"pollIntervalUnit": "seconds"
}
}
Run pre-meeting automation as client meetings begin:
{
"type": "google_calendar_trigger",
"parameters": {
"calendarId": "primary",
"triggerOn": "eventStarted",
"pollInterval": 1,
"pollIntervalUnit": "minutes",
"options": {
"matchTerm": "client"
}
}
}
Trigger Behavior
- Activation: Polling starts when the workflow is activated. There is no poll at the moment of activation — the first check runs one full interval later.
- Schedule: The trigger polls for new data based on the configured polling interval.
- State: Maintains internal state (the timestamp of the last check) so each poll covers only the window since the previous one.
- First Run: The first poll records the current time and returns no items, so activating the workflow never replays existing events.
- Testing: Running the node from the editor emits a single sample event so you can build the rest of the workflow; real events arrive only while the workflow is activated.
Tips
The Google Calendar Trigger polls your Google Calendar for event changes. Select the calendar to monitor, the event type to watch for (created, updated, cancelled, started, or ended), and optionally filter events by a search term. On each poll cycle, the trigger checks for changes since the last poll and returns any matching events.
Notes
eventCreatedreturns events whose creation time falls in the poll window;eventUpdatedreturns only events whose update time differs from their creation time, so a brand-new event is never reported as an update.eventStartedandeventEndedcompare the event’s own start/end time against the poll window, so choose an interval short enough that a meeting boundary cannot be missed and long enough to stay inside your API quota.
Frequently asked questions
What is the difference between 'eventCreated' and 'eventUpdated'? Will a newly created event trigger both?
No — a brand-new event will only fire 'eventCreated', never 'eventUpdated'. The node returns 'eventUpdated' only when an event's last update time differs from its original creation time, meaning a subsequent edit must have happened. This prevents duplicate triggers when an event is first added to your calendar.
How does the node know which events have 'started' or 'ended' since the last poll?
For 'eventStarted' and 'eventEnded', the node compares each event's own start or end timestamp against the current poll window. This means if your poll interval is too long, a short meeting could start and finish between two poll cycles and be missed entirely. Set your polling interval short enough that no meeting boundary can fall outside a single cycle, while keeping it long enough to stay within your Google Calendar API quota.
What credentials does this node require and how is authentication handled?
The node requires a Google Calendar OAuth2 credential (googleCalendarOAuth2). BusyBot handles token refresh automatically, so you won't need to re-authenticate when the access token expires. You set up the OAuth2 connection once in BusyBot's credential store and select it when configuring the node.
Can I watch only events that match a specific keyword or topic?
Yes. The node includes a match term option that performs a free-text search filter, so only calendar events whose details contain your search term will trigger the workflow. This is useful if you share a busy calendar and only want to react to, say, events with 'standup' or a specific project name in the title.
What happens if many events change between poll cycles?
The node handles pagination automatically, so it will page through the full result set from the Google Calendar API rather than returning only the first page of results. All matching events from the poll window are returned through the node's single Output, each as a separate item in the workflow run.
Build with the Google Calendar Trigger node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Google Calendar OAuth2 credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.