Documentation

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.

What's Zapier?

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

  1. In Zapier, click Create Zap
  2. Trigger app: search for Webhooks by Zapier
  3. Trigger event: Catch Hook
  4. Zapier gives you a Custom Webhook URL like https://hooks.zapier.com/hooks/catch/12345/abcdef/. Copy it.
  5. In Tevyr, open Settings → Webhooks for your event
  6. Click Add Webhook, paste the Zapier URL, choose which events to send (e.g., session.started, session.completed, question.submitted)
  7. Save. Click Test in Tevyr's webhook panel — Zapier should receive a test payload
  8. Back in Zapier, click Test trigger to confirm receipt
  9. Action app: any of Zapier's 7,000+ integrations — Slack, Sheets, Email, etc.

Recipe — Q&A submitted → Slack message

  1. Trigger: Tevyr webhook with event question.submitted
  2. Filter (optional): only proceed if question.is_anonymous == false
  3. Action: Slack → Send Channel Message
  4. Channel: #qa-moderation
  5. 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

  1. Trigger: Tevyr webhook with event session.completed
  2. Action: Google Sheets → Create Spreadsheet Row
  3. 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}}

Run an event end-to-end — the spreadsheet has a complete log without anyone touching it.

Recipe — timer.warning → email speaker

  1. Trigger: Tevyr webhook with event timer.warning
  2. Filter: only proceed during specific session titles (so you don't email everyone for every warning)
  3. Action: Email by Zapier → Send Outbound Email
  4. Subject: 5 minutes left — please start wrapping up
  5. 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

  1. In Zapier, Create Zap
  2. Set up your trigger from any app (e.g., Calendly's "Invitee Created")
  3. Action app: Webhooks by Zapier
  4. Action event: Custom Request (or GET for our purposes)
  5. URL: the Tevyr API endpoint (recipes below)
  6. Method: GET
  7. Map Calendly's fields to Tevyr's URL parameters

Recipe — Calendly booking → create Tevyr session

  1. Trigger: Calendly → Invitee Created
  2. Action: Webhooks by Zapier → GET
  3. URL: https://api.tevyr.com/v1/session/create
  4. Query parameters:
    • room_id: your Tevyr room ID
    • api_key: your Tevyr API key
    • title: {{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

  1. Trigger: Notion → New Database Item (or Updated Database Item)
  2. Action: Webhooks by Zapier → GET
  3. 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

  1. In Zapier, Create ZapWebhooks by ZapierCatch Hook
  2. Copy the custom catch-hook URL
  3. 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:

  1. Click Test on the new Tevyr connection — Tevyr POSTs { tevyr_test: true, source: "tevyr-integration-test" } to your catch-hook URL
  2. Switch back to your Zap, click Test trigger
  3. Zapier displays the request — you'll see the tevyr_test and source fields land
  4. Finish wiring your Zap's downstream actions (Slack, Sheets, Gmail, etc.) and Turn on Zap

Use the connection in a macro

  1. Drag flow.http_request into any macro
  2. Pick your Zapier connection from the dropdown
  3. Pick the Fire zap action
  4. Fill the fields:
FieldValue
Event namesession_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.

Tip

If your Zap's only job is to post to Slack or write to Notion, skip the Zapier middleman — Tevyr's Slack and Notion templates hit those APIs directly. Same latency, no Zapier task consumption.

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:

EventUseful fields
session.startedsession.title, session.speaker_name, session.duration_seconds, session.started_at
session.completedsession.title, session.actual_duration_seconds, session.overrun_seconds, session.completed_at
session.changedsession.title, session.previous_title, changed_fields
timer.warningsession.title, session.speaker_name, remaining_seconds, threshold_seconds
timer.criticalsession.title, remaining_seconds
timer.finishedsession.title, overrun_seconds
question.submittedquestion.text, question.submitter_name, question.is_anonymous, question.submitted_at
display.blackout_enabledtriggered_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_id and api_key are correct. Tevyr returns 401 Unauthorized for 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.