Archive every Google Meet to a Notion meeting library

Every night, log yesterday's Google Meet calls into a searchable Notion database with attendees, recordings, and transcripts attached.

Deterministic Code
Google MeetNotionOperationsPersonal ProductivityMeeting WorkflowsData Sync

Build me a deterministic compliance-archive workflow that keeps a Notion Meeting Library database in sync with my Google Meet history. No AI summarization, no branching logic, just a per-meeting upsert.

Trigger: cron, once a day at 23:00 in my local timezone.

Setup inputs the user provides once: (1) the Notion database ID of their Meeting Library, (2) confirmation that the database has been shared with the General Input Notion connection.

Main flow each run:

1. Call Google Meet List Conference Records, filtered to conferences whose startTime is within the last 24 hours. Page through all results.

2. For each conference record, fan out three calls in parallel: Google Meet List Participants, Google Meet List Recordings, and Google Meet List Transcripts. Page through each.

3. Before writing, call Notion Query a Data Source against the Meeting Library database with a filter on the Conference Record ID property equal to the current record's name (e.g. conferenceRecords/abc123). If any page is returned, skip this meeting; it's already logged.

4. Otherwise call Notion Create a Page in the Meeting Library database with these structured properties:

- Title: a human label like "Meeting on YYYY-MM-DD at HH:MM" (fallback when the space has no title).

- Conference Record ID (rich_text, unique key): the full resource name returned by Google Meet.

- Meeting Date (date): the date portion of startTime.

- Start Time and End Time (date with time): startTime and endTime from the conference record.

- Duration (number, minutes): endTime minus startTime, rounded.

- Attendee Names (multi_select or rich_text): displayName for each participant; fall back to signed-in user email prefix or anonymousUser label when displayName is absent.

- Attendee Emails (rich_text, comma-separated): signedInUser.email for each participant; omit anonymous and phone participants.

- Recording URL (url): driveDestination.exportUri of the first recording, or empty when none exists. If multiple recordings exist, write the first URL into Recording URL and list the rest in a Recording URLs (rich_text) field.

- Transcript URL (url): docsDestination.exportUri of the first transcript, or empty when none exists.

Tell the user the expected Notion schema in setup instructions so they can create the columns: Name (title), Conference Record ID (rich_text), Meeting Date (date), Start Time (date), End Time (date), Duration (number), Attendee Names (rich_text), Attendee Emails (rich_text), Recording URL (url), Transcript URL (url). The Conference Record ID column is the dedupe key.

Reliability rules: handle Google Meet pagination via pageToken until exhausted; handle Notion pagination via has_more and next_cursor; respect Notion 429 Retry-After. The 24-hour window plus the idempotency check is intentional: it covers recordings that Google publishes late, since the next run will re-evaluate the same conference and find the row already exists or fill in newly available recording or transcript URLs if missing.

Out of scope: AI summaries, attendee CRM matching, calendar event matching, follow-up generation. Keep it a pure deterministic per-meeting upsert.

Additional information

What does this prompt do?
  • Runs once a day at 11pm and finds every Google Meet call that happened in the last 24 hours.
  • Adds a new row to your Notion meeting library for each call, with date, duration, attendee names and emails, and links to the recording and transcript.
  • Skips meetings that are already in the database, so re-runs and late-arriving recordings never create duplicates.
  • Gives you a single searchable home for who you met, when, and what was said, without digging through Drive.
What do I need to use this?
  • A Google account that hosts or joins your Meet calls.
  • A Notion workspace with an empty database to use as your meeting library.
  • Recording and transcription turned on in Google Meet for the calls you want logged.
How can I customize it?
  • Move the run time to a different hour, or run it more than once a day so recordings show up sooner.
  • Add or rename columns in your Notion database, such as meeting type, client, or follow-up status, and the workflow will fill the matching ones.
  • Filter the meetings that get logged, for example only calls longer than 10 minutes or only ones with external attendees.

Frequently asked questions

What if Google takes a while to finish a recording?
Google usually publishes recordings 5 to 15 minutes after a call ends, but it can be longer. Because the workflow runs at 11pm and skips meetings that are already logged, late recordings get picked up the next time the row is updated or on the following run.
Will it create duplicates if it runs twice?
No. Each Google Meet call has a unique ID, and the workflow uses it as the key in Notion. If a row with that ID already exists, the workflow skips that meeting.
Do I have to set up the Notion database myself?
Yes, once. Create an empty database in Notion called Meeting Library and share it with the General Input connection. When you start the workflow you paste in its ID, and the prompt tells the builder exactly which columns to use.
Does this need Google Workspace, or will a personal Gmail account work?
Meet recordings and transcripts are a Google Workspace feature, so the calls you want logged need to be hosted on a Workspace account. The workflow itself can connect with either kind of Google account.
Can it log meetings I was only a guest in?
It logs every meeting the connected Google account took part in and had access to read records for. If you only have guest access, the host's recording and transcript may not be visible to you.

Stop hunting through Drive for last week's meeting.

Connect Google Meet and Notion once, and Geni quietly files every call into a searchable library each night.