Automation Blog

Wix to Zapier Webhook Workaround

How to connect Wix to Zapier by sending form submissions, member sign-ups, and other Wix site events to a Zapier Catch Hook — using Velo by Wix (formerly Wix Code) backend code to fire a webhook when the native Zapier integration doesn't support the event you need.

WixZapierWebhooksVelo

By Troy Tessalone · · 5 minutes

Automation Guide

A practical field guide from Automation Ace.

Wix to Zapier Webhook Workaround

Wix has a native Zapier integration, but it covers a limited set of triggers — primarily Wix Forms submissions and basic eCommerce events. Events like member registration, booking confirmations, dataset record creation, or custom button interactions often aren't available as Zapier triggers. The workaround is Velo by Wix (the JavaScript backend code environment built into Wix), which lets you intercept any site event and POST it as a webhook to a Zapier Catch Hook trigger — firing the Zap instantly without polling.

What You Need

  • A Wix site with Dev Mode enabled (Velo by Wix) — turn it on under Settings → Developer Tools → Dev Mode or Add Apps → Velo by Wix
  • A Zapier account with a Catch Hook trigger URL (created in the steps below)
  • Basic familiarity with JavaScript (Velo uses standard JS with Wix-specific APIs)

Step 1: Create the Zapier Catch Hook

  1. In Zapier, create a new Zap and select Webhooks by Zapier as the trigger
  2. Choose Catch Hook
  3. Copy the unique URL (e.g., https://hooks.zapier.com/hooks/catch/XXXXXX/YYYYYYY/)

Step 2: Write the Backend Webhook Function in Velo

In the Wix Editor with Dev Mode on, open the Backend file panel (left sidebar). Create or open a backend file — for a form submission hook, you can use the page's backend file or a shared backend module.

Add a function that posts data to Zapier using fetch (available in Velo's backend environment):

// backend/zapierWebhook.jsw  (or any .jsw backend file)

export async function sendToZapier(data) {
  const ZAPIER_URL = 'https://hooks.zapier.com/hooks/catch/XXXXXX/YYYYYYY/';

  try {
    const response = await fetch(ZAPIER_URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(data)
    });

    return { success: response.ok, status: response.status };
  } catch (err) {
    console.error('Zapier webhook failed:', err);
    return { success: false, error: err.message };
  }
}

Note: Velo backend files use the .jsw extension for functions callable from front-end page code, or .js for pure backend modules. Use .jsw if you're calling this function from a page's front-end code.

Step 3: Call the Webhook from a Site Event

Wix Forms Submission

On the page containing a Wix Form, open the page's code tab and hook into the form's submit event:

// Page code (e.g., Page1.js or the relevant page)
import { sendToZapier } from 'backend/zapierWebhook';

$w.onReady(function () {
  $w('#myForm').onWixFormSubmit((event) => {
    const fields = event.fields;

    // Extract field values by field label or ID
    const nameField = fields.find(f => f.fieldName === 'name');
    const emailField = fields.find(f => f.fieldName === 'email');
    const messageField = fields.find(f => f.fieldName === 'message');

    sendToZapier({
      name:    nameField  ? nameField.value  : '',
      email:   emailField ? emailField.value : '',
      message: messageField ? messageField.value : '',
      submitted_at: new Date().toISOString()
    });
  });
});

Replace #myForm with the element ID of your Wix Form component (select it in the Editor to see its ID in the Properties panel).

Member Registration / Sign-Up

For member-related events, use Velo's backend event hooks in a dedicated backend file named events.js:

// backend/events.js  (this filename is required for Wix backend events)
import { sendToZapier } from 'backend/zapierWebhook';

export function wixMembers_onMemberCreated(event) {
  const member = event.entity;

  sendToZapier({
    member_id:   member._id,
    email:       member.loginEmail,
    name:        `${member.profile?.firstName || ''} ${member.profile?.lastName || ''}`.trim(),
    created_at:  member._createdDate
  });
}

Wix backend event handler function names follow a strict naming convention: appName_onEventName. Check the Wix Velo API reference for the exact event names for orders (wixEcom_onOrderCreated), bookings (wixBookings_onBookingConfirmed), and other apps.

Dataset Record Insert (Custom Collections)

// backend/events.js
import { sendToZapier } from 'backend/zapierWebhook';

export function wixData_onRecordInserted(event) {
  // Only fire for a specific collection
  if (event.collectionName !== 'MyCollection') return;

  sendToZapier({
    record_id:  event.item._id,
    collection: event.collectionName,
    ...event.item  // spread all record fields
  });
}

Step 4: Test the Connection

  1. In Zapier, click Test trigger so Zapier listens for an incoming request
  2. In the Wix Editor, click Preview and trigger the event (submit the form, register a member, etc.)
  3. Zapier receives the payload and displays the fields from your JSON body
  4. Publish your Wix site for the live integration to be active

Important: Publish After Every Change

Velo backend code only runs on the published version of your Wix site — not in Preview for backend events triggered externally. Test page-code event hooks (like form submits) in Preview, but for backend events that originate from Wix APIs, you need to publish first and trigger via the live site.

Handling the Data in Zapier

The Catch Hook receives your payload as individual fields. Wix date fields arrive as ISO strings — use a Formatter step or Code step to reformat them. If you spread the full record with ...event.item, all collection fields arrive in Zapier and you can map them to any downstream step.

Rate Limiting and Error Handling

Velo's fetch in backend code is subject to Wix's outbound request limits. For high-volume sites, add error logging and consider batching. For the Zapier side, if you're sending many events with similar payloads, add a timestamp to avoid webhook deduplication issues:

sendToZapier({
  ...yourData,
  _ts: Date.now() // prevents Zapier from deduplicating identical payloads
});
The Velo by Wix webhook approach unlocks any Wix site event as a real-time Zapier trigger — not just the events the native integration exposes. The pattern is consistent: write a backend sendToZapier function that POSTs JSON to your Catch Hook URL, then call it from whichever Velo event hook fires when something happens on your site. The Zap receives the data immediately and runs its downstream steps without polling.

For sending webhooks from other platforms to Zapier, see the Gravity Forms webhook workaround and Contact Form 7 webhook setup. For processing the incoming webhook data with conditional logic, see if/else and switch statements in Zapier Code steps. For help building a Wix to Zapier integration, talk to Automation Ace.

WixZapierWebhooksVelo

Disclaimer: This article may include links to apps, products, or services. Some links may be affiliate links, which means Automation Ace may earn a commission at no extra cost to you.

Build Better Systems

Ready to automate with confidence?

Share your tools, process, and goals. Automation Ace can design the workflow, integration, AI assist, or code bridge that fits your business.

Start a Project