Granola to Obsidian

SkillDocs & knowledge

Use when asked to import, sync, or add Granola meeting notes into the Obsidian vault. Triggers on "meeting notes", "Granola", "import meetings", "add notes from this week", or any request to move meeting content into Obsidian.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Granola to Obsidian skill

What this skill tells your AI

The instructions your AI receives, as published by harperreed/dotfiles in .claude/skills-archive/granola-to-obsidian/SKILL.md and read by ahel’s review.

Import Granola meeting notes into the 2389 Obsidian vault with correct formatting.

When to Use

  • User asks to import/sync/add meeting notes from Granola
  • User references specific dates and wants notes created
  • User says "grab my meetings from last week" or similar

Critical: Read Before You Write

NEVER guess the format. Before creating any meeting note, read 2-3 existing files in Meeting Notes/ to confirm current conventions. Formats evolve.

Step-by-Step Process

1. Confirm Date Range

  • Use the current year (check today's date, do NOT default to 2025)
  • If user gives day-of-week names, verify they match the actual calendar
  • custom_end should be the day AFTER the last date (exclusive upper bound)

2. List Meetings from Granola

mcp__granola__list_meetings
  time_range: "custom"
  custom_start: "YYYY-MM-DD"
  custom_end: "YYYY-MM-DD"   # day after last date

3. Get Full Meeting Details

mcp__granola__get_meetings
  meeting_ids: ["id1", "id2", ...]   # max 10 per call

4. Read Existing Notes for Format Reference

Glob: Meeting Notes/*.md
Read: 2-3 recent files to confirm frontmatter and body format

5. Check for Duplicates

Search by meeting title in existing filenames:

Glob: Meeting Notes/*{partial-title}*

If a file with a matching title exists, ask the user before overwriting.

6. Create the Note Files

File Format Template

Filename: Date prefix with hyphen-separated title: YYYY-MM-DD-Title.md

  • Meeting Notes/2026-01-30-Camp Sessions.md (correct)
  • Meeting Notes/Camp Sessions.md (WRONG — older files use this, but new notes get the date prefix)

Content structure:

---
Created by: Harper Reed
Created time: YYYY-MM-DDTHH:MM:SS
Event time: YYYY-MM-DD
Type: <see type list>
Attendees:
  - Name One
  - Name Two
---
# Meeting Title

Day, DD Mon YY · location-or-participant-emails

### Section Heading

- Bullet point content
  - Nested detail
- Another point

### Another Section

- Content follows Granola's summary structure directly

Frontmatter Fields

FieldValueSource
Created byHarper ReedAlways (note creator)
Created timeISO 8601 timestampFrom Granola meeting datetime
Event timeISO 8601 date onlyFrom Granola meeting date
TypeSee belowClassify from content
AttendeesYAML list of namesFrom Granola participants

Do NOT add: notion-id, base, Last edited by, Last edited time (those are legacy Notion migration artifacts on older files).

Type Classification

TypeWhen to Use
InvestorsVC meetings, fundraising discussions
TacticalInternal team planning, standups
TrainingResearch, experiments, learning sessions
CampExternal events, camp sessions
BrainstormIdeation, product exploration
StrategyCompany direction, GTM, partnerships
Product DemoProduct demonstrations, demos
MeetupCommunity events, group gatherings
1:1One-on-one conversations

If unsure, omit the Type field rather than guessing wrong.

Body Date Format

Use: Day, DD Mon YY · context

Examples:

  • Wed, 28 Jan 26 · Betaworks
  • Thu, 29 Jan 26 · dylan@2389.ai, harper@2389.ai
  • Fri, 30 Jan 26

The context after · is optional. Use location if known, participant emails if it's a small meeting, or omit.

Body Content

  • Use the Granola summary sections directly as H3 (###) headings
  • Keep bullet-point structure from Granola
  • Do NOT invent sections like "Key Decisions" or "Action Items" with checkbox syntax unless Granola's summary actually contains them
  • Do NOT add - [ ] task checkboxes unless the source has them
  • Preserve Granola's summary structure faithfully

Private Notes

If Granola returns private_notes, do NOT include them in the Obsidian file by default. Ask the user if they want private notes included.

Common Mistakes

MistakeFix
Using the wrong yearAlways check today's date for current year
Missing date prefix in filenameNew notes use YYYY-MM-DD-Title.md format (older files without prefix are legacy)
Inventing frontmatter fieldsUse only: Created by, Created time, Event time, Type, Attendees
Adding Notion legacy fieldsnotion-id and base are only on migrated files
Checkbox action itemsDon't add - [ ] unless source has them
Guessing format without readingAlways read 2-3 existing notes first
Bold labels in bodyDon't use **Date:** patterns, use the date line format
Overwriting existing notesAlways check for duplicates by title first

Signals

GitHub stars
332
Forks
47
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
granola-to-obsidian
Source
github.com/harperreed/dotfiles