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
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.














