Workflows

Triggering zaps and webhooks from workflows

A workflow can do more than send emails. The Trigger a zap action runs a zap in Zapier, and the Send a webhook action sends an HTTP POST to your own code. Both run at a time you pick relative to the meeting, such as 1 hour before it starts or 1 day after it ends, and only for events booked on the links the workflow is attached to.

Under the hood, both actions work the same way: when the action runs, SavvyCal sends a workflow.action.triggered webhook payload with the event's details. For a zap, the SavvyCal app in Zapier receives it for you. For a webhook, your own endpoint does.

You can add these actions on any plan, but workflows only run on a paid plan. See Plans and pricing.

How is this different from regular Zapier triggers and webhooks?

Zapier triggers like New Event and account webhooks fire right away, when something happens: an event is booked, rescheduled, canceled, and so on. Workflow actions fire on a schedule you set:

Regular Zapier triggers and webhooksWorkflow actions
When they fireAs soon as something changes, like a new bookingAt a set time: after the event is scheduled, or before or after it starts or ends
Which eventsEvery event on your account (a zap can narrow it to certain links)Events on the links the workflow is attached to
PlanAny planPaid plans only

Use a workflow action when the timing matters. For example, post to Slack 15 minutes before a demo starts, or add someone to a CRM sequence 1 day after the meeting ends.

For exactly when actions run, and what happens when an event is rescheduled or canceled, see Workflow timing and recipients.

How do I add one to a workflow?

  1. Go to Workflows in the left sidebar and open a workflow, or create one. See Introduction to Workflows.
  2. Click Add an action... at the top of the timeline, or click in the Scheduled, Start of event, or End of event section.
  3. Under What action should we perform?, choose Trigger a zap (under Zapier) or Send a webhook (under Custom code).
  4. Under When should we perform this?, choose After event scheduled, Before start of event, After start of event, Before end of event, or After end of event.
  5. Set how long before or after, in minutes, hours, or days, and click Add action.
  6. In the action, fill in the description. It's saved as you type.

To add a zap or webhook at the same time as an action that's already on the timeline, use Add another action at this time in that spot.

Remember to attach the workflow to your links and turn it on. See Introduction to Workflows.

How do I set up the zap?

Start with the Trigger a zap action in SavvyCal:

  1. Under Describe the task you'll perform in Zapier, enter a short description, like "Notify the #sales Slack channel". This is how you'll find the action in Zapier, so give each one a clear name. An action with no description shows up as "(No description)".

Then, in Zapier:

  1. Create a zap and choose the SavvyCal app as the trigger. The Open Zapier link in the action takes you there.
  2. For the trigger event, choose Triggered Workflow.
  3. Sign in to SavvyCal if Zapier asks you to.
  4. Under Workflow, choose your workflow. Under Action, choose the action by its description.
  5. Test the trigger, add the steps you want in Zapier, and turn the zap on.

The zap gets the same event fields as the other SavvyCal triggers, like the scheduler's name and email, the event's start time, and the link name. See Integrating with Zapier for the most common fields.

The Workflow menu in Zapier lists workflows that belong to you or to teams you're an owner or admin of.

How do I set up the webhook?

The Send a webhook action doesn't have its own URL. Instead, it sends a workflow.action.triggered payload to the webhooks you've already set up on your account.

  1. In the action, under Describe the task you'll perform, enter a short description. It's included in the payload as action.properties.description.
  2. If you don't have a webhook yet, go to Settings > Integrations. Under Automation, find Webhooks, click the + button, enter your endpoint's URL, and click Save. See Webhooks.
  3. In your code, listen for payloads with the type workflow.action.triggered, and check the action ID to see which action fired. The action shows its ID (it starts with waction_) under Implement your webhook listener.

Payloads are signed the same way as every other SavvyCal webhook. See Securing webhooks to verify them.

Every webhook on your account gets a payload each time any of these actions runs, including Trigger a zap actions. If you have more than one workflow action, or more than one endpoint, always check payload.action.id before doing anything.

The payload goes to the webhooks of everyone who can manage the workflow: the owners and admins of the team (or you, for a personal workflow), plus your organization's owners and admins. See Team and organization roles.

What's in the webhook payload?

The body has the same envelope as other SavvyCal webhooks. The difference is inside payload: a regular event webhook puts the event there directly, while a workflow payload puts it under payload.event, next to the workflow, the timing rule, and the action that fired.

{
  "id": "payload_XXXXXXXXXX",
  "type": "workflow.action.triggered",
  "version": "2020-11-18",
  "occurred_at": "2025-06-01T14:00:00Z",
  "payload": {
    "workflow": {
      "id": "wkflw_XXXXXXXXXX",
      "name": "Demo prep",
      "state": "active",
      "created_at": "2025-05-01T10:00:00Z"
    },
    "rule": {
      "id": "wrule_XXXXXXXXXX",
      "trigger_type": "event_started",
      "trigger_offset_amount": 1,
      "trigger_offset_unit": "hours",
      "trigger_offset_direction": "before",
      "created_at": "2025-05-01T10:00:00Z",
      "actions": []
    },
    "action": {
      "id": "waction_XXXXXXXXXX",
      "type": "trigger_automation",
      "properties": {
        "provider": "custom",
        "description": "Notify the #sales Slack channel"
      },
      "created_at": "2025-05-01T10:00:00Z"
    },
    "event": {}
  }
}

A few details:

  • action.properties.provider is custom for Send a webhook and zapier for Trigger a zap.
  • rule describes the timing you set. trigger_type is event_created, event_started, or event_ended. Its actions list holds every action at that time, not just this one.
  • event is the full event, in the same format as the event.created payload. Its details are as of when the action runs.
  • version is your webhook's payload version.

For the full schema, see WorkflowActionTriggeredWebhook.

How do I test it?

In Zapier, testing the Triggered Workflow trigger pulls in up to three of your most recent events, or a sample event if you don't have any yet. That's handy for mapping fields, but it doesn't run your workflow.

To test the whole thing, set the action to run After event scheduled with a delay of 0 minutes. Turn the workflow on, attach it to a link, and book a meeting on that link yourself. Once it works, change the timing to what you want.

What happens if delivery fails?

If your endpoint doesn't respond with a 2xx status code, or SavvyCal can't connect, it tries again with longer and longer waits in between, up to 20 attempts in all.

To see what was sent and how your endpoint answered, go to Settings > Integrations, open the menu next to the webhook under Webhooks, and choose View logs. The Webhook Logs page lists each attempt with its status code, event type, and time. Click an attempt to see the request payload and your endpoint's response.

Zapier's connection to SavvyCal is also a webhook, so it shows up in your Webhooks list when you turn on a zap. Its logs show whether SavvyCal reached Zapier. Don't delete it, or your zaps will stop getting payloads.

Why didn't my zap or webhook run?

Check these first:

  • The workflow is off. Turn it on with the toggle at the top of the workflow.
  • The link isn't attached. The workflow only runs for events booked on links it's attached to.
  • You're on the Free plan. The workflow editor shows "Workflows will not actually run until you upgrade to a paid account."
  • The event was booked before you added the action. SavvyCal schedules a workflow's actions when someone books, so a new action applies to meetings booked after you add it. See Workflow timing and recipients.
  • For a webhook: you don't have a webhook set up under Settings > Integrations, or your code is filtering on the wrong action ID.
  • For a zap: the zap is off, or it's pointed at a different action. Check the Action you chose in Zapier against the description in SavvyCal.

Still have a question? Contact support.

On this page