How it works
Plaud voice sync — how it works
A precise account of what happens between pressing record on a Plaud device and a reviewed entry landing in your diary.
1. How the connection works
Plaud sync doesn't involve uploading a file. Instead, your account authorizes Migraine Today to read your Plaud recordings via OAuth — the same “sign in with…” pattern used across the web. Migraine Today receives a short-lived access token and a refresh token, scoped to your Plaud account, and stores them against your user record. When the access token expires, it's refreshed automatically using the stored refresh token; if refreshing ever fails, the connection is marked as needing reconnection rather than silently failing.
Every request to Plaud's API after that is made with your token, for your recordings only — Migraine Today has no visibility into any other Plaud account.
2. The three kinds of content
Plaud generates up to three independent pieces of content per recording, and a short recording can easily have one without the other two:
- Transcript — Plaud's own automatic speech recognition, word-for-word.
- AI note — Plaud's AI-generated summary of the recording.
- Highlights (mark_memo) — anything marked with the press-to-highlight button, or added manually in the Plaud app. These don't appear in the transcript or note endpoints at all; Migraine Today fetches them separately via Plaud's file endpoint and a short-lived signed link.
Migraine Today checks all three for every recording, specifically because a recording with only a highlight — no transcript, no note — would otherwise be invisible.
3. Where AI is involved
The transcription and the AI note are Plaud's AI, generated on Plaud's own infrastructure before Migraine Today ever sees the text — Migraine Today doesn't run any speech-to-text or summarization model itself, and doesn't send your recording audio anywhere.
Mapping that text onto diary fields is Migraine Today's AI — once a recording clears the keyword check below, its combined text is sent to a large language model (via OpenRouter) along with your own saved trigger, medication and supplement lists, and it returns which diary fields the recording actually supports. The model is instructed to leave a field out entirely rather than guess at it, and every value it returns is re-checked in code against your account's real triggers/medications/supplements and the app's own valid ranges and options before you ever see it — an id, code, or value that doesn't match something already in your account is simply dropped, never shown or saved. That said, it's still a model's best-effort reading of your words, not a certainty — which is exactly why nothing is saved without your review (see section 7).
4. What gets evaluated, and how days are picked
The transcript, note and highlight text for a recording are combined into one block and first checked against your configured keyword list — by default migraine, headache and kopfschmerzen, editable per account — with a plain, case-insensitive substring search. If none of your keywords appear anywhere in that combined text, the recording is skipped entirely and never reaches the AI step below; this is what keeps an unrelated recording (a meeting, a call) from being analyzed at all.
Matches are then grouped by calendar day, not by recording — if two recordings from the same day both match (a morning note and an evening follow-up, say), their text is combined into one review card, not two. Every matching day is checked against your diary: a day that's already logged — whether that entry came from typing it in yourself or from an earlier sync — is dropped from the results entirely and never re-analyzed. This is deliberate, and it's what makes pressing “Sync notes” safe to do as often as you like: it always shows exactly the matching days you haven't logged yet, going back up to 30 days, never a day you've already saved, and never the same day twice just because you clicked the button again before saving it.
The full combined text for each remaining day — not just a snippet — goes to the field extraction described in section 6, and also becomes the starting point for that day's notes, so you can read exactly what the AI read before saving anything.
5. How the date is calculated
Plaud reports a recording's creation time without a timezone suffix, so Migraine Today treats it as UTC and converts it into your account's home timezone (set on the Settings page, derived from your country) to get the calendar date the entry is filed under. A recording made late at night can therefore land on the following calendar day if that's what your local clock says — the same way a diary entry you type yourself would.
6. Exactly which diary fields get filled
Once a recording matches, the AI extraction step can pre-fill any of these — but only the ones the transcript actually supports; a field the recording never touches on is simply left blank, the same as if you'd skipped it yourself:
- Headache — whether you had one, intensity, pain score, duration, pain side, throbbing/dull-pressing.
- Symptoms — nausea, vomiting, noise/light sensitivity, visual disturbance, and (where relevant to your account) the cycle/menopause symptom set.
- Triggers — matched by meaning against your own saved trigger list, not just literal wording (“barely slept” can match a sleep-related trigger even without those exact words).
- Prevention — sleep hours and quality, stress and energy level, exercise type and minutes, and cycle day/phase where relevant.
- Treatment — which of your own saved medications were taken and how many, and which supplements.
- Other — sexual activity and its effect on headache, where mentioned.
- Notes — the matched transcript/note/highlight text (up to 2,000 characters) is always written in, quoting which recording and which keyword matched, regardless of how much else the AI could fill in.
Every value is matched only against things already in your account — your own trigger labels, your own saved medications and supplements, and the app's own fixed option lists (exercise types, intensity levels, and so on). Nothing is ever invented outside those lists — a medication that doesn't exist in your account never gets silently attached to a similar-sounding one you do have on file.
If a medication is named that genuinely isn't on your account yet, it's proposed as a new medication instead of being dropped or mismatched — shown as its own editable row (name, dose, how many taken), checked by default since it came straight from what you said. Leave it checked and it's added to your medication list at the same time the entry is saved; uncheck it and it's left out entirely, same as if it had never been mentioned.
7. Nothing saves without review
Sync notes (the button in the app) checks your account only, and never writes anything by itself — it returns one candidate card per not-yet-logged day, each showing the matched text alongside a fully pre-filled, fully editable version of the same form used for a normal Log Today entry. If several days need review, they all show up at once, not one at a time. Nothing is saved until you press Save on that specific card; closing a card without saving changes nothing, and it'll simply show up again next time you sync since the day still isn't logged.
If the AI step can't complete for a particular day (a provider outage, an unparseable response), that card says so and falls back to just the matched text in Notes — the rest of the form stays exactly as usable as a normal blank entry, it just isn't pre-filled for that one day.
8. What's stored, and where
Migraine Today stores your Plaud OAuth tokens, your keyword list, and the timestamp of the last successful check. It does not store your recordings, audio, or the raw transcript/note text independently of what you explicitly save into a diary entry.
Before a day's combined text is sent anywhere, occurrences of your account's own name and email address in that text are located and replaced with a placeholder. This removes the specific identifiers Migraine Today holds on file for you; it is not a claim that the text could never be identifying by any other means (for instance, if a recording separately names other people or places) — no automated process can guarantee that. What is sent — the resulting text, plus your own trigger/medication/supplement labels — goes to Migraine Today's configured AI processor (OpenRouter, routing to whichever language model is configured) purely to compute that day's field suggestions. It is not stored by Migraine Today beyond the review card itself, is not used to train any model, and is discarded once you save or discard that card.
Every query is scoped to your account's own user ID at the database level — see the Privacy Policy for retention and your rights under GDPR.