<!-- BusyBot node reference — https://busybot.net/tools/google-calendar-trigger/ -->

> Node: Google Calendar Trigger (`google_calendar_trigger`) · Polling trigger · v1
> Category: Productivity · Credentials: Google Calendar OAuth2 (`googleCalendarOAuth2`)
> Updated: 2026-08-16

# 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](https://busybot.net/credentials/google-calendar-oauth2/) 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:

```json
{
  "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`, `tentative` or `cancelled`. Cancelled events are only returned when **Trigger On** is `eventCancelled`.
- `start` / `end` — carry `dateTime` for timed events and `date` for all-day events.
- `_trigger` — always `google_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:

```json
{
  "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:

```json
{
  "type": "google_calendar_trigger",
  "parameters": {
    "calendarId": "work@company.com",
    "triggerOn": "eventUpdated",
    "pollInterval": 2,
    "pollIntervalUnit": "minutes",
    "options": {
      "matchTerm": "project review"
    }
  }
}
```

React quickly to cancellations:

```json
{
  "type": "google_calendar_trigger",
  "parameters": {
    "calendarId": "primary",
    "triggerOn": "eventCancelled",
    "pollInterval": 30,
    "pollIntervalUnit": "seconds"
  }
}
```

Run pre-meeting automation as client meetings begin:

```json
{
  "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

- `eventCreated` returns events whose creation time falls in the poll window; `eventUpdated` returns only events whose update time differs from their creation time, so a brand-new event is never reported as an update.
- `eventStarted` and `eventEnded` compare 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.