Calendar Trigger¶
Overview¶
The Calendar Trigger starts a workflow from your team’s calendars. Pick what it waits for:
| Option | Starts the workflow |
|---|---|
| A meeting is coming up | A set time before a meeting starts — e.g. 1 day, or 2 hours. |
| A meeting has ended | When a meeting ends, or a set time after. |
| A meeting is booked | When a new meeting appears on a calendar. |
| A meeting is moved | When a meeting’s start time changes. |
| A meeting is canceled | When an upcoming meeting is canceled. |
| A guest proposes a new time | When a guest answers with “propose a new time”, from Outlook, Google Calendar or any other calendar. |
It works the same whether the meeting was booked in BaseCloud, by a workflow, or directly in Outlook or Google Calendar. For moving and canceling by hand, see Change or cancel a meeting.
When to use this trigger:
- Text customers a reminder the day before, to cut no-shows.
- Send a thank-you or a review request an hour after a meeting ends.
- Tell the rep when a customer declines or cancels.
- Send the new time when a meeting is moved.
- Tell the organizer a guest has asked for a different time — or move the meeting for them.
flowchart LR
A[Meeting tomorrow] --> B[Calendar Trigger: coming up, 1 day]
B --> C{client_id}
C -->|set| D[SMS reminder with start_label and meeting_link]

Configuration¶
Builder fields¶
The Field column is the label as it appears in the task builder; Key is the name the value is stored under and referenced by.
| Field | Key | Type | Default | Notes |
|---|---|---|---|---|
| Start this workflow when | trigger_event |
select | starting_soon |
Options: A meeting is coming up · A meeting has ended · A meeting is booked · A meeting is moved · A meeting is canceled · A guest proposes a new time |
| How long before / after | offset_value |
number | 1 |
Only shown when trigger_event is starting_soon, ended |
| Unit | offset_unit |
select | days |
Options: Minutes · Hours · Days. Only shown when trigger_event is starting_soon, ended |
| Whose calendars | user_ids |
select | – | |
| Only meetings linked to a client | client_required |
checkbox | 0 |
|
| Only meetings whose title contains (optional) | title_contains |
text | – | |
| Also meetings booked by workflows | include_automation |
checkbox | 0 |
Only shown when trigger_event is created |
Whose calendars¶
Pick the people whose calendars the trigger watches. Left empty, it watches everyone's. A setting that names no one the trigger can read — users since removed, or a value that is not a user — does not quietly widen to everyone: the check stops, saying the "Which users" setting names no user it can read, until the users are picked again or the setting is cleared.
How it checks¶
The trigger checks every minute and picks up what became due since its last check. Each meeting starts the workflow once per trigger:
- A meeting several of your people attend is on each of their calendars, but it only starts the workflow once.
- A meeting that is moved gets a new reminder for its new time.
- A meeting is coming up fires when the lead time is reached. A meeting booked closer than the lead time (booked this afternoon, with a “1 day before” reminder) does not get that reminder — use A meeting is booked for confirmations.
- Each check looks up to 30 seconds behind the clock, so a change saved at the moment of a check is not missed.
- A missed minute is caught up on the next check. A trigger switched off and on again catches up at most the last hour, never more; a new trigger starts from the moment it is switched on.
Canceled repeating meetings¶
- One meeting of a series (just next Tuesday's session) starts the workflow for that meeting.
- The whole series starts it once, not once per meeting.
- “This and all following” starts it once, for the first meeting removed, and says how many went and which was the last.
- A whole series already under way starts it once. Its time is the next meeting that is no longer happening, and it says how many went and which was the last.
- Changing a series’ pattern (weekly to every two weeks, say) does not start it. BaseCloud replaces the old meetings with new ones, and that is not a cancellation.
A guest proposes a new time¶
- The meeting has not moved.
startandendare still the meeting’s own times;proposed_startandproposed_endare what the guest asked for. - To accept it, add a Calendar task that updates the meeting
(
event_id) toproposed_startandproposed_end. Moving the meeting clears the proposal. - Each proposal starts the workflow once, however it reached BaseCloud. A guest who changes the time they proposed starts it again; two guests proposing on the same meeting start it once each.
- A proposal for a whole repeating series still starts the workflow, with
whole_seriesset toyes. A Calendar task cannot move a whole series, so branch on it: tell the organizer instead. - A proposal for a time that has already passed does not start it. Nor does one made before the trigger was switched on.
What is left out¶
- All-day entries are never reminded about.
- Meetings the calendar’s owner declined.
- A meeting is booked ignores meetings booked by workflows, unless Also meetings booked by workflows is on — so a workflow that books meetings cannot keep starting itself. The other options do include them: a meeting a workflow booked still gets its reminder.
- A meeting is booked also ignores meetings copied in when someone first connects their calendar (more than 15 new meetings on one person’s calendar in a minute counts as that), past meetings, and meetings booked before the trigger was switched on. It fires a minute or two after the booking.
- A meeting is canceled waits five minutes before it counts, and does not fire when only one person’s copy goes (for example, a guest declines) while the meeting carries on.
- A meeting is moved looks at the start time only. Changing just the end time does not count.
- A meeting is canceled only covers upcoming meetings.
Output Fields¶
| Field | Description |
|---|---|
trigger_event, trigger_label |
What happened, e.g. starting_soon / “Meeting starting soon”. |
event_id |
The meeting’s ID — use it in a Calendar task to change or cancel it. |
title, description, location |
The meeting details. |
start, end |
Exact times (ISO, UTC); the date for all-day meetings, with end the last day. |
start_local, end_local |
2026-10-05 14:00 in the account’s time zone. All-day meetings give the date only. |
start_label, end_label |
Readable, e.g. Mon, Oct 5, 2:00 PM. |
all_day |
yes / no. |
time_zone |
The account’s time zone (General Settings). |
owner_user_id |
Whose calendar the meeting is on. |
organizer_name, organizer_email |
Who organized it. |
client_id, client_name |
The linked client, when there is one. |
meeting_link, web_link |
The Teams / Meet link, and the link to open the meeting. |
attendee_emails, attendee_names |
The guests (not the organizer), comma-separated. |
attendee_count, attendees |
How many guests, and the list with each guest’s answer so far. |
session_id |
A stable key per meeting — use it as an AI memory Session Key. |
old_start, old_start_label |
Moved only: the previous time. |
moved_count |
Moved only: how many meetings of a repeating series moved together (1 for a single meeting). |
part_of_series |
Canceled, moved and new time proposed: yes when the meeting is part of a repeating series. |
proposer_name, proposer_email |
New time proposed only: the guest who proposed. |
proposed_start, proposed_end |
New time proposed only: the time asked for (ISO, UTC). A guest who named only a start keeps the meeting’s length. |
proposed_start_local, proposed_end_local |
New time proposed only: 2026-10-07 15:00 in the account’s time zone. |
proposed_start_label, proposed_end_label |
New time proposed only: readable, e.g. Wed, Oct 7, 3:00 PM. |
whole_series |
New time proposed only: yes when the proposal is for every meeting of a repeating series. |
cancelled_count |
Canceled only: how many meetings were canceled together (1 unless “this and all following”). |
cancelled_from_label |
Canceled only: the first meeting removed, when more than one was. |
cancelled_through_label |
Canceled only: the last meeting removed, when more than one was. |
Testing¶
Create a test record from the trigger’s records panel without pasting anything, and BaseCloud fills it with your account’s nearest meeting, shaped exactly as a real run would be. If the calendar is empty it uses a sample meeting.