Sign up free, get an access key
Create a free account with your email address. Your access key appears in the dashboard straight away. No credit card.
Free contact form
Updated · plan facts checked against /pricing
A website contact form needs a name, email and message field plus a backend to receive them. Paste the contact us form below, point it at splitforms, and every message is spam-checked, saved to your dashboard and emailed to you — free for 500 submissions in total, no credit card.

No database, PHP mail script or SMTP password on your site. The contact form posts to one endpoint and splitforms does the rest.
A hidden honeypot, a 2-second load-time check, content scoring and per-IP rate limits run on every free contact form. No CAPTCHA required.
A real free tier, not a trial. Unlimited forms, 500 submissions in total with no time limit — it does not reset monthly.
Quick start
Labelled, accessible fields with autocomplete hints, plus two hidden spam fields. The one-line script only stamps the page-load time. It POSTs to splitforms.com/api/submit with your access key. Replace YOUR_ACCESS_KEY and it works. Want a line-by-line explanation of the markup? See the HTML contact form code walkthrough. Prefer to drag fields instead of editing code? Use the custom contact form builder.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<!-- Optional: send people to your own thank-you page -->
<!-- <input type="hidden" name="redirect" value="https://example.com/thanks" /> -->
<label for="cf-name">Name</label>
<input id="cf-name" type="text" name="name" autocomplete="name" required />
<label for="cf-email">Email</label>
<input id="cf-email" type="email" name="email" autocomplete="email" required />
<label for="cf-phone">Phone (optional)</label>
<input id="cf-phone" type="tel" name="phone" autocomplete="tel" />
<label for="cf-topic">What is this about?</label>
<select id="cf-topic" name="topic">
<option>General question</option>
<option>Sales</option>
<option>Support</option>
<option>Billing</option>
</select>
<label for="cf-message">Message</label>
<textarea id="cf-message" name="message" rows="5" required></textarea>
<!-- Spam protection: hidden honeypot + page-load timestamp -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
<input type="hidden" name="form_loaded_at" value="" />
<script>document.currentScript.previousElementSibling.value = Date.now();</script>
<button type="submit">Send message</button>
</form>Fields
Three visible fields are required — name, email and message — and two optional ones earn their place on most business sites. Every name attribute becomes a column in your dashboard, so pick names you will want to read later.
| Field | name attribute | Required | Why it is there |
|---|---|---|---|
| Name | name | Yes | Lets you greet the person by name in your reply. One full-name box keeps a short form short; split first and last name only if your CRM needs them. |
email | Yes | The only way to answer. splitforms uses it as the Reply-To of the notification, so pressing Reply in your inbox writes straight back to the visitor. | |
| Phone | phone | No | Useful for trades and local services that call back. Keep it optional: many visitors would rather not hand over a number just to ask a question. |
| Topic | topic | No | A short dropdown (sales, support, billing, other) so you can sort messages in the dashboard. Do not name it subject — that name is reserved. |
| Message | message | Yes | The actual question. A textarea with 5 rows signals that a few sentences are welcome; a single-line input gets one-word messages. |
| Honeypot | botcheck | Hidden | Invisible checkbox. Bots that tick every box trip it and the submission is dropped without an error. Never shown to people. |
| Load time | form_loaded_at | Hidden | Filled with Date.now() when the page loads. Posts sent less than 2 seconds later (or more than 24 hours later) are treated as bots. |
Need an attachment field for briefs or photos? Add <input type="file"> and enctype="multipart/form-data". Files are stored on paid plans only (up to 5 files of 5 MB each); on Free the text fields are saved and the files are dropped. See the contact form with file upload template.
After Send
The browser posts the form to https://splitforms.com/api/submit. Nothing is sent from your own server, so there is no PHP mail script to configure and no SMTP password in your site's code.
email field. Inbox placement still depends on your mail provider.redirect field. How the redirect field works.Free covers 500 submissions in total, not per month. When they are used, new posts are refused until you upgrade; saved messages stay in the dashboard.
Common mistakes
Almost every "the form works but I never got the message" report comes down to one of these six.
name. An input with just an id looks fine on the page and arrives empty.topic for a visible subject line.type="email" so the browser catches obvious mistakes before Send.botcheck and a person ticks it, the message is dropped silently. Keep the inline display:none.website and url are not honeypot names here on purpose — people genuinely fill them in. Use botcheck or _gotcha for the trap.<label for>, as in the form above.Still not arriving? Run the form through the spam test or read the spam-free contact form guide.
Setup
Three steps, a few minutes including a test message. The same contact form drops into plain HTML, Next.js, React, Astro, Webflow, Carrd, WordPress, Framer, Squarespace and Wix. See the framework setup guides.
Create a free account with your email address. Your access key appears in the dashboard straight away. No credit card.
Copy the form above into your Contact page: plain HTML, a React component, a Webflow embed or a WordPress Custom HTML block. Replace YOUR_ACCESS_KEY, then send yourself a test message.
Each accepted message is saved to the dashboard, then emailed to you with Reply-To set to the visitor. Paid plans add Slack, Google Sheets, signed webhooks and other integrations.
Free plan
Everything here is on the free tier — not a trial, not feature-gated, not a teaser of the paid plan. A real free contact form you can run a live site on indefinitely, with every submission stored in the dashboard and emailed to you.

