Skip to main content

How to integrate with Microsoft Outlook Calendar

This feature is currently in limited release but will be available to all customers soon.

Introduction

Teramind's integration with Microsoft Outlook Calendar syncs your employees' calendar events from Microsoft 365 into Teramind, closing one of the oldest blind spots in activity monitoring: the time employees spend in meetings away from their computers. Without it, an employee in a two-hour client meeting looks idle; with it, that time is recognized as work.

The integration does two things:

  • Captures Work Time for Offline Meetings: when an employee is in a scheduled meeting, Teramind records the meeting's scheduled time as Offline Meeting Time, reported separately from computer activity, instead of leaving those hours as inactive/idle time. The result is a more accurate picture of the workday for meeting-heavy roles: managers see the full day, not just the hours spent at a keyboard.

  • Adds Meeting Context to Calendar Data: synced calendar events carry meeting details (title, organizer, participants, responses) into the Offline Meetings data source, where you can filter and break down widgets by them. Enriching the Online Meetings reports with this metadata is planned for a future release.

How it Works:

You connect Teramind to your Microsoft 365 tenant with tenant-wide admin consent, then scope the sync to the members of one or more Microsoft Entra groups you manage. Teramind reads calendar event metadata for those employees only, on a recurring schedule, and exposes it as the Offline Meetings data source in the dashboard widget editor. You can combine it with the work-time data sources you already use to build custom widgets and productivity metrics (see examples under the Viewing Calendar Activities section).

Sync Type & Frequency:

  • Read-Only Sync: Teramind performs a one-way sync, only importing calendar data from your Microsoft 365 tenant. Any changes made within Teramind will not be pushed back or saved to your directory.

  • Sync Frequency: The first sync begins when you launch the integration; syncs then run automatically every 4 hours. You can see the last sync time on the integration's settings page (see Managing the Integration).

  • Updates to Past Events: if a synced event changes in the calendar (for example, a meeting is declined or cancelled), the change is picked up on the next sync for events up to 3 days in the past.

Prerequisites

Requirement

What You Need

Microsoft 365 Tenant

A Microsoft 365 / Office 365 tenant with Exchange Online mailboxes, and at least one mailbox per employee whose calendar you want to sync. See Limitations & Known Issues for the detailed support matrix.

Entra Group(s)

One or more Microsoft Entra groups that you create and manage in your own tenant. The integration syncs only the calendars of those groups' members. You will paste each group's Object ID during setup (see Step 1).

Assigned Roles

The person performing the setup must be able to grant tenant-wide admin consent for Microsoft Graph application permissions: Global Administrator or Privileged Role Administrator (the lowest built-in role that works; it can be held as a PIM-eligible activation rather than a standing assignment). Note that Application Administrator and Cloud Application Administrator cannot consent these permissions.

Permissions Requested

Microsoft will ask you to approve the following read-only permissions

  • Calendars.Read

  • GroupMember.Read.All

  • User.ReadBasic.All

Teramind reads calendar event metadata and group membership only; event bodies are never read, nothing is ever written to your tenant, and employees are never prompted individually.

For more information, see Microsoft's guide: Microsoft Graph permissions reference.

You can check role assignments from the Microsoft Entra admin center → Entra ID > Users > All users → select a user → Assigned roles.

Limitations & Known Issues

Supported Environments

  • Microsoft 365 Business (Basic / Standard / Premium)

  • Microsoft 365 Enterprise (E3 / E5 / F1 / F3)

  • Office 365 Enterprise (E1 / E3 / E5 / F3)

  • Microsoft 365 Education (A1 / A3 / A5)

  • Microsoft 365 Government (standard GCC only)

  • Standalone Exchange Online (Plan 1 / Plan 2 / Kiosk)

  • Hybrid Exchange deployments

Not Supported

  • GCC High and DoD clouds (they require a separate Microsoft app registration)

  • Pure on-premises Exchange (Exchange 2013 / 2016 / 2019 / SE hosted on your own servers)

  • Consumer Outlook.com accounts and Microsoft 365 Apps-only plans (no Exchange Online mailbox)

  • Third-party calendars displayed inside Outlook (Google, iCloud, ICS feeds, CalDAV): only the user's own Exchange calendar is synced

Known Limitations

  • Disabled Entra Accounts: not filtered out of synced groups.

  • Offline Meeting Time Is Reported Separately: it is not added to Total work time or productivity measures.

  • No Pre-Built Dashboard Yet: meeting data is explored through custom widgets (see Viewing Calendar Activities); a pre-built dashboard is planned for a later release.

Setting Up the Integration

Step 1: Create the Entra Group(s) in Your Microsoft Tenant

The groups are yours: you create and manage them in your Microsoft Entra tenant, and Teramind only reads their membership. For security and performance reasons, Teramind accesses only the members of the group(s) you designate, and only to read calendar events: nothing else in your directory, and nothing is ever written back.

