Log every Granola meeting note to a Google Sheets spreadsheet

By General Input

When a new Granola note lands, append a structured row to a Google Sheets meeting log so every call becomes a searchable record.

Integrations

  • Granola
  • Google Sheets

Type

Deterministic Code

Categories

  • Operations
  • Personal Productivity

Build a code workflow that turns every new Granola meeting note into a structured row in a Google Sheets meeting log. The flow is fully deterministic: there is no judgement step, just fetch, normalize, and append.

Trigger: poll Granola for the new_note event. When a new note appears, pass the note id into the rest of the pipeline.

Step 1 — Fetch the note. Call Granola Get Note with the triggering note id. Pull the full note metadata: title, created/meeting date, attendees (emails and names), the linked Google Calendar event if present, summary_text, summary_markdown, and the public note URL. Transcript content is not needed for the row, but capture whether a transcript is available as a boolean.

Step 2 — Normalize into a fixed column schema. Produce one row with these columns in this order: meeting_date (ISO date), meeting_title, meeting_type (inferred from the title with simple keyword rules: 1:1, standup, interview, customer call, internal, other), attendee_count (integer), attendee_domains (comma-separated unique email domains, excluding the workspace owner's own domain), summary_excerpt (first 280 characters of summary_text, single line), action_item_count (count of bullet lines under any heading whose text contains "action" in summary_markdown; fall back to 0 if no such section exists), transcript_available (TRUE/FALSE), calendar_event_link (URL or empty), granola_note_url. Keep the parsing simple and forgiving: missing fields become empty strings, never nulls.

Step 3 — Append to Google Sheets. Call Google Sheets Append Values on a configurable spreadsheet id and tab name (default tab name: "Meeting Log"). Use USER_ENTERED so dates and links render natively. Insert a single row in the column order above.

Configuration the user should be able to edit: the target spreadsheet id, the target tab name, and an optional title-keyword denylist that skips logging (for example "personal", "therapy").

Error handling: if Get Note returns 404 (note deleted or not accessible), skip silently. On 429 from either service, back off and retry. Do not fail the run on a single bad note; log the error and continue.

Output: one appended row per meeting. No notifications, no side effects. The spreadsheet is the product.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads