Skip to main content
4 min read

Zapier catch-hook

Wire Zenovay events into any of Zapier's 5,000+ supported apps — Notion, Airtable, HubSpot, Linear, Trello, Gmail, you name it.

This recipe uses Zapier's Webhooks by Zapier → Catch Hook trigger.

Outbound webhooks are a Zenovay Pro+ feature. The Zapier Catch Hook trigger requires a Zapier Free plan or higher; Zapier Premium webhooks (Catch Raw Hook) need a Zapier Starter plan or higher.


1. Create a Zap with a Catch Hook trigger

  1. In Zapier, click Create Zap.
  2. For the trigger, pick Webhooks by Zapier → choose Catch Hook.
  3. Skip the "Pick off a Child Key" prompt (leave it blank — we want the full event payload).
  4. Zapier shows a Custom Webhook URL like https://hooks.zapier.com/hooks/catch/12345678/abcdef/ — copy it.

2. Add the webhook in Zenovay

  1. In app.zenovay.com, go to Settings → Webhooks.
  2. Pick the website that should fire events into this zap.
  3. Click Add webhook.
  4. Fill in:
    • Name: Zapier — <what the zap does> (e.g. Zapier — Add to Notion)
    • URL: paste the Zapier Catch Hook URL from Step 1
    • Events: pick the events the zap should react to
  5. Click Create webhook.
  6. Click Send test event (paper-plane icon).

3. Test the trigger in Zapier

  1. Back in Zapier, click Test trigger. Zapier should now show the Zenovay test event payload.
  2. Click Continue with selected record.
  3. Build the rest of the zap (the action steps) using fields from the Zenovay payload — common picks:
    • event_type (e.g. traffic_spike, goal_completed)
    • website_id
    • data.* (event-specific payload)
    • timestamp

4. Common zap recipes

When this Zenovay event fires……do this in Zapier
goal_completedAdd a row to Airtable / HubSpot CRM contact
traffic_spikeSend a Slack DM to the on-call person
website_downCreate an urgent Linear issue / page someone via Twilio
error_spikeOpen a Sentry alert (or escalate via PagerDuty)

5. Verify Zenovay's signature (advanced)

Zapier's Catch Hook does not natively verify HMAC signatures. For production zaps where signature verification matters (e.g. compliance), front the zap with a Cloudflare Worker that verifies, then forwards:

import { createHmac } from 'crypto';

export default {
  async fetch(req) {
    const rawBody = await req.text();
    const signature = req.headers.get('x-zenovay-signature') || '';
    const provided = signature.replace(/^sha256=/, '');
    const expected = createHmac('sha256', YOUR_WEBHOOK_SECRET)
      .update(rawBody)
      .digest('hex');

    if (provided !== expected) return new Response('invalid signature', { status: 401 });

    // Forward to Zapier
    await fetch(ZAPIER_CATCH_HOOK_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: rawBody,
    });
    return new Response('ok');
  },
};

Your webhook secret is shown in Settings → Webhooks → click the eye icon on the webhook card.


Troubleshooting

  • Zapier "We didn't find a request": click Send test event in Zenovay AFTER you click Test trigger in Zapier — Zapier listens for ~10 minutes.
  • Zap fires repeatedly on the same data: Zapier's Catch Hook does NOT deduplicate. If you want idempotency, filter on the idempotency_key Zenovay sends in the payload (or in the action step, use a Filter by Zapier step that checks against an existing record).
  • Long fields truncated: Zapier truncates response samples in the editor, but the full payload is delivered at runtime.

Was this page helpful?