1. Sign in to the Microsoft Entra admin center (entra.microsoft.com) as a Groups Administrator or higher.

2. Browse to Groups > All groups or Groups > Overview.

3. Select New group.

4. Create the group, for example a Security group named “Teramind Calendar Sync”, and add the employees (members) whose calendars should be synced. Any Entra group type works: security, Microsoft 365, mail-enabled security, or distribution. Dynamic membership groups are supported (Microsoft evaluates the membership rules; Teramind reads the result). Click the Create button when done.

5. Open the group and copy its Object ID (a GUID) from the group's Overview page. You need one Object ID per group in Step 3 below.

For more information, see Microsoft's guide: Manage Microsoft Entra groups and group membership.

Notes:

  • Nested Groups: Teramind resolves the full transitive membership of each configured group, so members of nested groups are included.

  • At Least One Group Is Required: there is no "sync all mailboxes" option. This is deliberate: it keeps calendar access scoped to the people you choose.

  • Membership Changes Apply on the Next Sync: calendar sync runs on a recurring schedule, so someone added to (or removed from) the group is picked up (or dropped) on the following sync.

  • Multiple Groups: you can configure more than one; paste each Object ID separately.

Step 2: Connect to Microsoft 365

1. Navigate to the System > Integrations menu and select Microsoft Outlook Calendar from the Explore integrations cards.

2. On the Connect to Microsoft 365 step, click the Connect button. Microsoft's sign-in page opens in a new browser tab.

3. Pick an account (or sign in) and complete any 2FA. Note: If authentication fails, it is likely due to insufficient permissions. Check the Prerequisites (Assigned Roles) section above.

4. On, the Permissions requested screen, review the permissions and click Accept.

5. A confirmation page appears: Outlook Calendar connected.

6. Go back to your Teramind Dashboard. Wait until the Status changes to Connected. Waiting launch then click Continue to proceed to the rules step.

Step 3: Set the Detection Rules

Configure the detection rules and mailbox scope below, then launch the integration:

Detection Rules:

Configure how calendar events qualify as offline meeting time. All rules apply together; an event must pass every rule to count:

1. Minimum participants: the minimum number of participants, counting everyone who has not declined; the organizer always counts as one (default: 2; whole number, 1 or more).

2. Maximum meeting duration: meetings longer than this are ignored (default: 8 hours; the UI accepts 1-24 hours).

3. Private events: when on (default), private calendar events count as offline meeting time if they meet the rules above.

These meetings aren’t captured:

  • Meetings shorter than 15 minutes

  • All-day events (such as PTO entries)

  • Cancelled events

Mailbox Scope:

4. Under Entra Groups, paste the Object ID from Step 1 and press Enter; repeat for each group. Calendars of members of these groups are synced. At least one group is required.

5. Click Save & Launch.

Managing the Integration

After setup, the integration appears under System > Integrations screen. Here you can see its Status, Last sync*, and Created time (your Microsoft tenant is shown under the integration name).

Under the Actions column, you will see some icons:

  • Click the Settings icon to change the detection rules or the scoped Entra groups, then click Save Changes. Group membership itself is always managed in Microsoft Entra, not in Teramind.

  • Click the Trash Can icon to remove the integration from Teramind.

The Last sync column shows when Teramind last received data from the integration. Received data is not immediately available in dashboards: it appears after the next BI processing cycle, so new calendar events can take longer than the sync interval to show up in widgets.

Viewing Calendar Activities

Once the integration is running, synced calendar events become available as reporting data in the Teramind Dashboard. You can build your own widgets and dashboards with the new Offline Meetings data source. Its measures, dimensions, and filters combine freely with other data sources you already track. A pre-built dashboard is planned for a later release.

Creating Your Own Dashboard Using the Offline Meeting Data

Setting up the integration adds a new data source, Offline Meetings, to the dashboard widget editor (alongside the existing Online Meetings data source). Nothing in your existing dashboards changes: the meeting data becomes available when you add this data source to a widget.

New to Custom Widgets?

This section assumes basic familiarity with the widget editor. See Adding a Custom Widget in the Dashboards guide first, then return here for the meeting-specific measures, dimensions, and examples.

Available Measures:

Measure

What It Counts

Count

All synced calendar events

Time

The total scheduled duration of the events

min(Time)

The shortest event duration in the group

max(Time)

The longest event duration in the group

avg(Time)

The average event duration in the group

Available Dimensions/Columns:

Dimension/Column

What It Contains

Standard dimensions

Employee, Computer, Department, Position, Agent Groups, Computer Groups, Agent/Computer Groups, Task, Office, Office By Geolocation, Office By Network, and time buckets (Timestamp, Hour, Date, Day, Day of week, Week, Month), etc. Note that available dimensions depend on the widget type (for example, charts versus grids).

Title

(Grid widgets only)

The calendar event's subject

External Id

The event's identifier in Microsoft 365

