Skip to main content

Zapier

Audience: Sales, management, support, engineering · Where in app: Settings → Integrations → Zapier (and Settings → Webhooks) · Plan availability: All plans (verify)

Zapier is the "glue everything together without code" option. Knock Knock fires events (new visitor, hot lead, booking, chat ended, …); a Zapier "Zap" catches each event and does whatever the customer wants with it — add a row to Google Sheets, post to Slack, add to a Mailchimp list, create a task. It's the easiest path for non-technical admins who want to fan an event out to several destinations.

What it does

Subscribes Zapier webhooks to Knock Knock events. Since cb83986ec (2026-09-07) Zapier and custom webhooks share one catalogue and one dispatch (app/configs/webhookEvents.js, WebhookHelper.dispatch → BullMQ tenant-webhooks): all nine events — new_session, new_user_identified, new_lead, lead_score_update, chat_transcript, new_booking, call_completed, booking_rescheduled, booking_cancelled — are Zapier triggers. The Zapier payload is the bare event data with a prepended id (the delivery id, stable per identical payload) so Zapier dedups; samples use sample-<event>. Zapier app version 1.1.0 is invite-only via a version-specific link (promotion is blocked), which is what the Zapier modal links to.

How it works

Auth model: webhook URL + shared secret (company ID + secret pair). In Settings → Integrations → Zapier, Knock Knock generates a Zapier secret — a 20-byte hex string stored at company.zapier.secret (with secret_generated_at). Each Zap registers a webhook subscription, stored in company.zapier.webhooks[]:

{ url, event, zap_id }

Direction: outbound only. When a subscribed event occurs, Knock Knock POSTs the event payload to the Zap's URL.

Inbound auth (Zapier → Knock Knock): Zapier's management calls (subscribe/unsubscribe/test/sample) authenticate with two headers — X-Company-Id and X-Company-Secret (matched against company.zapier.secret). There is no HMAC signature on outbound deliveries; the secret-pair identifies the tenant.

Example payload (new_lead)

{
"user_session": { "...full session object..." },
"contact_information": {
"name": "...",
"email": "...",
"phone": "..."
}
}

lead_score_update instead carries a lead_score object (lead_event, event_score, total_score); new_session carries only user_session.

A typical Zap

  1. Trigger: "When new lead in Knock Knock"
  2. Action 1: Add row to Google Sheets
  3. Action 2: Post to Slack
  4. Action 3: Add to Mailchimp list

Configuration & options

  • Generate/rotate the Zapier secret: GET /zapier/generate-secret (Settings → Integrations → Zapier).
  • Zapier registers subscriptions via POST /zapier/subscribe-webhook (and removes via DELETE /zapier/unsubscribe-webhook); sample data comes from GET /zapier/webhook-sample-data?event=....
  • Manage native event delivery alongside Zapier under Settings → Webhooks.

Zapier vs native webhooks

Use Zapier when…Use native webhooks when…
You want no-codeYou're sending to your own API
You need to fan out to 3+ destinationsYou need HMAC-signed delivery
You want filters / transformationsYou want max throughput / no Zapier task limit

Behaviors & edge cases

  • Delivery audit: every attempt lands in webhook_logs with webhook_id = zapier:<hook _id> — same retries (4 attempts, 30-min cap) as native webhooks; a hook answering 410 is $pulled from company.zapier.webhooks. Subscribe is idempotent (200 on a duplicate URL); unsubscribe accepts a 24-hex hook id or the URL (c9022f647); hook URLs must be on hooks.zapier.com; rotating the secret clears the hooks.
  • Latency: Zapier delivery is typically a few seconds — not real-time enough for "while the visitor is still on the page" use cases. Use native webhooks (or Slack) for that.
  • Task limits: Zapier's free tier has low task limits; high-volume tenants burn through them quickly. Native webhooks are more durable.

Plan & limits

  • Available on all plans (verify exact tier gating).
  • The binding limit is Zapier's own per-plan task quota, not Knock Knock.

Technical implementation

  • Owning service: backend. Subscriptions stored on companies.zapier (secret, webhooks[]); deliveries flow through the same webhook delivery + audit path as native webhooks (WebhookQueueService, webhook_logs). ZapierHelper.sendZapierWebhook and its 1,650-line sample blob were deleted.
  • See Webhooks for the underlying delivery, signing, and retry mechanics.

What Nox can tell you

  • Which Zaps are active.
  • Recent deliveries (success / failure) via webhook_logs.
  • Whether Zapier is processing events at the expected rate.