> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Meet

> Connect Google Meet to Rootly to create an incident meeting automatically and capture transcripts and summaries with Meeting Scribe.

Rootly's Google Meet integration eliminates the friction of setting up incident calls. When an incident is declared, Rootly automatically creates a Google Meet room, sends calendar invites to the right people, and posts the link to your Slack channel.

The integration supports both personal OAuth connections for quick setup and Google Cloud Service Accounts for production environments where you need domain-wide access and stability.

<Frame>
  <img alt="Google Meet integration in action" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/image-1.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=9f91a144d625cd265df744bbc5f0d548" width="876" height="71" data-path="images/integrations/google-meet/image-1.png" />
</Frame>

## Features

<CardGroup cols={2}>
  <Card title="Automatic Meeting Creation" icon="video">
    Instantly create a Google Meet room when an incident is declared, no manual setup required.
  </Card>

  <Card title="Slack Integration" icon="slack">
    The Meet link is automatically posted to your incident Slack channel so responders can join immediately.
  </Card>

  <Card title="Calendar Invites" icon="calendar">
    Send calendar invites to incident responders so everyone has the meeting on their schedule.
  </Card>

  <Card title="AI Meeting Capture" icon="microchip-ai">
    Enable automatic recording, transcription, and AI-generated summaries of incident calls.
  </Card>
</CardGroup>

## How It Works

<Steps>
  <Step title="Incident Triggers Workflow">
    When an incident is created, your configured workflows run automatically based on severity, type, or team ownership.
  </Step>

  <Step title="Google Meet Room Created">
    A meeting is generated with the incident details added to the title and description.
  </Step>

  <Step title="Calendar Invites Sent">
    Everyone who needs to join gets a calendar invite automatically.
  </Step>

  <Step title="Links Shared Everywhere">
    The Meet link is posted to your Slack channel, status pages, and other configured tools.
  </Step>
</Steps>

## Meeting Scribe on Google Meet

The Google Meet integration powers **[Rootly AI Meeting Scribe](/ai/meeting-scribe)** on your Google Meet incident bridges — automatic recording, live transcription, PII-redacted transcripts, and Rootly AI meeting summaries fed straight into the incident.

To enable:

1. Go to **Integrations → Google Meet** in Rootly.
2. Toggle on **Meeting transcript and summary**.
3. Connect via a **Google Cloud Service Account** (recommended for production). Personal-OAuth connections work for testing but tie the scribe to one user — when that user leaves or their token expires, scribe stops joining meetings.
4. Verify your Google Workspace **Meet safety** admin settings. Restrictive host-management policies can silently block the scribe from being admitted. See troubleshooting below.

<Warning>
  Google Meet without a service account is the number-one reason customers report "the scribe won't join our calls." Set up the service account before rolling it out broadly.
</Warning>

Running into issues? See **Google Meet Meeting Scribe Troubleshooting** for admission failures, service-account setup, and admin-console settings.

***

## Before You Begin

<Warning>
  **Before you start, you'll need:**

  * A Rootly account with Admin permissions to manage integrations
  * **For OAuth:** A Google account with Google Meet enabled
  * **For Service Account:** Access to Google Cloud Console and Google Admin Console
</Warning>

<Note>
  Rootly recommends integrating with a **service account** rather than a personal account. This ensures the integration continues to work even if a user leaves your organization.
</Note>

## Installation

You can use OAuth for quick setup with a personal account, or a Google Cloud Service Account for production environments that need domain-wide access. After completing these steps, you can configure workflows to automatically create Google Meet rooms when incidents are declared.

### OAuth Setup

Best for quick testing or evaluating Rootly before a full organizational rollout.