Event Id

The unique identifier of the calendar event

Master Event Id

The identifier of the recurring series the event belongs to

User Response

The employee's response to the invite (accepted / declined / …)

Is Organizer

Whether the employee organized the meeting

Participants

(Grid widgets only)

The meeting's participants, as a single flattened column

Participants Agent Ids

The agent IDs of the meeting's participants

Participants Names

The names of the meeting's participants

Participants Emails

The email addresses of the meeting's participants

Participants Email Domains

The email domains of the meeting's participants

Combining with Other Data Sources:

A widget can use multiple data sources at once; select them together in the widget's Data Source field. This lets you build measures and charts that put meeting time in context, as the examples below show.

One thing to know when combining: Offline Meeting time is its own quantity; it is not included in Total work time or any productivity measure, so the two kinds of measures always appear as separate series/columns.

Example 1: "Avg Hours" Trend Chart

A line chart widget comparing daily computer activity with offline meeting time per employee:

Here are the widget settings you can use to recreate the chart:

Setting

Value

Type

Line

Data Source

Apps & Web + Offline meetings

Dimension 1

Date

Measures

avg(Applications & Webpages: Active time), avg(Productive Time), avg(Offline Meetings: Time)*

The result plots three daily series together (active time, productive time, and offline meeting time), so you can see whether meeting-heavy days coincide with dips in computer activity, or track how meeting load trends week over week.

*When a widget uses multiple data sources, measures render with their data-source prefix to keep them distinct, e.g. "Offline Meetings: Time" instead of just "Time".

Example 2: "Meeting Time Breakdown" Grid

A per-employee grid widget that puts offline meeting data with app & web and worktime data sources to give a complete breakdown of offline meeting time, productive/unproductive time, work time, etc.:

Here are the widget settings you can use to recreate the grid:

Setting

Value

Type

Grid

Data Source

Apps & Web + Work time + Offline meetings

Row group

Employee

Columns

Productive time, Unproductive Time, Unclassified Time, Total work time, Offline Meetings: Time

Once the grid widget is created, you can add filters, configure the rows and columns, and create groups to suit your needs. In the example above, rows are grouped by the Employee column. For more information, see Editing/Managing Widgets in the User Guide.

Note that Offline Meetings: Time is a separate measure; it is not included in Total work time or any productivity column. An employee who spent a day entirely in off-site meetings will legitimately show 00:00:00 for the computer-based columns next to their meeting hours, as in the example above.

Removing the Integration

Removing the Integration from Teramind

Click the Trash Can icon under the Actions column on the System > Integrations page. A confirmation dialog appears; on confirm, the integration is removed from Teramind.

Removing the integration stops all calendar syncing and deletes the integration's configuration (connection, detection rules, and scoped Entra groups). This action cannot be undone. Calendar data already synced into Teramind, including the Offline Meetings reporting data, is retained. The consent granted in your Microsoft tenant is not affected; to revoke it from Azure, see below.

Uninstalling the App from Azure

1. Sign in to the Microsoft Entra admin center (entra.microsoft.com).

2. Go to Entra ID > Enterprise applications.

3. Find the Teramind Outlook Calendar application and open it.

4. Select Manage > Properties from the left panel.

5. Click the Delete button to remove the app.

This revokes Teramind's access to your tenant's calendars. You can achieve the same from Enterprise applications > Teramind app > Permissions > Revoke if you prefer to keep the app registration.

For more information, see Microsoft guide: Delete an enterprise application.

Troubleshooting

Consent fails or the Accept button is missing

It's shown on the Microsoft sign-in / consent page during Step 2. To fix it, you must sign in as a Global Administrator or Privileged Role Administrator; Application Administrator and Cloud Application Administrator roles cannot consent Microsoft Graph application permissions.

Connection fails / "not configured" error

It's shown on the System > Integrations page when connecting. It means the integration service isn't enabled on your instance. Contact Teramind Support.

"Add at least one group" error message

It's shown on the Microsoft Outlook Calendar settings page when you click Save & Launch in Step 3. Mailbox Scope is mandatory; paste at least one valid Entra group Object ID (GUID format).

An employee's calendar isn't syncing

No events appear for them on the Offline Meeting widgets. Confirm they are a member (directly or through a nested group) of one of the configured Entra groups, and remember membership changes apply on the next sync. Only Exchange Online / hybrid mailboxes are reachable.

A meeting is missing from the widgets

Changes to a synced event (for example, a meeting is declined or cancelled) are picked up on the next sync for events up to 3 days in the past. Also check the detection rules in Step 3. Meetings under 15 minutes, all-day events, and cancelled events never count.

Data looks stale

Dashboard widgets don't show the latest meetings. Calendar sync runs every 4 hours, but received data only appears in dashboards after the next BI processing cycle, so new events can take longer than 4 hours to show up. Check the Last sync column under System > Integrations to confirm data is being received.

Did this answer your question?