Charles Kelsoe1k 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-industry, 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)Template outputs section that renders any extra AI templates you generated in Plaud (Key Points, Daily Journal, Meeting Summary, and so on), one foldable subsection per template, instead of dropping them as unreadable .bin attachmentsBack to Chapters linksOpen in Plaud link under the H1 for quick round-tripping<note-name>-assets/ folder and references them from the note.Audio heading. Off by default because audio is large (roughly 15 MB per hour). Missing or expired audio never fails an import.{{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.{{title}} token) puts the recording date wherever you want it and formats every note name the same way. A Plaud title with no date gets a YYYY-MM-DD prefix so notes sort chronologically. The default reproduces the previous YYYY-MM-DD <title> naming, so nothing changes unless you set it.-assets folder together, keeping embedded images valid. Renaming a Plaud note in the file explorer also moves its assets folder to match. And when you rename a recording in Plaud, the note and its assets folder are renamed on the next sync instead of leaving a stale-named note behind.plaud-id already exists in your output folder shows an Imported pill; click it to open the existing note. If that recording changed in Plaud since you imported it, the row shows an Update available badge instead, so you can spot and re-import a stale note by hand. 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.
If you use the plugin in more than one vault: each vault keeps its own separate Plaud sign-in, so you sign in once per vault. This is deliberate. Vaults no longer interrupt each other's sessions, Clear sign-in in one vault leaves the others signed in, and you can point different vaults at different Plaud accounts if you want to.
Use this if you log in to Plaud with an email address and password.
Google and Apple logins do not complete in this window. If your account uses Google or Apple, see the next method, and the tip there about adding a password to your Plaud account so you can use this window instead.
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.
Recommended: add a password to your Plaud account and use email sign-in instead. A Plaud account can have a password and Google or Apple sign-in at the same time, and adding one does not change or replace how you sign in anywhere else. Set a password for your account email in Plaud's account settings, then use Sign in with email above. That method renews itself in the background for about 30 days between sign-ins. A Google or Apple session captured with the bookmark below cannot be renewed by the plugin, and on many accounts it expires after about 24 hours, which means repeating the sign-in steps every day. The bookmark method below keeps working and stays supported if you prefer not to add a password.
One-time setup (do this once):
If you use more than one vault: the bookmark is built for the vault you set it up in, and the setup page names it. Obsidian delivers this kind of link to the vault it is addressed to, so it works even when another vault window has focus. To use the plugin in a second vault, run Set up bookmark there too and keep one bookmark per vault.
Coming from an earlier version? Re-do this one-time setup and replace your old Plaud → Obsidian bookmark. The new one sends the token to Obsidian for you instead of asking you to copy and paste it, and it finds the token on accounts where the old one found nothing.
Each time you connect (whenever your session expires):
If your browser holds more than one saved Plaud sign-in, the plugin tries them against Plaud and keeps the one that actually works, so you do not have to know which is which.
If Obsidian does not open in step 3, the bookmark falls back to showing a line of text in a pop-up box. Select the whole line, copy it (Ctrl+C or Cmd+C), switch back to Obsidian, and click Paste token from clipboard. That line carries the same sign-ins the bookmark would have sent, so the plugin still picks the one that works.
If nothing at all happens when you click the bookmark, make sure you are signed in to Plaud in that tab first, then click the bookmark again.
Starting over: the Clear sign-in button clears the plugin's stored token and its own embedded sign-in session, so you can connect a different account or recover from a stuck state. It does not sign you out of Plaud in your normal web browser.
How long a sign-in lasts depends on the sign-in method. A session from the email sign-in window renews itself in the background for about 30 days, then asks you to sign in again. A session captured from a Google or Apple login cannot be renewed by the plugin, and on many accounts it lasts only about 24 hours, which is why adding a password to your account (see the tip above) is the recommended path for Google and Apple users. The plugin settings show your session's actual expiry in the status line under Plaud token, and when the plugin can tell your session is short, it says so at sign-in. When imports stop working, sign in again with the method for your account. If a session lapses during background auto-sync, the pause notice's Reconnect button reopens the right sign-in for your account type, so an SSO account is not sent to the email window where Google and Apple logins do not work.
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.
Text inside {{ }} is a date format written in Moment style, the same syntax the core Daily Notes plugin uses. Text outside the braces is kept as-is. Any forward slash (/) in the result starts a new nested folder level, whether you type it outside the braces or a date format produces it inside them, so {{YYYY}}/{{MM}} and {{YYYY/MM}} both make a year folder with month folders inside it. Dashes and spaces are fine inside the braces (they are part of the date format); keep your own words (plain letters) outside them, because letters inside are read as date tokens.
Common tokens (case matters; the same set works in the note-name field):
| Token | Expands to |
|---|---|
{{YYYY}} |
Year, for example 2026 |
{{MM}} |
Month, 01 to 12 |
{{MMMM}} |
Month name, for example June |
{{DD}} |
Day, 01 to 31 |
{{dddd}} |
Weekday name, for example Monday |
{{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) |
{{DD}}-{{MM}}-{{YYYY}} |
04-06-2026 (one folder, day-first order) |
{{YYYY}}/W{{WW}} |
2026/W23 (a 2026 folder containing a W23 folder) |
{{YYYY}}/{{MM MMMM}} |
2026/06 June (two tokens in one {{ }}) |
You choose the order and the separators, so any date layout works, and a whole layout can live in one {{ }}. A live preview under the field shows the resulting folder as you type, and insert-token buttons add the correct token at the cursor. 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.
By default each note is named YYYY-MM-DD <title>, using the recording's own date. To control the format, set a Note name template that builds the name from the same {{ }} Moment date formats as the subfolder setting, plus a {{title}} token for the recording title. Put the date before or after the title, in any order and with your own separators:
| Template | Resulting note name |
|---|---|
{{YYYY}}-{{MM}}-{{DD}} {{title}} |
2026-07-03 Team sync |
{{title}} {{YYYY}}-{{MM}}-{{DD}} |
Team sync 2026-07-03 |
{{MMM D, YYYY}} - {{title}} |
Jul 3, 2026 - Team sync (one combined date token) |
{{title}} |
Team sync (no date in the name) |
Preset buttons fill in ISO, US, and EU orders, insert-token buttons add a token at the cursor, and a live preview shows the resulting name as you type, or type your own. Keep your own words outside the braces, since bare letters inside are read as date tokens. The recording's own date replaces any date already in the Plaud title, so a title like 04/13 Meeting becomes the recording's date, and a title with no date gets one. A note name has to be a valid filename, so a template is rejected if its result would contain a character a file name cannot hold (a slash, colon, square bracket, asterisk, question mark, angle bracket, pipe, or double quote), be a reserved device name such as CON, start or end with a dot or space, or run over 200 characters. The date property inside each note stays YYYY-MM-DD regardless, for Dataview and sorting.
Like the subfolder setting, this applies to new imports; existing notes are renamed only when you rename them yourself or when the recording changes in Plaud (see Renaming recordings).
You can rename an imported recording from Obsidian and keep everything in sync:
-assets folder so embedded images keep working.-assets folder to match automatically.Update the recording title on rename (off by default) controls whether a rename is also pushed back to Plaud:
The title sent to Plaud is your new note name exactly, so Plaud matches what you see in Obsidian. If your Plaud session has expired, the plugin offers to sign you in and then finishes the update, so a rename is not lost. This is the only change the plugin writes back to Plaud.
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, and audio. Uncheck artifacts you never want to pull by default; you can always override per-batch. Audio is off by default because the files are large (roughly 15 MB per hour of recording); turn it on only if you want the original audio saved and embedded in each note.
Optional background sync, off by default. When enabled, the plugin checks Plaud on a schedule and imports new recordings on its own using your default import options, with no import window open.
It also re-imports recordings you changed in Plaud since importing them (an edited transcript, corrected speaker names, a regenerated summary), including older recordings you edited today. A re-import overwrites that note and its downloaded artifacts with Plaud's current version, so any edits you made to a synced note are replaced. Only recordings that actually changed are touched; unchanged notes are never modified. This tradeoff is called out in the settings.
If your Plaud session expires, auto-sync pauses with a single notice and resumes automatically when you reconnect (Test connection, a manual import, re-entering your token, or toggling auto-sync off and on). The notice's Reconnect button opens the sign-in that matches your account: the email window for password logins, or the browser bookmarklet flow for Google and Apple accounts.
Backfill for existing notes: notes imported before this feature shipped do not carry the version marker auto-sync compares against, so their Plaud-side edits are not detected until the marker exists. Run the command Plaud Importer: Backfill version markers for auto-sync once after enabling auto-sync to make your existing library edit-detectable. It only adds a frontmatter marker and never rewrites note content.
Optional filter, off by default, that limits import to the sources you choose. Useful when one of your Plaud devices records things you do not want in your vault, so background auto-sync stops pulling them in.
The filter applies to both manual import and auto-sync. It uses blocklist behavior: a source is imported unless you uncheck it, so a device you pair later is included by default until you change it here.
Seeing and saving the source. Whether or not the filter is on, the import list shows a small source chip on each row (the device name, or "App" for a recording made in the Plaud app or imported) so you can tell which device a recording came from while choosing what to import. To keep that on the note itself, add a {{device}} token to an Extra frontmatter row in settings, for example device: {{device}}, and each imported note records the device it came from for filtering and Dataview.
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). The only write endpoint is PATCH /file/{id} to update a recording's title, used solely by the optional title write-back described in Renaming recordings. 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. The one write it can make to Plaud is updating a recording's title, and only when you enable the optional title write-back and confirm or opt into automatic updates (see Renaming recordings); with that setting off, every call to Plaud is read-only.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 tokens your logged-in session already holds, checks them against Plaud to find the one that works, and stores that one 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.
Questions, ideas, and general discussion happen on Discord. For anything that needs tracking, a GitHub issue is still the better home.
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.