Developers

Zapier

Connect GetWaitly to 5,000+ apps with the GetWaitly Zapier app. Forward new signups to Slack, Google Sheets, Mailchimp, Discord, and more — no code, no webhook URLs to copy. Find it in Zapier's app directory.

Step 1: Get an API key

  1. Open Account settings → API keys in the GetWaitly dashboard.
  2. Click Create API keyand copy it — it's shown only once.

Step 2: Create a Zap

  1. In Zapier, click Create Zap and search for GetWaitly.
  2. Connect your account by pasting the API key.
  3. Pick a trigger: New Signup, Signup Confirmed, New Referral, or Unsubscribed.
  4. Choose your waitlist (optional if you only have one).
  5. Add an action: Slack, Google Sheets, Mailchimp, Discord, etc.

Step 3: Test & turn on

Use the sample record to map fields, then sign up on your waitlist to trigger a live event. Turn on your Zap when it looks good.

Webhook payload

json
{
  "event": "signup.new",
  "email": "visitor@example.com",
  "name": "Alex",
  "referralCode": "abc123defg",
  "position": 42,
  "referredById": null,
  "timestamp": "2026-08-06T12:00:00.000Z"
}

Events: signup.new (single opt-in), signup.confirmed (double opt-in), referral.new (when someone refers a friend), and subscriber.unsubscribed — which adds a scope field: "emails" for an email opt-out, "all" when they leave the waitlist.

Delivery & retries

Deliveries are queued and retried automatically: 429 and 5xx (or a timeout) are retried up to 3 times, 30 seconds apart; other 4xx responses are treated as permanent. The last 50 attempts are shown on the Integrations page.

Verifying the signature

When you set a webhook secret, every request includes X-GetWaitly-Timestamp and X-GetWaitly-Signature-256 — an HMAC-SHA256 of timestamp.body. Verify it before trusting the payload:

javascript
const timestamp = req.headers["x-getwaitly-timestamp"];
const signature = req.headers["x-getwaitly-signature-256"];
const expected = crypto
  .createHmac("sha256", secret)
  .update(`${timestamp}.${rawBody}`)
  .digest("hex");
if (expected !== signature) return res.status(401).end();