granola-to-minutes
v0.4.3
Published
CLI migration tool that exports Granola meeting data — AI summaries, transcripts, and human notes — to Minutes-native markdown with YAML frontmatter
Maintainers
Readme
granola-to-minutes
CLI migration tool that exports Granola meeting data — AI summaries, transcripts, and human notes — to Minutes-native markdown with YAML frontmatter. Extracts structured action items and decisions via Claude. Designed for one-time bulk migration from Granola's server-side storage.

Features
- Full meeting data extraction: AI summaries, transcripts, human notes
- Minutes-native markdown output with YAML frontmatter
- Optional Claude-powered extraction of action items, decisions, and intents
- Dry-run preview, single-meeting, and date-filtered exports
- Machine-readable JSON output for scripting and AI agents
- Atomic file writes with collision handling
Quick Start
| I need to... | Command | Details |
|---|---|---|
| Run full export | npx granola-to-minutes export | Usage |
| Preview without writing | npx granola-to-minutes export --dry-run | Usage |
| Export single meeting | npx granola-to-minutes export --note-id <uuid> | Usage |
| Machine-readable output | npx granola-to-minutes export --json | Usage |
| Run tests | pnpm test:cov | Testing |
| Understand the code | See architecture | CLAUDE.md |
Prerequisites
- Node.js >= 20
- granola-cli (community-built, not affiliated with Granola Labs) —
pnpm add -g granola-cli && granola auth login - Claude Code (optional) — for structured extraction of action items, decisions, and intents from AI summaries
Install
Run directly without installing (recommended for one-time use):
npx granola-to-minutes exportOr install globally:
npm install -g granola-to-minutes # npm
pnpm add -g granola-to-minutes # pnpmFrom source
git clone https://github.com/calvindotsg/granola-to-minutes.git
cd granola-to-minutes
pnpm install
pnpm buildUsage
Commands below assume global install. Prefix with
npxif running without installing.
# Full export to ~/meetings/
granola-to-minutes export
# Dry run (preview without writing)
granola-to-minutes export --dry-run
# Skip LLM extraction
granola-to-minutes export --skip-llm
# Single meeting by UUID (prefix match)
granola-to-minutes export --note-id <uuid>
# Only recent meetings
granola-to-minutes export --since 2026-03-01
# Verbose logging
granola-to-minutes export --verbose
# Machine-readable JSON output (for AI agents and scripts)
granola-to-minutes export --jsonCommands Reference
| Command | Purpose |
|---|---|
| pnpm build | Compile TypeScript |
| pnpm check | Lint with Biome |
| pnpm test | Run test suite |
| pnpm test:cov | Run tests with coverage (75% threshold) |
| pnpm test:watch | Run tests in watch mode |
| pnpm format | Auto-format source files |
Output Format
Each meeting produces a markdown file with YAML frontmatter compatible with Minutes:
---
title: Weekly Sync
type: meeting
date: '2026-03-17T14:30:00+08:00'
duration: 30m
source: granola-reimport
status: complete
attendees:
- Alice Smith
- Bob Jones
people:
- John Smith
- Alice Smith
- Bob Jones
speaker_map:
- speaker_label: SPEAKER_0
name: John Smith
confidence: high
source: deterministic
- speaker_label: SPEAKER_1
name: Remote participants
confidence: low
source: deterministic
calendar_event: Weekly Sync
---
## Summary
[AI-generated summary]
## Notes
[Human notes from Granola]
## Transcript
[SPEAKER_0 0:00] Hello everyone.
[SPEAKER_1 0:05] Thanks for joining.How It Works
- Lists all meetings via
granola meeting list -o json(rich metadata) - For each meeting, fetches transcript and AI-enhanced summary
- Converts ProseMirror JSON (Granola's note format) to markdown
- Optionally extracts structured action items/decisions via Claude
- Writes Minutes-native markdown files with proper frontmatter
See Also
Minutes has a built-in file-based import — minutes import granola — that reads from ~/.granola-archivist/output/ without any API calls. See the comparison table in the Minutes README for when to use each tool.
Testing
Tests use Vitest with v8 coverage. Coverage threshold is 75%.
pnpm test:cov # run with coverage report
pnpm test:watch # watch mode for developmentContributing
See CONTRIBUTING.md for development setup, code style, and commit conventions.
License
MIT
