Léonard Sellem681 downloadsSync Plaud voice recordings into Markdown notes with transcripts, AI summaries, and highlights.
Sync your Plaud voice recordings into Markdown notes inside your Obsidian vault — transcripts, AI summaries, highlights, and metadata included.
Unofficial plugin. Plaud does not offer a public API. This plugin uses a reverse-engineered API discovered by inspecting the Plaud web app. It may break without notice if Plaud changes their backend. Use at your own risk.
file_id in frontmatter to update existing notes in placegit clone https://github.com/leonardsellem/plaud-sync-for-obsidian.git
cd plaud-sync-for-obsidian
npm ci
npm run build
Copy these three files into your vault's plugin directory
(e.g. <vault>/.obsidian/plugins/plaud-sync/):
main.jsmanifest.jsonstyles.cssRestart Obsidian and enable Plaud Sync under Settings → Community plugins.
Plaud has no official API or developer portal. The token is a JWT session cookie stored in your browser when you use the Plaud web app.
F12 or Cmd+Opt+I)localStorage.getItem("tokenstr")
bearer eyJ...)The token is long-lived (~10 months) but will eventually expire. When it does, repeat these steps.
Open Settings → Community plugins → Plaud Sync:
| Setting | Default | Description |
|---|---|---|
| Plaud token | — | Your session token (stored securely, not in plugin settings) |
| API domain | https://api.plaud.ai |
API endpoint; change only if your account is in a different region |
| Sync folder | Plaud |
Vault folder where notes are created |
| Filename pattern | plaud-{date}-{title} |
Pattern for new note filenames ({date} and {title} are replaced) |
| Sync on startup | true |
Automatically sync when Obsidian starts |
| Update existing notes | true |
Overwrite notes that already exist (matched by file_id) |
Open the command palette (Ctrl/Cmd+P) and search for:
| Command | Description |
|---|---|
| Plaud: sync now | Run an incremental sync immediately; shows a summary notice with created/updated/skipped/failed counts |
| Plaud: validate token | Test your token against the API and show your active recording count |
start_time > lastSyncAtMslastSyncAtMs checkpoint only after the full batch succeedsIf sync is already running (startup or manual), additional attempts are blocked until the current run finishes.
| Symptom | Cause | Fix |
|---|---|---|
| "Plaud token missing…" | Token not set or cleared | Re-paste token in settings, then run Plaud: validate token |
| "authentication failed…" | Expired or invalid token | Extract a fresh token from the web app |
| "rate limited by Plaud API…" | Too many requests | Wait a few minutes and retry; avoid rapid manual syncs |
| "network error…" | Connectivity / DNS / VPN issue | Check your connection and retry |
| "Plaud API is temporarily unavailable…" | Plaud servers down (5xx) | Retry later |
| "unexpected API response format…" | Plaud changed their API | Check for a plugin update; open an issue if none exists |
| "Unable to create Plaud sync folder…" | Invalid path or vault permissions | Use a simple folder name; check vault write access |
npm ci # install dependencies
npm run dev # watch mode with hot reload
npm run build # typecheck + production build
npm run test # run test suite (Node.js native test runner)
npm run lint # eslint
src/
├── main.ts # Plugin lifecycle, command dispatch, error handling
├── commands.ts # Command registration
├── settings.ts # Settings UI tab
├── settings-schema.ts # Settings interface and defaults
├── secret-store.ts # Token storage (Obsidian secrets + fallback)
├── plaud-api.ts # API client, error categorization
├── plaud-api-obsidian.ts # Obsidian requestUrl transport adapter
├── plaud-normalizer.ts # Payload normalization across API variants
├── plaud-renderer.ts # Markdown rendering
├── plaud-content-hydrator.ts # Content inflation from signed URLs
├── plaud-vault.ts # Vault note identity and upsert logic
├── plaud-sync.ts # Incremental sync orchestration
├── plaud-retry.ts # Retry/backoff with telemetry sanitization
└── sync-runtime.ts # Single-flight sync guard
test/
└── *.test.mjs # Matching test suite for each module
This is an unofficial community plugin, not affiliated with or endorsed by PLAUD, Inc.
This project is developed and distributed under the interoperability provisions of EU Directive 2009/24/EC (the Software Directive):
The Court of Justice of the European Union has consistently upheld these protections, notably in SAS Institute v. World Programming (C-406/10) and Top System v. Belgian State (C-13/20).
This plugin enables PLAUD users to connect their recording data with Obsidian, an independently created knowledge management application. PLAUD already supports third-party automation through their official Zapier integration, demonstrating acceptance of interoperability use cases. This project extends similar functionality to the Obsidian ecosystem.
This software is provided as-is for interoperability purposes. Users are responsible for compliance with PLAUD's Terms of Service and applicable laws in their jurisdiction. The maintainers make no warranty regarding account standing or service availability.
Contributions are welcome. Please see CONTRIBUTING.md for guidelines.
MIT — Leonard Sellem