# Your meeting tool shouldn't own your transcripts

Source: https://aaronmakelky.com/blog/your-meeting-tool-shouldnt-own-your-transcripts
Last updated: 2026-10-31

You aren't keeping your own copies of meeting notes, but you should. Here's how: a Granola webhook, a cloud agent, and an Obsidian vault plus Notion database that you own.

October 31, 2026 · 3 min read

Meeting Notes · Granola · AI Agents · Obsidian · Wispr Flow

[All my Grok Bot notes](/grok-bot)

![Granola sends a webhook to a Grok Bot cloud agent, which saves the notes to your vault in Obsidian and Notion](/images/blog/your-meeting-tool-shouldnt-own-your-transcripts/cover.jpg)

You are probably using your AI tool to reference your meeting notes with a connector. Which works fine, until you switch meeting recorder tools.

"Hey Claude, pull my Granola notes from today's calls" only works as long as you keep paying for Granola.

There is a better way, and it only takes 5 minutes to set up.

## The First Version

I used to keep my Granola notes on a Mac Studio that had to stay awake all night.

That machine ran a Codex automation. It pulled Wispr Flow and Gemini meeting notes into an Obsidian vault on GitHub, then mirrored them into Notion. This worked fine when the Studio was on but became completely useless when it wasn't. (like when my power went out)

Meeting tools are great at recording and summarizing. They are a terrible place to keep the only copy of your transcripts. Vendors change plans, bosses force you to switch apps, or you just might want to try a new tool. And if your sync lives on a laptop or a desk Mac, that device has to stay awake.

So I moved the Granola notes to a cloud agent with a webhook.

![Granola posts a signed event to an HTTPS webhook, the cloud agent verifies the signature, gets the note from /v1/notes/{id}, and writes it to an Obsidian vault on GitHub and a Notion database](/images/blog/your-meeting-tool-shouldnt-own-your-transcripts/how-the-pieces-fit.png)

Granola webhook → cloud agent verifies → Get Note API → Obsidian vault + Notion

## Granola never sends the transcript in the webhook

Granola fires three events: `note.generated` (first AI summary ready; there is no `note.created`), `note.edited`, and `note.access_granted`. The body is tiny: event id, event type, note id, timestamp. No transcript. No title. No attendees.

Your agent verifies the Standard Webhooks signature, answers 2xx within 15 seconds, then fetches the full note with:

```
GET https://public-api.granola.ai/v1/notes/{id}?include=transcript
```

Bearer token is your Granola API key (`grn_…`). Webhooks need Business or Enterprise. Personal plans can't create an endpoint.

## What my cloud agent does with that ping

1. Verify `GRANOLA_WEBHOOK_SECRET`. Reject anything that fails.
2. Return 2xx fast. Do the work after.
3. Skip if this `event_id` already ran.
4. Fetch by `note_id` with `GRANOLA_API_KEY`. Never trust the webhook body for content.
5. Hash the content. Same note id + same hash → skip. Same id + new hash → overwrite (an edit).
6. Write markdown into the Obsidian vault on GitHub, update `state/source-index.json` and the manifest, upsert the Notion row matched by Link.

Secrets stay in environment variables on the agent's computer. Never in the chat, never in a shared Page.

## One real path on disk

After a note finishes, the file looks like this:

```
Agent-Memory/granola-meetings/raw/2026/10/30/not_XXXXXXXXXXXXXX-weekly-client-sync.md
```

Frontmatter the agent writes: `type`, `source`, `granola_note_id`, `source_url`, `title`, `meeting_date`, `content_sha256`.

My receiver is a [Grok Bot](/grok-bot) webhook routine. Same pattern works with a Cursor cloud agent, a Cloudflare Worker, or a Claude / OpenAI agent that exposes HTTPS.

## Same vault with other recorder apps

Granola is one meeting recorder I currently use. But this same system also files [Wispr Flow](/granola-to-wispr-flow) meetings and Google Meet Notes by Gemini into sibling folders with the same markdown shape.

The daily automation is handled by a [Cursor cloud agent](/tools/meeting-note-clerk) at 7pm, and mirrors those into the same Notion database.

![Granola goes to the Obsidian vault and Notion live by webhook, while a nightly 7pm MT sync carries Wispr Flow and Notes by Gemini meeting notes to the same vault and the same Notion database](/images/blog/your-meeting-tool-shouldnt-own-your-transcripts/other-recorders-same-vault.jpg)

How Wispr, Gemini, and Granola notes all sync daily

## Credits that help pay for it

As of late October 2026, Anthropic and OpenAI both include monthly API credits on eligible chat subscriptions. If you already pay for those, API calls can burn against those credits.

## Full walkthrough

I wrote the step-by-step, the copy-paste agent prompt, and the troubleshooting list as a [Grok Bot Page](https://cursor.com/canvas/store-5afb8d02-9a6b-4f1c-9ac0-295a57aeee5d/f232d69b-24dc-4645-aeb3-825043f43798).

Do not let your meeting recorder own the transcripts. Keep copies in your own database, and let a cloud agent do the work. If your meeting note app doesn't have webhooks, just set an automation in your cloud agent of choice to look for new transcripts 1x-3x per day.

The same goes for the rest of your AI work: [Your AI app should not own your work](/blog/your-ai-app-should-not-own-your-work).

I also posted this on X. [Read the post on X](https://x.com/theaaron/status/2116360949708046662) if you want the replies too, and [follow me @theaaron](https://x.com/theaaron) for the next one.

## Related pages

- [All field notes](/blog)
- [Your AI app should not own your work](/blog/your-ai-app-should-not-own-your-work)
- [Meeting Note Clerk](/tools/meeting-note-clerk)
- [Switch from Granola to Wispr Flow](/granola-to-wispr-flow)
- [All my Grok Bot notes](/grok-bot)
- [How to use Cursor Automations](/blog/how-to-use-cursor-automations)
- [Build it or buy it: the SaaS tools I'd replace with AI](/blog/build-or-buy-saas)

## Sources and references

- [The article on X](https://x.com/theaaron/status/2116360949708046662)
- [Full walkthrough: Own your meeting notes](https://cursor.com/canvas/store-5afb8d02-9a6b-4f1c-9ac0-295a57aeee5d/f232d69b-24dc-4645-aeb3-825043f43798)
- [Aaron on X (@theaaron)](https://x.com/theaaron)

## Common questions

### Does the Granola webhook include the meeting transcript?

No. Granola fires note.generated, note.edited, and note.access_granted, and the body only has the event id, event type, note id, and timestamp. Your agent verifies the Standard Webhooks signature, answers 2xx within 15 seconds, then fetches the full note from GET https://public-api.granola.ai/v1/notes/{id}?include=transcript with your Granola API key.

### Which Granola plans support webhooks?

Business or Enterprise. Personal plans cannot create a webhook endpoint.

### What if my meeting notes app does not have webhooks?

Set an automation in your cloud agent of choice to look for new transcripts one to three times a day. Aaron runs a daily Cursor cloud agent at 7pm that files Wispr Flow and Google Meet Notes by Gemini into the same Obsidian vault and Notion database.
