Create a free access key
Sign up for splitforms and copy the access key for your form from the dashboard — no credit card required.
Contact form · GitHub Pages
GitHub Pages only serves static files, so it has no server to catch a form submission. Point your form at one splitforms endpoint and every message lands in your inbox and dashboard — spam-filtered, free for up to 500 a month.

GitHub Pages has no PHP runtime or mail server. Your static form posts to one hosted endpoint instead.
Honeypot, time-trap, and per-IP rate limits screen bots before they ever reach your inbox.
Every submission is stored in your dashboard and emailed to you within seconds.
Copy-paste ready
Drop this into index.html, a contact page, or a Jekyll partial, point the action at the endpoint, and add your access key. The whole change is a single attribute — no PHP, no plugin, no build step.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input type="hidden" name="redirect" value="https://yourdomain.com/thanks" />
<label>
Name
<input name="name" autocomplete="name" required />
</label>
<label>
Email
<input name="email" type="email" autocomplete="email" required />
</label>
<label>
Message
<textarea name="message" required></textarea>
</label>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
<button type="submit">Send message</button>
</form>How to add it
Same five steps whether the page is plain HTML or a Jekyll layout — no build plugin, no serverless function, no change to how Pages deploys your site.
Sign up for splitforms and copy the access key for your form from the dashboard — no credit card required.
Drop the HTML form below into index.html, contact.html, or a Jekyll _includes/contact.html partial. No build step or plugin needed.
Keep the hidden botcheck honeypot field empty and add a form_loaded_at time-trap field so instant bot fills get filtered before they reach your inbox.
Commit and push to your Pages branch as usual. GitHub rebuilds and redeploys the static site automatically — nothing changes on the hosting side.
Submit the live form once. The entry should appear in your splitforms dashboard and land in your inbox within seconds.
Why an endpoint
The browser renders your form fine — the problem is the submit. GitHub’s servers have no process to catch the POST, validate it, or email it to you. splitforms receives that request at a hosted HTML form backend, so your repo stays fully static and nothing about how Pages deploys has to change.

Spam protection
The page stays fully static — splitforms filters server-side before a submission reaches your dashboard. The hidden botcheck honeypot and the form_loaded_at time-trap catch bots, and per-IP rate limits stop floods. See the full spam protection reference in the docs.

Jekyll & custom domains
Your form keeps its existing fields, layout, and styling — only the action URL points at splitforms. The same static HTML works for plain pages, a reusable Jekyll contact form partial, and custom domains alike.

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
No. GitHub Pages only serves static files, so it cannot run PHP, Node, Ruby, or a server-side mail handler for each submission. A hosted form backend receives the POST request instead.
Yes. Paste the form into a page, layout, or _includes/contact.html partial. The rendered HTML submits to splitforms, so no unsupported Jekyll plugin is required.
No. A native HTML form with method POST works on its own. The only exception is the optional form_loaded_at time-trap field, which needs a few lines of script to stamp the load time — everything else works with plain HTML.
Add the hidden botcheck honeypot field and the form_loaded_at time-trap field, then let splitforms run server-side spam checks and IP rate limiting. That keeps the page static while filtering junk submissions before they reach your inbox.
Yes. The splitforms Free plan includes 500 submissions a month, unlimited forms, owner email notifications, spam filtering, and dashboard storage — no credit card required.
Yes. If your GitHub Pages site uses a custom domain, add that domain to the form's allowed-domains list in your splitforms dashboard so submissions sent from it are accepted.
Yes. Add a hidden redirect field with your thank-you page URL, and splitforms sends the visitor there after a successful submission.
splitforms rate-limits submissions to 6 per minute and 20 per 15 minutes per IP address. Requests past that limit get an HTTP 429 response instead of reaching your dashboard.
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