Any platform
Yes — anywhere you can paste HTML. Webflow embed blocks, Carrd embeds, Framer code components, WordPress Custom HTML blocks, Squarespace code blocks, and Wix HTML embeds all take the same free contact form with no SDK or plugin. See the framework setup guides.

Why it's free
The free plan is a one-time allowance of 500 submissions, with no credit card, no trial timer and no gate on email notifications or spam filtering. Pro is $5/mo for 5,000 submissions only if a launch pushes you past free. Comparing options? See splitforms vs Formspree, vs Web3Forms, or every form-backend comparison.

How SplitForms works
splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

Point your form to your unique SplitForms endpoint. That's it.

We instantly capture and organize every submission in your inbox.

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

No credit card required. Set up in under 60 seconds.
Connect & automate
On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

FAQ
A contact us form is the form on a website's Contact page that lets a visitor send a message without opening their email app. A good one asks for a name, an email address and a message, optionally a phone number and a topic, and hides a spam trap. The form needs a backend to receive the post; with splitforms that backend is one URL in the form's action attribute.
Name, email and message are the required core. Phone (optional) helps businesses that call back, and a short topic dropdown helps you sort messages. Add two hidden fields for spam: a botcheck honeypot and a form_loaded_at timestamp. Avoid naming a visible field subject, replyto or redirect, because those names control the notification and are not saved as lead data.
Yes. The free plan covers 500 form submissions total with unlimited forms, with no credit card and no time limit. It is not a 14-day trial and it does not reset monthly. If you outgrow it, Pro is $5/month for 5,000 submissions a month or Annual is $49/year for 15,000 a month.
You need one free account to get an access key, the value that goes in the hidden access_key field. Without a valid key, submissions are rejected so nobody else can use your form's inbox. Sign-up needs an email address and no credit card.
Every accepted submission is saved in your splitforms dashboard first, then an owner notification email is sent to you on every plan, including Free. The email's Reply-To is the visitor's email field. Paid plans can also route submissions to signed webhooks, Slack, Google Sheets and other integrations.
Yes. Anywhere you can paste HTML — including Webflow embed blocks, Carrd embed elements, Framer code components, WordPress Custom HTML blocks, Squarespace code blocks, and Wix HTML embeds — the form works without modification. There is no SDK and no platform-specific build.
Several layers, all included free. The hidden botcheck honeypot catches bots that fill every input. The form_loaded_at timestamp rejects posts sent less than 2 seconds after the page loaded. Server-side content scoring moves likely spam to a Spam tab, and each visitor IP is limited to 6 posts a minute per form. reCAPTCHA v2 or Cloudflare Turnstile can be added with your own keys, but neither is required.
Yes. The free plan permits commercial use, including client sites and production landing pages. The limits are the 500-submission total and the small 'Powered by splitforms' line on Free forms.
Free is a one-time allowance and does not reset monthly. After it is used, new submissions are rejected until you upgrade to a paid plan. Existing submissions stay in your dashboard.
Yes. Generated Free-plan form code includes a small visible 'Powered by splitforms' link. Paid plans (Pro and Annual) can remove it or replace it with custom branding.
Simple pricing
Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.
For side projects and indie devs.
Every paid feature, for agencies and growing products.
Every Pro feature with triple the volume — $0.27 per 1,000 at full use.
No credit card required on Free • Cancel anytime • Full pricing and FAQ