Archive every Google Meet to a Notion meeting library

By General Input

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

Integrations

  • Google Meet
  • Notion

Type

Deterministic Code

Categories

  • Operations
  • Personal Productivity

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.

Related prompts

Explore more prompts
Screen chartered vessels for AIS gaps and sanctions red flagsCompare candidate store locations with drive time trade areasBrowse every competitor ad and build a Notion swipe fileAudience persona studio for brand and product marketersArtwork desk for the Notion posts still missing an imageShare of voice dashboard for your brand and competitorsInfluencer campaign roster board with AI creator briefsSmart home entity health cockpit for Home AssistantOpen model approval desk for your production AI stackBid board that watches every procurement portal for you