splitforms.com
WAITLIST · GATSBY

Waitlist for Gatsby

Pre-launch capture form with optional referral source. Free for 1,000 submissions per month — no backend, no SDK, no plugin.

1,000/mo free·no card·drop-in for Gatsby
Form.tsxtsx52 lines
01'use client';
02
03import { useState, type FormEvent } from 'react';
04
05export default function WaitlistForm() {
06 const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');
07
08 async function onSubmit(e: FormEvent<HTMLFormElement>) {
09 e.preventDefault();
10 setStatus('sending');
11
12 const data = new FormData(e.currentTarget);
13 data.set('access_key', 'YOUR_ACCESS_KEY');
14 data.set('subject', 'New waitlist signup');
15
16 const res = await fetch('https://splitforms.com/api/submit', {
17 method: 'POST',
18 body: data,
19 headers: { Accept: 'application/json' },
20 });
21
22 const json = await res.json();
23 setStatus(json.success ? 'sent' : 'error');
24 if (json.success) e.currentTarget.reset();
25 }
26
27 if (status === 'sent') return <p>Thanks — we&rsquo;ll be in touch.</p>;
28
29 return (
30 <form onSubmit={onSubmit}>
31 <label htmlFor="email">Email *</label>
32 <input id="email" type="email" name="email" placeholder="you@example.com" required />
33 <label htmlFor="name">Name</label>
34 <input id="name" type="text" name="name" placeholder="Optional" />
35 <label htmlFor="referral">How did you hear about us?</label>
36 <select id="referral" name="referral">
37 <option value="">Choose…</option>
38 <option>Twitter</option>
39 <option>Friend</option>
40 <option>Search</option>
41 <option>Newsletter</option>
42 <option>Other</option>
43 </select>
44
45 <button type="submit" disabled={status === 'sending'}>
46 {status === 'sending' ? 'Sending…' : 'Send'}
47 </button>
48
49 {status === 'error' && <p>Something went wrong. Try again.</p>}
50 </form>
51 );
52}
1,000
submissions / mo, free
3
fields, ready to ship
5
code outputs
60s
from copy to inbox
§ 01Waitlist × Gatsbywhy this combination, in 80 words

Built for Gatsby developers who hate operating a backend.

Splitforms is the form-to-email API for Gatsby sites. One POST endpoint, no SDK, no plugin — drop the waitlist into a page and ship.

Splitforms is the form-to-email API for Gatsby sites. One POST endpoint, spam filtering, signed webhooks, file uploads, a real dashboard — drop-in, no server, no PHP. Free for 1,000 submissions per month, $5/mo Pro for 5,000, $59 for 4 years if you hate recurring SaaS bills.

✦ what you get on the free plan
  • 1,000 form submissions per month
  • Unlimited forms — one key, many pages
  • Spam protection (honeypot + classifier)
  • Webhooks: Slack, Discord, WhatsApp, custom
  • CSV export of all submissions
  • Email notifications (CC and BCC on Pro)
§ 02Copy-paste codeReact / Next.js · 52 lines

Drop into any Gatsby project.

Replace YOUR_ACCESS_KEY with your splitforms key, paste into a Gatsby page, and ship. No build-time integration required.

