Zapier + Tevyr
Zapier is the no-code automation hub that connects 7,000+ apps. With it, you can wire Tevyr into your existing toolchain — Calendly, Google Calendar, Slack, Notion, HubSpot, anything — without writing a single line of code. Tevyr fires webhooks, Zapier listens. Tevyr also accepts HTTP, so Zapier can drive it.
Zapier lets you build automations called "Zaps" between apps. Each Zap has a trigger (something happens in App A) and one or more actions (do something in App B, C, D). No coding. Get started at zapier.com.
What you can do
Auto-create sessions from your calendar
Calendly booking confirmed → Tevyr session created automatically with the meeting title, attendee name, and duration. The day-of operator opens the controller and the rundown is already there.
Post Q&A submits to Slack
Audience submits a question → Zapier posts it to a Slack channel where the moderator monitors. No new tab to watch.
Log every session to Google Sheets
Tevyr fires session.completed → Zapier appends a row to your Google Sheets log: who spoke, planned vs. actual duration, completion timestamp. Post-event analytics, automatic.
Email the speaker their wrap-up time
Tevyr's timer warning fires → Zapier emails or texts the speaker. Useful for remote presenters who can't see a stage display.
Pattern 1 — Tevyr → Zapier (Tevyr webhook is the trigger)
This is the most common direction. Tevyr fires a webhook on every meaningful event; Zapier catches it and does whatever you want.
Setup
- In Zapier, click Create Zap
- Trigger app: search for Webhooks by Zapier
- Trigger event: Catch Hook
- Zapier gives you a Custom Webhook URL like
https://hooks.zapier.com/hooks/catch/12345/abcdef/. Copy it. - In Tevyr, open Settings → Webhooks for your event
- Click Add Webhook, paste the Zapier URL, choose which events to send (e.g.,
session.started,session.completed,question.submitted) - Save. Click Test in Tevyr's webhook panel — Zapier should receive a test payload
- Back in Zapier, click Test trigger to confirm receipt
- Action app: any of Zapier's 7,000+ integrations — Slack, Sheets, Email, etc.
Recipe — Q&A submitted → Slack message
- Trigger: Tevyr webhook with event
question.submitted - Filter (optional): only proceed if
question.is_anonymous == false - Action: Slack → Send Channel Message
- Channel:
#qa-moderation - Message text: use Zapier's variable picker to insert
{{question.text}}and{{question.submitter_name}}
Now every time someone submits a question, your moderation team gets a Slack ping with the question text and the submitter's name (when available).
Recipe — session.completed → Google Sheets row
- Trigger: Tevyr webhook with event
session.completed - Action: Google Sheets → Create Spreadsheet Row
- Map fields:
- Date:
{{session.completed_at}} - Session title:
{{session.title}} - Speaker:
{{session.speaker_name}} - Planned (sec):
{{session.duration_seconds}} - Actual (sec):
{{session.actual_duration_seconds}} - Overrun (sec):
{{session.overrun_seconds}}
- Date:
Run an event end-to-end — the spreadsheet has a complete log without anyone touching it.
Recipe — timer.warning → email speaker
- Trigger: Tevyr webhook with event
timer.warning - Filter: only proceed during specific session titles (so you don't email everyone for every warning)
- Action: Email by Zapier → Send Outbound Email
- Subject:
5 minutes left — please start wrapping up - Body:
Hi {{session.speaker_name}}, the timer just hit your warning threshold. About 5 minutes remaining.
Useful for remote speakers on Zoom who can't see a confidence monitor.
Pattern 2 — Zapier → Tevyr (Zapier action calls Tevyr API)
The reverse direction. Zapier triggers off something else (Calendly, Notion, HubSpot, anything) and uses Tevyr's API to take action.
Setup
- In Zapier, Create Zap
- Set up your trigger from any app (e.g., Calendly's "Invitee Created")
- Action app: Webhooks by Zapier
- Action event: Custom Request (or GET for our purposes)
- URL: the Tevyr API endpoint (recipes below)
- Method: GET
- Map Calendly's fields to Tevyr's URL parameters
Recipe — Calendly booking → create Tevyr session
- Trigger: Calendly → Invitee Created
- Action: Webhooks by Zapier → GET
- URL:
https://api.tevyr.com/v1/session/create - Query parameters:
room_id: your Tevyr room IDapi_key: your Tevyr API keytitle:{{Calendly.event_type_name}}speaker_name:{{Calendly.invitee_name}}duration_seconds:{{Calendly.event_duration_seconds}}scheduled_start_time:{{Calendly.start_time}}
Every Calendly booking auto-creates a Tevyr session. Open the controller — your day's lineup is already loaded.
Recipe — Notion database update → message in Tevyr
- Trigger: Notion → New Database Item (or Updated Database Item)
- Action: Webhooks by Zapier → GET
- URL:
https://api.tevyr.com/v1/message/create?room_id=YOUR_ROOM_ID&api_key=YOUR_API_KEY&content={{Notion.title}}&type=staff
When someone updates the run-of-show Notion doc, Tevyr's staff screen gets a message with the new info.
Pattern 3 — Tevyr macro fires a Zap (Generic HTTP via Macros)
Use this when you want a Tevyr macro step to fire a Zap inline — branch on the timer, the session, or prior step output before firing. Faster than the webhook path (no fan-out routing) and the macro builder gives you per-fire field interpolation.
Setup
- In Zapier, Create Zap → Webhooks by Zapier → Catch Hook
- Copy the custom catch-hook URL
- In Tevyr, Settings → Integrations → Add new → Zapier, paste the URL, name the connection (e.g. "Sheets log"), click Save
Verify the wiring
Zapier's Test trigger does not auto-poll for new requests. The flow is:
- Click Test on the new Tevyr connection — Tevyr POSTs
{ tevyr_test: true, source: "tevyr-integration-test" }to your catch-hook URL - Switch back to your Zap, click Test trigger
- Zapier displays the request — you'll see the
tevyr_testandsourcefields land - Finish wiring your Zap's downstream actions (Slack, Sheets, Gmail, etc.) and Turn on Zap
Use the connection in a macro
- Drag
flow.http_requestinto any macro - Pick your Zapier connection from the dropdown
- Pick the Fire zap action
- Fill the fields:
| Field | Value |
|---|---|
| Event name | session_started (free-form label your Zap branches on) |
| Message | {{ctx.session.name}} just started at {{ctx.now.local}} |
| Extra payload (optional) | {"speaker":"{{ctx.session.name}}","remaining":{{ctx.timer.remaining}}} (valid JSON, also interpolated) |
Payload shape Zapier receives
Every fire ships this body:
{
"event": "session_started",
"message": "Round 1 just started at 4:24 PM",
"extra": { "speaker": "Round 1", "remaining": 1741 },
"ctx": {
"session_name": "Round 1",
"event_name": "Boxing Rounds",
"timer_remaining": 1741,
"now_iso": "2026-05-16T04:24:18.442Z"
}
}
Your Zap branches on event for routing, reads message for human-readable copy, and pulls structured values from extra and ctx for downstream actions.
Common payload reference
When Tevyr fires a webhook, the payload includes structured fields you can map in Zapier. Below are the most-used field paths for each event type:
| Event | Useful fields |
|---|---|
| session.started | session.title, session.speaker_name, session.duration_seconds, session.started_at |
| session.completed | session.title, session.actual_duration_seconds, session.overrun_seconds, session.completed_at |
| session.changed | session.title, session.previous_title, changed_fields |
| timer.warning | session.title, session.speaker_name, remaining_seconds, threshold_seconds |
| timer.critical | session.title, remaining_seconds |
| timer.finished | session.title, overrun_seconds |
| question.submitted | question.text, question.submitter_name, question.is_anonymous, question.submitted_at |
| display.blackout_enabled | triggered_by, triggered_at |
See the Webhooks reference for the full payload shape of every event type.
Troubleshooting
"Zap fires but doesn't see Tevyr's payload data"
- In Zapier's trigger setup, click Test trigger while Tevyr is actively sending events. Zapier needs to see at least one real payload to map the fields.
- Tevyr's Webhook Delivery Log (Settings → Webhooks → expand a webhook) shows what was actually sent. Match it against what Zapier received.
"Tevyr action returns an error"
- Confirm
room_idandapi_keyare correct. Tevyr returns401 Unauthorizedfor bad keys. - Check URL encoding in Zapier's GET action — special characters in mapped fields (like
&, spaces) need to be URL-encoded. Zapier usually handles this automatically, but custom-formatted text fields might need explicit encoding.
"Tevyr fires the webhook but Zapier doesn't trigger"
- Tevyr retries failed deliveries up to 3 times with exponential backoff. Check Tevyr's webhook log for the response code Zapier returned.
- Zapier free-tier Zaps run every 15 minutes by default. For real-time triggering, the trigger must be Catch Hook (not polling-based).
"I'm hitting Zapier's task limit"
- Free Zapier accounts include 100 tasks/month. A high-traffic event with many Q&A submissions or session completions can blow past this fast.
- Filter aggressively at the start of each Zap so only meaningful events consume tasks.
- For high-volume use, Make.com (formerly Integromat) offers similar functionality at a different price point.
Context variables
When Tevyr → Zapier via a macro step (Generic HTTP with a Zapier catch-hook URL), the body field supports {{ctx.*}} interpolation. Zapier receives whatever fields you stitched in. See the full context-variable reference. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.
Triggered by webhook events
For the inverse — fire a Zap on every Tevyr event — use a webhook in Integration mode with your Zapier connection, OR use URL mode and paste the Zapier catch-hook URL directly. Both work; integration mode is friendlier if you have multiple Zaps to manage.
Related
- Macros — fire a Zap from a specific macro step (mid-show, conditional, etc.)
- API reference — every endpoint Zapier can call
- Webhooks — every event Tevyr can fire
- Integrations Overview — other tools you can wire alongside Zapier