The splitforms blog.
Tutorials, comparisons, and the unglamorous truth about running web forms in production. Written for developers who'd rather ship than wrestle with PHP mail(), SPF records, or yet another CAPTCHA UX.
Tutorials
Step-by-step walkthroughs you can copy-paste into your project today.
Add a contact form to any website in 60 seconds (any framework)
The fastest way to add a working contact form to any website — HTML, Next.js, React, Vue, Astro, Webflow, or WordPress. Copy-paste code, no backend required, working in under a minute.
How to add a contact form to a static site (no backend)
Step-by-step guide to add a working contact form to any static HTML site without writing server code. Three methods compared, with copy-paste examples.
How to Add Form Validation to a Tailwind CSS Contact Form
Add real validation to a Tailwind CSS contact form using only HTML5 primitives plus the peer, invalid:, and placeholder-shown variants — no JavaScript validation library required. Includes two copy-paste JSX examples with full Tailwind classes.
How to receive form submissions by email (the modern way)
Routing form data to your inbox without PHP, mailto links, or custom servers. The 2026 stack for HTML form submissions delivered as email.
HTML contact form code: 12 free templates you can copy-paste in 2026
12 ready-to-paste HTML contact form templates — minimal, accessible, styled, multi-step, file upload, popup. Free, no signup, with backend wired in 60 seconds via splitforms.
Send an HTML form to email without PHP
PHP mail() is brittle, blocked by most hosts, and ends up in spam. Three modern alternatives that work on Vercel, Netlify, Cloudflare Pages, and S3.
Guides
Deep dives on the messy real-world parts of running web forms.
Contact form not working? 8 common causes (and fixes)
From CORS errors to silent SMTP failures, the most common reasons a contact form silently breaks — and how to debug each in under 5 minutes.
GDPR-compliant form submissions: what you actually need
The minimum set of changes to make a contact form GDPR-compliant in 2026, including consent UX, data retention, and DPA basics.
HTML form action explained: a complete guide for 2026
What the HTML action attribute does, how to point it at a backend, and the modern alternatives — with copy-paste examples for static sites, React, Next.js, Webflow.
Migrate from Formspree to a modern form backend (2026 guide)
Step-by-step guide to migrating from Formspree to Splitforms (or any modern form backend). Preserves field names, redirects, webhooks, spam settings. Zero downtime, takes about 5 minutes per form.
Migrating from Typeform to splitforms: a developer's guide
Step-by-step guide for moving form submissions from Typeform to splitforms — pricing comparison, code-level migration, and what you'll gain (and lose) in the switch.
Spam & Security
Stopping bots without breaking conversion. Tested on real production traffic.
AI-powered form spam detection in 2026: how it works
Deep dive into how modern AI classifiers (GPT-4o-mini, Llama, custom transformers) detect form spam. Architecture, accuracy benchmarks, costs, and why it beats CAPTCHAs and honeypots alone.
Best CAPTCHA for contact forms in 2026
reCAPTCHA v3 vs hCaptcha vs Cloudflare Turnstile vs honeypot — measured on real spam volume, conversion impact, and developer experience.
Form spam protection in 2026: the complete guide
Honeypot vs reCAPTCHA vs AI classifiers in 2026 — what works, what's defeated by LLMs, and the layered approach modern form backends use to keep spam out.
Honeypot vs reCAPTCHA: which actually stops form spam?
Side-by-side test of honeypot fields vs reCAPTCHA v3 on real production traffic. Spoiler: the answer depends on your spam volume.
How to stop contact form spam (5 methods compared)
Honeypots, reCAPTCHA, hCaptcha, AI classifiers, and rate limiting — measured side-by-side on a real form. Includes data on which actually works in 2026.
Comparisons
Side-by-side tradeoff analyses. Honest about where splitforms loses too.
Best Next.js form library in 2026: a fair comparison
An honest 2026 comparison of React Hook Form, Formik, TanStack Form, Conform, and pure server actions for Next.js — with code, benchmarks, and tradeoffs.
Best React form library in 2026: an honest comparison
Honest 2026 comparison of React Hook Form, Formik, TanStack Form, react-final-form, and pure useState — bundle size, DX, validation compat, and when each one wins.
Google Forms vs Typeform vs Splitforms: complete 2026 comparison
Side-by-side comparison of Google Forms, Typeform, and Splitforms for contact forms in 2026. Pricing, features, branding, response limits, and which is best for which use case.
Next.js Server Actions vs form backends: when to use which
Next.js 15+ Server Actions handle form submissions natively. Here's when they're enough — and when a dedicated form backend still wins.
Self-hosted vs SaaS form backends: honest tradeoffs
When self-hosting a form backend (FormBricks, OhMyForm) makes sense vs paying for SaaS — TCO, deliverability, and operational overhead.
Top 10 free form backend services in 2026 (tested and ranked)
Independent ranking of the 10 best free form backend services in 2026. Tested submission limits, deliverability, spam filtering, and developer experience for each. Real numbers, no fluff.
Integrations
Wire your forms to Sheets, webhooks, Slack, and your stack.
Connect a form to Google Sheets without Zapier
Three ways to push form submissions into a Google Sheet without paying for Zapier — webhooks, Apps Script, and direct integrations.
How to Connect splitforms to Zapier
Wire any splitforms contact form to Zapier in under five minutes using the Webhooks by Zapier trigger. Parse the splitforms payload, route to Google Sheets, Slack, HubSpot, or Mailchimp — and learn when native splitforms webhooks are the better, cheaper choice.
How to Get Telegram Notifications for Form Submissions
Send a Telegram message to yourself or a group chat every time a contact form submits. Full walkthrough — create a bot with @BotFather, fetch the chat ID, wire up a splitforms webhook with a tiny Cloudflare Worker proxy, and test with curl.
How to Send Form Submissions to Airtable
Sync contact form submissions straight into an Airtable base. Personal access token setup, base and table IDs, field-name gotchas, single vs batch record creation, and a working splitforms-to-Airtable webhook proxy you can copy-paste.
How to Send Form Submissions to Discord
Step-by-step guide to deliver every contact form submission to a Discord channel as a rich embed. Create the Discord webhook, paste it into splitforms, and customize embed color, fields, and role pings — no Zapier required.
How to Send Form Submissions to HubSpot CRM
Capture contact form submissions as HubSpot CRM contacts without the HubSpot Forms watermark. Create a private app token, map custom properties, dedupe by email, and forward splitforms webhooks to the HubSpot v3 contacts API.
How to Send Form Submissions to Notion
Push every contact form submission into a Notion database as a fully-typed page. Create an integration token, grab a database ID, map fields to Notion properties, and wire up a tiny Cloudflare Worker proxy that forwards splitforms webhooks to the Notion API.
How to Send Form Submissions to Slack
Push every contact form submission into the right Slack channel as a Block Kit message. Create an Incoming Webhook, paste it into splitforms, route different forms to different channels, and skip the $50/mo Zapier bill.
How to Store Form Submissions in Google Sheets (advanced)
The advanced playbook for piping form submissions into Google Sheets. A complete Google Apps Script doPost handler, a Make/Zapier alternative, timezone formatting, formula-row handling, and column mapping for splitforms webhook payloads.
Send form data to a webhook in 3 steps
Wire any HTML form to a webhook endpoint (Slack, Discord, n8n, your own server) in under 5 minutes. Working examples with retries.