Static sites can't process form submissions on their own — there's no server to receive the POST request, validate input, send emails, or store data. But forms are essential: contact pages, lead capture, newsletter signups, event registrations. This article compares every method for handling forms on static sites in 2026, ranked from simplest to most complex. By the end, you'll know exactly which approach fits your project.
The simplest static site form backend
One endpoint, any host, zero server code. 500 submissions/month free with dashboard and spam filtering.
What happens next ⚡
- 📥Submission received — stored in your searchable dashboard
- 📧Email notification — delivered to your inbox instantly
- 🛡️Spam filtered — AI classifier + honeypot, no CAPTCHA
- 🔗Webhook fired — optional: forward to Slack, Discord, Sheets
- ↩️User redirected — to your thank-you page
500 submissions/month free · No credit card
Method 1: Third-party form backend API (Recommended)
You point your HTML form at an external API endpoint. The service handles storage, email delivery, spam filtering, and webhooks. splitforms is the leading option:
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_KEY">
<input type="text" name="name" required>
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form>Pros:
- Works on any host — GitHub Pages, Netlify, Vercel, S3, anywhere
- Zero server code to write or maintain
- Dashboard with searchable submission history
- AI spam filtering (on splitforms, not all providers)
- Webhooks for Slack, Discord, Zapier integrations
- Free tier covers most personal sites (500/month on splitforms)
Cons:
- External dependency (if the service goes down, forms break)
- Submission limits on free tiers
- Less control over the exact email formatting (though custom SMTP available)
Best for: 90% of static sites — portfolios, blogs, small business sites, landing pages.
Method 2: Platform-native forms (Netlify Forms)
If your site is hosted on Netlify, you can use data-netlify="true" and Netlify handles submissions at build time.
<form name="contact" method="POST" data-netlify="true">
<input type="text" name="name" required>
<input type="email" name="email" required>
</form>Pros:
- Zero configuration — just add an attribute
- No external service or API key needed
- Bundled with your hosting plan
Cons:
- Vendor lock-in — only works on Netlify
- Build-time form detection is fragile (fails on dynamic/client-rendered forms)
- Only 100 submissions/month free ($19/month for +1,000)
- No webhooks, no autoresponders, no AI spam filtering
- Move hosts = rewrite every form
Best for: Sites already on Netlify with simple form needs and low traffic.
Method 3: Serverless functions
Vercel, Cloudflare Workers, Netlify Functions, and AWS Lambda let you write a small handler that receives form POSTs and processes them.
// /api/contact.ts (Vercel / Next.js)
export async function POST(req: Request) {
const data = await req.json();
// Validate, store, send email, filter spam...
// You build ALL of this yourself
return Response.json({ ok: true });
}Pros:
- Full control over every aspect
- No per-submission costs (just function invocation limits)
- Can integrate with any database or email service
Cons:
- You build and maintain everything: validation, email delivery, spam filtering, storage, dashboards
- Email deliverability is your problem (SPF, DKIM, DMARC, IP reputation)
- Spam protection is your problem
- Time sink — 1 form = 4-8 hours of backend work vs 5 minutes with a form backend
Best for:Large teams with specific compliance, data residency, or integration requirements that off-the-shelf services can't meet.
Method 4: Email-based forwarding (FormSubmit, Web3Forms)
Services like FormSubmit and Web3Forms forward form submissions directly to your email. No dashboard, no storage, no webhooks.
<!-- FormSubmit -->
<form action="https://formsubmit.co/your@email.com" method="POST">
<!-- Web3Forms -->
<form action="https://api.web3forms.com/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_KEY">Pros:
- Dead simple setup
- Generous or unlimited free tiers
- No account needed (FormSubmit)
Cons:
- No submission dashboard or storage
- No spam filtering (FormSubmit) or basic only (Web3Forms)
- No webhooks or integrations
- Lose an email = lose the submission
Best for: Hobby projects and personal sites where you just want submissions in your inbox and nothing more.
Method 5: Self-hosted backend
You run your own server (VPS, Docker, etc.) with a form-handling application — either custom-built or an open-source project.
Pros:
- Complete control over data and infrastructure
- No per-submission costs or limits
- Data never leaves your servers
Cons:
- Significant setup and maintenance time
- You handle SSL, uptime, backups, security patches
- Email deliverability (SPF/DKIM/DMARC) is your problem
- Spam protection is your problem
- Server costs ($5-20/month minimum for a VPS)
Best for: Organizations with strict data sovereignty requirements or existing infrastructure they want to leverage.
All methods compared
| Method | Setup time | Free limit | Dashboard | Spam filter | Host lock-in |
|---|---|---|---|---|---|
| splitforms (API) | 5 min | 500/mo | ✅ | ✅ AI | None |
| Netlify Forms | 2 min | 100/mo | ✅ | Basic | Netlify only |
| Serverless function | 4-8 hrs | Varies | DIY | DIY | Platform |
| FormSubmit / Web3Forms | 2 min | Unlimited* | ❌ | ❌ / Basic | None |
| Self-hosted | Days | — | DIY | DIY | None |
The recommendation
For the vast majority of static sites, Method 1 (a form backend API) is the right choice. It gives you the most features for the least effort, works on every host, and scales from free to affordable. Specifically:
- splitforms — Best overall. 500/mo free, AI spam filtering, webhooks from $1/mo, works everywhere. Endpoint:
https://splitforms.com/api/submit. - Netlify Forms — Only if you're already on Netlify and have under 100 submissions/month.
- Serverless — Only if you have specific requirements a form backend can't meet.
- Email forwarding — Only for hobby projects where you don't need a dashboard.
- Self-hosted — Only for strict data residency requirements.
Email hello@splitforms.com if you need help choosing the right method for your specific stack.
FAQ
What is the best form handling method for a static site?
A third-party form backend API like splitforms is the best method for most static sites. You add a standard HTML form pointing at an external endpoint (https://splitforms.com/api/submit), and submissions are stored, filtered for spam, and emailed to you — all without writing server code. Free for 500 submissions/month.
Can I handle forms on a static site without any backend?
Yes, using a form backend service. Services like splitforms, Formspree, and Getform provide an external API endpoint that your static HTML form posts to. The service handles storage, email delivery, spam filtering, and webhooks. No server-side code required on your site.
Does GitHub Pages support form handling?
No. GitHub Pages serves static files only — no server-side processing. To handle forms on a GitHub Pages site, use a third-party form backend. Point your form's action at https://splitforms.com/api/submit with your access key, and submissions work immediately.
What about Netlify Forms vs splitforms for static sites?
Netlify Forms only works when your site is hosted on Netlify and detected at build time. splitforms works on any host (Netlify, Vercel, GitHub Pages, S3, Cloudflare Pages) because it's a simple external POST endpoint. splitforms also offers 500 free submissions/month vs Netlify's 100.
Can I use a serverless function for static site forms?
Yes — platforms like Vercel, Cloudflare Workers, and Netlify support serverless functions you can write to process form submissions. However, you'll need to build and maintain email delivery, spam filtering, storage, and dashboards yourself. A dedicated form backend like splitforms provides all of this out of the box.