Sign In

Calendar Integrations

Create events and appointments in Google Calendar, Outlook Calendar, and Microsoft Bookings from your Buildorado workflows.

Calendar integrations automate appointment booking and event scheduling directly from your Buildorado workflows. When a user submits a form with date, time, and contact information, Buildorado can instantly create a calendar event with attendees, location, reminders, and a detailed description pulled from the form data. This eliminates the back-and-forth of manual scheduling and ensures every booking is confirmed the moment the form is submitted. All calendar integrations authenticate via OAuth 2.0 and store credentials with AES-256 encryption through AWS KMS.

Google Calendar

Google Calendar is the most widely used calendar integration in Buildorado. Create events with attendees, locations, and custom details automatically from form submissions.

Setting Up Google Calendar

  1. Navigate to Settings > Integrations in your Buildorado dashboard.
  2. Find Google Calendar and click Connect.
  3. Sign in with your Google account in the authorization popup.
  4. Grant the following permissions:
    • calendar -- Full access to manage calendars
    • calendar.events -- Create and manage events
  5. Once authorized, Google Calendar shows as Connected with your Google account email.

Both personal Google accounts and Google Workspace accounts are supported.

Operations

createEvent

Create a new calendar event.

FieldTypeRequiredDescription
summarystringYesEvent title
descriptionstringNoEvent description
startDateTimedatetimeYesStart date and time (e.g., 2024-03-15T10:00:00)
endDateTimedatetimeYesEnd date and time
timeZonetimezoneNoIANA timezone (e.g., America/New_York). Defaults to the calendar's timezone
attendeesstringNoComma-separated email addresses of attendees
locationstringNoEvent location (address or virtual meeting URL)

Output:

FieldTypeDescription
idstringGoogle Calendar event ID
htmlLinkstringDirect URL to the event
statusstringEvent status (confirmed, tentative, cancelled)

updateEvent

Update an existing calendar event.

FieldTypeRequiredDescription
eventIdstringYesEvent ID to update
summarystringNoUpdated event title
descriptionstringNoUpdated description
startDateTimedatetimeNoUpdated start date and time
endDateTimedatetimeNoUpdated end date and time

Output:

FieldTypeDescription
idstringEvent ID
updatedstringTimestamp of the update

listEvents

List upcoming calendar events.

FieldTypeRequiredDescription
calendarIdstringNoCalendar ID (defaults to primary)
timeMindatetimeNoFilter events starting after this date-time
timeMaxdatetimeNoFilter events ending before this date-time
maxResultsnumberNoMaximum number of events to return

Output:

FieldTypeDescription
eventsstringEvents as JSON

Mapping Date/Time Form Fields

When your form includes date and time fields, map them to the Google Calendar event:

[Form: Appointment Booking]
  -- [Google Calendar: createEvent]
    summary: "Meeting with {{form.clientName}}"
    startDateTime: "{{form.appointmentDate}}T{{form.appointmentTime}}:00"
    endDateTime: computed from start + duration
    attendees: "{{form.clientEmail}}"
    location: "{{form.meetingLocation}}"

Date format considerations:

  • If your form uses a date field, Buildorado provides the value in ISO format (e.g., 2024-03-15).
  • If your form uses a time field, the value comes as HH:MM (e.g., 14:30).
  • Combine them with the T separator: {{form.date}}T{{form.time}}:00 produces 2024-03-15T14:30:00.

For all-day events, use date-only values without the time component:

startDateTime: "{{form.eventDate}}"
endDateTime: "{{form.eventEndDate}}"

Timezone Handling

Timezones are critical for scheduling across regions. Google Calendar handles timezones using IANA timezone identifiers:

TimezoneIANA Identifier
US EasternAmerica/New_York
US CentralAmerica/Chicago
US MountainAmerica/Denver
US PacificAmerica/Los_Angeles
UKEurope/London
Central EuropeEurope/Berlin
IndiaAsia/Kolkata
JapanAsia/Tokyo
Australia EasternAustralia/Sydney

Best practices for timezone handling:

  • If your form collects the user's timezone, map it to the timeZone field: {{form.timezone}}.
  • If your form does not collect timezone, set a default timezone in the action configuration.
  • Avoid relying on the calendar's default timezone if your users are in different regions. Explicitly set the timezone to prevent off-by-hours scheduling errors.

Attendees and Invitations

