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

# Google Meet as a data source

> Bring your meetings, transcripts and Gemini notes from Google Meet to your Lakehouse.

Google Meet is Google's video conferencing service. This source brings your meetings and everything they produce into your Lakehouse: who attended, the automatic transcript, the recording link, and the full text of the meeting summaries generated by Gemini's "Take notes for me".

Transcripts and Gemini notes are saved by Google as documents in Drive, and this source extracts their text into a column, so meeting content is queryable alongside the rest of your data.

<Warning>
  Google keeps meetings available for only **30 days** after they end. There is no historical backfill: meetings older than 30 days cannot be extracted, no matter which start date you set. Your Lakehouse becomes the permanent archive, so schedule this source to run at least once a month, and preferably once a day. A meeting that is never extracted within its 30-day window is lost.
</Warning>

## Before you start

* Only meetings the connected Google account **took part in** can be extracted.
* The **Gemini notes** stream only returns data if the meeting organizer's Google Workspace has a Gemini license and note taking was switched on during the call. An empty table means the feature was not used, not that the extraction failed.
* Transcripts and notes are written by Google **minutes to hours after a meeting ends**. This source automatically re-reads the last couple of days on every run so late documents are still picked up.

## 1. Add your Google Meet access

1. In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Google Meet option from the list of connectors.

2. Click **Next** and you'll be prompted to add your access. Authorize Nekt through the **Google Authorization** button, signing in with the account that attends the meetings you want to extract.

<Note>
  Accept every permission requested, including access to Meet recordings and transcripts in Google Drive. Without it, meetings and participants are still extracted, but the text of transcripts and Gemini notes is not.
</Note>

3. The following configurations are available:

* **Start Date**: The earliest meeting start date to extract. Because of the 30-day retention, an earlier date does not return more data.
* **Extract document text**: (Default: enabled) Extracts the full text of transcripts and Gemini notes. Turn it off to bring only metadata and document links.
* **Lookback (days)**: (Default: 2) How many days before the last extracted meeting to read again on every run, so documents Google finished writing after the previous run are picked up.
* **Maximum document length**: (Default: 1,000,000) Maximum number of characters kept from each document. Longer documents are cut and flagged in the `content_status` column. Set to 0 to remove the limit.

4. Click **Next**.

## 2. Select your Google Meet streams

1. The next step is letting us know which streams you want to bring. You can select entire groups of streams or only a subset of them.

   > Tip: The stream can be found more easily by typing its name.

2. Click **Next**.

## 3. Configure your Google Meet data streams

1. Customize how you want your data to appear in your catalog. Select a name for each table (which will contain the fetched data) and the type of sync.

* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** and make this process faster!
* **Sync Type**: choose **INCREMENTAL** for every Google Meet stream.

<Warning>
  Do not use FULL\_TABLE with this source. Google only returns the last 30 days of meetings, so a full sync would delete every older meeting already stored in your Lakehouse.
</Warning>

2. Click **Next**.

## 4. Configure your Google Meet data source

1. Describe your data source for easy identification within your organization. You can inform things like what data it brings, to which team it belongs, etc.

