Get your free access key
Create a free splitforms account at splitforms.com/login and copy your access key from the dashboard. The Free plan includes 500 submissions/month, no credit card.
Contact form for Squarespace
Paste one HTML form into a Squarespace Code Block and every message lands in your dashboard and inbox — no Business-plan upgrade, even on the free trial.

Custom fields, file uploads, and webhooks work on every Squarespace tier — even the 14-day free trial — because the form posts straight to splitforms.
A honeypot and load-time trap ship in the code, then splitforms rate-limits (6/min, 20 per 15 min) and content-scores every submission — most sites never turn on reCAPTCHA.
From Starter, forward each message to Slack, Notion, Google Sheets, Airtable, or a signed webhook — nothing to configure on the Squarespace side.
Copy-paste ready
Drop this into a Squarespace Code Block set to HTML and replace YOUR_ACCESS_KEY. That's the whole integration — the form never talks to Squarespace's servers, so it works the same on every plan, even the free trial.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="hidden" name="subject" value="New message from your Squarespace site">
<input type="hidden" name="redirect" value="https://yoursite.com/thank-you">
<input type="hidden" name="form_loaded_at" id="form_loaded_at">
<label>Name</label>
<input type="text" name="name" required autocomplete="name">
<label>Email</label>
<input type="email" name="email" required autocomplete="email">
<label>Project Type</label>
<select name="project_type">
<option value="general">General Inquiry</option>
<option value="booking">Booking</option>
<option value="quote">Quote Request</option>
</select>
<label>Message</label>
<textarea name="message" rows="4" required></textarea>
<!-- Honeypot: must stay empty -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send</button>
</form>
<script>
document.getElementById('form_loaded_at').value = Date.now();
</script>Setup
The Code Block method takes about five minutes and needs no plan upgrade. For the full walkthrough — Code Injection fallback, theme styling, and troubleshooting — read how to add a custom contact form to Squarespace.
Create a free splitforms account at splitforms.com/login and copy your access key from the dashboard. The Free plan includes 500 submissions/month, no credit card.
Go to the page where you want the form — Contact, About, footer, wherever — and click Edit on that section.
Hover between two existing blocks until you see the blue insertion line, click the + icon, search "Code," and add a Code Block.
Make sure the dropdown in the Code Block editor reads HTML, not Markdown, then paste the form code below and replace YOUR_ACCESS_KEY.
Click Apply in the Code Block, then Save at the top of the Squarespace editor.
Publish the page and submit a real test message. It should land in your splitforms dashboard and inbox within seconds — email notifications are free on every plan.
No Business plan
The native Form Block is fine for a name, email, and message on any plan. But custom fields beyond the basics, file uploads, and routing submissions anywhere other than your inbox all sit behind the Business plan. Embedding a splitforms form in a Code Block skips all of that — the dropdown field, the file input, and the webhook work the same on the cheapest Squarespace plan as the most expensive one.

Spam filtered
You usually don't have to add anything. The embedded form ships with a honeypot and a load-time trap, and splitforms rate-limits and content-scores every submission server-side — so most Squarespace sites never turn on reCAPTCHA. If yours still gets hit, enable reCAPTCHA v2 with your own site key, or route clean submissions on through the integrations you connect.

How SplitForms works
Connect your form, collect every submission, and send data where it needs to go — without building backend infrastructure.

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
SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js. And with Stripe connected, your forms can take payments too.

Trusted by indie teams and agencies shipping forms worldwide
Testimonials
40 quotes on record — from indie hacks to agency migrations.
“I replaced a Lambda + DynamoDB + SES contact form with six lines of HTML. It took eleven minutes, and the dashboard is better than what I was going to build.”
“We migrated 14 client sites off Formspree in a single weekend. The price is a third of what we paid, the API is more honest, and the spam filter actually works.”
“The webhook payload is signed, idempotent, and well-shaped. It reads like code from a competent team, not a CRUD app held together with duct tape.”
“I stopped reaching for Typeform on small marketing sites. splitforms covers 90% of the use case at none of the bloat.”
“I onboarded our whole agency in an afternoon. The MCP integration meant Cursor literally dropped the form straight into our client repos for us.”
“The free plan gave me 500 submissions before I paid a cent, and Pro is five dollars a month. I've spent more on coffee deciding which backend to use.”
“Spam went from forty junk entries a day to zero, with no reCAPTCHA puzzle ruining the form. The honeypot and time-trap just quietly do their job.”
“Point the form action at one endpoint and you're done. No SDK, no client library, no build step. This is how a form backend should feel.”
“Leads land in Slack the second someone submits, and a copy goes to Google Sheets for the sales team. I wired both up in under ten minutes.”
“I run a static Hugo site on a five-dollar VPS. splitforms gave it a real contact form without me standing up a single server.”
Questions
Yes. Because a splitforms form posts directly to splitforms.com/api/submit, your Squarespace plan tier never comes into it — the same embed works on the Personal plan, the Business plan, and even the 14-day free trial. You only need Squarespace's Business plan if you rely on its native Form Block for advanced fields.
Yes — the Form Block. It handles a basic name, email, and message on any plan, so a simple contact page may not need anything more. Its more advanced capabilities, though, are reserved for the Business plan — which is exactly what an embedded splitforms form gives you on every tier.
If you're using splitforms and the dashboard shows the submission but no email arrives, check your spam folder first — that's the most common cause. If it's not there, double-check the access key in your form HTML matches the one in your dashboard exactly (a stray space breaks it). Email notifications are free on every plan, so there's no setting to unlock.
With splitforms, the Free plan covers 500 submissions/month, unlimited forms, spam filtering, and email notifications — no credit card. Pro is $5/month for 5,000 submissions plus CSV/XML/PDF export, webhooks, and an auto-responder. Pro is $5/month for 5,000 submissions with CC/BCC and priority support.
You usually don't have to add anything. The embedded form ships with a honeypot and a load-time trap, and splitforms rate-limits and content-scores every submission server-side, so most Squarespace sites never turn on reCAPTCHA. If yours still gets hit, enable reCAPTCHA v2 with your own site key from the dashboard.
Yes, from Pro ($5/mo) up. In your dashboard you connect Google Sheets, Notion, Airtable, Slack, Discord, Telegram, WhatsApp, or Mailchimp with one click — nothing to configure on the Squarespace side. Prefer your own endpoint? Add a signed webhook; the exact delivery contract is covered in the routing section above and the webhook docs.
Yes, if you don't hardcode fonts or colors. Squarespace wraps Code Blocks in the surrounding section's typography, so a plain, unstyled input inherits your theme's body font automatically. Add a scoped class like .sf-form around the markup if you want to nudge corners, spacing, or the button color without it leaking into other blocks.
Older Squarespace 7.0 templates occasionally strip <script> tags from a Code Block. If the timestamp field stays empty after saving, move that one script line to Settings → Advanced → Code Injection (Page Footer) instead. The form still works without it — the honeypot alone catches most spam.
From Pro ($5/mo) you can point a signed webhook at Slack, Discord, Telegram, or WhatsApp, or turn each message into a Google Sheets row, Notion page, or Airtable record. Webhooks are signed with HMAC-SHA256 (a sha256= prefix on the signature header) and delivered with an 8-second timeout, plus one automatic retry when the endpoint times out or returns a 5xx — respond quickly and offload slow work.
Still stuck? Email [email protected] or read the splitforms docs for the full request contract, including file uploads and rate limits.
Simple pricing
Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, Stripe payments, and higher submission limits.
For side projects and indie devs.
For agencies and growing products.
Pay $59. 3 years sorted.
No credit card required on Free • Cancel anytime