The ShipMyForm blog
Forms, without a backend
Practical, code-first guides on adding forms to static sites, stopping spam, routing submissions to email, and choosing a form backend.
Latest guides
Form UX: The Decisions That Actually Change Completion Rates
Most form UX advice is decoration. These are the decisions that measurably change whether people finish: field count, labels, validation timing, error copy, and letting the browser help.
How to Submit a Form with JavaScript fetch() (and Send It to Your Email)
The vanilla-JS pattern for submitting a form without a page reload — intercept submit, fetch() the data, and render success and per-field errors from the JSON response.
Send Form Submissions to Telegram (Without Leaking Your Bot Token)
A Telegram bot token in front-end JavaScript is readable by anyone who opens devtools, and it grants full control of the bot. The fix is the same either way — something server-side holds the token — and that is what a form backend is.
Forminit Alternative (formerly Getform): An Honest Comparison
Forminit counts forms. ShipMyForm counts submissions. That single difference decides which is cheaper for you, and it matters more now that Forminit's Pro tier allows ten forms instead of fifteen.
Why Real Form Submissions Get Marked as Spam (and How to Get Them Back)
Everyone tunes a form filter by asking how much spam it caught. The number that matters is the one you cannot see — the enquiries that never arrived. Here is what causes them, including a mistake we shipped ourselves.
Web3Forms Alternative: ShipMyForm vs Web3Forms (2026)
Web3Forms is what most AI builders emit by default, and it is a good service. The free tiers are nearly identical, so the choice turns on two specific things rather than a feature-count contest.
Adding a Working Contact Form to a Google AI Studio App
Unlike v0 or Bolt, AI Studio gives you a real server on Cloud Run. That makes the contact form question different, and more interesting: you could build it, and here is the honest accounting of what that costs.
How to Send a Confirmation Email to Whoever Filled In Your Form
Sending a confirmation to the submitter looks like a one-line change, and the usual shortcut quietly builds an open relay. Here is the dangerous version, why it is dangerous, and the rate limits any correct implementation needs.
How to Send Form Submissions to Discord
Get each submission into a Discord channel as a clean embed. Covers the managed connector, the free webhook + automation route, and the embed limits that silently truncate long messages.
Why Your Contact Form Suddenly Started Getting Spam
It is not personal and it is not targeted: a crawler found a <form> tag. Here is how that happens, why it starts on an ordinary Tuesday, and what each kind of spam is actually trying to get out of you.
What Your Contact Form Sounds Like to a Screen Reader
Most form accessibility advice is a list of attributes. This is the other way round: what a screen reader actually says as someone moves through your form, and which markup decisions change it.
How to Accept File Uploads on an HTML Form (Without a Backend)
A file input on a static site uploads nothing by itself. Here is the markup that works, the size and type limits worth enforcing on both sides, where the bytes end up, and a dated comparison of what the hosted form services allow.
What "AI-Native" Actually Means, and How to Test the Claim
The phrase has come to mean "we added a chatbot". Here is a definition with five tests you can actually apply to a vendor, and our own product scored against it — including the two tests it does not pass.
How to Send Form Submissions to Notion or Airtable (Without Zapier)
Notion and Airtable are where teams triage leads and requests. Here is how to land every form submission there directly: the managed connectors, how fields map to properties and columns, and a free webhook route if you prefer to own the code.
Form Validation UX: When to Validate, and Error Messages That Actually Help
Validation timing and error copy decide whether a form feels helpful or hostile. The three moments to validate, a formula for messages people can act on, the ARIA that wires them up, and a complete working example.
How to Get a Working Form Endpoint With Just Your Email (No Signup)
No account, no dashboard, no API key: put your email address in the form's action and submissions start arriving. Here is each step, what happens behind it, and the trade-offs to know before you rely on it.
HTML Contact Form Template That Emails You (Copy and Paste)
Ready-to-use HTML email form code: a minimal form, a full contact form with honeypot and subject, and a file-upload version. Paste, set one attribute, and submissions land in your inbox.
How to Add a Custom Contact Form to Shopify Without an App
Shopify's built-in contact form is fixed and emails one address. Here is how to drop your own form into any Shopify page with Custom Liquid, route submissions where you want, and keep bots out, without installing an app.
How to Host a Form Without a Website
No website yet, but you need a form people can fill in from a link? Here are the honest options, what each gives up, and when a hosted form page is the right call.
Why Your Contact Form Emails Land in Spam (and How to Fix It)
Most form notifications land in spam for one reason: the From address is the person who filled the form. Here's why that fails authentication, and what to send instead.
How to Add a Contact Form to a Vercel Site
Vercel doesn't do forms. Writing a function is the usual answer, and it's four surprises deep: a public POST endpoint, a stateless rate limiter, and a Hobby plan that bars commercial use.
How to Build a Multi-Step Form in HTML (No Library Needed)
One form, several steps, about 30 lines of JavaScript. Includes the whole-form validation trap that silently breaks the Enter key, and a generator that writes it all for you.
How to Convert a Google Form to HTML (and Style It Your Way)
Google Forms can't be exported as HTML or restyled in an embed. Three real options, what each one costs you, and a free converter that does the rebuild in seconds.
Vue Contact Form Without a Backend (Composition API)
Two copy-paste patterns for a Vue 3 contact form that emails you — no Express server, no credentials in the client, spam handled server-side.
Free Form Backends Compared: What the Free Tiers Really Include
"Free" ranges from 50 test submissions to unlimited email forwarding. The real limits of every major free tier, verified — and which one fits your site.
Top 3 Formspree Alternatives in 2026 (Prices and Limits Verified)
Three Formspree alternatives that each fix a different complaint: the 50/month free cap, the $15 paid jump, and thin spam filtering. Figures verified September 2026.
Add a Contact Form to GitHub Pages (No Server Needed)
GitHub Pages is static by design, so a working contact form needs one thing: somewhere to POST. Here's the whole setup, mailto traps and all.
Make an AI-Generated Contact Form Actually Work (v0, Bolt, Lovable)
Your v0/Bolt/Lovable site has a beautiful contact form that does nothing when submitted. Here's why the button is dead — and the one line that fixes it.
React Contact Form Without a Backend (Two Patterns)
No Express server, no API route, no email credentials in your client — two copy-paste patterns for a React contact form that actually delivers.
Webflow & Framer Forms: Route Submissions Anywhere
Native Webflow and Framer forms are fine until the plan limits bite. One attribute (or one embed) routes your designed form through a real backend instead.
The 10 Best Form Backend Services in 2026
Formspree, Basin, Forminit, Web3Forms, Formspark and more — free tiers, verified pricing, and who each form backend really fits (including where ours falls short).
Send Email From an HTML Form — No SMTP, No PHP
What SMTP actually is, why your HTML form can't speak it (and shouldn't), and the modern setup that emails you submissions with zero mail servers.
How ShipMyForm Fights Form Spam (So You Never Have To)
Why we think spam is the backend's problem, not your visitors' — and how a layered defense keeps your inbox clean without a single CAPTCHA.
Formspree Pricing Explained: Is the Free Tier Enough? (2026)
What Formspree actually costs in 2026, what the 50-submission free tier does and doesn't include, and when a paid plan (or a different backend) makes more sense.
What Is a Form Endpoint? (And How to Use One)
The URL your form's action points to, explained: how endpoints receive submissions, how they relate to form backends, and how to wire one up.
Request a Quote Form: Examples & Best Practices (2026)
What to put on a request-a-quote form, real examples by industry, and the best practices that turn more visitors into qualified quote requests.
Hugo Contact Form Without a Backend (2026)
A copy-paste contact form for Hugo that emails you on every submission — drop it in as a shortcode, no server needed.
How to Fix CORS Errors When Submitting a Form
'Blocked by CORS policy' on a form POST? What the error actually means, why fetch() triggers it, and the fixes — including the plain-form path that avoids CORS entirely.
How to Handle Form Submissions in SvelteKit
Two ways to handle SvelteKit forms: native form actions with use:enhance, or a form backend that works even with adapter-static and no server.
How to Send Form Submissions to Slack
Get each form submission into Slack as a clean, formatted message. Use the managed Slack connector, or wire it up free with the webhook connector and an automation.
Protect Your Forms with Cloudflare Turnstile
Add Cloudflare Turnstile to any form — a free, mostly invisible CAPTCHA that stops scripted bots without image puzzles.
How to Add Validation to Your Form
Reject bad submissions with server-side rules — required fields, formats, and limits — in a few clicks, no backend code. fetch() callers get per-field errors.
How to Handle Form Submissions in Next.js
Three ways to handle a Next.js form — Server Actions, Route Handlers, or a form backend — with code for each and a clear rule for choosing.
How to Send Form Submissions to Google Sheets
Turn a static-site form into a live Google Sheet. Connect Google once and every submission appends as a row — or do it free with a webhook and Apps Script.
Basin Alternative: ShipMyForm vs Basin (2026)
A fair comparison of ShipMyForm vs Basin: free-tier headroom, paid feature mix, and a one-line migration for your static-site forms.
How to Connect Your Form to n8n
Send every form submission straight into an n8n workflow with the free webhook connector. No serverless glue, no polling.
ShipMyForm vs Netlify Forms: A Netlify Forms Alternative
Netlify Forms is great if you are all-in on Netlify. Here is how ShipMyForm compares when you want a form backend that runs on any host.
How to Send an HTML Form to Your Email (Without PHP or SMTP)
Every way to get HTML form submissions into your inbox, compared: mailto:, PHP mail(), JavaScript email services, serverless functions, and a form backend. Plus the deliverability part every tutorial skips.
Astro Contact Form Without a Backend (2026)
A copy-paste contact form for Astro that emails you on every submission — no server or API route.
ShipMyForm vs Formspree: An Honest 2026 Comparison
An honest look at ShipMyForm vs Formspree: free tiers, retention, spam, pricing, and a drop-in migration that is usually one URL change.
How to Stop Contact Form Spam Without reCAPTCHA
Honeypots, rate limiting, and Turnstile — layered spam defenses that beat reCAPTCHA without the puzzles.
Browse by topic
Static site forms
Add a working form to any static or JAMstack site, no server.
20 guides
Form design & UX
Design forms people finish: fewer fields, clear errors, real labels.
3 guides
Forms to email
Send submissions straight to your inbox without writing a backend.
6 guides
Automations & integrations
Route form submissions into the tools and workflows you already run.
6 guides
Spam protection
Stop bots without wrecking the experience for real people.
5 guides
Comparisons & alternatives
Honest comparisons of the hosted form services developers use.
9 guides
Concepts & fundamentals
How hosted form handling works, in plain language.
3 guides