Form.tsxtsx52 lines
01'use client';
02
03import { useState, type FormEvent } from 'react';
04
05export default function WaitlistForm() {
06 const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');
07
08 async function onSubmit(e: FormEvent<HTMLFormElement>) {
09 e.preventDefault();
10 setStatus('sending');
11
12 const data = new FormData(e.currentTarget);
13 data.set('access_key', 'YOUR_ACCESS_KEY');
14 data.set('subject', 'New waitlist signup');
15
16 const res = await fetch('https://splitforms.com/api/submit', {
17 method: 'POST',
18 body: data,
19 headers: { Accept: 'application/json' },
20 });
21
22 const json = await res.json();
23 setStatus(json.success ? 'sent' : 'error');
24 if (json.success) e.currentTarget.reset();
25 }
26
27 if (status === 'sent') return <p>Thanks — we&rsquo;ll be in touch.</p>;
28
29 return (
30 <form onSubmit={onSubmit}>
31 <label htmlFor="email">Email *</label>
32 <input id="email" type="email" name="email" placeholder="you@example.com" required />
33 <label htmlFor="name">Name</label>
34 <input id="name" type="text" name="name" placeholder="Optional" />
35 <label htmlFor="referral">How did you hear about us?</label>
36 <select id="referral" name="referral">
37 <option value="">Choose…</option>
38 <option>Twitter</option>
39 <option>Friend</option>
40 <option>Search</option>
41 <option>Newsletter</option>
42 <option>Other</option>
43 </select>
44
45 <button type="submit" disabled={status === 'sending'}>
46 {status === 'sending' ? 'Sending…' : 'Send'}
47 </button>
48
49 {status === 'error' && <p>Something went wrong. Try again.</p>}
50 </form>
51 );
52}
ALTPrefer plain HTML? View the universal waitlist HTML snippet23 lines
form.htmlHTML
<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 waitlist signup">

  <label for="email">Email *</label>
  <input id="email" type="email" name="email" placeholder="you@example.com" required>
  <label for="name">Name</label>
  <input id="name" type="text" name="name" placeholder="Optional">
  <label for="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>

  <!-- honeypot — bots fill every field -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">

  <button type="submit">Send</button>
</form>
§ 03Setup3 steps · 60 seconds · zero config

Generate, embed, receive.

Three actions stand between you and your first waitlist submission. None of them require a backend, a database, or a CAPTCHA library.

STEP 01GENERATE

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.

Create your form
key=sk_live_••••••••
STEP 02EMBED

Paste the waitlist into your Gatsby project

Drop the form snippet into a Gatsby 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.

snippettsx
'use client';
  …
</form>
STEP 03RECEIVE

Receive submissions

Email arrives within seconds. Webhook fires in parallel. Dashboard updates live. CSV export, Slack/Discord forwarding, BCC to your team — all included free.

inbox · 1 newjust now
FROM contact@yoursite.com
New waitlist signup
Maya Iyer maya@studio71.co
Loved the demo — quick question about pricing on the 4-year plan. Are usage limits per project or account-wide?
§ 04Field-by-field rundown3 fields · names you POST

What every field actually does.

Each field below ships in the waitlist template — rename, remove, or add your own. Splitforms accepts any name you POST.

emailREQUIRED
EMAIL

Email

Reply-to address — splitforms wires this so hitting reply goes back to the sender.

placeholder · you@example.com
name
TEXT

Name

Greeting + dashboard label so submissions don't all read 'anonymous'.

placeholder · Optional
referral
SELECT

How did you hear about us?

Dropdown — keeps responses normalised so you can filter the dashboard.

TwitterFriendSearchNewsletterOther
§ 06Questions6 answered

Waitlist on GatsbyFAQ.

Direct answers, no marketing fluff. Missing one? Email hello@splitforms.com.

01Does this waitlist work on Gatsby?
Yes. The form is plain HTML with a single POST endpoint, so it runs on any Gatsby site without server-side code, plugins, or SDKs. Drop the snippet into a Gatsby page or component and submissions land in your inbox via splitforms.com.
02How much does the waitlist cost on Gatsby?
Free for 1,000 submissions per month — no credit card, no trial. Pro is $5/mo for 5,000 submissions, and there's a one-time $59 4-year plan (15,000 submissions/mo for 48 months). The same pricing applies regardless of which framework hosts the form.
03Can I customize the fields?
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.
04How does spam protection work on the waitlist?
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 Gatsby as on any other framework.
05Can I send the waitlist submissions to Slack or Discord?
Yes. Webhooks are free on every plan, 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.
06Will it work on a static Gatsby site?
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.
§ 07Comparisonvs Web3Forms · vs Formspree

splitforms vs everything else.

Same drop-in API. More free submissions, real webhooks on the free tier, MCP support no other backend has.

FeatureWeb3FormsFormspreesplitforms
Free monthly submissions250501,000
Custom fields beyond contactYesPro tierFree
Webhooks (Slack / Discord)Pro tierPro tierFree, signed
AI / MCP submission inboxNoNoYes
Long-term plan (4-year flat)$59 once
✻ ✻ ✻

Ship a waitlist on Gatsby in 60 seconds.

1,000 submissions per month, free forever. No credit card. Copy the snippet above and paste it into your Gatsby project.

Get free access key →Read the docs
v0.1 · founders pricing locked in · early access open