Charles Kelsoe309 downloadsImport meeting summaries, transcripts, and attachments from Plaud.AI into your vault.
⚠️ Early Alpha
This plugin is in early alpha and under active development. Expect bugs, UI changes between releases, and occasional rough edges. It talks to an undocumented, reverse-engineered Plaud web API that Plaud can change at any time.
Before installing, please read What to know before you install — it explains the main tradeoffs in plain language, and exactly what the plugin will and will not touch in your vault.
No warranty — use at your own risk, and you may want to test in a non-critical vault first.
Please report issues
I use this plugin myself every day, so I often catch breakage quickly — but I am one person on one account, and Plaud can change their API for some accounts or regions before it affects mine. If something breaks for you, an issue report is the single biggest help, and may be the first signal I get.
- File a GitHub issue at ckelsoe/obsidian-plaud-importer/issues.
- Include your Obsidian version, plugin version, OS, and steps to reproduce.
- Attach a debug log — see Capturing a debug log below. Auth headers are redacted automatically.
- Attach a screenshot or the generated note if the output looks wrong.
Feature requests and API-shape observations are welcome too — open an issue or discussion.
Import meeting recordings, AI summaries, transcripts, and attachments from Plaud.AI into your Obsidian vault as markdown notes.
Each recording becomes a single note with frontmatter metadata, a Plaud-generated summary, and a heading-based transcript section with chapter navigation. Images, mind-maps, and other Plaud artifacts land in a matching -assets folder next to the note.
Plaud does not offer an official API yet, so this plugin works by using Plaud's own (undocumented) web service the same way the Plaud website does. That is what makes it possible at all, and it brings a few tradeoffs worth understanding up front. None of them put your existing notes at risk.
plaud-headline, plaud-category, plaud-language, plaud-template, plaud-model, plaud-note-id, plaud-summary-id, plaud-summary-version) — emitted only when present, never load-bearing.AI Suggestions section pulled from Plaud's ai_suggestion field when the response includes one (separate from the main summary)Back to Chapters linksOpen in Plaud link under the H1 for quick round-tripping<note-name>-assets/ folder and references them from the note.{{yyyy-MM}}) files notes into per-month, per-week, or per-quarter folders built from the recording date, instead of one flat folder. Attachments follow their note.plaud-id already exists in your output folder shows an Imported pill. Click it to open the existing note. Re-importing is still possible and honors your duplicate-handling setting.-assets folder will be replaced; in a multi-select import you can escalate to "Overwrite all remaining" / "Skip all remaining" or cancel the batch.SecretStorage / SecretComponent APIs used to handle the Plaud token securely.isDesktopOnly: true). The authentication path depends on Electron APIs (including the separate sign-in window) that are not available on Obsidian Mobile. This restriction will be lifted when Plaud ships a public OAuth API (see Plaud API status below).If you don't find it in Browse yet, it may still be in review for the community catalog. Use BRAT (below) to install it in the meantime.
BRAT installs and auto-updates plugins straight from GitHub — useful before this plugin lands in the catalog, or to track pre-release builds.
https://github.com/ckelsoe/obsidian-plaud-importer.main.js, manifest.json, styles.css) and installs Plaud Importer.main.js, manifest.json, and styles.css from the latest release.<your vault>/.obsidian/plugins/plaud-importer/.Open Settings → Community plugins → Plaud Importer and configure:
The plugin reads your recordings using your Plaud web-session token. You never give the plugin your Plaud password — you sign in to Plaud directly, and the plugin captures only the session token your logged-in session already uses.
Because Plaud has no official API, which method works depends on how you log in to Plaud. Pick the one that matches your account. Both store your token the same way; the difference is only how the token is captured.
Use this if you log in to Plaud with an email address and password.
Google and Apple logins do not complete in this window. For those, use the next method.
Use this if you log in to Plaud with single sign-on (SSO) through a Google or Apple account. Those logins only work in a real web browser, so this method signs you in there and hands the token back to Obsidian. There is a quick one-time setup (saving a bookmark), then a few clicks each time.
One-time setup (do this once):
Each time you connect (about once a day, when the token expires):
Why open a meeting in step 3: the bookmark watches for the request your token rides on, and opening a meeting is what triggers that request. If no pop-up appears, make sure you clicked the bookmark first, then open a meeting.
Starting over: the Clear sign-in button signs you out and clears the stored token, so you can connect a different account or recover from a stuck state.
Your sign-in token lasts about a day. When imports stop working, repeat the "each time you connect" steps to get a fresh one.
The token is stored in Obsidian's per-vault secret storage either way. It is never written to data.json and does not travel through Obsidian Sync. Switching vaults requires re-connecting.
Regional accounts (EU and others) need no extra setup. If Plaud routes your account to a regional server, the plugin detects it on the first import and remembers it.
After signing in, click Test connection to confirm your token reaches Plaud. It makes one lightweight call and reports either that your token works or the specific problem (for example, an expired token that needs a fresh sign-in). Use it any time imports start failing to tell quickly whether you need to sign in again.
Folder inside your vault where imported notes are written. Defaults to Plaud. Nested paths work (Archive/Plaud/2026).
By default every note lands directly in the output folder. To keep a growing library organized, set a Subfolder template that files each note into a subfolder built from the recording's date. Leave it empty to keep the flat layout.
A forward slash (/) starts a new nested folder level, so {{yyyy}}/{{MM}} makes a year folder with month folders inside it. Everything else (dashes, spaces, words) stays within a single folder name.
Tokens (combine with your own text and separators):
| Token | Expands to |
|---|---|
{{yyyy}} |
Year, for example 2026 |
{{MM}} |
Month, 01 to 12 |
{{dd}} |
Day, 01 to 31 |
{{yyyy-MM}} |
Year and month, for example 2026-06 |
{{ww}} |
ISO week number, 01 to 53 |
{{Q}} |
Quarter, 1 to 4 |
Examples (folder for a June 4 2026 recording):
| Template | Resulting folder |
|---|---|
{{yyyy-MM}} |
2026-06 (one folder) |
{{yyyy}}/{{MM}} |
2026/06 (a 2026 folder containing a 06 folder) |
{{yyyy}}-{{MM}} |
2026-06 (one folder, your own dash) |
{{dd}}-{{MM}}-{{yyyy}} |
04-06-2026 (one folder, day-first order) |
{{yyyy}}/W{{ww}} |
2026/W23 (a 2026 folder containing a W23 folder) |
The numbers are fixed and not locale dependent; you choose the order and the separators, so any date layout works. The folder is built from the recording's own date, so re-importing always resolves to the same place. A recording with no usable date goes to an _undated subfolder.
The template applies to new imports; notes you already imported stay where they are. Each note's -assets folder follows it into the same subfolder. If you change the template later, re-importing an existing recording updates the note in place instead of creating a duplicate.
What the importer does when a note for a recording already exists in the output folder:
skipped in the summary.-assets folder before re-downloading. A confirmation modal fires once per import batch before any overwrite happens.-assets folder will be replaced, and offers Overwrite, Skip, or (in multi-item batches) Overwrite all remaining, Skip all remaining, and Cancel import.What the "Review artifacts first" checklist starts with when you begin a multi-import: transcript, summary, attachments, mindmap, card. Uncheck artifacts you never want to pull by default; you can always override per-batch.
tags: frontmatter: no tags, your custom tags only, Plaud tags (the default), or all (which also adds Plaud's AI keywords as plaud/... tags).plaud-meeting.tags:, optionally write them to a keywords: property instead. Off by default: Plaud's keyword list can run to hundreds of low-value entries per recording, which buries the tags that matter and adds noise to every note. Turn it on if you want the full list.Transcript heading uses (chapters render one level deeper). Pick what fits your note style.Off by default. When on, captures API request/response metadata and parsed results into an in-memory buffer for troubleshooting. Auth headers are stripped. Payloads may contain transcript text, speaker names, and recording metadata, so only enable when you are preparing a bug report. Use the command Plaud Importer: Debug: copy debug log to clipboard to export the session.
When something breaks, a debug log is the most useful thing to attach to an issue. It records the API requests and responses the plugin made (auth headers are stripped automatically; payloads may contain transcript text and recording metadata, so review before posting).
⚠️ This plugin currently uses Plaud's undocumented web API under api.plaud.ai. The endpoints in use are GET /file/simple/web for listing recordings, POST /ai/transsumm/{id} for transcript and legacy summary retrieval, and GET /file/detail/{id} for the richer detail bundle (polish-revision summaries, AI keywords, mindmap and card attachments, and AI suggestions). None of these are officially published or supported by Plaud.
The listing and /ai/transsumm/{id} endpoints were informed by prior community work, most directly rsteckler/applaud, with cross-validation against JamesStuder/Plaud_API. Those projects established that the data was reachable from a logged-in web session and gave a useful starting point for the auth and listing flow. The richer /file/detail/{id} surface used by this plugin (the transaction_polish polish-revision summary, auto_sum_note, ai_suggestion, the GPT-5 frontmatter schema fields, and the pre-signed S3 URLs for mindmap, card, and attachment assets), along with the encoding quirks (millisecond timestamps on the listing endpoint, the empty-JSON POST body shape on /ai/transsumm/{id}), were verified and extended through direct inspection of live Plaud responses during this plugin's development.
What this means for you:
SecretStorage, never in data.json, and never logs it.OAuthPlaudClient stub is already stubbed in the codebase for the migration. The mobile-only restriction (isDesktopOnly) exists because of the current auth path and will be re-evaluated at that point.I am actively monitoring Plaud's developer announcements and waitlist for the official API. If you hear anything, please open an issue.
Plaud Importer is desktop-only, runs on your device, and has no telemetry or maintainer server — it talks only to Plaud, and only when you ask it to. Obsidian's plugin scan discloses a few capabilities. Here is exactly what each is and why it exists:
api.plaud.ai, or your regional host) to list and fetch your recordings, summaries, transcripts, and attachments, and downloads attachment files from the CDN hosts Plaud's responses point at. It contacts no other third party, and only when you trigger an import, scroll to load more recordings, or download attachments.web.plaud.ai) in a separate window so you can log in normally. For Google or Apple logins, you sign in through your normal web browser instead and hand the token back with a bookmarklet. Either way, your password is entered into Plaud's page and is never seen by the plugin; it reads only the session token your logged-in session already sends to Plaud, and stores it via SecretStorage. The sign-in runs in a private session isolated from Obsidian's other web views.plaud-id). It does not read the contents of unrelated notes.SecretStorage (per-vault, not synced); data.json holds only a reference id, never the token.All vault writes go through Obsidian's Vault API (Vault.create, Vault.process) with no direct filesystem access, and nothing here sends your data anywhere except Plaud.
See PRIVACY.md for the full privacy policy and liability disclaimer, and SECURITY.md for the security policy. The plugin is provided "AS IS" with no warranty (see LICENSE); it is not affiliated with or endorsed by Plaud.AI, and you use it at your own risk.
Please report bugs and feature requests at github.com/ckelsoe/obsidian-plaud-importer/issues. Include:
See CONTRIBUTING.md for local build and test instructions.
MIT — see LICENSE.
Inspired by prior community work on Plaud's web API. rsteckler/applaud and JamesStuder/Plaud_API demonstrated that recordings, transcripts, and summaries are reachable from a logged-in web session, and gave this plugin a head start on the listing and transcript-retrieval flow. The richer detail-bundle surface (polish-revision summaries, AI keywords, mindmap and attachment asset URLs, AI suggestions, GPT-5 schema fields) and the response-shape and timing quirks were worked out by inspecting live Plaud responses during this plugin's development.
Thanks to Obsidian for the SecretStorage and SecretComponent APIs that make storing the Plaud token securely a non-issue.