2. To define your [Trigger](https://docs.nekt.com/get-started/core-concepts/triggers), consider how often you want data to be extracted from this source. A daily trigger is recommended, so no meeting expires before being extracted.

### Check your new source!

1. Click **Next** to finalize the setup. Once completed, you'll receive confirmation that your new source is set up!

2. You can view your new source on the [Sources](https://app.nekt.ai/sources) page. Now, for you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you have to wait for the pipeline to run. You can now monitor it on the [Sources](https://app.nekt.ai/sources) page to see its execution and completion. If needed, manually trigger the pipeline by clicking on the refresh icon. Once executed, your new table will appear in the Catalog section.

# Streams and Fields

Below you'll find all available data streams from Google Meet and their corresponding fields. Every stream is keyed by `name`, the Google resource identifier of the record.

<AccordionGroup>
  <Accordion title="Conference Records">
    One record per meeting held in a Google Meet space. This is the central stream: every other stream joins back to it.

    **Key Fields:**

    * `name` - Resource name of the meeting, in the format `conferenceRecords/<id>`. Primary key of this table
    * `conference_record_id` - Short identifier of the meeting, used to join with the other tables
    * `start_time` - When the meeting started. Used as the incremental replication key
    * `end_time` - When the meeting ended. Empty while the meeting is still in progress

    **Space:**

    * `space` - Resource name of the Meet space where the meeting was held, in the format `spaces/<id>`
    * `space_id` - Short identifier of the space. Groups every occurrence of a recurring meeting

    **Duration and retention:**

    * `duration_seconds` - How long the meeting lasted, in seconds. Empty while the meeting is still in progress
    * `expire_time` - When Google deletes this meeting from its API, 30 days after it ends. After this moment the extracted data is the only remaining copy
  </Accordion>

  <Accordion title="Participants">
    One record per person who attended a meeting.

    **Key Fields:**

    * `name` - Resource name of the participation. Primary key of this table
    * `participant_id` - Short identifier of the participation within this meeting

    **Meeting reference:**

    * `conference_record` - Resource name of the meeting attended
    * `conference_record_id` - Short identifier of the meeting attended
    * `conference_start_time` - When the meeting started. Used as the incremental replication key

    **Identity:**

    * `user_type` - How the person joined: `signed_in` for a Google account or meeting-room device, `anonymous` for someone not signed in, `phone` for someone who dialed in
    * `user_id` - Unique identifier of the signed-in user, in the format `users/<id>`. Interoperable with the Google Admin SDK and People APIs. Empty for anonymous and phone participants
    * `display_name` - Name shown during the meeting. For phone participants, a partially redacted phone number

    **Attendance:**

    * `earliest_start_time` - When the participant first joined the meeting
    * `latest_end_time` - When the participant left for the last time. Empty while the meeting is still in progress
  </Accordion>

  <Accordion title="Smart Notes">
    One record per Gemini "Take notes for me" summary, including its full text. Requires a Gemini license on the meeting organizer's Google Workspace.

    **Key Fields:**

    * `name` - Resource name of the smart notes. Primary key of this table
    * `smart_note_id` - Short identifier of the notes session
    * `state` - `STARTED` while the session runs, `ENDED` once it stopped but before the file exists, and `FILE_GENERATED` when the document is ready

    **Meeting reference:**

    * `conference_record` - Resource name of the meeting
    * `conference_record_id` - Short identifier of the meeting
    * `conference_start_time` - When the meeting started. Used as the incremental replication key

    **Content:**

    * `content` - Full text of the notes, exported from Google Docs as Markdown
    * `content_status` - Why the text is filled or empty. See the table below
    * `document_id` - Identifier of the Google Doc holding the notes
    * `export_uri` - Link to open the notes in Google Docs

    **Timing:**

    * `start_time` - When the notes session started
    * `end_time` - When the notes session stopped
  </Accordion>

  <Accordion title="Transcripts">
    One record per transcription session of a meeting, including its full text. Transcripts are generated independently from recordings.

    **Key Fields:**

    * `name` - Resource name of the transcript. Primary key of this table
    * `transcript_id` - Short identifier of the transcription session
    * `state` - `STARTED` while the session runs, `ENDED` once it stopped but before the file exists, and `FILE_GENERATED` when the document is ready

    **Meeting reference:**

    * `conference_record` - Resource name of the meeting
    * `conference_record_id` - Short identifier of the meeting
    * `conference_start_time` - When the meeting started. Used as the incremental replication key

    **Content:**

    * `content` - Full text of the transcript, exported from Google Docs as Markdown
    * `content_status` - Why the text is filled or empty. See the table below
    * `document_id` - Identifier of the Google Doc holding the transcript
    * `export_uri` - Link to open the transcript in Google Docs

    **Timing:**

    * `start_time` - When the transcription session started
    * `end_time` - When the transcription session stopped
  </Accordion>

  <Accordion title="Recordings">
    One record per recording session of a meeting. Only metadata and the Drive link are extracted; the video file itself stays in Google Drive.

    **Key Fields:**

    * `name` - Resource name of the recording. Primary key of this table
    * `recording_id` - Short identifier of the recording session
    * `state` - `STARTED` while recording, `ENDED` once it stopped but before the file exists, and `FILE_GENERATED` when the video is ready

    **Meeting reference:**

    * `conference_record` - Resource name of the meeting
    * `conference_record_id` - Short identifier of the meeting
    * `conference_start_time` - When the meeting started. Used as the incremental replication key

    **File:**

    * `drive_file_id` - Identifier of the MP4 file in Google Drive
    * `export_uri` - Link to play the recording in the browser

    **Timing:**

    * `start_time` - When the recording started
    * `end_time` - When the recording ended
  </Accordion>
</AccordionGroup>

## Understanding the `content_status` column

The Smart Notes and Transcripts tables always explain why their text column is filled or empty:

| Value               | Meaning                                                                                                             |
| ------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `exported`          | The text was retrieved successfully                                                                                 |
| `truncated`         | The text was retrieved but cut at the configured maximum document length                                            |
| `not_generated`     | Google has not finished writing the document yet. It will be picked up on a later run                               |
| `no_document`       | No document was attached to this artifact                                                                           |
| `permission_denied` | The connection lacks permission to read Meet files in Google Drive. Reconnect the source and accept all permissions |
| `not_found`         | The document was deleted from Google Drive                                                                          |
| `too_large`         | The document is over the 10 MB that Google allows to be exported. Use `export_uri` to open it                       |
| `disabled`          | Document text extraction is turned off in the source settings                                                       |
| `error`             | Google Drive kept failing to return the document                                                                    |

<Note>
  If you also need the meeting **video files** in your Lakehouse, use the [Google Drive](./google-drive) source in unstructured mode with the `drive_file_id` from the Recordings table.
</Note>

> If you encounter any issues, reach out to us via Slack, and we'll gladly assist you!