<Steps>
  <Step title="Open the Integrations Catalog">
    Navigate to **Configuration → Integrations** in the Rootly sidebar.

    <Frame>
      <img alt="Rootly sidebar showing Configuration and Integrations menu" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-1.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=6cd43db5b64cd6e8cd8f14074e67f278" width="331" height="509" data-path="images/integrations/google-meet/installation/image-1.png" />
    </Frame>
  </Step>

  <Step title="Find and Set Up Google Meet">
    Search for **Google Meet** and click **Setup**.

    <Frame>
      <img alt="Google Meet in the integrations catalog" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-3.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=0805a6ddc2ee3483f881ae7d0bd5aa8b" width="506" height="385" data-path="images/integrations/google-meet/installation/image-3.png" />
    </Frame>
  </Step>

  <Step title="Choose OAuth and Select Your Google Account">
    Select **OAuth** as your connection method, then choose the Google account you want to connect.

    <Frame>
      <img alt="Google account selection screen" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-4.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=713cac4084e0fa89185aa87486f0ec7a" width="895" height="448" data-path="images/integrations/google-meet/installation/image-4.png" />
    </Frame>
  </Step>

  <Step title="Grant Permissions and Complete Setup">
    Approve the requested permissions. You'll be redirected back to Rootly once the connection is established.

    <Frame>
      <img alt="Google OAuth permission request" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-5.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=d10997b5aa20d8e06e09f7506b8cd055" width="937" height="510" data-path="images/integrations/google-meet/installation/image-5.png" />
    </Frame>
  </Step>
</Steps>

<Check>Your Google Meet account is now connected. Head to the Workflows page to configure automated meeting creation.</Check>

### Service Account Setup

