Meeting Note Importer
approvedby Pierre Awaragi
Import meeting notes from calendar invites — drop a .ics file or drag a meeting directly from Outlook. - This plugin has not been manually reviewed by Obsidian staff.
Meeting Note Importer
An Obsidian plugin that creates structured meeting notes from calendar invites — drop a .ics file, drag a meeting directly from Outlook, or enter meeting details manually.
Features
- Drag and drop a
.icsfile from Finder, Explorer, or any file manager - Drag a meeting directly from Outlook for Mac — no file export needed
- Click to browse for a
.icsfile via the file picker - Quick/manual entry — create a note by typing a title and picking a date and time, no file needed
- Populates title, date, attendees, organizer, location, meeting URL, and description automatically
- Skips duplicate notes — if a note for that meeting already exists it is returned without overwriting
- Supports a custom Obsidian template with
{{date}}and{{title}}placeholders - Configurable note name template with
{{date}},{{title}},{{startTime}},{{endTime}}, and{{organizer}}placeholders - Override current note — when a file is open, optionally write the meeting content into that file instead of creating a new one; a secondary toggle also renames the file to match the meeting
- Configurable target folder and heading names for attendees and notes sections
- Localised UI in English, French, and Spanish — automatically follows Obsidian's language setting
Note: This plugin is designed for desktop use. Drag-and-drop and direct Outlook integration rely on desktop APIs. Mobile behaviour is untested.
Usage
From a calendar file
Click the calendar icon in the ribbon, or run the command Create meeting note from file, then:
- Drag a
.icsfile into the drop zone, or - Drag a meeting event directly from Outlook for Mac, or
- Click the drop zone to browse for a
.icsfile
Quick/manual entry
Run the command New quick meeting note (or assign it a hotkey in Settings → Hotkeys) to open the modal directly on the Quick/Manual Entry tab. Enter a title, adjust the date and times if needed, and press Create (or hit Enter in the title field).
- Date defaults to today
- Start time defaults to the current time rounded to the nearest time increment
- End time defaults to start + one increment
The plugin creates a note in the configured folder and opens it immediately.
Default note structure
---
title: "2024-06-15 - Team Sync"
date: "2024-06-15"
tags:
- meeting
---
# 2024-06-15 - Team Sync
## Attendees
- Jane Smith (Organizer)
- John Doe
## Notes
> https://teams.microsoft.com/meet/...
## Summary
## Action Items
- [ ]
Settings
| Setting | Default | Description |
|---|---|---|
| Show ribbon icon | On | Show the calendar icon in the ribbon bar. Change takes effect after reloading Obsidian. |
| Save in active folder | On | Save the note in the folder of the currently open file |
| Fallback notes folder | (vault root) | Folder used when active-folder is off, or no file is open |
| Template file | (built-in) | Path to a custom Obsidian template |
| Note name template | {{date}} - {{title}} | Filename template — supports {{date}}, {{title}}, {{startTime}}, {{endTime}}, {{organizer}} |
| Attendees heading | ## Attendees | Heading under which attendees are injected |
| Notes heading | ## Invite Notes | Heading under which the meeting URL and description are injected |
| Open note after creation | On | Automatically open the note after it is created |
| Rename note by default when overriding | Off | Pre-enable the rename toggle when the override toggle is turned on |
| Time increment | 30 min | Step size used for quick-entry time defaults and start-time rounding (15, 30, or 60 min) |
Localisation
The plugin UI is available in English (default), French, and Spanish. The language is detected automatically from Obsidian's language setting (via the built-in moment.js locale).
To add a new language:
- Copy
src/ts/i18n/en.jsontosrc/ts/i18n/<code>.json(e.g.de.json) - Translate all values — keys must stay identical to
en.json - Import and register it in
src/ts/i18n.ts:import de from "./i18n/de.json"; const locales = { en, fr, es, de }; - Rebuild with
npm run build
Installation
Manual
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Copy them into your vault at
.obsidian/plugins/meeting-note-importer/ - Enable the plugin in Settings → Community plugins
Development
# Install dependencies
npm install
# Copy .env.example and set your vault plugin path
cp .env.example .env
# Development build (with sourcemaps)
npm run dev
# Production build
npm run build
# Copy dist/ to your local vault (reads OBSIDIAN_PLUGIN_DIR from .env)
npm run deploy
# Development build + deploy in one step
npm run dev:deploy
# Remove dist/
npm run clean
Testing
# Run all unit tests
npm test
# Integration test — parse a real .ics file and print the generated note
TEST_ICS_FILE=/path/to/invite.ics npm test
# Integration test — parse Outlook meeting text saved to a file
TEST_OUTLOOK_FILE=/path/to/invite.txt npm test
The integration tests are skipped automatically when the env vars are not set, so npm test always works without any fixtures.
To get a .ics file from Outlook for Mac: right-click a calendar event → Export…, or drag the event from Calendar.app to Finder.
Releases
-
Prepare the version bump — choose
patch,minor, ormajor:npm run release:prepare patchThis updates
package.jsonandmanifest.json. Commit the result:git add package.json manifest.json git commit -m "chore: bump version to X.Y.Z"Or do both in one step with the
--commitflag:npm run release:prepare -- patch --commit -
Publish — pushes the branch, tags the commit, and pushes the tag:
npm run releaseGitHub Actions picks up the tag, builds the plugin, runs tests, and creates a release containing
main.js,manifest.json, andstyles.cssas flat assets ready for manual installation.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.