Skip to content

Calendar — create an event ​

Creates an event in Google Calendar. A retry of the step creates no duplicate: the id derives from the step.

This node creates an event in a Google Calendar: a meeting confirmed by email, a deadline extracted from a document, a callback slot. It can invite attendees, and by default it does not email them.

It needs the Google Calendar access of a Google account, shown as the Calendar capability in Connections. See Google. The event is created with the account of the member running the workflow.

To offer free slots before booking one, use Calendar — find free slots. For an Outlook calendar, use Create an Outlook event.

At a glance ​

  • Type: google_calendar.create_event · version 1
  • Category: Actions
  • Kind: Step — one stage of a run
  • Effect: Writes outside (external_write) — writes outside Mankomail; described instead of performed during a test run
  • Needs a carrier email: No
  • Connection: Google (capability calendar)
  • Inputs: main
  • Outputs: main

Connection ​

This node needs a Google connection with the calendar capability granted.

Parameters ​

credential ​

Google account — The account holding Google Calendar access. Connect it once in Connections; the workflow always runs with the account of the member running it.

  • Type: Connection (credential)
  • Required: Yes
  • Default: "" (empty)

calendar ​

Calendar — Left empty, the account’s primary calendar.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":"primary","label":"Agenda principal"}
  • Ways to choose: pick from a list, type an ID, paste a URL (calendar)
  • Listed with the connection in: credential

title ​

Title

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 500 characters at most
  • Example: Project call — {{ email.from.name }}
  • Expressions: {{ }} accepted

allDay ​

All day — On, "Start" and "End" are dates (2026-04-12) and the end is exclusive, as Google expects.

  • Type: Yes / no (boolean)
  • Required: No
  • Default: false

start ​

Start — ISO 8601 instant (2026-04-12T14:00:00), or a bare date for an all-day event. Accepts {{ }} expressions: {{ data.extract_1.date }}.

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 60 characters at most
  • Example: 2026-04-12T14:00:00
  • Expressions: {{ }} accepted

end ​

End

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 60 characters at most
  • Expressions: {{ }} accepted

timeZone ​

Time zone — IANA identifier (Europe/Paris, America/Montreal).

  • Type: Text (string)
  • Required: No
  • Default: Europe/Paris
  • 100 characters at most
  • Shown when: allDay is not true
  • Expressions: {{ }} accepted

location ​

Location

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 500 characters at most
  • Example: Video call
  • Expressions: {{ }} accepted

description ​

Description

  • Type: Long text (text)
  • Required: No
  • Default: "" (empty)
  • 10000 characters at most
  • Expressions: {{ }} accepted

attendees ​

Attendees — One address per row. Accepts {{ }} expressions: {{ email.from.email }}.

  • Type: List of items (collection)
  • Required: No
  • Default: []
  • At most 30 items
  • Each item has:
    • email — Address
      • Type: Text (string)
      • Required: No
      • Default: "" (empty)
      • 320 characters at most

sendUpdates ​

Notify attendees

  • Type: One choice (options)
  • Required: Yes
  • Default: none
  • Options:
    • none — No: The event shows up in their calendar with no invitation email.
    • all — Yes, send invitations: Google sends the invitation email to every attendee.
  • Shown when: attendees has at least 1

Outputs ​

  • main

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.<step>.event }} — object { id, htmlLink?, start, end }. The event created, or found again on a replay. id is the Google Calendar event id, htmlLink the link that opens it in Google Calendar, start and end the bounds as Google recorded them (a date for an all-day event).
  • {{ data.<step>.event.htmlLink }} — string. The Google Calendar link of the event, to quote in a reply. Absent in a test run.
  • {{ data.<step>.created }} — boolean. true when the event was created by this attempt, false when a replay found the event created by an earlier attempt of the same step.
  • {{ data.<step>.simulated }} — boolean. true in a test run: nothing was created, the id starts with simulated- and start/end repeat the values entered.
  • {{ data.<step>.summary }} — string. A readable sentence giving the event title, its start and the number of attendees.

Example ​

A client confirms a meeting by email; an Extract step named Extract reads the agreed date and time. The node is named Book meeting:

calendar: (id mode) primary
title: Project call — {{ email.from.name }}
allDay: false
start: {{ data.extract.start }}
end: {{ data.extract.end }}
timeZone: Europe/Paris
location: Video call
attendees:
  - email: {{ email.from.email }}
sendUpdates: none

With start resolving to 2026-04-14T14:00:00 and end to 2026-04-14T15:00:00, the step data reads:

json
{
  "event": {
    "id": "k3v9q0m1…",
    "htmlLink": "https://www.google.com/calendar/event?eid=…",
    "start": "2026-04-14T14:00:00+02:00",
    "end": "2026-04-14T15:00:00+02:00"
  },
  "created": true,
  "simulated": false
}

The client is on the event but receives no invitation email, because Notify attendees is set to No.

Tips ​

  • No duplicate on replay. The event id is derived from the step. If the step is replayed after an incident, Google answers that this id already exists, and the node returns the existing event with created: false instead of creating a second one. Two different runs (two emails) create two events, as expected.
  • Invitations. Notify attendees appears once there is at least one attendee and defaults to No: the event shows up in the attendees' calendars without an invitation email. Choose Yes, send invitations to have Google email every attendee.
  • Dates and times. Without All day, Start and End are ISO 8601 date-times (2026-04-14T14:00:00) read in the Time zone field (IANA name, Europe/Paris by default). With All day, they are dates (2026-04-14) and the end is exclusive, as Google expects: a one-day event on 14 April ends on 2026-04-15. The Time zone field is hidden for all-day events.
  • Calendar. Left as is, the account's primary calendar (primary). The list only offers calendars the account can write to. You can also type a calendar id or paste a Google Calendar URL that carries the calendar in its cid or src parameter.
  • Attendees. Up to 30 addresses, one per row; duplicates are dropped. An entry that is not an email address (for instance an expression that did not resolve) fails the step with node_invalid_param rather than silently inviting nobody. Title, Start or End resolving to empty also fails with node_invalid_param.
  • Test runs. In test runs nothing is created and nobody is notified: the step returns an id starting with simulated-, no htmlLink, and start/end as entered.
  • Errors. credential.capability_missing: Google Calendar is not connected for the member running the workflow. google.insufficient_permissions or google.auth_failed: reconnect the account. google.not_found: the calendar does not exist or the account cannot see it. google.rejected: Google refused the event (for instance an unreadable date). google.bad_locator: the pasted calendar value cannot be read. google.unavailable is retried automatically. See Error handling.