No description
Find a file
Arshia Navabi cc1daf13a5
1.0.2: address community-directory review findings
- Settings: migrate to declarative getSettingDefinitions API (1.13+),
  drop deprecated display()/setDynamicTooltip; minAppVersion -> 1.13.0
- Types: generic apiGet<T>, typed list response, no unsafe any assignment
- Promises: void-mark fire-and-forget sync() call sites
- sanitizeFilename: replace control-char regex range with charCode filter
- Build: replace builtin-modules dep with node:module builtinModules
- Release: GitHub Actions workflow with artifact attestations;
  release assets now only main.js + manifest.json (versions.json stays in repo)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 23:58:37 -07:00
.github/workflows 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
src 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
test 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
.gitignore Granola API Sync 1.0.0: official-API-based sync for notes + full transcripts 2026-07-16 14:23:34 -07:00
esbuild.config.mjs 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
LICENSE Granola API Sync 1.0.0: official-API-based sync for notes + full transcripts 2026-07-16 14:23:34 -07:00
manifest.json 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
package-lock.json 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
package.json 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00
README.md Granola API Sync 1.0.0: official-API-based sync for notes + full transcripts 2026-07-16 14:23:34 -07:00
tsconfig.json Granola API Sync 1.0.0: official-API-based sync for notes + full transcripts 2026-07-16 14:23:34 -07:00
versions.json 1.0.2: address community-directory review findings 2026-07-16 23:58:37 -07:00

Granola API Sync

Sync your Granola meeting notes and full transcripts into Obsidian using the official Granola API.

No credential scraping, no keychain access, no native binaries. You paste an API key, your meetings appear in your vault.

Why this plugin

Earlier Granola↔Obsidian integrations worked by borrowing the Granola desktop app's encrypted local credentials. That approach breaks every time Granola changes its internal storage (most recently July 2026), and it needs deep OS access (keychain / DPAPI) to work at all.

Granola released an official public API in February 2026. This plugin is built on it exclusively:

  • Stable, a documented, versioned API instead of reverse-engineered internals
  • Private, the only thing stored is your API key, locally in your vault
  • Portable, pure API calls; works on desktop and mobile
  • Complete, meeting summaries and full timestamped transcripts

Requirements

A Granola Business (or Enterprise) plan. API keys are a Granola Business feature, that's Granola's gate, not this plugin's. Any workspace member on a Business plan can create a personal key.

Setup

  1. In the Granola desktop app: Settings → API → Create new key. Copy the grn_... key.
  2. In Obsidian: Settings → Granola API Sync, paste the key.
  3. Set your notes folder (default Granola/) and sync interval.
  4. Run "Granola API Sync: Sync now" from the command palette, or just wait, it syncs automatically.

Optionally set Your email so you're excluded from attendee lists and your own transcript lines are labeled with your name.

What you get

For each meeting, a note like:

---
granola_id: 874b7bfd-...
title: Weekly Planning
type: note
created: 2026-07-16T18:59:50.339Z
updated: 2026-07-16T20:06:42.499Z
attendees:
- colleague@company.com
transcript: '[[Granola/transcripts/Weekly Planning-transcript.md]]'
granola_url: https://notes.granola.ai/d/874b7bfd-...
source: granola-api-sync
---

### Meeting summary
- ...

plus a linked transcript note with the full conversation as timestamped, speaker-labeled turns.

Notes are keyed by granola_id: re-syncs update in place (Granola keeps enriching summaries for a while after a meeting ends, those updates flow in automatically). Recurring meetings with identical titles get date-suffixed filenames. Notes previously created by other Granola sync plugins that use the same granola_id convention are adopted in place, not duplicated.

Settings

Setting Default Notes
API key (none) grn_..., stored locally
Notes folder Granola created if missing
Sync transcripts on full transcript as a linked note
Transcripts folder Granola/transcripts
Sync interval 5 min 160
Days to look back 7 window kept in sync, 190
Your email (none) excluded from attendees; labels your lines
Show sync notifications on errors always shown

Privacy & disclosure

  • Your API key and meeting content never leave your machine except for direct calls to public-api.granola.ai.
  • No telemetry, no third-party services.
  • This plugin is not affiliated with Granola. Use is subject to Granola's Terms of Service.

License

MIT © Arshia Navabi (Stratos House AI)