Generate a free splitforms key
Sign in at splitforms.com — your access key is created instantly. No credit card, no setup wizard, no SDK to install.
Waitlist · Next.js
Pre-launch capture form with optional referral source. Free for 200 submissions total — no backend, no SDK, no plugin.

Copy-paste code
Replace YOUR_ACCESS_KEY with your splitforms key, paste into a Next.js page, and ship. No build-time integration required.
'use client';
import { useState, type FormEvent } from 'react';
export default function WaitlistForm() {
const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');
async function onSubmit(e: FormEvent<HTMLFormElement>) {
e.preventDefault();
setStatus('sending');
const data = new FormData(e.currentTarget);
data.set('access_key', 'YOUR_ACCESS_KEY');
data.set('subject', 'New waitlist signup');
const res = await fetch('https://splitforms.com/api/submit', {
method: 'POST',
body: data,
headers: { Accept: 'application/json' },
});
const json = await res.json();
if (json.success && json.payment_url) {
// Payment form: finish the payment on the secure Stripe page.
window.location.href = json.payment_url;
return;
}
setStatus(json.success ? 'sent' : 'error');
if (json.success) e.currentTarget.reset();
}
if (status === 'sent') return <p>Thanks — we’ll be in touch.</p>;
return (
<form onSubmit={onSubmit}>
<label htmlFor="email">Email *</label>
<input id="email" type="email" name="email" placeholder="[email protected]" required />
<label htmlFor="name">Name</label>
<input id="name" type="text" name="name" placeholder="Optional" />
<label htmlFor="referral">How did you hear about us?</label>
<select id="referral" name="referral">
<option value="">Choose…</option>
<option>Twitter</option>
<option>Friend</option>
<option>Search</option>
<option>Newsletter</option>
<option>Other</option>
</select>
<button type="submit" disabled={status === 'sending'}>
{status === 'sending' ? 'Sending…' : 'Send'}
</button>
{status === 'error' && <p>Something went wrong. Try again.</p>}
</form>
);
}Next.js + Waitlist
Next.js Server Actions handle the submit side but still leave you wiring SMTP, spam filtering, file uploads, and a dashboard. splitforms replaces all of that with one fetch('/api/submit') call. The waitlist works identically in App Router and Pages Router — it's just a FormData POST, no router-specific magic. Because Next.js pre-renders pages, the form HTML is in the DOM before any JavaScript executes, meaning instant Time-to-Interactive. The honeypot field is invisible to users but catches bots that scrape rendered HTML — especially important for Next.js sites where the form HTML is statically generated and predictable.

Waitlist fields
The posted payload contains email, name, how did you hear about us?. Required fields are email. Rename, remove, or add your own — splitforms accepts any name you POST.

Template playbook
Waitlists are the cheapest growth tool a pre-launch product has — Superhuman, Notion, and Linear all built sizable waitlists before paid launch. The form captures email plus a question or two on use case ('what would you use this for?', 'what tools do you use today?') so the launch sequence segments by intent. Multi-step flow boosts completion vs a single form — the prospect commits in step 1 and answers the qualifying questions in step 2-3 with momentum. Push waitlist signups to a dedicated ESP audience (Loops, ConvertKit, Beehiiv) so launch-day emails segment by use case and target the highest-intent signups first.

Setup
Three actions stand between you and your first waitlist submission — no backend, no database, no CAPTCHA library.
Sign in at splitforms.com — your access key is created instantly. No credit card, no setup wizard, no SDK to install.
Drop the form snippet into a Next.js page, component, or layout. Replace YOUR_ACCESS_KEY with the key from your dashboard. The form action is a hard-coded URL — no env vars or build-time wiring needed.
Dashboard updates live on Free. Free includes owner email delivery; Starter adds signed webhooks, CSV export, Slack/Discord forwarding, and BCC to your team.
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 teach a web dev course and tell every student to use splitforms for their portfolio contact form. Free, no card, and they learn how a real API works.”
“Exports are a single click to CSV with every field intact. Reconciling leads against our CRM stopped being a Monday-morning chore.”
“I evaluated five form backends in an afternoon. splitforms was the only one whose docs didn't hide the pricing or the rate limits. That earned the signup.”
“We use it for a non-profit's volunteer sign-up form. Five hundred free submissions a month covers us entirely, and setup took one coffee.”
“The signed webhook means I can trust the payload server-side without a second verification round trip. Small detail, huge for a payments-adjacent flow.”
“Carrd doesn't ship a backend, so I pointed its form at splitforms. My one-page launch site started collecting real leads the same evening.”
Common questions
Yes. The form is plain HTML with a single POST endpoint, so it runs on any Next.js site without server-side code, plugins, or SDKs. Drop the snippet into a Next.js page or component and submissions land in your splitforms dashboard.
Free for 200 submissions total — no credit card, no trial. Pro is $5/mo for 5,000 submissions, and there's a one-time $59 3-year plan (15,000 submissions/mo for 36 months). The same pricing applies regardless of which framework hosts the form.
Yes. The template ships with sensible defaults (email, name, how did you hear about us?…) — add, remove, or rename any of them. Splitforms accepts whatever fields you POST.
A hidden honeypot field catches dumb bots, and a tuned classifier scores the rest. You only see real submissions in your dashboard. No CAPTCHA, no friction for human users — and it works the same on Next.js as on any other framework.
Yes. Webhooks are available on paid plans, with auto-formatted payloads for Slack, Discord, and WhatsApp (via CallMeBot). Or send raw signed JSON to any URL — Zapier, n8n, your own server. Configure in the splitforms dashboard.
Yes — the form posts directly to splitforms from the browser, so no server is involved. Works on Vercel, Netlify, GitHub Pages, Cloudflare Pages, S3, or any plain Apache host.
Showing 'you're #347 in line' on the confirmation creates social proof but invites comparison. Showing total waitlist size ('join 2,500 people on the waitlist') without per-person position is the safer middle. Refer-a-friend mechanics that move people up the list (Robinhood-style) drive viral growth but require more eng work.
Tag waitlist signups by use case in the ESP audience (Loops, ConvertKit). Launch-day, segment by tag and send invite waves over 48-72 hours. Highest-intent / closest-fit goes first; broadest casts go last. Spreads server load and lets you triage onboarding support.
Yes — webhook the JSON. Loops has direct webhook support and is purpose-built for product transactional + waitlist email. ConvertKit and Beehiiv accept via API or Zapier. All three handle the launch-sequence segmentation cleanly.
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