home / skills / openclaw / skills / granola
This skill helps you access Granola meeting transcripts, summaries, and notes by syncing and organizing them for quick search.
npx playbooks add skill openclaw/skills --skill granolaReview the files below or copy the command above to add this skill to your agents.
---
name: granola
description: Access Granola meeting transcripts and notes.
homepage: https://granola.ai
metadata: {"clawdbot":{"emoji":"🥣","requires":{"bins":["python3"]}}}
---
# granola
Access Granola meeting transcripts, summaries, and notes.
## Setup
Granola stores meetings in the cloud. To access them locally:
1. **Install dependencies:**
```bash
pip install requests
```
2. **Run initial sync:**
```bash
python ~/path/to/clawdbot/skills/granola/scripts/sync.py ~/granola-meetings
```
3. **Set up automatic sync via clawdbot cron:**
```javascript
clawdbot_cron({
action: "add",
job: {
name: "Granola Sync",
description: "Sync Granola meetings to local disk",
schedule: { kind: "cron", expr: "0 */6 * * *", tz: "America/New_York" },
sessionTarget: "isolated",
wakeMode: "now",
payload: {
kind: "agentTurn",
message: "Run the Granola sync: python {skillsDir}/granola/scripts/sync.py ~/granola-meetings",
deliver: false
}
}
})
```
The sync script reads auth from `~/Library/Application Support/Granola/supabase.json` (created when you sign into Granola on macOS).
## Data Structure
After sync, each meeting is a folder:
```
~/granola-meetings/
{meeting-id}/
metadata.json - title, date, attendees
transcript.md - formatted transcript
transcript.json - raw transcript data
document.json - full API response
notes.md - AI summary (if available)
```
## Quick Commands
**List recent meetings:**
```bash
for d in $(ls -t ~/granola-meetings | head -10); do
jq -r '"\(.created_at[0:10]) | \(.title)"' ~/granola-meetings/$d/metadata.json 2>/dev/null
done
```
**Search by title:**
```bash
grep -l "client name" ~/granola-meetings/*/metadata.json | while read f; do
jq -r '.title' "$f"
done
```
**Search transcript content:**
```bash
grep -ri "keyword" ~/granola-meetings/*/transcript.md
```
**Meetings on a specific date:**
```bash
for d in ~/granola-meetings/*/metadata.json; do
if jq -e '.created_at | startswith("2026-01-03")' "$d" > /dev/null 2>&1; then
jq -r '.title' "$d"
fi
done
```
## Notes
- Sync requires the Granola desktop app to be signed in (for auth tokens)
- Tokens expire after ~6 hours; open Granola to refresh them
- macOS only (auth file path is macOS-specific)
- For multi-machine setups, sync on one machine and rsync the folder to others
This skill provides local access to Granola meeting transcripts, summaries, and notes by syncing cloud-stored meetings to a local folder. It lets you browse metadata, read formatted transcripts, and use standard shell tools to search or filter meetings. The sync is driven by a Python script and integrates with scheduled tasks for automatic updates.
The sync script reads Granola auth tokens created by the Granola macOS app and downloads meeting data into a per-meeting folder structure. Each meeting folder contains metadata.json, transcript.md, transcript.json, document.json, and optional notes.md (AI summary). Once synced, you can use jq, grep, and other CLI tools to list, search, and process meeting content locally.
Does this work on Linux or Windows?
The current auth file path and token handling are macOS-specific, so native sync requires macOS with the Granola desktop app signed in. You can rsync the synced folder to other OSes afterward.
How often should I run the sync?
A 6-hour cron is a reasonable default because Granola tokens expire around six hours; adjust frequency based on team needs and token refresh behavior.