Plaud Importer
unlistedby Charles Kelsoe (ckelsoe)
Import meeting summaries, transcripts, and attachments from Plaud.AI into your vault.
Plaud Importer
⚠️ 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.
What this plugin does and doesn't do:
- It adds new notes and attachments under the output folder you configure — it does not scan, modify, or delete existing vault content outside that folder.
- Imported content is Plaud's own data (your recordings, Plaud's AI summary and transcript). The plugin renders it into a note with frontmatter and headings; it does not rewrite or reinterpret the transcript or summary text.
- When a note already exists at the target path, behavior follows your Duplicate handling setting (Skip / Overwrite / Ask) — overwrites only happen when you choose them.
- Your Plaud token is stored via Obsidian's
SecretStorage(per-vault, not synced).No warranty — use at your own risk, and you may want to test in a non-critical vault first.
Please report issues
Bug reports are the single biggest help right now. If something breaks, behaves oddly, or doesn't match what Plaud shows on the web:
- File a GitHub issue at ckelsoe/obsidian-plaud-importer/issues.
- Include your Obsidian version, plugin version, OS, and steps to reproduce.
- Enable Debug log in plugin settings, reproduce the issue, and paste the captured request/response trace (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.
What it does
- Lists your recent Plaud recordings in a modal with scroll-to-load pagination.
- Lets you pick which to import via checkboxes — single or multi-select.
- Per-recording artifact selection — before a multi-import you can tick/untick transcript, summary, attachments, mindmap, and card independently.
- Writes one markdown note per recording with:
- YAML frontmatter (Plaud ID, date, duration, speakers, tags, Plaud web URL) plus a layered set of optional fields surfaced from Plaud's flat GPT-5 schema (
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. - Plaud's AI summary
- An
AI Suggestionssection pulled from Plaud'sai_suggestionfield when the response includes one (separate from the main summary) - An inline chapter index with jump-links into the transcript
- A heading-based transcript section with per-chapter
Back to Chapterslinks - An
Open in Plaudlink under the H1 for quick round-tripping
- YAML frontmatter (Plaud ID, date, duration, speakers, tags, Plaud web URL) plus a layered set of optional fields surfaced from Plaud's flat GPT-5 schema (
- Downloads attachments (images, mind-map PNGs, card PNGs, other files) into a
<note-name>-assets/folder and references them from the note. - "Imported" badge in the recording list — each row whose
plaud-idalready 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. - Duplicate handling is configurable — Skip, Overwrite, or Ask each time. "Ask each time" prompts per file with an explicit warning that the existing note body AND its
-assetsfolder will be replaced; in a multi-select import you can escalate to "Overwrite all remaining" / "Skip all remaining" or cancel the batch. - Transcript folding — imported notes open with the transcript section collapsed by default so the summary is what you see first. Toggleable in settings.
- Debug log — opt-in in-memory buffer of API requests/responses for troubleshooting; auth headers are never captured.
Requirements
- Obsidian 1.11.4 or newer — required for the
SecretStorage/SecretComponentAPIs used to handle the Plaud token. - Desktop only (
isDesktopOnly: true). The current authentication path depends on Electron andlocalStorageAPIs that are not available on Obsidian Mobile. This restriction will be lifted when Plaud ships a public OAuth API (see Plaud API status below). - A Plaud.AI account with access to the recordings you want to import.
Installation
Via BRAT (recommended while in beta)
BRAT is the standard way to install community plugins that are not yet in the official Obsidian marketplace.
- Install Obsidian42 - BRAT from the Obsidian community plugins catalog and enable it.
- Open the command palette and run BRAT: Add a beta plugin for testing.
- Paste the repository URL:
https://github.com/ckelsoe/obsidian-plaud-importer. - BRAT downloads the latest release (
main.js,manifest.json,styles.css) and installs Plaud Importer. - Enable Plaud Importer in Settings → Community plugins.
- To update later: BRAT: Check for updates to all beta plugins, or set BRAT to auto-check on Obsidian start.
Manual install
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - Copy all three files into
<your vault>/.obsidian/plugins/plaud-importer/. - Reload Obsidian (or disable/re-enable the plugin) and enable Plaud Importer in Community plugins.
Configuration
Open Settings → Community plugins → Plaud Importer and configure:
Plaud token
The plugin authenticates against Plaud using your web session token. Capture it once:
- Sign in to web.plaud.ai in your browser.
- Press F12 to open DevTools and click the Console tab.
- Paste this and press Enter (Edge/Chrome may make you type
allow pastingonce before it accepts pasted code):Your token is now on the clipboard. The value looks likecopy(localStorage.getItem('tokenstr'))bearer eyJhbGci…— the plugin normalizes thebearerprefix internally, so paste exactly what you copied without editing it. - In Obsidian: Settings → Community plugins → Plaud Importer. Click the Plaud token field, choose Create new secret, paste, and save.
The token is stored in Obsidian's per-vault secret storage. It is never written to data.json and does not travel through Obsidian Sync. Switching vaults requires re-entering the token.
Output folder
Folder inside your vault where imported notes are written. Defaults to Plaud. Nested paths work (Archive/Plaud/2026).
Duplicate handling
What the importer does when a note for a recording already exists in the output folder:
- Skip — leave the existing note untouched. The importer reports it as
skippedin the summary. - Overwrite — replace the existing note body and clear its matching
-assetsfolder before re-downloading. A confirmation modal fires once per import batch before any overwrite happens. - Ask each time (default) — prompt per duplicate at write time. The modal shows the recording title and the exact target path, warns that the existing note AND its
-assetsfolder will be replaced, and offers Overwrite, Skip, or (in multi-item batches) Overwrite all remaining, Skip all remaining, and Cancel import.
Default artifact selection
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.
Transcript rendering
- Fold transcript by default — imported notes open with the transcript heading collapsed so the summary is what you see first.
- Transcript heading level — which H-level the wrapping
Transcriptheading uses (chapters render one level deeper). Pick what fits your note style.
Debug logging
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.
Using it
- Click the audio-lines ribbon icon on the left rail, or run the command Plaud importer: Import recordings.
- Scroll the recording list to load older pages (handled automatically as you scroll).
- Tick the recordings you want.
- Click Import N recordings (or Review artifacts first to uncheck specific artifacts for this batch).
- Watch the per-file progress counter. A final Notice summarizes how many were imported, skipped, or failed; failures are listed in the modal with a Copy button for bug reports.
Plaud API status
⚠️ 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:
- The plugin may break without warning if Plaud changes URL shapes, response schemas, or authentication. When it breaks, the import modal will surface a clear error (auth failure, parse error, HTTP 4xx/5xx) rather than silently corrupt notes — but some releases may need to wait for a plugin update.
- Your Plaud token is a full web-session JWT, not a scoped API key. Treat it with the same care as your Plaud password. The plugin stores it in Obsidian's
SecretStorage, never indata.json, and never logs it. - When Plaud ships a public OAuth API, this plugin will switch to that surface and deprecate the reverse-engineered path. A separate
OAuthPlaudClientstub 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.
Privacy and network use
Per Obsidian's developer policies:
- Network use — the plugin communicates exclusively with Plaud.AI's servers (
api.plaud.aifor JSON, various CDN hosts for attachment downloads that Plaud's API points at). No data is sent to any other third party. Network requests happen only when you explicitly trigger an import, scroll to load more recordings, or download attachments. - No telemetry — no usage data, crash reports, or analytics are collected or transmitted.
- Secret handling — the Plaud token is stored via Obsidian's
SecretStorageAPI (per-vault, not synced), referenced by a secret ID indata.jsonrather than the token itself. - Vault writes — all file writes go through the Obsidian
VaultAPI (Vault.create,Vault.process). No direct filesystem access.
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.
Troubleshooting
- "No Plaud token configured" — re-check the Plaud token dropdown in settings. If your token expired, follow the Plaud token steps again.
- "Plaud rejected your token" — your web session likely expired or you signed out of Plaud. Re-copy the JWT from DevTools and update the secret.
- "Could not reach Plaud.AI" — network or DNS issue on your side, or Plaud is down. Retry from the modal's Retry button.
- "Plaud returned data in an unexpected shape" — Plaud changed their API. File an issue with the debug log attached (see Debug logging).
- Import silently "skipped" — your duplicate handling was set to Skip and the note already existed. Switch to Ask each time (default since 0.2.0) or Overwrite.
Support and issues
Please report bugs and feature requests at github.com/ckelsoe/obsidian-plaud-importer/issues. Include:
- Your Obsidian version
- Your plugin version (shown in Community plugins)
- The debug log if reproducible (strip anything sensitive)
Contributing
See CONTRIBUTING.md for local build and test instructions.
License
MIT — see LICENSE.
Acknowledgments
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.
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.