Module · A system, a clock or a person
Google Calendar trigger
Lesson 8 of 10 · 5 min
Meetings are where a lot of sales and support work actually turns. A demo gets booked, a call gets moved, a prospect cancels twenty minutes before. Each of those is worth reacting to, and none of them happens in your CRM.
The Google Calendar trigger watches a calendar and starts a workflow when something on it changes.
The five events
| Event | Fires when | Worth doing |
|---|---|---|
event_created | A meeting is booked. | Create the deal, log the activity, prep a brief. |
event_updated | It moves. | Update whatever you created from it. |
event_cancelled | It is called off. | The most valuable one — a cancellation is a signal, and it usually goes unnoticed. |
event_starting_soon | It is about to begin. | Send the brief, or the reminder. |
notes_attached | Notes are added to the event. | Pull the meeting notes into the CRM record. |
event_created
- Fires when
- A meeting is booked.
- Worth doing
- Create the deal, log the activity, prep a brief.
event_updated
- Fires when
- It moves.
- Worth doing
- Update whatever you created from it.
event_cancelled
- Fires when
- It is called off.
- Worth doing
- The most valuable one — a cancellation is a signal, and it usually goes unnoticed.
event_starting_soon
- Fires when
- It is about to begin.
- Worth doing
- Send the brief, or the reminder.
notes_attached
- Fires when
- Notes are added to the event.
- Worth doing
- Pull the meeting notes into the CRM record.
Those exact strings matter. The config field is typed as a plain array, so the builder will accept anything you put in it and the workflow will simply never fire. There is no event_starting — it is event_starting_soon. If a calendar workflow is silent, check this before anything else.
Configuration
| Field | What it holds |
|---|---|
integration_id | Google Calendar integration to use (Settings → Integrations) |
calendar_id | Calendar to watch ('primary' for the user's main calendar) Defaults to primary. |
trigger_events | Which calendar events should fire the workflow. 'notes_attached' fires the first time a Google Doc attachment appears on the event — typically Gemini's meeting-notes summary added a few minutes after the meeting ends. It is mutually exclusive with 'event_updated' for that specific change: when notes appear, only 'notes_attached' fires. |
lead_time_value | UI-only: numeric amount paired with lead_time_unit (e.g. 15). Resolved into lead_time_minutes. Defaults to 30. |
lead_time_unit | UI-only: unit paired with lead_time_value. Resolved into lead_time_minutes. One of: minutes · hours · days Defaults to minutes. |
timezone | IANA timezone for event times (e.g. Asia/Kolkata) Defaults to UTC. |
query_filter | Only fire when event title/description/location/attendees contains this text (case-insensitive) |
match_scope | Restrict the title filter to a specific field One of: any · title · description · location · attendees Defaults to any. |
attendee_filter | Only fire when an attendee email or name contains this text (case-insensitive). Independent of title filter. |
integration_id
- What it holds
- Google Calendar integration to use (Settings → Integrations)
calendar_id
- What it holds
- Calendar to watch ('primary' for the user's main calendar) Defaults to
primary.
trigger_events
- What it holds
- Which calendar events should fire the workflow. 'notes_attached' fires the first time a Google Doc attachment appears on the event — typically Gemini's meeting-notes summary added a few minutes after the meeting ends. It is mutually exclusive with 'event_updated' for that specific change: when notes appear, only 'notes_attached' fires.
lead_time_value
- What it holds
- UI-only: numeric amount paired with lead_time_unit (e.g. 15). Resolved into lead_time_minutes. Defaults to
30.
lead_time_unit
- What it holds
- UI-only: unit paired with lead_time_value. Resolved into lead_time_minutes. One of:
minutes · hours · daysDefaults tominutes.
timezone
- What it holds
- IANA timezone for event times (e.g. Asia/Kolkata) Defaults to
UTC.
query_filter
- What it holds
- Only fire when event title/description/location/attendees contains this text (case-insensitive)
match_scope
- What it holds
- Restrict the title filter to a specific field One of:
any · title · description · location · attendeesDefaults toany.
attendee_filter
- What it holds
- Only fire when an attendee email or name contains this text (case-insensitive). Independent of title filter.
lead_time_value and lead_time_unit only mean anything for event_starting_soon — they are how far ahead “soon” is. Thirty minutes is the default and is about right for a prep brief; a day is better for something the person has to act on.
Narrowing which meetings count
A busy calendar will fire this trigger constantly, most of it internal. Three filters exist to stop that:
query_filterwithmatch_scope— only events whose title, description or location matches. “Demo” in the title is a crude filter that works surprisingly well.attendee_filter— only events involving particular people, or external attendees.calendar_id— watch a specific calendar rather thanprimary. A team that keeps demos on their own calendar has already done the filtering for you.
It polls; it does not arrive
Expect a delay of minutes, not seconds. Unlike a webhook, which arrives the moment the sender sends it, a calendar trigger works by checking. So “fire five minutes before the meeting” is approximate, and building anything that depends on precise timing on top of it will disappoint. Give yourself margin: set the lead time longer than you strictly need.
What arrives
Generously more than most triggers: summary, start, end, attendees, location, organizer, the meeting link (hangout_link), and meeting_notes when there are any.
attendees is the one that makes this trigger useful rather than decorative — it is how you connect a meeting to the contact and company it is with, which is what turns a calendar event into CRM activity.
What it needs first
A Google integration, connected by a person through OAuth. There is no way to authorise Google from inside a workflow, which is why integration_id is required and why this lesson shows configuration rather than a diagram: without the integration, the node cannot be saved at all.
Try it
- Connect a Google Calendar integration, then place the trigger and pick the calendar.
- Start with
event_createdwriting a note — the least surprising event, and it tells you the connection works. - Add
event_cancelledand cancel a test meeting. This is the event most teams have no process for. - Now add
event_starting_soonwith a lead time of an hour, and notice how approximate the timing is.
Next: Google Sheets — the same integration story, with rows instead of meetings.

