---
title: Google Meet
---

# Google Meet

## What it is

A built-in integration that pulls your **Google Meet meeting history** into Omniscio: conference records, participant rosters, cloud recordings, and speaker-attributed transcripts. It syncs automatically in the background (every 15 minutes) and shows meetings in a dedicated sidebar panel, so you can browse past meetings, read who attended, and review what was said without leaving Omniscio.

This integration uses the **Google Meet REST API v2** (GA 2025) and requires a **Google Workspace Business Standard** (or higher) account. Consumer `@gmail.com` accounts cannot access the Meet conference records API. The integration piggybacks on Omniscio's existing Google sign-in; there is no separate authentication flow for Meet.

**In-development, off by default.** Enable it in Settings (Lab toggle or `googleMeetEnabled` setting). Once enabled, it appears as a sidebar entry under the Communication group with a blue video-camera icon.

## Where to find it

### How to use it

### Connecting

Google Meet shares the same Google account connection as Gmail, Calendar, and other Google features. If you have already connected your Google account in **Settings > Connections > Google**, Meet is ready; you just need to enable it.

If you connected Google **before** the Meet scope was added, you will need to reconnect (disconnect and reconnect in Settings > Connections > Google) so the OAuth consent screen includes the new `meetings.space.readonly` scope. The Meet panel's Settings tab shows your connection and scope status.

### Browsing meetings

Once enabled and synced, the **Meetings** tab shows your recent conference records sorted newest-first. Each row shows the meeting title (or a default label), date/time, participant count, and badges for recordings and transcripts when available. Click a meeting to open its detail view.

### Meeting detail

The detail view shows:

- **Participants** tab: the full attendee roster with display names and join/leave times, fetched live from the Google Meet API when you open the detail.
- **Transcript** tab (when available): speaker-attributed text segments in chronological order. Each entry shows the speaker name, the text, and timestamps. Transcripts are fetched live from the API.
- **Recordings** tab (when available): recording metadata with a link to open the recording in Google Drive.

### Syncing

The background sync runs every 15 minutes automatically. You can also trigger a manual sync from the Settings tab. The sync fetches conference records from the last 90 days; older records are pruned automatically.

The sync self-gates: it only runs when (1) the feature is enabled, (2) a Google account is connected, (3) the device is online, and (4) the Meet scope is present in the OAuth grant. If any condition is unmet, the tick silently no-ops.

## How it behaves

### How it works

**Architecture.** The integration follows the standard Omniscio integration pattern:

- **Manifest** (`src/shared/integrations/google-meet.ts`): declares the integration id (`google-meet`), display name, virtual project sentinel, parent sidebar group (`communication`), and push channels.
- **API client** (`src/main/services/google/google-meet-client.ts`): a thin, stateless wrapper around the Google Meet REST API v2 at `https://meet.googleapis.com/v2/`. All responses are Zod-validated. Handles 429 rate limits with exponential backoff + jitter (3 retries, base 1s, max 30s) and surfaces 403 errors as typed `GoogleMeetApiError` for graceful degradation when the account lacks Workspace Business Standard.
- **Sync service** (`src/main/services/google/google-meet-sync.ts`): a `createRegisteredService` poller on a 15-minute interval. Each tick fetches conference records (paginated), enriches each with participant count and recording/transcript presence, and upserts into the local SQLite table. Dead Google grants and 403 errors trigger a 1-hour pause to avoid hammering. Emits a `google-meet:sync-complete` push event so the UI reloads.
- **Database**: one table (`google_meet_conferences`) stores synced conference metadata with indexes on `start_time` and `is_deleted`. Queries in `src/main/db/queries-google-meet.ts` follow the codebase conventions (soft delete, ISO timestamps bound in JS, `?` placeholders).
- **IPC handlers** (`src/main/ipc/google-meet-handlers.ts`): seven channels for list, detail, participants, transcript, recordings, manual sync, and status. All handlers use `wrapHandler()` with Zod input validation and rate limiting. List and detail are local DB reads; participants, transcript, and recordings are live API calls (they aren't cached locally). Humanized error messages via `friendlyGoogleMeetError()`.
- **Frontend** (`src/renderer/src/features/google-meet/`): a Zustand store drives the UI. The main panel has two tabs (Meetings, Settings) via `SegmentedControl`. Meeting list uses `ListItem` rows; detail view shows participants, transcript, and recordings as sub-tabs.

**Auth.** Uses the shared Google OAuth sign-in (`google-auth-service.ts`). The `meetings.space.readonly` scope is added to the existing `OAUTH_SCOPES` array. No separate auth button; the Google Account Card in Settings is the single connection point (Google Account Connection contract I1). The API token is obtained per-call via `getAuthClient().getAccessToken()` and never leaves the main process.

**Feature gating.** Registered in `UNRELEASED_FEATURES` with status `in-development` and setting key `googleMeetEnabled`. The sidebar entry is gated via `UNRELEASED_PROJECT_GATES` in `project-visibility.ts`. Flip status to `shipped` to release.

**Data retention.** 90-day rolling window. The sync service hard-deletes records whose `start_time` is older than 90 days. Individual records support soft delete (`is_deleted = 1`) for user-initiated removal.

### Limitations

- **Workspace Business Standard required.** The Google Meet REST API v2 conference records endpoint requires a Google Workspace Business Standard, Business Plus, Enterprise, or Education edition. Consumer Gmail accounts and Workspace Business Starter accounts get a 403 error. The integration detects this and shows a clear message.
- **No meeting creation.** This integration is read-only; it pulls meeting history but does not create or schedule meetings.
- **Transcript availability.** Transcripts are only available for meetings where cloud transcription was enabled. The Google Meet host must have turned on transcription during the meeting.
- **Recording availability.** Cloud recordings require the host to have started recording. Recordings are stored in the host's Google Drive; the integration shows metadata and a Drive link but does not download the recording.
- **Sub-resource calls are live.** Participants, transcripts, and recordings are fetched live from the Google Meet API when you open a meeting's detail view (not cached locally). This means they require an active internet connection and count against your Google API quota.

## For agents

### CLI parity

All seven IPC channels are blocked in the WebSocket bridge (`BLOCKED_CHANNELS` in `web-access-ws-channels.ts`) for the initial release. No CLI routes are exposed. Conference data is desktop-only for now.

## Related

- [gmail-integration.md](gmail-integration.md) — the Gmail integration, which shares the same Google account connection
- [google-integrations.md](google-integrations.md) — the Google Calendar / Drive / Sheets integrations, which also share the same Google auth and follow a similar sync-poller pattern
- [fathom-mcp.md](fathom-mcp.md) — Fathom meeting transcripts via MCP (a separate, complementary meeting-data source)
