From wrist tap to Notion: the capture-first workflow
You've solved the fast capture problem (wrist tap on Apple Watch, voice note saved in 2 seconds). You've not solved the what happens next problem.
This post walks through a workflow I use daily: voice note captured on Watch → transcribed on iPhone → webhook'd into Notion (or Obsidian or your S3 — same architecture).
If you're using blip Pro, this is built in. If you're using a different capture tool, the same architecture applies — the trick is the webhook + the receiver, not the specific capture app.
The capture-first principle, restated
Most "voice notes to my second brain" tutorials get the architecture backwards. They have you:
- Capture voice note
- Open the receiving app (Notion / Obsidian)
- Paste the transcript
- File it correctly
This is wrong. By step 2, you've broken the capture flow. The act of "opening Notion to file the note" is exactly the kind of cognitive overhead the wrist-tap was supposed to skip.
Better architecture:
- Capture voice note (wrist tap, 2 seconds)
- Transcript appears on phone automatically (sub-minute)
- Webhook fires, the note arrives in Notion's "Inbox" page automatically
- You never touch the receiving app at the moment of capture
- Weekly review: open Notion, triage the inbox
This separates capture (in-motion, 2 seconds) from organization (at-rest, weekly). Which is the only way it actually works long-term.
The plumbing
1. The capture endpoint
Whatever app you use to capture must support webhooks — a URL it POSTs the transcript (and optionally the audio file) to whenever a new recording finishes.
Apps that support this in 2026:
- blip Pro —
https://tapblip.com/settings/webhooks, fires on every transcript completion - Drafts with Action Webhook — has supported this for years
- Custom shortcut via iOS Shortcuts app — works for Voice Memos, Just Press Record, Apple Notes
If your app doesn't support webhooks, you need an iOS Shortcut as the bridge. Set it up once; it runs forever.
2. The webhook payload
A reasonable schema for a voice note webhook:
{
"id": "blip_2026-05-09_14-32-04",
"captured_at": "2026-05-09T17:32:04Z",
"duration_seconds": 23,
"transcript": "Memo to self — that's exactly the headline we need for the new pricing page. Short, visual, says nothing about features.",
"audio_url": "https://blip-user-audio.s3.amazonaws.com/<signed-url>",
"language": "en-US",
"device": "Apple Watch Series 10",
"metadata": {
"location_hint": "walking" // optional, derived from CoreMotion
}
}
3. The receiver — Notion
You need a Notion integration token and the database ID where notes should land. Setup once at https://notion.so/my-integrations.
A Cloudflare Worker (or AWS Lambda) endpoint that turns the webhook into a Notion page:
// Cloudflare Worker, deployed to https://your-worker.workers.dev/blip-to-notion
export default {
async fetch(request, env) {
const note = await request.json();
const databaseId = env.NOTION_DATABASE_ID;
const notionRes = await fetch('https://api.notion.com/v1/pages', {
method: 'POST',
headers: {
'Authorization': `Bearer ${env.NOTION_TOKEN}`,
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28',
},
body: JSON.stringify({
parent: { database_id: databaseId },
properties: {
Name: { title: [{ text: { content: note.transcript.slice(0, 80) }}]},
Captured: { date: { start: note.captured_at }},
Duration: { number: note.duration_seconds },
},
children: [{
object: 'block',
type: 'paragraph',
paragraph: {
rich_text: [{ type: 'text', text: { content: note.transcript }}],
},
}],
}),
});
return new Response('ok', { status: 200 });
}
};
Deploy that, paste the Worker URL into your capture app's webhook setting, and you're done. Every voice note you capture on Apple Watch shows up in Notion as a new page in your Inbox database within ~30 seconds.
4. The receiver — Obsidian (or any markdown vault)
If you use Obsidian instead, the architecture is the same but the receiver writes to a Git-synced vault or to a file in iCloud Drive that Obsidian watches.
Easiest path: a Worker that commits to a GitHub repo:
// pseudo — commit transcript as a new markdown file
const filename = `inbox/${note.id}.md`;
const content = `---\ncaptured: ${note.captured_at}\nduration: ${note.duration_seconds}s\n---\n\n${note.transcript}\n`;
await fetch(`https://api.github.com/repos/${USER}/${VAULT_REPO}/contents/${filename}`, {
method: 'PUT',
headers: { 'Authorization': `Bearer ${GITHUB_TOKEN}` },
body: JSON.stringify({
message: `note: ${filename}`,
content: btoa(content),
}),
});
Obsidian's Git plugin pulls the new file into your vault. Done.
5. The receiver — your own S3
If you don't want any third-party tool involved, just dump every transcript into your own S3 bucket and run a daily cron that surfaces them in whatever review tool you choose. blip Pro can webhook directly to S3 with a presigned PUT URL.
The weekly review (the part everyone skips)
Capture-first only works long-term if you have a trusted organization step. Otherwise the inbox grows forever and you stop trusting that capture matters.
My version:
- Sunday morning, 20 minutes. Open the Notion inbox.
- Triage: archive the noise (most of it), promote 1-2 ideas to actual project notes, add 0-3 tasks to the right project.
- Most of the inbox stays archived forever. That's fine. The 98% of captures you don't act on still mattered, because they freed up your working memory at the moment of capture.
If you spend more than 20 minutes a week organizing your voice notes, your capture tool isn't the problem — your organization habit is over-engineered. Most people read maybe 2% of what they capture. Calibrate to that reality.
Try blip free + Pro for the webhook
blip free is on-device only — no webhooks (no servers see your audio). Pro tier ($4.99/mo) adds the webhook layer described above, plus Whisper transcription in 50+ languages.
If you set up a clever Notion / Obsidian / Slack receiver, marcelo@tapblip.com — I'll add it to the docs.
Next post: how to triage voice-memo inboxes in 20 minutes a week without it becoming a chore.