Use a [Google Cloud Service Account](https://cloud.google.com/iam/docs/service-account-overview) if you're connecting on behalf of your entire organization. This method ensures the integration keeps running even if a user leaves the company.

<Steps>
  <Step title="Create a Service Account in Google Cloud Console">
    In Google Cloud Console, navigate to **IAM & Admin → Service Accounts** and click **Create Service Account**.

    <Frame>
      <img alt="Google Cloud Console IAM and Admin menu" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-6.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=11839d309a70c409e3b95ed09a6a813e" width="1324" height="629" data-path="images/integrations/google-meet/installation/image-6.png" />
    </Frame>

    <Frame>
      <img alt="Service Accounts list in Google Cloud Console" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-7.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=a249b0f3d9ee5bbc4e5dfffda7760519" width="1365" height="632" data-path="images/integrations/google-meet/installation/image-7.png" />
    </Frame>
  </Step>

  <Step title="Fill In Service Account Details">
    Enter the service account name and ID. Click **Done** to create the account, then click on the new account's email to open its details.

    <Frame>
      <img alt="Create service account form" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-8.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=325764654194d06646c1b9bfc3f86f32" width="1365" height="629" data-path="images/integrations/google-meet/installation/image-8.png" />
    </Frame>

    <Frame>
      <img alt="Service account details page" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-9.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=9f2a5847d52719879842d647303ae2b8" width="589" height="554" data-path="images/integrations/google-meet/installation/image-9.png" />
    </Frame>

    <Frame>
      <img alt="Service account email selected to open details" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-10.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=111442bc386c27766091b25292d59234" width="1363" height="631" data-path="images/integrations/google-meet/installation/image-10.png" />
    </Frame>
  </Step>

  <Step title="Generate a JSON Key">
    Navigate to the **Keys** tab and click **Add Key → Create New Key**. Select **JSON** as the key type and click **Create**. A `.json` file will be downloaded — keep this safe.

    <Frame>
      <img alt="Service account Keys tab" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-11.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=2fd1855342a54599c1e82c55599bc594" width="1365" height="633" data-path="images/integrations/google-meet/installation/image-11.png" />
    </Frame>

    <Frame>
      <img alt="Create new key dialog with JSON selected" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-12.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=7db2e5e0d7a0de79afc63396fe5ec12e" width="1365" height="632" data-path="images/integrations/google-meet/installation/image-12.png" />
    </Frame>
  </Step>

  <Step title="Upload the JSON Key to Rootly">
    Return to Rootly's Google Meet setup screen and upload the `.json` file you just downloaded.

    <Frame>
      <img alt="JSON key upload screen in Rootly" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-13.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=78fa489d0dfa45978bbeea0c2971a325" width="896" height="512" data-path="images/integrations/google-meet/installation/image-13.png" />
    </Frame>

    In **Acts as user**, enter the email address of a real, active user in the Google Workspace domain your domain-wide delegation scopes cover. The service account impersonates this user when it creates Meet calls. This field is required for service account connections, and is not used by OAuth connections.

    Use a dedicated, non-personal workspace account here (for example `rootly-meet@yourcompany.com`) rather than an individual's account, and exclude it from offboarding so it isn't deactivated when someone leaves.

    Once uploaded, you'll see a confirmation that your Google Meet account has been connected.

    <Frame>
      <img alt="Google Meet integration connected successfully" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/installation/image-14.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=05be36cd48235bec3599a9d31b1551f0" width="597" height="512" data-path="images/integrations/google-meet/installation/image-14.png" />
    </Frame>

    <Warning>
      Domain-wide delegation of authority has not yet been configured. Without granting the necessary domain-wide access, API requests will fail with a **403 Forbidden** error.
    </Warning>
  </Step>

  <Step title="Configure Domain-Wide Delegation">
    In [Google Admin Console](https://admin.google.com), go to **Security → API Controls → Domain-wide Delegation**. Select your service account and add a new API client.

    Enter your service account's **Client ID** (found in GCP Console under the service account's details) and add the following OAuth scopes:

    ```text theme={null}
    https://www.googleapis.com/auth/meetings.space.created
    https://www.googleapis.com/auth/calendar.events
    https://www.googleapis.com/auth/calendar
    ```

    <Info>
      The calendar scopes are required for creating calendar events with Meet links attached.
    </Info>
  </Step>

  <Step title="Authorize Domain-Wide Delegation">
    Click **Authorize** to save the configuration. Changes may take 10–15 minutes to propagate through Google's systems.
  </Step>
</Steps>

<Check>Your Google Meet integration is now fully configured. Head to the Workflows page to set up automated meeting creation.</Check>

### Why Production Should Use a Service Account

The single biggest lever for reliable Google Meet scribe behavior is connecting via a **Google Cloud Service Account** rather than personal OAuth.

| Connection type     | Reliability                                        | When to use                  |
| ------------------- | -------------------------------------------------- | ---------------------------- |
| **Service account** | High — domain-wide, stable across staff changes    | Production incident response |
| **Personal OAuth**  | Fragile — tied to one user's token and permissions | Quick testing only           |

<Note>
  The **Acts as user** account still has to stay active. A service account survives staff turnover because the credentials, the delegation grant and the scopes all stay valid, but if the impersonated user is deactivated or deleted, meeting creation fails until you point **Acts as user** at another active user. That's a one-field change in Rootly, with no key re-upload and no new delegation grant in the Google Admin Console.
</Note>

**Fix if you're on personal OAuth:** Reconnect the integration via a service account. See Google Meet → Installation for the setup flow.

***

## Creating the Incident Meeting

You can automate Google Meet room creation in two ways:

<CardGroup cols={2}>
  <Card title="Auto-Create Incident Call" icon="bolt">
    Automatically create a Google Meet room at incident start using built-in settings — no workflow required.
  </Card>

  <Card title="Custom Workflow" icon="bars-staggered">
    Use workflows for conditional or advanced meeting automation with full control over triggers and actions.
  </Card>
</CardGroup>

### Option 1: Auto-Create Incident Call

The Auto-Create Incident Call panel lets you automatically generate a Google Meet room whenever an incident begins, without building a workflow from scratch.

<Frame>
  <img alt="Auto-Create Incident Call panel in Rootly" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-1.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=bcf277fca45a46bb777c9f3f7b1b4912" width="896" height="467" data-path="images/integrations/google-meet/workflows/image-1.png" />
</Frame>

It includes a full set of configuration options so you can control how the room is created, where it's shared, and what Google Meet features are enabled.

These settings let you control exactly how Google Meet calls behave during incidents.

<AccordionGroup>
  <Accordion title="Create Google Meet Call on Incident Start" icon="video">
    Automatically spin up a meeting the moment an incident opens.

    <Frame>
      <img alt="Toggle for creating Google Meet call on incident start" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-2.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=d76e0f4ada40fbccc5b2979f106472e1" width="873" height="75" data-path="images/integrations/google-meet/workflows/image-2.png" />
    </Frame>
  </Accordion>

  <Accordion title="Bookmark Google Meet Call in Slack" icon="bookmark">
    Add the meeting link as a bookmark in the incident's Slack channel.

    <Frame>
      <img alt="Toggle for bookmarking Google Meet call in Slack" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-3.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=4e18ff603ac0aa9b33145faf231769e6" width="263" height="107" data-path="images/integrations/google-meet/workflows/image-3.png" />
    </Frame>
  </Accordion>

  <Accordion title="Notify Slack Channels" icon="bell">
    Announce new incident calls in specific Slack channels.

    <Frame>
      <img alt="Slack channel notification settings for Google Meet" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-4.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=8ff78cd164313eccd469277a0bba62fe" width="876" height="121" data-path="images/integrations/google-meet/workflows/image-4.png" />
    </Frame>
  </Accordion>

  <Accordion title="Meeting Transcript & Summary" icon="microchip-ai">
    Enable AI-powered recording, transcription, and summary generation.

    <Frame>
      <img alt="Meeting transcript and summary settings" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-5.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=3d668d2820c27d7f7cb9ca404e7e729c" width="875" height="97" data-path="images/integrations/google-meet/workflows/image-5.png" />
    </Frame>
  </Accordion>
</AccordionGroup>

<Note>
  Use Auto-Create when you want instant, zero-configuration Google Meet automation. Build a custom workflow when you need conditions, multiple actions, or advanced routing logic.
</Note>

### Option 2: Creating a Custom Workflow

For teams that need conditional logic — such as only creating calls for SEV-1 incidents or specific teams — a custom workflow gives you full control.

<Steps>
  <Step title="Open Workflows">
    Go to **Rootly → Workflows → Create Workflow**.

    <Frame>
      <img alt="Rootly workflows page" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-15.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=0a0003e6fd835db0e8c2cab782aff83d" width="894" height="203" data-path="images/integrations/google-meet/workflows/image-15.png" />
    </Frame>

    <Frame>
      <img alt="Create workflow button" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-16.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=0e1f9b01e519157d1b164fd5a549cd0f" width="1165" height="578" data-path="images/integrations/google-meet/workflows/image-16.png" />
    </Frame>
  </Step>

  <Step title="Choose Workflow Type">
    Select your workflow type — typically **Incident** for meeting automation.

    <Frame>
      <img alt="Workflow type selection showing Incident, Retrospective, and Pulse options" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-17.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=d19f4f851e6c9f68ceda17d3bddfd14a" width="1365" height="630" data-path="images/integrations/google-meet/workflows/image-17.png" />
    </Frame>
  </Step>

  <Step title="Configure Triggers">
    Triggers define when this workflow should run. Choose the event that should kick off your Google Meet room creation.

    <Frame>
      <img alt="Workflow trigger configuration options" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-trigger.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=f027a75ac7d53256caf8066c9b50f52c" width="628" height="316" data-path="images/integrations/google-meet/workflows/image-trigger.png" />
    </Frame>

    | Trigger                     | What It Does                                                   |
    | --------------------------- | -------------------------------------------------------------- |
    | Incident Created            | Creates a Google Meet room as soon as a new incident is opened |
    | Incident Updated            | Fires when fields like severity or status change               |
    | Incident Status Changed     | Starts a call when the incident moves into a specific status   |
    | Incident Commander Assigned | Creates a meeting once someone takes ownership                 |
    | Manual Trigger              | Run the workflow manually from the incident UI                 |
  </Step>

  <Step title="Add Conditions (Optional)">
    Conditions control when the workflow should or shouldn't run after being triggered. Use conditions to narrow the scope of your automation.

    <Frame>
      <img alt="Workflow conditions panel showing filter options" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-condition.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=90e3764b0bec792204adc32a4d808eb2" width="624" height="332" data-path="images/integrations/google-meet/workflows/image-condition.png" />
    </Frame>

    Examples:

    * **Severity-based** — Only create calls for SEV-1 or SEV-2 incidents
    * **Team or service filters** — Only for incidents impacting specific teams
    * **Incident type filtering** — Only when the incident kind is set to Incident (not Maintenance)
  </Step>

  <Step title="Add Google Meet Action">
    Click **Add Action → Google Meet → Create Room**. Configure the action settings that appear.

    <Frame>
      <img alt="Add action button in workflow editor" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-18.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=0c8ed9ba452a9c23ed9300e538df83b2" width="677" height="221" data-path="images/integrations/google-meet/workflows/image-18.png" />
    </Frame>

    <Frame>
      <img alt="Google Meet Create room action in action picker" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-19.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=cb5628bf692c4faa64fcbd808a196a1d" width="584" height="386" data-path="images/integrations/google-meet/workflows/image-19.png" />
    </Frame>

    <Frame>
      <img alt="Google Meet action configuration with AI Meeting Capture option" src="https://mintcdn.com/rootly/T2xA2cmLYPMHeWF-/images/integrations/google-meet/workflows/image-20.png?fit=max&auto=format&n=T2xA2cmLYPMHeWF-&q=85&s=0d914ee995e46739b018b7e186d5047e" width="894" height="328" data-path="images/integrations/google-meet/workflows/image-20.png" />
    </Frame>

    Enable **AI Meeting Capture** to have Rootly AI automatically capture and summarize the meeting.
  </Step>

  <Step title="Save the Workflow">
    Click **Add**, give your workflow a descriptive name, and click **Create Workflow**.
  </Step>
</Steps>

### Variable Reference

Use these variables in workflow notifications, Slack messages, and calendar event templates.

#### Google Meet Variables

| Variable                      | Description                           | Available                |
| ----------------------------- | ------------------------------------- | ------------------------ |
| incident.google\_meeting\_url | The link to join the Google Meet room | After meeting is created |
| incident.google\_meeting\_id  | The unique ID of the Google Meet      | After meeting is created |

#### Incident Variables

| Variable                      | Description                                 |
| ----------------------------- | ------------------------------------------- |
| incident.title                | Incident title                              |
| incident.summary              | Incident summary or description             |
| incident.severity             | Severity level (for example, SEV1)          |
| incident.status               | Current incident status                     |
| incident.started\_at          | Timestamp when the incident started         |
| incident.creator.name         | Name of the person who created the incident |
| incident.creator.email        | Email of the incident creator               |
| incident.slack\_channel\_name | Name of the incident's Slack channel        |
| incident.url                  | Link to the incident in Rootly              |

<Tip>
  Use the [Liquid Variable Explorer](https://rootly.com/account/help/liquid-explorer) to test variables with real incident data before using them in production.
</Tip>

### Example Templates

<Tabs>
  <Tab title="Slack Notification">
    Include the Google Meet link in a Slack message automatically when an incident is created:

    ```liquid theme={null}
    Incident {{ incident.title }} started

    Join Google Meet: {{ incident.google_meeting_url }}
    Severity: {{ incident.severity }}

    Please confirm when you've joined.
    ```
  </Tab>

  <Tab title="Calendar Event">
    Use Google Meet variables to automatically populate calendar event details for your team:

    ```liquid theme={null}
    Title: Incident {{ incident.title }}
    Started: {{ incident.started_at | date: "%Y-%m-%d %H:%M" }}
    Join Google Meet: {{ incident.google_meeting_url }}
    Description: {{ incident.summary }}

    Please join the meeting on time.
    ```
  </Tab>
</Tabs>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Authentication Failed" icon="circle-exclamation">
    **Error:** "Failed to authenticate with Google"

    * Verify you're using the correct Google account
    * Check that your account has Google Meet enabled
    * For OAuth: Try incognito mode to avoid account conflicts
    * For Service Account: Verify the JSON key file is valid and not expired
  </Accordion>

  <Accordion title="403 Forbidden — Insufficient Permissions" icon="ban">
    **Error:** "API requests fail with 403 error"

    1. Verify domain-wide delegation is enabled in Google Admin Console
    2. Confirm all three OAuth scopes are added exactly as shown
    3. Check the Client ID matches your service account
    4. Ensure the subject email belongs to your domain
    5. Wait 10–15 minutes for Google to propagate changes
  </Accordion>

  <Accordion title="Service Account Key Invalid" icon="triangle-exclamation">
    **Error:** "Invalid JSON key file"

    * Ensure you downloaded the JSON (not P12) format
    * Check the file hasn't been modified or corrupted
    * Verify the service account still exists in GCP Console
    * Generate a new key if the current one is older than 90 days
  </Accordion>

  <Accordion title="Cannot Find Client ID" icon="circle-question">
    **Error:** "Where to find Client ID for domain delegation"

    1. Go to Google Cloud Console
    2. Select your project
    3. Navigate to **IAM & Admin → Service Accounts**
    4. Click on your service account
    5. Find **Unique ID** or **Client ID** in the details section
  </Accordion>

  <Accordion title="Integration Shows Connected But Doesn't Work" icon="plug-circle-exclamation">
    **Error:** "Setup complete but workflows fail"

    * For Service Account: check **Acts as user** first. An empty field surfaces as `Invalid request` while the integration continues to display as connected.
    * For Service Account: if **Acts as user** points at a user who has been deactivated or deleted, meeting creation also fails until you point it at another active user.
    * For Service Account: domain delegation may also be missing or incomplete
    * For OAuth: Re-authenticate and ensure all permissions were granted
    * Check that Google Meet is enabled in your Google Workspace
    * Verify the integration shows **Active** status in Rootly
  </Accordion>
</AccordionGroup>

### Meeting Scribe Will Not Join

Nearly every "the scribe didn't join our call" report traces back to one of a small set of causes. Work through them in this order.

#### The Bot Won't Join Google Meet Meetings

Walk through this list in order.

#### The integration is on personal OAuth (not a service account)

Personal-OAuth connections work but are tied to one user. If that user's token expired or they lost calendar permissions, the scribe stops being able to admit itself to calls.

**Fix:** Reconnect via a service account (see above).

#### The meeting URL wasn't created by Rootly

The scribe is scoped to the Google Meet room Rootly created for the incident. Ad-hoc `meet.google.com` links or personal meeting rooms won't be picked up.

**Fix:** Use the meeting link Rootly pinned at the top of the incident's Slack channel.

#### Google Workspace Meet safety settings block admission

This is the most common cause of "the bot says it joined but nobody can let it in."

Unless the scribe was pre-invited to the calendar event as an attendee (in which case Google typically skips the waiting room), it joins as an external participant and lands in the waiting room. When **Host management** is on in your Google Workspace Meet safety settings, only the meeting host and any pre-assigned co-hosts can see and admit people from the waiting room. Every other responder on the call — even responders in your own organization — sees nothing to admit. The scribe waits, nobody with permission notices, and it leaves at the 10-minute timeout.

<Warning>
  **Check who the host actually is.** Google treats the calendar event's organizer as the host, and Rootly-created events are organized by the account Rootly used to create the meeting, not by whoever declared the incident. That account depends on how you connected the integration: for service-account connections, it's the delegated **Acts as user** (per [Service Account Setup](#service-account-setup)); for OAuth connections, it's the connected OAuth user. Only that organizer account or a pre-assigned co-host can admit the scribe — so if neither the organizer nor a co-host is on the bridge, no one else can let it in. On OAuth connections the organizer may happen to also be a responder; on service-account connections it typically isn't. Either way, that's the account to check if you're chasing this from the Google side.
</Warning>

**Fix — pre-assign a co-host.** The organizer can designate co-hosts on the calendar event so more than one person can admit from the waiting room. This is only available in the Google Calendar UI, so it's a manual step per meeting rather than something you can automate.

**Fix — turn Host management off.** In the Google Admin console, go to **Menu → Apps → Google Workspace → Google Meet → Meet safety settings** and turn **Host management** off for the organizational unit **containing the organizer account** — the service account's **Acts as user**, or the OAuth-connected user, per the warning above. Applying it to responders' OU instead of the organizer's OU has no effect. Any participant can then admit from the waiting room.

<Warning>
  Turning Host management off does more than open up admission. It also removes the host's exclusive control over who can present, who can send chat messages, participant audio and video, muting all participants, ending the meeting for everyone, and assigning co-hosts. Weigh that against your meeting-security posture before changing it org-wide.
</Warning>

***

#### Waiting-room timeout (10 minutes)

If the scribe is stuck waiting for admission and no one lets it in, it leaves after **10 minutes**.

**Fix:** Reinvite from the **Meeting** tab and admit it promptly. Prevention: pre-assign a co-host or turn Host management off — see [Google Workspace Meet safety settings block admission](#google-workspace-meet-safety-settings-block-admission) above.

#### Nobody-joined timeout (5 minutes)

If the scribe enters the meeting but no responders join within **5 minutes**, it leaves.

**Fix:** Start the meeting on your side first, then reinvite the bot — or wait until responders are on the call before inviting it.

***

#### The Bot Joined but Transcript Is Missing

#### Post-meeting processing is still running

Transcripts and Rootly AI meeting summaries generate after the call ends. Give it 5–10 minutes.

#### Recording started but the call ended abruptly

If the meeting host ended the call while the scribe was still in an unstable state, some of the recording may not have made it to processing. Reinvite for future sessions of the same incident if the meeting resumes.

#### The bot recorded a "waiting room" clip and nothing else

The bot was never admitted to the meeting — the recording is only its own waiting-room view. See the "won't join" section above for the underlying cause.

***

## Uninstall

To remove the Google Meet integration:

1. Go to **Configuration → Integrations** and find **Google Meet**
2. Click the **Connected** button to reveal the disconnect option
3. Click **Disconnect**

<Frame>
  <img src="https://mintcdn.com/rootly/QMD-dNqeYW4BA9dg/images/integrations/common/uninstall-connected.png?fit=max&auto=format&n=QMD-dNqeYW4BA9dg&q=85&s=dbb790e2576c8969bba96bc26c95265f" alt="Click the Connected button to reveal the Disconnect option" width="319" height="188" data-path="images/integrations/common/uninstall-connected.png" />
</Frame>

<Warning>
  Disconnecting will prevent Rootly from creating new Google Meet rooms. Existing meetings and calendar events are not affected.
</Warning>

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title="Can I create multiple Google Meet rooms for a single incident?" icon="video">
    Each incident is associated with one Google Meet room by default. If you need additional rooms, you can create sub-incidents and configure workflows to create separate rooms for each sub-incident.
  </Accordion>

  <Accordion title="What happens to the Google Meet room when an incident is resolved?" icon="circle-check">
    Rootly does not automatically end or delete the Google Meet room when an incident is resolved. The room remains accessible through the meeting link until it expires naturally per Google Meet's settings.
  </Accordion>

  <Accordion title="Can I use this with both OAuth and Service Account connections?" icon="wifi">
    Yes. The workflow actions work the same regardless of which connection method you used during installation. The integration handles authentication transparently.
  </Accordion>

  <Accordion title="Why isn't the Google Meet link appearing in Slack?" icon="triangle-exclamation">
    Ensure the **Slack Channels** field is configured in your workflow action and that the channel reference is correct. You can use `{{ incident.slack_channel_id }}` to target the incident's dedicated channel automatically.
  </Accordion>
</AccordionGroup>

### Meeting Scribe Questions

<AccordionGroup>
  <Accordion title="Why do we need a service account?" icon="key">
    Service accounts represent your Google Workspace organization rather than a specific user. They don't need a personal OAuth grant to keep working, they don't lose access when someone leaves the team, and they behave consistently regardless of who declared the incident. Personal OAuth ties the scribe to whoever connected it — one departure and reliability drops.
  </Accordion>

  <Accordion title="Can I use both personal OAuth and a service account?" icon="link">
    Only one Google Meet connection is active at a time. Switch by reconnecting.
  </Accordion>

  <Accordion title="Does the scribe work on external / cross-organization Google Meet calls?" icon="building">
    The scribe joins meetings hosted on your Google Workspace domain. Meetings hosted by an external organization (a vendor, a partner) can't grant your scribe entry unless their admin admits it, which is unusual.
  </Accordion>

  <Accordion title="Does the scribe support Google Meet calls initiated from a personal Google account?" icon="user">
    No. Meeting Scribe is scoped to your Google Workspace domain. Meetings created by a personal `@gmail.com` account aren't covered.
  </Accordion>
</AccordionGroup>

***

## Related Resources

* [Rootly AI Meeting Scribe](/ai/meeting-scribe)
* [Workflows](/workflows/workflows)
* [Integrations overview](/integrations/overview)
