Granola released their official MCP—you should 100% just use that. This was built prior to that release.
Export your Granola meeting transcripts to local JSON files, optimized for AI querying and search.
- Automatic export — Transcripts are exported automatically when meetings end
- Incremental sync — Only exports new transcripts, skips already-exported ones
- AI-optimized format — JSON structure designed for easy AI/LLM consumption
- Searchable index — Master index file for quick lookups across all meetings
- Manual export — Click the app anytime to export on-demand
- Cloud sync — Optionally push exports to GitHub or custom destination
Each meeting is saved as a JSON file containing:
{
"id": "meeting-uuid",
"title": "Weekly Team Sync",
"date": "2024-01-15T10:00:00.000Z",
"people": ["Alice", "Bob"],
"summary": "AI-generated meeting summary...",
"notes_markdown": "Your notes in markdown...",
"transcript_text": "Full conversation with speaker labels...",
"transcript_segments": [
{
"speaker": "Alice",
"text": "Let's get started...",
"start": 0,
"end": 2500
}
]
}- macOS 10.15+
- Granola installed
- Python 3 (included with macOS)
git clone https://github.com/rileycx/granola-export.git
cd granola-export
./install.shThe installer will:
- Create
~/granola-export/directory - Set up automatic export (triggers when Granola saves a meeting)
- Create a macOS app for manual exports
- Run an initial export of all cached transcripts
After installation, transcripts are exported automatically whenever you finish a Granola meeting. No action needed.
Double-click GranolaExport.app in ~/granola-export/ or add it to your Dock.
python3 ~/granola-export/export_granola.pyFor terminal-first usage:
# Custom export directory + machine-readable summary
python3 ~/granola-export/export_granola.py --export-dir ~/granola-export --json
# Use a custom cache path and skip sync
python3 ~/granola-export/export_granola.py --cache-path "/path/to/cache-v3.json" --no-syncRun python3 ~/granola-export/export_granola.py -h for all options.
~/granola-export/
├── index.json # Searchable index of all meetings
├── export.log # Export history and errors
├── GranolaExport.app # Click to export manually
└── meetings/
├── 2024-01-15_weekly-team-sync_abc12345.json
├── 2024-01-14_product-review_def67890.json
└── ...
The export format is optimized for AI assistants. Example prompts:
- "Search my meetings for discussions about pricing"
- "Summarize what Alice said in last week's meetings"
- "Find all action items from January meetings"
Load the index.json for quick lookups, or individual meeting files for full transcripts.
Automatically sync your exports to a remote destination after each export. Useful for:
- Backing up transcripts
- Sharing with AI tools that can access GitHub/cloud storage
- Syncing across machines
The installer will ask if you want to enable cloud sync. You can also configure it manually later.
Push exports to a private GitHub repo:
-
Create a private repo on GitHub (e.g.,
my-granola-transcripts) -
Edit
~/.granola-export-config.json:
{
"sync_enabled": true,
"sync_method": "github",
"github_repo": "yourusername/my-granola-transcripts",
"github_branch": "main"
}- Initialize git in your export folder:
cd ~/granola-export
git init
git remote add origin git@github.com:yourusername/my-granola-transcripts.git
git add -A
git commit -m "Initial export"
git push -u origin mainAfter setup, exports will auto-push to GitHub.
If the git origin remote does not match github_repo, sync will be skipped with a warning.
Run any shell command after each export (rsync, S3, etc.):
{
"sync_enabled": true,
"sync_method": "command",
"sync_command": "rsync -av meetings/ user@server:/backups/granola/",
"sync_on_no_new": false
}Set sync_on_no_new to true if you want the command to run even when no new meetings were exported (e.g., to capture index.json updates).
More examples:
# AWS S3
"sync_command": "aws s3 sync meetings/ s3://my-bucket/granola/"
# rclone (Dropbox, Google Drive, etc.)
"sync_command": "rclone sync meetings/ dropbox:granola-exports"
# Simple copy to another folder
"sync_command": "cp -r meetings/ /Volumes/Backup/granola/"Set sync_enabled to false in the config file:
{
"sync_enabled": false
}Sync results are logged to ~/granola-export/export.log.
Granola only caches recent transcripts locally. To export older meetings:
- Open the meeting in Granola (this caches the transcript)
- Run the export (automatic or manual)
The exporter reads from Granola's local cache at:
~/Library/Application Support/Granola/cache-v3.json
cd granola-export
./uninstall.shYour exported meetings in ~/granola-export/meetings/ will be preserved.
MIT License - see LICENSE
Built for the Granola community. Not affiliated with Granola.