Skip to content
Expedify
Triggers — every way a workflow starts

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

Names taken from the node's own validator; they are not listed in its config schema.

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

The first three are required; the rest narrow what counts.

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 · days Defaults to minutes.

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 · attendees Defaults to any.

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_filter with match_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 than primary. 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

  1. Connect a Google Calendar integration, then place the trigger and pick the calendar.
  2. Start with event_created writing a note — the least surprising event, and it tells you the connection works.
  3. Add event_cancelled and cancel a test meeting. This is the event most teams have no process for.
  4. Now add event_starting_soon with 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.