Connect WeWeb to Zapier by creating a 'Catch Hook' trigger in Zapier, copying the webhook URL, then adding a REST API Request action (POST) to a WeWeb workflow. When your trigger fires — a form submission, button click, or data change — WeWeb sends JSON to Zapier, which then automates the rest. Setup takes about 15 minutes.
Automating WeWeb with Zapier Webhooks
Zapier connects thousands of apps through a visual automation interface. WeWeb does not have a native Zapier plugin, but you can connect the two in about 15 minutes using Zapier's 'Webhooks by Zapier' trigger and WeWeb's REST API Request workflow action. The pattern is simple: Zapier gives you a unique URL that accepts POST requests; WeWeb sends that POST request when something happens in your app (form submitted, button clicked, record created). Zapier receives the payload and then routes it to Gmail, HubSpot, Slack, Airtable, or any of Zapier's 6,000+ integrations. This tutorial covers the full setup from scratch and common automation patterns for non-technical founders.
Prerequisites
- A WeWeb project with a form or trigger event you want to automate
- A Zapier account (free plan includes Webhooks by Zapier on some tiers — check if you need Starter plan)
- The REST API data source plugin installed in WeWeb (Plugins → Data sources → REST API → Add)
Step-by-step guide
Create a new Zap with the Catch Hook trigger
Create a new Zap with the Catch Hook trigger
Log in to Zapier at zapier.com and click the orange 'Create Zap' button in the top left. In the Trigger step, search for 'Webhooks by Zapier' and select it. Under 'Trigger Event', choose 'Catch Hook' — this creates a unique URL that Zapier listens to. Click 'Continue'. On the next screen, Zapier shows your unique webhook URL — it looks like `https://hooks.zapier.com/hooks/catch/1234567/abcdefg`. Copy this URL. You will paste it into WeWeb in the next step. Leave this Zapier tab open — you will need to return to it to test the connection.
Expected result: Zapier displays your unique Catch Hook URL ready to receive POST requests.
Install the REST API plugin in WeWeb
Install the REST API plugin in WeWeb
Switch back to your WeWeb editor. Click the plug icon in the left sidebar to open the Plugins panel. Under 'Data sources', find 'REST API' and click Add if it is not already installed. No configuration is required at the plugin level — the REST API plugin simply enables REST API collections and the REST API Request workflow action. Once installed, you will see it listed under your data sources. If you already have REST API installed from a previous integration, skip this step.
Expected result: REST API plugin appears under Plugins → Data sources.
Open a workflow and add the REST API Request action
Open a workflow and add the REST API Request action
Navigate to the page with your form or button trigger. Select the element that starts the automation (typically a form's submit button or a standalone action button). In the right sidebar, click the Workflows tab (lightning bolt icon). Find the workflow triggered 'On click' or 'On submit' for a Form Container. If no workflow exists, click 'Add workflow'. Inside the workflow editor, click the '+' button to add a new action step. In the action search, type 'REST API' and select 'REST API Request'. In the action configuration, set Method to 'POST'. Paste your Zapier Catch Hook URL in the URL field.
Expected result: A REST API Request action appears in the workflow with POST method and the Zapier URL configured.
Build the JSON payload with WeWeb data
Build the JSON payload with WeWeb data
In the REST API Request action body editor, click the 'Body' tab and select 'JSON' format. Click 'Add key' to add fields to your payload. For each field, give it a name (this becomes the field name in Zapier) and click the plug icon on the value side to open the formula editor — bind it to your WeWeb data. For a form: bind `name` to `formContainer.formData.name`, `email` to `formContainer.formData.email`, `message` to `formContainer.formData.message`. Add a `submitted_at` field and bind it to a Custom JavaScript action result that generates a timestamp. Add a `source_page` field bound to `wwPage.name`. Every key-value pair you add here becomes a field that Zapier can use in subsequent steps to route to Gmail, HubSpot, Slack, etc.
1// JSON body for REST API Request action → Zapier Catch Hook2// Injection point: Workflow → REST API Request → Body (JSON)3// Values in {{ }} are formula editor bindings (reference your actual variable names)4{5 "event": "form_submission",6 "name": "{{formContainer.formData.name}}",7 "email": "{{formContainer.formData.email}}",8 "message": "{{formContainer.formData.message}}",9 "phone": "{{formContainer.formData.phone}}",10 "source_page": "{{wwPage.name}}",11 "submitted_at": "{{variables.currentTimestamp}}",12 "user_id": "{{plugins['supabase-auth'].user.id}}"13}Expected result: The action body shows all the fields and their dynamic bindings. The full JSON structure is visible in the preview.
Test the webhook connection from WeWeb
Test the webhook connection from WeWeb
Before completing the Zap, test the connection to confirm data flows correctly. In WeWeb, trigger your workflow by interacting with the element (click the button or submit the form with test data). Switch to your Zapier browser tab. Zapier should now show 'We found a request!' with a preview of the data it received — your JSON fields will appear as a list of key-value pairs. If Zapier doesn't detect the request within 60 seconds, check: 1) the URL in your WeWeb action matches the Zapier URL exactly, 2) the REST API Request action is actually reached in the workflow (check for upstream branching conditions), 3) there are no CORS errors in browser dev tools Network tab. After confirming the data looks correct in Zapier, click 'Continue' in the Zapier setup.
Expected result: Zapier shows 'Request found' with your WeWeb form data visible as mapped fields.
Complete the Zap with an action step
Complete the Zap with an action step
In Zapier, click 'Continue' after confirming the webhook data. Now configure the Action step — what Zapier does with the data from WeWeb. Common patterns for WeWeb apps: click 'Gmail' → 'Send Email' and map the `email` field from WeWeb to 'To', the `name` field to the email body; click 'HubSpot' → 'Create Contact' and map `email`, `name`, and `phone` fields; click 'Slack' → 'Send Channel Message' and compose a message using the WeWeb fields; click 'Airtable' → 'Create Record' and map each WeWeb field to the correct Airtable column. Complete the action configuration, click 'Test action' to confirm it works end-to-end, then click 'Publish Zap' to make it live.
Expected result: The complete Zap is published and live. Submitting your WeWeb form now triggers the full automation in Zapier.
Add error handling and user feedback in WeWeb
Add error handling and user feedback in WeWeb
Return to your WeWeb workflow and improve the user experience around the Zapier call. After the REST API Request action, add a 'Branching' action. In the condition, check if the previous action succeeded (use formula `actions[N].status >= 200 && actions[N].status < 300` where N is the index of your REST API Request). In the 'Yes' (success) branch, add actions to show a success message: set a page variable `submissionSuccess` to true, which triggers conditional visibility of a success banner on the page. In the 'No' (error) branch, set an error variable and display an error message to the user. Also add a reset of the form data variable if you want to clear the form after successful submission.
Expected result: Users see a success confirmation after the form submits and the Zapier automation runs. Errors display a descriptive message.
Complete working example
1// Injection point: Workflow → Custom JavaScript action2// Run this BEFORE the REST API Request action to prepare the payload3// Store the return value, then reference actions[0] in the REST API body45// Generate submission metadata6const submissionId = `sub_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;7const timestamp = new Date().toISOString();8const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;910// Build UTM/referrer data (useful for lead attribution)11const urlParams = new URLSearchParams(window.location.search);12const utmData = {13 source: urlParams.get('utm_source') || 'direct',14 medium: urlParams.get('utm_medium') || 'none',15 campaign: urlParams.get('utm_campaign') || 'none',16 referrer: document.referrer || 'direct'17};1819// Return the metadata — reference as actions[0] in subsequent steps20return {21 submission_id: submissionId,22 submitted_at: timestamp,23 user_timezone: timezone,24 utm: utmData,25 page_url: window.location.href,26 page_title: document.title27};2829// In the REST API Request action body (next step), combine this with form data:30// {31// "submission_id": "{{actions[0].submission_id}}",32// "submitted_at": "{{actions[0].submitted_at}}",33// "name": "{{formContainer.formData.name}}",34// "email": "{{formContainer.formData.email}}",35// "utm_source": "{{actions[0].utm.source}}"36// }Common mistakes
Why it's a problem: Using the Zapier Catch Hook test URL in production instead of copying the live production URL
How to avoid: Zapier provides a single URL per Catch Hook trigger that works for both testing and live. Confirm the URL in your WeWeb action matches the URL shown on the Zapier trigger step configuration page exactly.
Why it's a problem: Sending the webhook even when form validation fails
How to avoid: Add a Branching action before the REST API Request that checks formContainer.isValid. Only proceed to the webhook in the 'Yes' branch. In the 'No' branch, show a validation error message instead.
Why it's a problem: Zapier Catch Hook returning 200 but the Zap action failing silently
How to avoid: The Catch Hook always returns 200 to acknowledge receipt. If the downstream action (Gmail, HubSpot) fails, Zapier sends you an email notification. Check your Zapier account's Task History for errors. Enable Zapier error notifications in your Zapier account settings.
Why it's a problem: Not turning on the Zap after publishing
How to avoid: After building and testing your Zap, you must toggle it to 'On' on the Zap list page. A Zap in 'Off' state will still accept incoming webhooks but will not execute the action steps.
Best practices
- Name your Zapier fields clearly using snake_case — Zapier displays these names when mapping fields in action steps, so readable names save time
- Include a unique submission_id in every webhook payload so you can track and deduplicate submissions in your connected apps
- Use a Custom JavaScript action before the REST API Request to generate timestamps and UTM attribution data — this makes your automation data more useful for analytics
- Test your Zap with real data before publishing — Zapier's test mode shows you exactly what data flows through each step
- Consider Make.com (formerly Integromat) or n8n as Zapier alternatives if you need more complex multi-branch logic or want to avoid Zapier's task limits
- Add a loading state to your submit button while the webhook fires — set a variable 'isSubmitting' to true at the start of the workflow and false at the end, bind the button's disabled state to it
- For high-volume forms, verify that your Zapier plan's task limit is sufficient — each webhook hit uses one Zapier task
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I have a WeWeb contact form with fields: name, email, company, message. I want to connect it to Zapier so that each submission creates a HubSpot contact and sends a Slack notification. Write the JSON body I should put in the WeWeb REST API Request action, and explain what fields to map in Zapier.
In WeWeb, I'm setting up a REST API Request action to POST to a Zapier Catch Hook URL. My Form Container has fields: name, email, message. How do I reference these form fields in the REST API body using WeWeb's formula editor? Also show me how to check formContainer.isValid before sending the webhook.
Frequently asked questions
Do I need a paid Zapier plan to connect WeWeb to Zapier via webhooks?
Webhooks by Zapier requires a Zapier Starter plan ($29.99/month) or above for live Zap runs. The free plan allows you to build and test Zaps including webhooks, but they won't run automatically. If cost is a concern, Make.com offers webhook triggers on its free plan (up to 1,000 operations/month), and n8n is fully open-source with unlimited self-hosted runs.
Can I send data from WeWeb to multiple Zapier Zaps at once?
Yes — add multiple REST API Request actions in the same workflow, each pointing to a different Zapier Catch Hook URL. Alternatively, use a single Zapier Catch Hook and create multiple action steps within one Zap. The single-webhook approach is cleaner and uses fewer Zapier tasks.
What happens if the Zapier webhook is temporarily unavailable when a user submits the form?
The REST API Request action will return an error status. Your WeWeb workflow should handle this in the error branch — display a user-friendly message and optionally store the failed submission data in a local variable or Supabase table for retry. Zapier's servers are generally highly available, but network issues can cause intermittent failures.
How do I pass file uploads from a WeWeb form to Zapier?
File uploads cannot be included directly in a JSON webhook payload. Instead: use the Supabase Storage Upload action in WeWeb to upload the file to Supabase Storage first, get the public URL of the uploaded file, then include that URL as a string field in your Zapier webhook payload. Zapier and downstream apps can then fetch the file from that URL.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation