Skip to content

iCalendar Extract

The iCalendar Extract node finds and parses calendar invitations (RFC 5545 .ics) inside any input: a raw .ics file, a full MIME email, or the output object of an email node (Send Mail, MS365 Emails, Gmail).

It automatically handles the common ways an invitation travels inside an email:

  • Plain text/calendar bodies.
  • Base64-encoded attachments and MIME parts (including base64 blocks embedded in a larger raw email).
  • Quoted-printable encoded parts.
  • Folded lines, VTIMEZONE blocks and escaped text, per RFC 5545.

The typical pairing is iCalendar Extract → iCalendar Respond: the first turns the invitation into JSON, the second generates the accept / decline / counter-proposal reply.

ParameterTypeRequiredDescription
contenttextNoText or variable holding the email/MIME/.ics, e.g. {{body}}. If empty, the node scans the whole input data recursively (strings, arrays, attachment objects) for a BEGIN:VCALENDAR block

Returns the calendar method, the number of events and each event parsed. event is a shortcut to the first event (the usual case for an emailed invitation):

{
"method": "REQUEST",
"prodid": "-//Google Inc//Google Calendar 70.9054//EN",
"count": 1,
"event": {
"uid": "7f3k2m9q@google.com",
"summary": "DWH integration review, sprint 12",
"description": "502 incident recap\nBring the PM2 logs.",
"location": "Room 3",
"start": "2026-09-01T13:00:00",
"end": "2026-09-01T14:00:00",
"allDay": false,
"timezone": "Europe/Madrid",
"organizer": { "email": "laura@example.com", "name": "Laura Gómez" },
"attendees": [
{ "email": "agenda@floogos.com", "name": "Agenda Floogos", "partstat": "NEEDS-ACTION", "role": "REQ-PARTICIPANT", "rsvp": true }
],
"sequence": 2,
"status": "CONFIRMED",
"rrule": null
},
"events": [ "… same objects as above …" ]
}

Key fields:

  • method — REQUEST (new invitation or update), CANCEL, REPLY, etc.
  • start / end — ISO strings. If the original used a TZID, the time is local and timezone tells you which one; UTC times end in Z; all-day events use YYYY-MM-DD with allDay: true.
  • sequence — version of the invitation; needed to build a valid reply.
  • attendees[].partstat — current status of each guest (NEEDS-ACTION, ACCEPTED, DECLINED, TENTATIVE).

If no BEGIN:VCALENDAR is found anywhere in the input, the node ends with an error (useful to branch with a Decision node when an email may or may not carry an invitation).

  1. An email trigger (MS365 Emails / Gmail) outputs the message.
  2. iCalendar Extract with content empty: the node finds the .ics attachment on its own.
  3. A Decision node routes on {{method}} (REQUEST vs CANCEL).
  4. iCalendar Respond answers it.

If your email node leaves the raw MIME in a specific field, point to it directly:

content: {{rawMessage}}