Skip to content

Google Meet Connection

The Google Meet connection lets agents and employees pull transcripts from past meetings and locate meetings on your Google Calendar by title, attendee, or time. Use it to ask things like “summarize yesterday’s meeting with John” or set up an employee that automatically reads the transcript of each weekly team meeting and reports back what mattered.

This connection is personal — only the user who created it can use it. Workspace mates do not see your meetings even when chatting with the same employee, and scheduled jobs run only for the connecting user. The same Google account that connects sees only the meetings they attended or hosted; agents cannot read meetings the connector wasn’t part of.

  • A Google account with access to Google Meet and Google Calendar.
  • For transcripts: Google Workspace Business Standard or higher, AND the meeting host must enable transcription on each meeting. Consumer Gmail accounts and Workspace Business Starter accounts will connect successfully but see empty transcript lists.
  • For recordings: Google Workspace Business Plus or Enterprise, with recording enabled on the meeting.

OpsTower never enables transcription or recording on your behalf — that is a per-meeting choice made by the host inside the Meet UI or via Workspace admin policy.

Connecting Google Meet asks for these read-only Google OAuth scopes:

  • meetings.space.readonly — read meeting spaces, past conference records, transcripts, and recordings the connected user attended or hosted.
  • calendar.readonly — read events on the user’s primary calendar (used to find meetings by title and attendee, and to resolve recurring meeting series).
  • userinfo.email, userinfo.profile, openid — the connected Google account’s email and display name, used to label the integration in OpsTower.

No write scopes are requested in v1. The connection cannot create meetings, modify your calendar, start or stop transcription, or share any data outside your OpsTower account.

  1. In OpsTower, navigate to Connections in the sidebar.
  2. Click Add Connection and select Productivity Apps, then Google Meet.
  3. A Google consent popup opens. Sign in with the account whose meetings you want OpsTower to read, and approve the requested scopes.
  4. On success, the popup closes and the integration appears in your productivity connections list, labeled with your Google account email.

Re-running the Connect flow (via the Reconnect button on the connection settings page) refreshes the underlying OAuth grant — useful if the refresh token was revoked or if you want to switch the connected Google account.

Once connected and enabled on an agent or employee, the agent can:

  • Find a meeting (meet_find_meeting) — search your Google Calendar for events that have a Meet link, filtered by free-text query (matched loosely across event title, description, location, and attendee names) and a time window. The primary entry point for natural-language meeting lookup like “the meeting with John yesterday” or “the weekly team sync.” Returns title, time window with timezone, attendees, the calendar event ID, the Meet space code, and whether a past instance with transcript-eligible data exists.
  • List recent meetings (meet_list_recent_meetings) — raw past meetings the user attended in a time window, joined back to Calendar for titles. Use this for “what meetings did I attend yesterday” when the user isn’t searching by name.
  • Get a transcript (meet_get_transcript) — the full transcript of a specific past meeting, formatted as **Speaker** (mm:ss): text. Accepts either the conference record ID (from meet_list_recent_meetings) or the calendar event ID (from meet_find_meeting) — when given a calendar event, automatically resolves to that event’s most recent past conference. Long transcripts can be redirected to a short-lived R2 download URL via getAsFile: true (see below).
  • Get meeting details (meet_get_meeting_details) — cheap metadata probe before drilling into a transcript: start, end, duration, participant list with join/leave windows, transcript availability, recording availability, and the recording’s Drive file URL when present.

A typical recall flow:

  1. Ask the agent “summarize what we covered in yesterday’s sync with John.” The agent calls meet_find_meeting({ query: "John", since: "<yesterday>" }) and gets a candidate set.
  2. If multiple matches, the agent asks you to disambiguate; otherwise it calls meet_get_transcript({ calendar_event_id: ... }).
  3. The transcript renders as markdown and the agent summarizes.

A typical recurring-digest flow (works particularly well with employees):

  1. Tell an employee “keep me informed about our weekly team sync.”
  2. The employee calls meet_find_meeting({ query: "weekly team" }), finds the recurring Calendar event, and parses the recurrence rule.
  3. The employee confirms the schedule with you (“Mondays at 10, I’ll check 30 minutes after — sound right?”) and uses schedule_recurring_task to wake itself ~30 minutes after each occurrence ends.
  4. On each wake, the employee pulls the transcript with meet_get_transcript and surfaces what’s notable — decisions, action items, follow-ups assigned to you.

Hour-long meetings can produce transcripts well past the budget the agent should hold in working context. meet_get_transcript accepts an optional getAsFile: boolean (default false):

  • false (default) — the transcript is rendered as compact markdown (**Speaker** (mm:ss): text), truncated to about 8,000 characters. When truncation happens, the response includes a hint telling the agent to re-call with getAsFile: true.
  • true — the full transcript is written to a temporary R2 object and returned as a short-lived (15 minute) public URL plus size and entry count. The agent then fetches the URL with a code-execute or HTTP-fetch tool to process the full text deliberately — searching for specific topics, extracting decisions, etc.

Safety bounds:

  • Hard 25 MB ceiling on the saved file. Transcripts that exceed it return an error suggesting a smaller max_chars.
  • URLs expire in 15 minutes. Re-call with getAsFile: true if a URL expires before the agent finishes.
  • Files are written to OpsTower’s internal R2 bucket under meet-cache/{integrationId}/… and aren’t visible to anyone outside your account.

The query parameter on meet_find_meeting uses Google Calendar’s free-text search, which matches across event title, description, location, and attendee names/emails. It’s a candidate-set query, not an exact match — “John” might also match the word “John” in a meeting description or a location named after John Street. When multiple matches come back, the agent should ask you to disambiguate before drilling into a transcript.

This integration ships the four read tools listed above. The following Meet/Calendar surfaces are deliberately not in v1:

  • Write capabilities — creating meetings, editing calendar events, scheduling new transcripts. Read-only for v1.
  • Recordings text extractionmeet_get_meeting_details returns the Drive file URL for any recording, but the integration does not transcribe video/audio. Use the Drive connection (with drive_read_file) if Google has produced a Doc-format export.
  • Push notifications — the Google Workspace Events API can push “transcript ready” notifications. v1 relies on schedule_recurring_task polling instead (cron 30 minutes after a recurring meeting ends), which avoids requiring a Pub/Sub setup.
  • Shared (account-scope) connections — the integration is user-scope only. A team that wants a single shared connection should set up a dedicated notetaker Google account (e.g. meetings@yourdomain.com) and connect that account as a personal integration.
  • No transcript found / transcript_available: false: The most common cause is tier or host config — transcripts require Workspace Business Standard or higher AND the host must enable transcription on each meeting. Confirm the meeting actually shows transcripts in the Google Meet UI before debugging the OpsTower side. New transcripts can also take a minute or two after the meeting ends before they become available via the API.
  • Calendar q matches the wrong meeting: Calendar’s free-text search is loose. Add since and until bounds to narrow by time, or include a distinctive phrase from the meeting title.
  • Connection expired / “Please reconnect”: Google revokes refresh tokens after long periods of inactivity, password resets, or admin-driven revocations. Open the connection’s settings page and click Reconnect to issue a fresh grant.
  • Empty meet_list_recent_meetings despite known meetings: Check the time window (since/until). Conference records may also be retained for a limited window depending on Workspace tier.
  • Consumer Gmail user sees no transcripts: Transcript artifacts are a paid Workspace feature; the integration will work for meeting metadata (Calendar, attendees, start/end) but the transcripts list will be empty.