Point any HTML form at one endpoint. 500 free submissions — no card, no time limit — and unlimited forms.
Create free accountWhen Zapier is the right tool (and when it isn't)
Zapier is the Swiss Army knife of integrations — thousands of pre-built app connectors (see zapier.com/apps), a visual builder, and enough non-developers using it that wiring up "form submission to obscure SaaS" is usually a five-minute job. The catch is the bill: a contact form pushing 30 submissions a day on the Professional plan ($19.99/month billed yearly) eats most of your task quota by mid-month, and that's before you add a Slack ping and a Google Sheets row to the same Zap (3 tasks per submission).
The honest answer: splitforms ships native presets for the destinations most forms need — email, Slack, Discord, generic webhooks, Google Sheets, Notion, and Airtable — included on paid plans with no per-event fee. Zapier earns its keep when you need (a) an app splitforms doesn't have a preset for, (b) conditional routing without writing code, or (c) a non-dev on your team to own the integration. This guide covers the wiring for all three cases.
Step 1 — Set up the Webhooks by Zapier trigger
splitforms doesn't need a native Zapier app. The generic "Webhooks by Zapier" trigger receives any HTTPS POST and parses the JSON automatically.
- In Zapier, click Create Zap.
- Search for and pick Webhooks by Zapier as the trigger app.
- Trigger event: Catch Hook (not Catch Raw Hook — Catch Hook gives you parsed JSON fields).
- Click Continue. Zapier shows you a custom URL like
https://hooks.zapier.com/hooks/catch/12345678/abc123/. Copy it. - Leave the "Pick off a Child Key" field blank. splitforms posts the data at the top level — Zapier maps it directly.
Don't click Test trigger yet. Set up the splitforms side first so you have a real payload to work with.
Step 2 — Add the URL to splitforms
In the splitforms dashboard, open Integrations → Webhooks, pick the Zapier preset, paste the Zapier URL, choose one form or all of them, and save.
Webhook URL: https://hooks.zapier.com/hooks/catch/12345678/abc123/
Preset: Zapier (signed JSON)
Event: submission.created
Retry: one automatic retry ~2 s later on a timeout or 5xxClick Test webhook. splitforms sends a sample payload. Now go back to Zapier and click Test trigger — it should pull the test payload in within a few seconds.
Working from an AI coding agent instead? The splitforms MCP server has a create_webhook tool that saves the same webhook from Claude Code or Cursor.
The splitforms payload Zapier sees
Every webhook from splitforms has the same envelope. Once Zapier has parsed your test event, every key below shows up in the "Pick off a Field" dropdown for downstream steps.
{
"event": "submission.created",
"submission": {
"id": "6f1c2a9e-…",
"form_name": "Contact",
"data": {
"name": "Ada Lovelace",
"email": "[email protected]",
"subject": "Demo request",
"message": "Hi — I'd like a 15-min call.",
"company": "Lovelace Industries"
},
"ip_address": "203.0.113.42",
"referer": "https://example.com/contact",
"created_at": "2026-05-02T12:00:00.000Z",
"files": [
{ "field": "resume", "name": "cv.pdf", "size_bytes": 184320,
"content_type": "application/pdf", "download_url": "https://…" }
]
}
}In Zapier's field mapper this shows up as Submission Data Name, Submission Data Email, Submission Created At, etc. Custom fields are picked up automatically — every key under submission.data becomes a draggable variable. files only appears when the submission carried uploads; each download_url is a direct link that expires about 7 days after the submission. There is no spam score in the payload: spam is filtered before delivery, so Zapier only ever sees accepted submissions. Every request also carries an X-Splitforms-Signature header (HMAC-SHA256 of the body) and X-Splitforms-Event: submission.created.
Common downstream actions
The whole point of routing through Zapier is the action library. The five most common splitforms-to-X flows:
- Google Sheets — Create Spreadsheet Row. Map
Fields Name→ Name column,Fields Email→ Email column,Submitted At→ Timestamp. Native splitforms also supports this via the Sheets preset, but Zapier wins if you want to write to a sheet someone else owns or that's in a different Google account. - Slack — Send Channel Message. Format a Block Kit message in the Slack action. Native splitforms ships a Slack preset that posts directly, with no Zap in between. Use Zapier when you want conditional pings (only @here for high-priority forms).
- HubSpot — Create or Update Contact. Map email → email, name → first/last name, company → company. Zapier handles the dedupe automatically (HubSpot upserts by email). For raw forwarding without dedupe, the native HubSpot proxy is faster and free.
- Mailchimp — Add/Update Subscriber. Hook a newsletter signup form to your audience list. Add a Filter step before this to skip submissions where
fields.subscribeis false. - Salesforce — Create Lead. The Zapier Salesforce action handles OAuth + custom fields without you touching any auth code. This is genuinely the cheapest path if Salesforce is the destination — direct Salesforce API integration is significantly more work.
Filters, formatters, and paths
The reason Zapier is worth a paid plan, if it's worth one at all, is the middleware between trigger and action.
Filter by Zapier. Skip the rest of the Zap unless a condition is met. Useful for:
Only continue if:
Submission Data Subject (Text) Does not contain "unsubscribe"
Submission Data Email (Text) Ends with "@trusted-partner.com"Formatter by Zapier. Reshape data before passing it on — title-case names, parse dates into a different format, lookup-table-replace the value of a field, regex-extract a phone number from a free-text field. The Text → Split / Truncate / Default Value transforms cover most real cases.
Paths. Branch the Zap based on a field. Enterprise leads (company size > 100) go to Salesforce + Slack; freelance leads go to a simple Google Sheet. Each path counts independently against your task quota, so this gets expensive fast — but it's the cleanest way to do conditional fan-out without code.
For complex routing (more than two paths, or anything involving math), this is the threshold where rolling a Cloudflare Worker becomes cheaper than Zapier. The same routing logic in code is 30 lines and free; in Zapier it's 4 paths × 3 actions × 30 submissions/day × 30 days = 10,800 tasks/mo, well into the Professional plan ($49/mo).
The cost question: native webhooks vs Zapier
The honest comparison for a typical contact form (~30 submissions/day, two destinations like Slack + Google Sheets):
splitforms native integrations
Slack preset: free
Google Sheets: free (native, OAuth)
Total: $0/mo
Hops per submission: 1 (splitforms → app)
Zapier (Professional, $19.99/mo billed yearly)
30 submissions × 3 tasks/day × 30 days = 2,700 tasks/mo
Professional cap: 750 tasks/mo
→ Forced upgrade to Professional ($49/mo)
Hops per submission: 2+ (splitforms → Zapier → app)The math gets worse at higher volume. The math gets better when you genuinely need an app outside the splitforms preset list, or when the time you'd spend building a proxy is worth more than the Zapier subscription.
The recommended pattern: use splitforms native webhooks for everything you can, and use Zapier for the long-tail destinations (Salesforce, niche CRMs, Pipedrive, Trello, Asana). Pair this with the rest of your contact form stack, and grab a starter form from the templates if you need one. The full webhook spec including HMAC signing and retry policy is in the splitforms docs.
Tech support / troubleshooting
- Zapier "Test trigger" never finds an event. You picked Catch Raw Hook instead of Catch Hook, or you copied the URL incorrectly. Re-create the trigger and verify the URL ends with a trailing slash.
- Custom fields are missing in the field mapper. The test event did not include them. Submit a real test entry that fills every field, then re-pull the trigger sample in Zapier.
- Tasks are burning faster than expected. Each multi-step Zap action counts as one task. A single submission going to Slack + Sheets + HubSpot is 3 tasks. Consolidate to native splitforms webhooks for the apps that have presets.
- Zapier returns 5xx or the Zap is turned off. splitforms makes one automatic retry about 2 seconds later on a timeout, network error or 5xx (never on a 4xx), then logs the failure in the webhook delivery log. There is no longer queue, so turn the Zap back on; the submissions themselves are always kept in your splitforms dashboard, so nothing is lost while the Zap is off.
- Spam keeps reaching Zapier. splitforms only delivers submissions that passed its rule-based spam filter, so spam in Zapier means something got past the honeypot, time-trap and content rules. Add the
botcheckhoneypot andform_loaded_attime-trap fields to your form, or add a Zapier Filter step on a field such as the message text.
Next steps and where to get help
- Skip the Zapier tax for common destinations: Slack, Discord, Notion, Google Sheets.
- Wiring this from a Next.js or React app? See Next.js form backend and React form backend for snippets that work alongside Zapier.
- Comparing services before you wire Zapier? Formspree alternative and Web3Forms alternative both cover the webhook gating gotchas.
- Need a starting form? Grab the free HTML contact form template, then wire the Zap.
- The webhook payload contract and HMAC signing details: /docs and /api-reference.
- Plan limits, retention, and security: /faq.
- The full webhooks feature page.
FAQ
Does splitforms have a native Zapier integration in the Zapier app directory?
Not yet — splitforms is new and a public Zapier integration takes weeks to clear Zapier's review queue. The Webhooks by Zapier trigger covers every use case the native integration would, with one extra step (paste the webhook URL into splitforms). Once you've set it up the experience is identical from the user side.
How much does Zapier cost for a contact form?
Zapier's free plan includes 100 tasks a month and two-step Zaps (one trigger, one action). The first paid tier is Professional at $19.99/month billed yearly ($29.99 monthly) for 750 tasks and multi-step Zaps, per zapier.com/pricing (checked October 2, 2026). If your contact form gets more than ~3 submissions per day or you need filters / fan-out, you're on a paid plan. splitforms native webhooks come with any paid splitforms plan (Pro, $5/mo) with no per-event cost.
Why would I use Zapier instead of splitforms native webhooks?
Use Zapier when the destination is a niche app splitforms doesn't have a preset for, when you need conditional logic (filter or route by a form field), when you need data transformation (formatter steps), or when a non-developer on your team owns the wiring. Use native webhooks for any high-volume, latency-sensitive, or cost-sensitive forwarding.
How quickly does Zapier process a submission?
Webhooks by Zapier triggers are 'instant': the Zap starts when splitforms' POST arrives, then each action step adds its own run time. Native splitforms webhooks and Slack/Discord presets fire as soon as the submission is accepted, usually within seconds, with no Zap in between. If you need a Slack alert for a hot lead, fewer hops is better.
What does the splitforms webhook payload look like in Zapier?
After you wire up the trigger and send a test event, Zapier displays the full JSON tree as named fields you can drag into the next step. The payload is {"event": "submission.created", "submission": {...}}, and the keys you'll use most are submission.data.<your_field_name> (every form field sits under submission.data), submission.created_at (ISO 8601), submission.id, submission.form_name and submission.referer. There is no spam score: spam is filtered before delivery, so only accepted submissions reach Zapier. Custom fields appear automatically — Zapier picks them up from the test payload.
Can I send the same submission to multiple apps through one Zap?
Yes — multi-step Zaps (Professional and up) chain actions. Submission → Slack message → Google Sheets row → HubSpot contact, all in one Zap. You can also fan out by adding a Path step that branches based on a field value (e.g., enterprise leads go to Salesforce, freelance leads go to a simple sheet). Each step counts as one task against your monthly quota.
How do I test a Zap without actually submitting my live form?
Two options. (1) In splitforms, each webhook has a 'Test webhook' button that sends a sample payload — Zapier picks it up the same as a real one. (2) Submit your own form once with test data, which exercises the whole pipeline, spam filtering included. Option 1 is faster for the first field mapping; option 2 proves the live form is wired correctly.
What's the cleanest way to dedupe duplicate submissions in Zapier?
Each accepted submission produces one webhook with its own submission.id. If a delivery is retried (splitforms makes one automatic retry about 2 seconds later when Zapier times out or returns a 5xx), the retry carries the same submission.id, so a Zapier lookup step (or a 'Find or create' action in your destination app) keyed on submission.id keeps duplicates out. For a visitor who double-clicks submit, disable the button on submit in your form's JavaScript.