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.
Prerequisites
Section titled “Prerequisites”- 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.
What Is Granted
Section titled “What Is Granted”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.
Setting Up the Connection in OpsTower
Section titled “Setting Up the Connection in OpsTower”- In OpsTower, navigate to Connections in the sidebar.
- Click Add Connection and select Productivity Apps, then Google Meet.
- A Google consent popup opens. Sign in with the account whose meetings you want OpsTower to read, and approve the requested scopes.
- 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.
What Agents Can Do with Google Meet
Section titled “What Agents Can Do with Google Meet”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 (frommeet_list_recent_meetings) or the calendar event ID (frommeet_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 viagetAsFile: 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:
- 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. - If multiple matches, the agent asks you to disambiguate; otherwise it calls
meet_get_transcript({ calendar_event_id: ... }). - The transcript renders as markdown and the agent summarizes.
A typical recurring-digest flow (works particularly well with employees):
- Tell an employee “keep me informed about our weekly team sync.”
- The employee calls
meet_find_meeting({ query: "weekly team" }), finds the recurring Calendar event, and parses the recurrence rule. - The employee confirms the schedule with you (“Mondays at 10, I’ll check 30 minutes after — sound right?”) and uses
schedule_recurring_taskto wake itself ~30 minutes after each occurrence ends. - On each wake, the employee pulls the transcript with
meet_get_transcriptand surfaces what’s notable — decisions, action items, follow-ups assigned to you.
Long Transcripts — getAsFile
Section titled “Long Transcripts — getAsFile”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 withgetAsFile: 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: trueif 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.
Calendar Search Caveat
Section titled “Calendar Search Caveat”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.
Out of Scope (Today)
Section titled “Out of Scope (Today)”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 extraction —
meet_get_meeting_detailsreturns the Drive file URL for any recording, but the integration does not transcribe video/audio. Use the Drive connection (withdrive_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_taskpolling 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.
Troubleshooting
Section titled “Troubleshooting”- 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
qmatches the wrong meeting: Calendar’s free-text search is loose. Addsinceanduntilbounds 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_meetingsdespite 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.