Publish today's meeting notes to Confluence every evening

Every weekday at 6pm, an agent turns today's meetings into structured Confluence pages under the current month's Meeting Notes folder.

Agentic Task
ConfluenceGoogle CalendarGranolaOperationsPersonal ProductivityMeeting WorkflowsAI Reports
PromptCreate

Every weekday at 6pm, turn today's meetings into structured Confluence pages so the team's knowledge base captures decisions the same day they're made.

Trigger: cron on a weekday-only schedule at 6pm in my local timezone.

Step 1 — Fetch today's meetings. Call the Google Calendar List Events operation on calendar "primary", with timeMin set to today at 00:00 local time and timeMax set to today at 23:59 local time, singleEvents=true so recurring events are expanded, and orderBy=startTime. Ignore all-day events, events with eventType other than "default", and events on any calendar other than my primary.

Step 2 — Filter out 1:1s and personal-calendar noise before doing any more work. Skip an event if any of the following are true: it has fewer than three attendees (so 1:1s and solo blocks are dropped), it is marked private (visibility="private" or transparency="opaque" with only one attendee), it has no attendees list at all, or the summary looks like a personal appointment ("gym", "lunch", "focus time", "dentist", etc.). The goal is that private conversations never leak into the shared wiki.

Step 3 — Pull today's Granola notes. Call the Granola List Notes operation with created_after set to today at 00:00 local time (or updated_after if that better matches how Granola timestamps notes). Page through with the cursor until hasMore is false. This gives you a list of note IDs and lightweight metadata for today.

Step 4 — For each surviving calendar event, find its matching Granola note. Match on Granola's calendar_event field when available, otherwise fall back to matching by start time within a 30-minute window plus overlapping title tokens. For each match, call the Granola Get Note operation with include=transcript to fetch the full summary_markdown, attendees, and transcript. If a calendar event has no matching Granola note, skip it — do not publish stub pages.

Step 5 — For every meeting that actually had a Granola note, draft a structured Confluence page. The body must be Confluence storage format (body-format=storage), not markdown, since Confluence Create Page expects storage-format XHTML. Sections, in this order:

  • Context — 2-3 sentences on why the meeting happened, who was there, and what the goal was. Pull this from the Granola summary plus the calendar event description.

  • Key decisions — a bulleted list of concrete decisions made in the meeting. If nothing was decided, write "No decisions recorded." rather than inventing filler.

  • Action items — a bulleted list of "Owner: action (due date if mentioned)" entries. Owner should be a real attendee name from the note, never "team" or "we".

  • Open questions — anything left unresolved or explicitly flagged for follow-up. Empty is fine.

Step 6 — Publish each page with the Confluence Create Page operation. Set spaceId to the configured team space. Set parentId to the current month's "Meeting Notes / {YYYY-MM}" page (compute the current YYYY-MM from today's date and look up its page ID — assume the caller has created that parent page in advance). Title should be "{Meeting title} — {YYYY-MM-DD}" so two meetings with the same name on different days do not collide. At the very top of the body, include a one-line "Calendar event" link back to the original Google Calendar event using the htmlLink returned from List Events. Publish as status="current", not draft.

Do not send any Slack pings, emails, or other notifications — the Confluence page is the only output. If Granola is rate-limited (429), back off and retry a few times before giving up on that meeting. If Confluence returns a 409 version conflict on a same-title page, append a short disambiguator like the meeting start time to the title and retry.

Additional information

What does this prompt do?
  • Runs every weekday evening and looks at today's meetings on your primary Google Calendar.
  • Matches each meeting to the Granola note that captured its summary, attendees, and transcript.
  • Uses AI to draft a structured page for every meeting that actually had notes, with context, decisions, action items with owners, and open questions.
  • Files each write-up in Confluence under a monthly Meeting Notes parent page, with the meeting date in the title and a link back to the calendar event.
  • Skips 1:1s and personal appointments so private conversations never land in the shared wiki.
What do I need to use this?
  • A Google account with the calendar you use for work meetings.
  • A Granola account on a Business or Enterprise plan (personal API keys are only available on those tiers).
  • A Confluence space where the team wants the notes to live, plus an existing parent page like "Meeting Notes / 2026-07" for the current month.
  • Comfort with the agent skipping meetings that don't have Granola notes yet.
How can I customize it?
  • Change the schedule — some teams prefer end of day at 5pm, others at 7pm or once a week on Fridays.
  • Adjust the skip rules — for example, require three or more attendees, or exclude any event marked private on the calendar.
  • Tune the structure of the page — add sections like "Risks" or "Customer quotes", or point to a different Confluence space entirely.

Frequently asked questions

What happens to meetings that don't have Granola notes?
They are skipped. The agent only publishes pages for meetings where Granola actually captured a summary, so you won't get stub pages for every calendar block.
Will my 1:1s end up in the team wiki?
No. The agent filters out any event with fewer than three attendees and skips events on personal or non-work calendars, so private conversations stay private.
Do I need to create a new parent page every month?
Yes — the workflow expects a parent page named for the current month, like "Meeting Notes / 2026-07". Some teams create the next month's page as part of their monthly review; others let the agent create it automatically as a customization.
Can it use a different meeting notes tool instead of Granola?
This version is built around Granola specifically. If your team uses another notetaker, the same pattern works — just swap in whichever tool you already use to capture meeting summaries.
What if two meetings had the same title today?
Each page title includes the meeting date and the calendar event, and each write-up links back to the specific calendar event, so two same-named meetings become two clearly separate pages.

Stop letting decisions disappear the day they're made.

Get today's meetings into the team wiki tonight, without anyone writing it up by hand.