Skip to main content

Microsoft Graph Source Connector

GraphSource

The Microsoft Graph Source connector integrates with the Microsoft Graph API to synchronize room calendar data from Microsoft 365 (Exchange Online) into the Mapped platform. It polls room mailbox calendars for booking events, creating a live view of meeting room usage across your organization.

Use Cases​

  • Room booking visibility: Surface real-time and upcoming meeting room bookings from Exchange Online into the Mapped graph for occupancy awareness and space analytics.
  • Calendar event synchronization: Automatically sync current and future calendar events for mapped conference rooms, keeping the Mapped platform up to date with scheduling changes.
  • Historical calendar backfill: On-demand sync of calendar events within a custom date range to populate historical booking data for rooms.

Configuration​

Auth Requirements​

The connector authenticates to Microsoft Graph using Azure AD OAuth 2.0 Client Credentials flow. An Azure AD App Registration with the appropriate Microsoft Graph API permissions is required.

To obtain the required credentials, follow Microsoft's Graph's instructions to Get access without a user with the permissions described below.

CredentialDescriptionRequired
Tenant IDAzure AD tenant identifier (directory ID)Yes
Client IDApplication (client) ID from the Azure AD registrationYes
Client SecretClient secret generated for the Azure AD appYes

Required Microsoft Graph API Permissions (Application)

PermissionTypeDescription
Calendars.ReadApplicationRead calendars in all mailboxes
Place.Read.AllApplicationRead all company places (rooms)

Credentials are validated on save by authenticating against the Microsoft identity platform. Invalid credentials will be rejected immediately.

Place Mappings​

After authentication, the connector fetches the list of rooms from the Microsoft Graph Places API. Each room can be mapped to a Mapped Space entity.

FieldDescriptionRequired
Building NameBuilding name (auto-populated from room display name)Yes
Building AddressAddress of the buildingNo
Floor NameFloor nameNo
Floor LevelFloor level numberNo
Space NameRoom display name (auto-populated)Yes
Space Ref IDUnique room identifier from Microsoft GraphYes

Each room mapping also stores the room email address internally, which is used to query the calendar view for that room's mailbox.

Calendar Sync (Action)​

The Calendar Sync action allows manual, on-demand synchronization of calendar events for a specific date range. This is useful for backfilling historical data or re-syncing a particular time window.

  • Select a Start Date and End Date (maximum range: 365 days).
  • The sync processes all booking events within the specified range for every mapped room.
  • Only one Calendar Sync action can run at a time per connector instance.

Polling Schedule​

FunctionIntervalDescription
Current EventsEvery 30 minutesFetches events that were created or modified since the last successful poll
Future EventsOnce per dayFetches events scheduled within the next 30 days (configurable via futureEventsWindow setting)

Mapped Concepts​

Graph Entities​

This connector creates the following entities in the Mapped graph:

Microsoft Graph APIMapped EntityDescription
Room (Place)SpaceA conference room or bookable space
Calendar View EventsSpaceBookingCalendarA booking calendar associated with a room
Calendar EventCalendarEventAn individual booking/meeting event on the calendar

Space

Represents a bookable room from Microsoft 365, created from the Place Mappings configuration.

Key Fields

GraphQL FieldDescription
nameRoom display name
exactTypeSubclass of Space (e.g. Room)
mappingKeyUnique key from place mapping
identitiesExternal identity URN

SpaceBookingCalendar

Represents the booking calendar for a specific room. One calendar is created per mapped room.

Key Fields

GraphQL FieldDescription
nameCalendar for {room name}
mappingKeyDerived from the parent Space mapping key
hasCalendarEventList of CalendarEvent entities on this calendar
isCalendarOfThe Space this calendar belongs to

CalendarEvent

Represents an individual meeting or booking on a room calendar. Cancelled events are automatically excluded.

Key Fields

GraphQL FieldDescription
nameEvent subject/title
startTimeEvent start time (ISO 8601)
endTimeEvent end time (ISO 8601)
hasLocationThe Space where the event takes place
identitiesExternal identity URN based on the iCalUId
mappingKeyUnique key derived from the event's iCalUId

When an event is moved to a different room, the connector automatically updates the hasLocation relationship to reflect the new room assignment.

Sample Code​

Query Spaces with their Calendars and Events

{
spaces{
id
name
exactType
hasCalendar {
... on SpaceBookingCalendar {
id
name
hasCalendarEvent {
id
name
startTime
endTime
hasLocation {
id
name
exactType
}
}
}
}
}
}

Query CalendarEvents with location

{
calendarEvents {
id
name
startTime
endTime
hasLocation {
... on Space {
id
name
exactType
floor {
name
}
}
}
identities {
... on ExternalIdentity {
value
scope
}
}
}
}

Query a specific Space's booking calendar

{
spaces(filter: {id: {eq: "your-Space-Id"}}) {
id
name
hasCalendar {
... on SpaceBookingCalendar {
id
name
exactType
hasCalendarEvent {
id
name
startTime
endTime
}
}
}
}
}

Graph Diagrams​

Diagram of Space hasCalendar SpaceBookingCalendar, which in turn isCalendarOf Space. SpaceBookingCalendar also hasCalendarEvent CalendarEvent, which hasLocation Space and is linked to an xternal Identity.