Notion + Tevyr
Update Notion pages and databases from any Tevyr macro — append paragraphs to a run-of-show log, flip a session's status to "Done" the moment it ends, query a database mid-show to drive a branching macro. Connect once with a paste-in integration token; no OAuth.
Notion is the document + database tool a lot of production teams use for show notes, rundowns, and post-event recaps. Tevyr's integration uses Notion's official Internal Integration tokens — same auth pattern Notion's own API examples use. Get started at notion.so.
What you can do
Make Notion your single source of truth for "what happened during the show" — without anyone having to type it.
Auto-log every session start
Append a paragraph to a run-of-show page each time a session starts: 'Session {name} started at {time}'. Producer reviews the page post-show — no manual note-taking.
Flip status to Done on session end
When a session ends, patch its row in your rundown database to status=Done and stamp the completion timestamp. The Notion view auto-updates for everyone watching.
Query a database mid-show
Ask Notion 'is this segment marked ready?' before a session starts and branch the macro on the answer. Useful when production stages content gates upstream.
Centralize show notes
Have every macro fire append a structured entry to a shared page. The production team sees every cue, every blackout, every Q&A submission without watching the controller.
Prerequisites
- Tevyr Starter plan or above — Free plan ships 0 integration connections
- A Notion workspace where you can create integrations
- Pages or databases to share with the integration (Notion grants permission per-page, not per-workspace)
One-time setup
1. Create a Notion integration
- Visit notion.so/profile/integrations
- Click + New integration
- Name it
Tevyr, pick your workspace, click Save - On the integration's overview, click Show next to Internal Integration Secret and copy the token — it starts with
secret_(legacy) orntn_(new) and is shown once, so paste it somewhere safe before leaving the page
In the modern Notion UI, the Integrations label was renamed to Connections. The developer portal URL above is unchanged.
2. Paste the token into Tevyr
- In Tevyr, Settings → Integrations → Add new
- Pick the Notion tile
- Paste your integration token into the token field, give the connection a name (e.g. "Notion — rundowns"), click Save
- Click Test on the new connection — Tevyr calls Notion's
/users/me(read-only) and shows a green toast like "Notion — live · token verified"
3. Share each page with the integration
This is the #1 thing operators miss. Notion grants integration access per page, not per workspace. Until you do this step, every macro fire returns object_not_found.
- Open the Notion page (or database) you want Tevyr to write to
- Click the ⋯ menu in the top-right
- Click Connections → Add connections
- Pick your Tevyr integration
- Click Confirm
The integration now has access to that page and all of its descendants. Repeat for each top-level page you want to grant.
Page IDs vs database IDs
Notion URLs look like this:
https://www.notion.so/Test-Page-3622c4e2b4fc80729c58f850d26a5657?source=copy_link
The 32-character hex string before the ? is the page ID (dashes are optional — Tevyr accepts both forms).
If the URL also contains ?v=… like this:
https://www.notion.so/3622c4e2b4fc8097b999d6d2fe4b7b42?v=3622c4e2b4fc804fbd20000cd89bc9f4
…that's a database view, not a page. Databases reject paragraph children — you'll get a 400 Block does not support children error. To append paragraphs, pick a child page inside the database, not the database itself.
Recipes
Recipe 1 — Append "session started" paragraph to a run-of-show page
Action: Append paragraph.
| Field | Value |
|---|---|
| Page ID | 3622c4e2b4fc80729c58f850d26a5657 (your page's hex from the URL) |
| Text | Session {{ctx.session.name}} started at {{ctx.now.local}} |
Paste plain text into the Text field. The template handles the JSON wrapping. Pasting raw JSON like {"children": [...]} writes the literal JSON string as a paragraph, which is not what you want.
Recipe 2 — Flip session status to "Done" on completion
Trigger: lifecycle event on_session_end. Action: Update page properties.
| Field | Value |
|---|---|
| Page ID | the rundown row's page ID |
| Property | Status |
| Value | Done |
| Date property (optional) | Completed at → {{ctx.now.iso}} |
Recipe 3 — Query a database, branch on result
Use flow.http_request + Notion's Query database action, then feed the result into flow.branch_if:
- Notion → Query database → capture
results[0].properties.Status.select.name flow.branch_if→ if equalsready, fire the show-start macro; otherwise post to Slack and halt
Troubleshooting
object_not_found
The page (or database) hasn't been shared with the integration. Open it → ⋯ → Connections → Add connections → pick Tevyr → Confirm. Re-fire.
Block does not support children
You passed a database ID where a page ID is required. Check your Notion URL — if it contains ?v=…, that's a database. Pick a child page from the database instead.
validation_error: body.children[0].paragraph
You pasted JSON into the Text field. The template wraps your text in the JSON paragraph block automatically — paste plain text only.
unauthorized
The integration token is wrong, revoked, or scoped to a different workspace. Regenerate the secret on the integration's developer page, paste the new value into the Tevyr connection (use Edit on the connection card), save, re-test.
"Text is required" shown after I pasted content
A cosmetic quirk in the macro editor — the validator only re-evaluates on direct keystrokes, not on paste. Type a single space inside the field and delete it to clear the warning, or just hit Save — the server accepts the pasted content fine.
Context variables
URL, header, and body fields on Notion actions support {{ctx.*}} interpolation — Tevyr resolves them at fire time. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.
Triggered by webhook events
Notion can be fired automatically from any webhook event (session.started, session.completed, timer.warning, etc.) — perfect for live event logs. When creating a webhook, pick Integration mode and select your Notion connection.
Related
- Macros — build full event-log macros mixing Notion writes with Slack pings and timer actions
- Integrations overview — other tools you can wire alongside Notion
- Zapier guide — for the reverse direction (Notion → Tevyr via Notion Automations + Zapier)
- Slack guide — pair with Notion to post a Slack ping every time a Notion row updates