Enrich Google Calendar events with Granola notes and open Linear issues
When a Granola note lands, append the recap to the original Google Calendar event and file Linear issues for every action item with an owner.
Build me an agent workflow that runs every time a new Granola meeting note is created, enriches the original Google Calendar event with the recap, and opens Linear issues for the action items.
Trigger: poll Granola for the new_note event.
When a note arrives, do the following:
1. Call Granola Get Note with the note id to fetch the full payload: summary, decisions, action items (with assignee email when present), attendees, and meeting start and end time. If the note is empty (no decisions and no action items), stop. This skips informal or internal-only meetings so we do not spam Linear.
2. Find the original Google Calendar event. Prefer the calendar event reference returned by Granola when it is present. Otherwise call Google Calendar List Events on my primary calendar, filtered by a time window around the note's meeting start (a few minutes on either side), and pick the event whose attendee emails best match the note's attendees. If nothing matches, log it and skip the calendar update step but still continue to Linear.
3. Append a Meeting Notes section to the event description using Google Calendar Patch Event (partial update). Do not replace the description. Take whatever description already exists and append a clearly labelled section that contains the summary, the list of decisions, and the list of action items with their owners. Leave a divider above the section so it is easy to scan when someone reopens the calendar entry.
4. For each action item that has an assignee email, create a Linear issue. Use Linear List Users to map the email to a Linear user id; if there is no match, create the issue unassigned and include the email in the description so a human can reassign. Use Linear List Teams to resolve the team to file into: default to my main engineering team, but allow me to override per meeting (for example, route product-flavored meetings to the Product team). Set the issue title to the action item text, and the description to a short block that includes the meeting title, the meeting date, the assignee email, and a link back to the Google Calendar event. Use Linear Create Issue to file it.
5. Skip any action item without an assignee. Do not create catch-all tickets.
Notes on behavior: be idempotent. If the same Granola note fires twice, do not double-append to the calendar description and do not create duplicate Linear issues. Use the Granola note id as a dedupe key. If a Linear API call fails, retry once and then surface the error in the run log without blocking the rest of the action items.
Additional information
What does this prompt do?
- Triggers on Granola's new_note event and pulls the full note (summary, decisions, action items) via Get Note.
- Finds the original Google Calendar event by matching meeting time and attendees with List Events, then uses Patch Event to append a Meeting Notes section to the description without clobbering existing fields.
- Creates a Linear issue for each action item that has an assignee, mapping the assignee email to a Linear user, picking the right team, and linking back to the calendar event for context.
- Skips informal or internal-only notes that have no decisions and no action items so Linear stays clean.
What do I need to use this?
- A Granola account connected so Geni can poll for new notes and call Get Note.
- Google Calendar access with read and event.write scopes so Geni can list and patch events on your primary calendar.
- A Linear account with permission to create issues in the teams you want action items routed to.
- An email-to-team mapping convention or default Linear team for action items whose owner cannot be resolved.
How can I customize it?
- Change the routing rule so action items go to a specific Linear team based on the meeting title, attendees, or assignee email domain.
- Tweak the skip filter (for example, also skip 1:1 notes or recurring internal syncs) so only meaningful meetings produce Linear issues.
- Customize the Meeting Notes block appended to the calendar event: include attendees, a transcript link, or just the decisions section.
Frequently asked questions
How does the agent find the right Google Calendar event for a Granola note?
Will it overwrite existing text in my calendar event description?
What happens to action items without an assignee?
How does it map a Granola attendee email to a Linear user?
Can it skip internal standups or 1:1s?
Stop letting meeting action items decay in your notes app.
Connect Granola, Google Calendar, and Linear once. Geni enriches the calendar record and files tracked issues every time a note lands.