Get your free access key
Create a free splitforms account at splitforms.com/login and copy your access key from the dashboard. Free tier: 500 submissions/month, unlimited forms, no credit card.
Contact form · Bubble.io
Drop an HTML element on your page, point it at one endpoint, and every submission is stored, emailed, and spam-filtered — no Bubble workflow, no Thing to model, no plugin.

The form posts straight from the browser to splitforms — Bubble never runs a workflow, Data type, or "Create a new thing" action.
A hidden botcheck honeypot and form_loaded_at time-trap screen bots — no CAPTCHA widget to load inside the HTML element.
Every submission is emailed to you on every plan and saved in your searchable splitforms dashboard.
Copy-paste ready
Drag an HTML element onto your Bubble page, paste this in, and swap in your access key — that's the whole integration. No workflow, no Data type, no plugin.
<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 Bubble app" />
<label>Name
<input type="text" name="name" required />
</label>
<label>Email
<input type="email" name="email" required />
</label>
<label>Message
<textarea name="message" rows="4" required></textarea>
</label>
<!-- Honeypot — leave empty, bots fill every field -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
<!-- Time-trap — rejects submissions sent in under ~2 seconds -->
<input type="hidden" name="form_loaded_at" value="" />
<script>
document.currentScript.previousElementSibling.value = Date.now();
</script>
<button type="submit">Send</button>
</form>Setup
Five steps, about two minutes, on any Bubble plan — including the free hobby tier. No server, no SMTP, and no Bubble workflow to build.
Create a free splitforms account at splitforms.com/login and copy your access key from the dashboard. Free tier: 500 submissions/month, unlimited forms, no credit card.
In the Bubble editor, drag an HTML element from the left palette onto the page where you want the form — Contact, About, or a landing page.
Copy the code above into the HTML element's content field and replace YOUR_ACCESS_KEY with your real key. The honeypot and time-trap fields are already wired in.
Bubble's in-editor preview sandboxes cross-origin form posts. Click Preview, open the real URL in a new tab, and submit a test message from there.
Every submission is emailed to you and saved in the splitforms dashboard. Want it in Bubble's database too? Add a Starter webhook to a Bubble backend workflow.
Why not native forms
Most Bubble tutorials wire a contact form with native inputs and a workflow — validate the fields, "Create a new thing", "Send email" — all running on Bubble's own infrastructure. A form built on an HTML element that posts straight to splitforms never touches a Bubble workflow: the browser sends the request, splitforms stores it, filters spam, and emails you. For the deep walkthrough — database saves, file uploads, dev vs. live domains — see the full Bubble.io setup guide.

Spam protection
splitforms filters spam automatically — a hidden botcheck honeypot, a form_loaded_at time-trap that rejects submissions sent in under a couple of seconds, and server-side content heuristics — with no CAPTCHA widget to load inside the HTML element. Prefer a challenge? splitforms also works as a reCAPTCHA alternative and supports reCAPTCHA v2 with your own secret key.

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.

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. Drag an HTML element onto your Bubble page and paste a form whose action points at https://splitforms.com/api/submit with your access_key in a hidden field. The browser posts straight to splitforms — no Bubble workflow, no database Data type, no "Create a new thing" action.
No. The form submits directly from the browser to splitforms. Bubble only renders the HTML element on the page — it never processes the request, so there's no workflow to build, debug, or maintain.
Yes. The HTML element is available on every Bubble plan, including the free hobby tier. splitforms is free for 500 submissions/month with unlimited forms, email notifications, spam filtering, and the dashboard included.
splitforms emails you on every submission — that's included free on every plan, not a paid add-on — and every submission is also saved in your splitforms dashboard, where you can search and filter it later.
Yes, via a webhook. On Pro ($5/month) or above, point a splitforms webhook at a Bubble backend workflow (Settings → API → Enable Workflow API) and every submission also creates a new Thing in your Bubble database. The payload is signed with HMAC-SHA256 so you can verify it came from splitforms.
splitforms filters spam automatically with a hidden botcheck honeypot, a form_loaded_at time-trap that rejects submissions sent in under a couple of seconds, and server-side content heuristics — no CAPTCHA widget to load inside the HTML element. If you still want one, splitforms also supports reCAPTCHA v2 with your own secret key.
Yes. Add enctype="multipart/form-data" and a file input to the form, then connect the Storage integration in your splitforms dashboard (a paid feature). You can accept up to 5 files per submission at 5 MB each.
Yes. Configure the trusted post-submit redirect for the form in the splitforms dashboard, then set it to your Bubble thank-you page. A visitor-supplied hidden field cannot override that destination.
splitforms provides a hosted POST endpoint, dashboard storage, spam filtering, and owner email notifications for Bubble forms without requiring a Bubble backend workflow.
Simple pricing
Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, and higher submission limits.
Free forever
For side projects and indie devs.
For agencies and growing products.
Pay $59. 3 years sorted.
No credit card required on Free • Cancel anytime