# MeetingMind — full content for LLMs > Turn meeting transcripts into connected Obsidian notes. Auto-import from Fireflies, Otter, Zoom. AI summaries, action items, auto-linking. _Generated 2026-05-16T10:32:09.149Z. For the curated index see https://meetingmind.me/llms.txt._ --- ## About the product MeetingMind is an Obsidian plugin that turns meeting transcripts into connected, AI-enriched notes inside your vault. It supports Zoom, Google Meet, Microsoft Teams, Fireflies.ai, Otter.ai, and any VTT/SRT/TXT file. Free tier covers import, auto-linking, participant tracking, folder watcher, and the meeting dashboard. Pro ($39 one-time, BYOK) adds AI summaries, action item extraction with assignees, decision extraction, entity extraction, and participant insights — all running with the user's own OpenAI or Claude API key. No data ever touches MeetingMind servers. ## About the author Patrick Tumbucon — https://patricktumbucon.com. Builder of MeetingMind. I enjoy problem solving with a bit of whimsy. In my spare time, I stare at my planted aquariums, tend to my garden, hang out outdoors with my corgi, and play fighting games. --- ## Blog posts ### How to import Zoom transcripts into Obsidian - Source: https://meetingmind.me/blog/import-zoom-transcripts-obsidian - Author: Patrick Tumbucon - Published: 2026-05-15 - Updated: 2026-05-15 - Tags: obsidian, zoom, meeting-notes, transcripts, vtt > A step-by-step workflow for converting Zoom VTT and TXT transcripts into clean Obsidian notes. Manual cleanup, Templater scripts, and one-click automation. If you've ever downloaded a Zoom transcript and pasted it into Obsidian, you've seen the problem. The file is technically text, but it's not text you can read. It's `.vtt` — WebVTT format — and it looks like this: ```vtt WEBVTT 1 00:00:02.430 --> 00:00:05.910 Dorothy Cisneros: Alright, let's get started. Can everyone hear me? 2 00:00:06.120 --> 00:00:09.450 Remi Parks: Yeah, audio's good on my end. ``` That's useless as a note. The timestamps clutter every line, the numbering is meaningless, and the formatting fights with Obsidian's markdown rendering. This post is the cleanup workflow. ## What Zoom actually gives you Zoom produces three different transcript-shaped artifacts and it's worth knowing which is which: **Recording transcript (`.vtt`)** — Generated from cloud-recorded meetings. Available 10-30 minutes after the meeting ends. Includes speaker labels and timestamps. This is what most people mean by "Zoom transcript." **Live transcript (`.txt`)** — If you enabled live transcription during the meeting, Zoom saves it as a plain text file. Cleaner than the VTT but no timestamps. **Chat log (`.txt`)** — Separate from transcripts entirely. The chat panel saved as text. Useful but a different document type. To grab any of them: Zoom web portal → Recordings → click the meeting → download. VTT and TXT live alongside the video file. This post focuses on the VTT case since it's the most common and the most annoying to deal with. ## The cleanup problem A clean Obsidian meeting note looks like this: ```markdown --- date: 2026-05-15 duration: 47 participants: - "[[Dorothy Cisneros]]" - "[[Remi Parks]]" source: zoom tags: [engineering, api] --- ## Summary (your summary) ## Action Items - [ ] Item one (@person) ## Transcript > [!note]- Full transcript (click to expand) > > **Dorothy Cisneros**: Alright, let's get started. > **Remi Parks**: Yeah, audio's good on my end. ``` To get from raw VTT to that, you need to: 1. Strip the `WEBVTT` header and cue numbers 2. Remove or hide the timestamps 3. Convert the speaker labels into something readable 4. Wrap the transcript in a collapsible callout so it doesn't take over the note 5. Add frontmatter with date, participants, and tags Three ways to do it. Pick based on volume. ## Manual workflow (occasional use) If you process a Zoom transcript every week or two, manual is fine. Total time: ~5 minutes per meeting. 1. Open the `.vtt` file in any text editor. 2. Delete the `WEBVTT` header line. 3. Find-and-replace the timestamp blocks. In VS Code, regex `\d+\n\d{2}:\d{2}:\d{2}\.\d{3} --> \d{2}:\d{2}:\d{2}\.\d{3}\n` replaced with nothing strips all the cue numbers and timestamps in one pass. 4. Find-and-replace `^(.+?):` (regex) with `**$1**:` to bold the speaker names. 5. Paste into a new Obsidian note, add frontmatter, wrap in a callout. Save the regex pair somewhere. You'll use them again. ## Templater workflow (recurring use) If you do 3+ Zoom meetings a week, automate it. [Templater](https://github.com/SilentVoid13/Templater) is the standard Obsidian plugin for scripted templates. A minimal Templater script that takes a VTT file path and produces a formatted note: ```javascript <%* const vttPath = await tp.system.prompt("Path to VTT file"); const raw = await app.vault.adapter.read(vttPath); // Strip WEBVTT header and cue blocks let cleaned = raw .replace(/^WEBVTT\n+/, "") .replace(/^\d+\n\d{2}:\d{2}:\d{2}\.\d{3} --> \d{2}:\d{2}:\d{2}\.\d{3}\n/gm, "") .replace(/^(.+?):/gm, "**$1**:") .trim(); // Extract unique speakers for the participants list const speakers = [...new Set( cleaned.match(/\*\*(.+?)\*\*:/g)?.map(s => s.replace(/\*\*|:/g, "")) ?? [] )]; const participants = speakers.map(s => ` - "[[${s}]]"`).join("\n"); const today = tp.date.now("YYYY-MM-DD"); tR += `--- date: ${today} source: zoom participants: ${participants} tags: [meeting] --- ## Summary ## Action Items - [ ] ## Transcript > [!note]- Full transcript (click to expand) > ${cleaned.split("\n").map(l => "> " + l).join("\n")} `; %> ``` Drop a VTT file into your vault, run the template, point it at the file path, and you get a complete note with participants pre-linked. Edit the summary and action items by hand. This handles maybe 80% of cases. The remaining 20% — speakers without colons, multi-line statements, edge cases in Zoom's VTT output — you'll fix manually as they come up. ## Plugin workflow (zero friction) The Templater script works but is brittle. Zoom occasionally changes its VTT format. Speaker names with punctuation break the regex. Edge cases accumulate. If you don't want to maintain a regex, [MeetingMind](/) handles Zoom VTT parsing natively — drop the file in a watched folder and it produces the same shape of note automatically, plus auto-links participants to existing notes in your vault. Free tier handles import; [Pro tier](https://tumbucon.gumroad.com/l/meetingmind-pro?utm_source=meetingmind.me&utm_medium=blog&utm_campaign=pro&utm_content=import-zoom-transcripts-obsidian) ($39 lifetime) adds AI summaries and action item extraction. Disclosure: I built it. The structural advantage over Templater is the auto-linking. If you already have a `[[Dorothy Cisneros]]` note in your vault, the plugin links to it. If you don't, it creates one. The Templater script just emits the wikilink and hopes the note exists. ## What about Zoom's AI summaries? Zoom AI Companion produces summaries and action items inside Zoom itself. They're fine. The reason to import the transcript into Obsidian anyway is that the summary lives in Zoom's web portal — disconnected from everything else you know. The same summary in your Obsidian vault connects to the project, the people, and the prior meetings on the same topic. If you have AI Companion, paste its summary into the `## Summary` section of your note and skip the part where you write one yourself. You still want the transcript imported for searchability. ## After import Getting the transcript into Obsidian is step 1 of a longer workflow. The full version — capture, transcribe, import, connect — is covered in [How to transcribe meetings into Obsidian](/blog/transcribe-meetings-into-obsidian). The short version: wikilink your participants and projects, run Dataview queries over the notes, and the meeting graveyard becomes a navigable record. ## Common questions **Where does Zoom store transcripts?** Cloud recordings: zoom.us → Recordings. Local recordings don't generate transcripts automatically — you'd need to run the audio through Whisper or Otter separately. **Can I get a transcript from a meeting I already recorded?** Only if it was a cloud recording. Local recordings produce audio only, no transcript. Run the audio through Whisper after the fact. **Why is my VTT file empty?** Zoom transcripts take 10-30 minutes to process after the meeting ends. If it's been longer, check that you have transcription enabled in Zoom settings (Account Settings → Recording → Audio transcript). **What if my Zoom plan doesn't include transcription?** Cloud recording transcripts require a paid Zoom plan. As a workaround, record the meeting locally and transcribe the audio with Whisper or Otter. **Will this work for `.txt` transcripts too?** Yes. TXT transcripts are simpler — no timestamps to strip. Skip step 3 in the manual workflow and the cue-block regex in the Templater script. --- *Patrick Tumbucon builds MeetingMind, an Obsidian plugin for importing and enriching meeting transcripts. Previously a Senior Software Engineer at Microsoft Azure (Identity Governance) and Amazon (Compliance Engineering). Currently at Guild Education.* --- ### How to transcribe meetings into Obsidian: a practical workflow - Source: https://meetingmind.me/blog/transcribe-meetings-into-obsidian - Author: Patrick Tumbucon - Published: 2026-05-15 - Updated: 2026-05-15 - Tags: obsidian, meeting-notes, transcription, workflow, pkm > A complete workflow for meeting transcripts in Obsidian — recording, transcription, import, cleanup, and linking. Covers Otter, Whisper, Fireflies, Zoom. Meetings produce a lot of useful information and almost no usable artifacts. The transcript exists somewhere — in Otter, in your Zoom cloud, in a Granola folder — but it doesn't connect to anything else you know. The decision you made about the API migration lives in one app. The person who made it lives in another. The project context lives in a third. The workflow below gets meeting transcripts into Obsidian where they can actually be cross-referenced with everything else. It's the one I use, refined over a couple of years of trying to make this stop being annoying. ## The shape of the workflow Four steps, in order: 1. **Capture** — record the meeting 2. **Transcribe** — turn audio into text 3. **Import** — get the text into your Obsidian vault 4. **Connect** — link it to the people, projects, and decisions it touches Most posts about this stop at step 3. Step 4 is where the value is. ## 1. Capture You have three reasonable options. Pick based on what's already in your stack. **Use the meeting platform's built-in recording.** Zoom, Google Meet, and Microsoft Teams all record and transcribe natively. Quality is good enough for most use cases. Transcripts are stored in the cloud and exportable as `.vtt` (Zoom), `.docx` (Teams), or Google Doc (Meet). **Use a dedicated transcription tool.** Otter.ai, Fireflies, Granola, and Fathom all join meetings as a bot, transcribe in real time, and produce cleaner output than the native tools. Fireflies and Granola also offer APIs, which matters later. Otter is the most common and the cheapest. **Record locally and transcribe later.** Voice Memos on iOS, Recorder on Android, or any audio recorder on your laptop. Useful for in-person meetings or when you don't want a bot in the room. Pair with Whisper for transcription. If you're not sure which to pick: Otter for online meetings, Voice Memos + Whisper for in-person. ## 2. Transcribe If your capture tool already produced a transcript, skip to step 3. For raw audio, you have two paths. **OpenAI Whisper (local or cloud).** The quality benchmark. Run it locally with `whisper-cpp` if you care about privacy or have a lot of files. Use the OpenAI API if you want it to be one command: ```bash # Local whisper meeting.m4a --model medium --output_format txt # Cloud (via API) curl https://api.openai.com/v1/audio/transcriptions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -F file="@meeting.m4a" \ -F model="whisper-1" ``` **Hosted services.** Otter, Rev, Descript, AssemblyAI. Faster turnaround, no setup. Pricier per hour but worth it if you have one meeting a week and don't want to maintain a Whisper install. Whichever you use, export as plain text or VTT. Markdown is fine. SRT is fine if you want timestamps. ## 3. Import This is the step that's annoyingly manual for most people and the reason this post exists. The naive workflow is: download transcript, open Obsidian, create new note, paste, fix the formatting, add frontmatter, save. Do that fifteen times and you'll stop doing it. The decent workflow uses a watched folder. Configure your transcription tool (or a manual download step) to drop files into a specific folder inside your vault. Use a plugin or script to pick them up and convert them into notes with consistent formatting. A minimal template: ```markdown --- date: 2026-05-15 duration: 47 participants: - "[[Dorothy Cisneros]]" - "[[Remi Parks]]" source: otter tags: [engineering, api, migration] --- ## Summary (paste your summary here, or generate one) ## Action Items - [ ] Item one (@person) - [ ] Item two (@person) ## Transcript > [!note]- Full transcript (click to expand) > > **Dorothy Cisneros** (00:00): Alright, let's get started... ``` The YAML frontmatter at the top is what makes the note queryable with Dataview later. The collapsible callout keeps the raw transcript out of your face but available when you need it. If you want to do this yourself, [Templater](https://github.com/SilentVoid13/Templater) plus a folder-watcher script will get you there. If you want it to just work, this is what [MeetingMind](/) handles automatically — disclosure: I built it, so take that endorsement with the appropriate grain of salt. Free tier covers the import, [Pro tier](https://tumbucon.gumroad.com/l/meetingmind-pro?utm_source=meetingmind.me&utm_medium=blog&utm_campaign=pro&utm_content=transcribe-meetings-into-obsidian) ($39 lifetime) adds AI summaries and entity extraction. ## 4. Connect This is the step that makes Obsidian different from a folder full of `.docx` files. A transcript that says "Dorothy mentioned the Phoenix Project" should become a transcript that says `[[Dorothy Cisneros]] mentioned the [[Phoenix Project]]`. Then the meeting shows up when you open Dorothy's note. And Dorothy's note shows up when you open the Phoenix Project note. The graph builds itself. Three ways to do this: **Manual.** Open the note, wikilink the names yourself. Works fine for one or two meetings a week. Falls apart fast above that. **Find-and-replace with Templater.** If your participant list is stable, you can write a Templater script that auto-wikilinks names from a known list. Brittle but workable. **Plugin automation.** Plugins like MeetingMind, Smart Connections, and Various Complements can detect existing notes and link them automatically. They differ in approach: Smart Connections uses embeddings, Various Complements uses fuzzy text matching, MeetingMind uses your existing vault index plus aliases. Once linking is in place, layer Dataview on top: ```dataview TABLE date, duration, participants FROM "Meetings" WHERE contains(participants, [[Dorothy Cisneros]]) SORT date DESC ``` That query gives you every meeting you've had with Dorothy, sortable, in any note. The transcript graveyard becomes a navigable record. ## A complete example workflow For a working professional with 5-10 meetings a week — say, Remi running a small consultancy with Dorothy, Safia Spence, and Eliana Kidd as recurring clients: 1. **Capture.** Bot joins via Otter or Fireflies. 2. **Transcribe.** Happens automatically. 3. **Import.** Transcripts land in a `Meetings/Inbox/` folder via API integration. They're auto-formatted into the template above with frontmatter, participants, and a collapsible transcript. 4. **Connect.** Participants get wikilinked to their existing notes — `[[Safia Spence]]`, `[[Eliana Kidd]]`, the client projects they're working on. AI extracts action items and decisions if that's configured. Total ongoing effort per meeting: ~2 minutes to scan the summary and confirm action items, vs. ~15 minutes to do it manually. ## Common questions **Do I need Pro features?** No. The free tier of any of these tools (or a Templater + watched folder setup) handles import and linking. AI features are nice-to-have, not required. **What about privacy?** If you process meetings about sensitive material, use local Whisper and a self-contained plugin setup. Don't send transcripts through a third-party AI service. Your own OpenAI/Claude API key sending content directly to those providers is the next tier — your transcripts go to OpenAI/Anthropic but not through an intermediary. **Why Obsidian and not Notion / Granola / Mem?** Mostly because everything else lives in Obsidian for me already. Granola is a better standalone meetings app. Notion is fine if your knowledge base is already there. Obsidian wins when you want the meeting to connect to a much larger personal knowledge graph. **What if I have hundreds of old transcripts?** Batch import them into a folder, run the watcher once, then triage. You'll lose some linking quality because the notes don't exist for some of the old context, but the participant and project links will still form. Run `MeetingMind: Rebuild vault index` (or equivalent) after you add new context notes to catch up. ## What this gets you After a couple of months of doing this consistently, you have something most people don't: a searchable, cross-referenced record of every meeting you've been in. You can ask questions like "what did we decide about authentication?" and get a real answer with links to the conversations where it was decided. You can pull up a person's note and see every interaction you've had. You can run Dataview queries over decisions, action items, and topics. The setup is two hours of work once. The compounding value is a knowledge base that gets more useful every week instead of less. --- *Patrick Tumbucon builds MeetingMind, an Obsidian plugin for importing and enriching meeting transcripts. Previously a Senior Software Engineer at Microsoft Azure (Identity Governance) and Amazon (Compliance Engineering). Currently at Guild Education.* ---