| name | granola-data-handling |
| description | Manage Granola data export, retention policies, GDPR/CCPA compliance,
and archival workflows. Handle Subject Access Requests and Right to Erasure.
Trigger: "granola export", "granola data", "granola GDPR",
"granola retention", "granola delete data", "granola compliance".
|
| allowed-tools | Read, Write, Edit, Bash(python3:*), Bash(curl:*) |
| version | 1.13.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","granola","compliance","data","gdpr"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Granola Data Handling
Overview
Manage data lifecycle for Granola meeting data: export, retention policies, GDPR/CCPA compliance, and long-term archival. Covers individual data rights, organizational policies, and automated archival workflows.
Prerequisites
- Granola admin access (for retention policies)
- Understanding of applicable regulations (GDPR, CCPA, SOC 2)
- Export destination prepared (cloud storage, Notion, local)
Instructions
Step 1 — Understand Data Types and Sensitivity
| Data Type | What It Contains | Sensitivity | Storage |
|---|
| Meeting Notes | Your typed notes + AI-enhanced output | Medium | Granola cloud + local cache |
| Transcripts | Full text transcription of audio | High (verbatim speech) | Granola cloud + local cache |
| Audio | Raw meeting audio | Critical | Deleted after transcription (not stored) |
| Attendee Info | Names, emails from calendar events | PII | Granola cloud (People & Companies) |
| Calendar Metadata | Event titles, times, attendee lists | Low-Medium | Synced from Google/Outlook |
Key fact: Granola does not store raw audio after transcription. This is a significant privacy advantage — there is no audio file to leak, export, or subpoena.
Step 2 — Export Meeting Data
Individual note export:
- Open the meeting note in Granola
- Click the ... menu > Copy (copies as Markdown)
- Paste into your target: Notion, Google Doc, text editor
Important limitation: Granola does not currently support bulk export, PDF export, or structured file download (JSON/CSV). The available options are:
- Copy individual notes as text/Markdown
- Share to Notion (one note at a time via native integration)
- Share to Slack (one note at a time)
- Enterprise API (read-only access to workspace notes)
Workaround for bulk access — local cache:
json
pathlib Path
datetime datetime
CACHE_PATH = Path.home() /
OUTPUT_DIR = Path.home() /
OUTPUT_DIR.mkdir(exist_ok=)
():
raw = json.loads(CACHE_PATH.read_text())
state = json.loads(raw) (raw, ) raw
data = state.get(, state)
docs = data.get(, {})
exported =
doc_id, doc docs.items():
title = doc.get(, ).replace(, )
created = doc.get(, )[:]
content = doc.get(, {})
text_parts = []
(content, ):
node content.get(, []):
node.get() == :
child node.get(, []):
text_parts.append(child.get(, ))
node.get() == :
level = node.get(, {}).get(, )
prefix = * level
child node.get(, []):
text_parts.append()
filename =
filepath = OUTPUT_DIR / filename
filepath.write_text()
exported +=
()
export_from_cache()