Position the button absolutely
Bottom-right corner, fixed position, z-index above page content. One <button> element, styled as a pill.
Form template · Feedback
A persistent feedback button pinned to the bottom-right corner that pops open a contact form on click. Pure HTML + CSS, no third-party widget script, no SDK.
Every template is free and fully editable in the drag-drop builder — swap fields, colors, and the button label before you publish.
No server, API route, or SDK — your Feedback Widget Popup posts straight to one endpoint.
Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it reaches you.
It's plain HTML you own — paste the Feedback Widget Popup snippet, swap in your access key, and ship.
Copy and ship
HTML by default — the same field set also renders as React, Next.js, PHP, and cURL in your dashboard. Every variant posts to the same /api/submit endpoint. Replace YOUR_ACCESS_KEY with the key from your dashboard; that's the only edit.
<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 feedback submission">
<label for="rating">How would you rate your experience? *</label>
<select id="rating" name="rating" required>
<option value="">Choose…</option>
<option>★★★★★</option>
<option>★★★★☆</option>
<option>★★★☆☆</option>
<option>★★☆☆☆</option>
<option>★☆☆☆☆</option>
</select>
<label for="feedback">What can we do better? *</label>
<textarea id="feedback" name="feedback" placeholder="Be honest — we won't take it personally." required></textarea>
<label for="email">Email (optional, for follow-up)</label>
<input id="email" type="email" name="email" placeholder="you@example.com">
<!-- honeypot — bots fill every field -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send</button>
</form><p class="splitforms-attribution" style="margin-top:12px;font-size:11px;color:#888;text-align:right">
Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="sponsored noopener">splitforms</a>
</p>How to add it
To add a Feedback Widget Popup to your site you need three things: a free splitforms access key, the HTML snippet above, and your key pasted into it. No backend, database, or CAPTCHA library — the form posts to one URL and every submission lands in your inbox and dashboard.
Bottom-right corner, fixed position, z-index above page content. One <button> element, styled as a pill.
Native HTML <dialog> supports `show()` and `close()` methods. Modern browsers ship the backdrop and focus trap built in.
Add a hidden field `<input type="hidden" name="page_url">` and populate it with `location.href` on submit so you know which page the feedback came from.
What's included
Most SaaS apps ship a 'Feedback' button in the corner. That widget is usually a 200KB third-party script (Hotjar, Sleekplan, Canny) that fingerprints your users and tracks page behavior. You don't need that — the button-opens-popover-with-form pattern is 30 lines of HTML and CSS. The form POSTs to splitforms, your visitors aren't tracked, and the dashboard shows submissions with the source page URL. Native <dialog>, page URL captured, no third-party SDK.

Where submissions go
Reply-to is wired to the visitor's email, so one tap on Reply answers them directly — while the built-in honeypot and spam classifier filter out bots before they reach you. Every submission is emailed to your inbox and can forward to a webhook or Slack the moment a visitor hits send.

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
If you need session replay, heatmaps, and analytics, use them. If you just need a feedback collection mechanism, a 30-line HTML widget pointed at splitforms is faster to ship, has zero impact on page weight, and doesn't fingerprint your users.
<dialog> has full support in Chrome 37+, Firefox 98+, Safari 15.4+. For older browsers, a div-based modal with a manual backdrop works equivalently — slightly more CSS. Both approaches POST to the same splitforms endpoint.
A hidden input populated with `location.href` on form submit. The value lands in your splitforms dashboard alongside the other submission fields — search and filter by page URL to triage.
Yes — render the widget HTML conditionally in your template (Next.js layout, Astro layout, Webflow page settings). Or use CSS to hide it on pages where it's not wanted. The widget is just HTML; visibility is your choice.
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