When you include email addresses in the attendees field, Google Calendar sends invitation emails to each attendee. The attendees receive a standard Google Calendar invitation they can accept, decline, or mark as tentative.

attendees: "{{form.clientEmail}}, {{form.advisorEmail}}, [email protected]"

Multiple attendees are separated by commas. Each receives an independent invitation.

Note: Invitation emails are sent by Google, not by Buildorado. The invitation appears to come from the Google account that owns the calendar.

Template Variables in Event Details

Use template variables throughout the event configuration to personalize every field:

summary: "Consultation: {{form.firstName}} {{form.lastName}}"
description: "Client: {{form.firstName}} {{form.lastName}}
Email: {{form.email}}
Phone: {{form.phone}}
Topic: {{form.consultationTopic}}
Notes: {{form.additionalNotes}}

Submitted via Buildorado on {{submission.createdAt}}"
location: "{{form.preferredOffice}}"

Common Patterns

Appointment booking with confirmation email:

[Form: Book Appointment]
  -- [Google Calendar: createEvent]
    summary: "{{form.serviceType}} - {{form.clientName}}"
    startDateTime: "{{form.date}}T{{form.time}}:00"
    endDateTime: calculated
    attendees: "{{form.email}}"
  -- [Email: Send confirmation]
    to: "{{form.email}}"
    subject: "Your appointment is confirmed"
    body: "Your {{form.serviceType}} is scheduled for {{form.date}} at {{form.time}}.
           View it on your calendar: {{googleCalendar_1.htmlLink}}"

Conditional calendar selection:

[Form: Meeting Request]
  -- Branch: meetingType
    -- "Sales" -- [Google Calendar: Create on [email protected] calendar]
    -- "Support" -- [Google Calendar: Create on [email protected] calendar]
    -- "General" -- [Google Calendar: Create on [email protected] calendar]

Tips for Google Calendar

  • The connected Google account must have write access to the target calendar. For shared calendars, ensure the account has "Make changes to events" permission.
  • Google Calendar API has a quota of 1,000,000 queries per day and 500 requests per 100 seconds per user. These limits are generous for most workflows.
  • For recurring events, create the first event and note the event ID. Recurring event support in the action node requires the recurrence rule (RRULE) format.

Outlook Calendar

Outlook Calendar integration creates events in Microsoft 365 calendars, ideal for organizations that use the Microsoft ecosystem.

Setting Up Outlook Calendar

  1. Navigate to Settings > Integrations and click Connect next to Outlook Calendar.
  2. Sign in with your Microsoft 365 account in the authorization popup.
  3. Grant the following permissions:
    • User.Read -- Read your profile
    • Calendars.ReadWrite -- Create and manage calendar events
    • offline_access -- Maintain the connection
  4. Once authorized, Outlook Calendar shows as Connected.

Operations

createEvent

Create a new calendar event in Outlook.

FieldTypeRequiredDescription
subjectstringYesEvent title
bodystringNoEvent description (HTML supported)
startDateTimedatetimeYesStart date and time in ISO 8601 format
endDateTimedatetimeYesEnd date and time in ISO 8601 format
timeZonetimezoneNoTimezone (e.g., America/New_York)
locationstringNoEvent location
attendeesstringNoComma-separated email addresses
isOnlineMeetingbooleanNoCreate as a Teams meeting

Output:

FieldTypeDescription
idstringOutlook event ID
webLinkstringWeb link to view the event
onlineMeetingUrlstringTeams meeting URL (if isOnlineMeeting is true)

updateEvent

Update an existing calendar event.

FieldTypeRequiredDescription
eventIdstringYesEvent ID to update
subjectstringNoUpdated event title
bodystringNoUpdated description
startDateTimedatetimeNoUpdated start date and time
endDateTimedatetimeNoUpdated end date and time
timeZonetimezoneNoUpdated timezone
locationstringNoUpdated location

Output:

FieldTypeDescription
idstringEvent ID
webLinkstringWeb link to the event

listEvents

List upcoming calendar events.

FieldTypeRequiredDescription
topnumberNoNumber of events to return
startDateTimedatetimeNoFilter events starting after this date-time
endDateTimedatetimeNoFilter events ending before this date-time

Output:

FieldTypeDescription
eventsstringEvents as JSON

Teams Meeting Integration

Set isOnlineMeeting to true to automatically generate a Microsoft Teams meeting link for the event. The Teams join URL is available in the output as onlineMeetingUrl, which you can include in confirmation emails:

[Outlook Calendar: createEvent]
  subject: "Meeting with {{form.clientName}}"
  isOnlineMeeting: true
-- [Email: Send to {{form.email}}]
  body: "Join via Teams: {{outlookCalendar_1.onlineMeetingUrl}}"

Timezone Differences

Outlook Calendar uses Windows timezone names instead of IANA identifiers:

RegionOutlook Timezone Name
US EasternEastern Standard Time
US CentralCentral Standard Time
US PacificPacific Standard Time
UKGMT Standard Time
Central EuropeCentral European Standard Time
IndiaIndia Standard Time
JapanTokyo Standard Time

If your form collects IANA timezone values, you may need to map them to the Windows equivalents in a code node.

Tips for Outlook Calendar

  • For shared or room calendars, specify the calendar owner's email or calendar ID.
  • Outlook Calendar supports rich HTML in the event body, including tables, links, and formatted text.
  • Admin consent may be required for organization-wide calendar access.

Microsoft Bookings

Microsoft Bookings is a scheduling tool within Microsoft 365 designed for customer-facing appointment booking.

Setting Up Microsoft Bookings

  1. Navigate to Settings > Integrations and click Connect next to Microsoft Bookings.
  2. Sign in with your Microsoft 365 account.
  3. Grant permissions for reading and managing Bookings data. The following scopes are requested:
    • User.Read -- Read your profile
    • BookingsAppointment.ReadWrite.All -- Manage bookings
    • offline_access -- Maintain the connection
  4. Once authorized, Bookings shows as Connected.

Operations

listBusinesses

List all booking businesses the user has access to.

FieldTypeRequiredDescription
topnumberNoNumber of businesses to return

Output:

FieldTypeDescription
businessesstringBusinesses as JSON

listServices

List all services for a booking business.

FieldTypeRequiredDescription
businessIdstringYesThe booking business ID
topnumberNoNumber of services to return

Output:

FieldTypeDescription
servicesstringServices as JSON

createAppointment

Create a new appointment in a booking business.

FieldTypeRequiredDescription
businessIdstringYesBookings business ID
serviceIdstringYesThe service being booked
startDateTimedatetimeYesAppointment start time
endDateTimedatetimeYesAppointment end time
timeZonetimezoneNoTimezone
customerNamestringYesCustomer's full name
customerEmailstringYesCustomer's email address
customerPhonestringNoCustomer's phone number
customerNotesstringNoAdditional notes from the customer
staffMemberIdsstringNoComma-separated staff member IDs

Output:

FieldTypeDescription
idstringAppointment ID
serviceIdstringService ID
serviceNamestringService name
startDateTimestringAppointment start
endDateTimestringAppointment end
customerNamestringCustomer name
customerEmailstringCustomer email

Tips for Microsoft Bookings

  • Bookings is included with Microsoft 365 Business Standard and higher plans.
  • Use the listBusinesses operation to discover business IDs, then use listServices to find available services.
  • Bookings automatically sends confirmation and reminder emails to customers through Microsoft 365.
  • Staff member auto-assignment distributes bookings evenly when no specific staff member is selected.

Best Practices for Calendar Integrations

Validate Date and Time Before Creating Events

Use conditional logic to ensure the selected date is in the future:

[Form: Appointment]
  -- Branch: appointmentDate is after today
    -- true -- [Google Calendar: createEvent]
    -- false -- [Email: "Please select a future date"]

Include All Relevant Details in the Event

Pack the event description with all form data so the organizer has full context without navigating back to Buildorado:

description: "Appointment Details
Client: {{form.name}}
Email: {{form.email}}
Phone: {{form.phone}}
Service: {{form.service}}
Notes: {{form.notes}}
Submission: {{submission.id}}"

Send Confirmation After Event Creation

Always follow calendar event creation with a confirmation email or message that includes the event URL:

[Calendar: createEvent]
  -- [Email: "Your appointment is confirmed. View: {{calendar_1.htmlLink}}"]

Error Handling

Calendar API calls can fail if the connected account is deauthorized, the calendar is deleted, or the time slot conflicts with an existing event. Attach an error handler node to handle failures gracefully.

On this page

Calendar Integrations | Buildorado