<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: townmedia labs</title>
    <description>The latest articles on DEV Community by townmedia labs (@townmedia_labs_c6aa95058c).</description>
    <link>https://dev.to/townmedia_labs_c6aa95058c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4010100%2F802edb40-06a7-4851-b287-87ea990ef2b5.jpg</url>
      <title>DEV Community: townmedia labs</title>
      <link>https://dev.to/townmedia_labs_c6aa95058c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/townmedia_labs_c6aa95058c"/>
    <language>en</language>
    <item>
      <title>Why I Built a Formspree Alternative (And Why It's Free for 500 Submissions/Month)</title>
      <dc:creator>townmedia labs</dc:creator>
      <pubDate>Tue, 30 Jun 2026 21:00:20 +0000</pubDate>
      <link>https://dev.to/townmedia_labs_c6aa95058c/why-i-built-a-formspree-alternative-and-why-its-free-for-500-submissionsmonth-45ad</link>
      <guid>https://dev.to/townmedia_labs_c6aa95058c/why-i-built-a-formspree-alternative-and-why-its-free-for-500-submissionsmonth-45ad</guid>
      <description>&lt;p&gt;You know the feeling. You've built a clean, fast static site — Next.js, Astro, maybe just plain HTML.&lt;br&gt;
Everything is perfect. Vercel hosting, free tier. Tailwind CSS looking sharp. Lighthouse score: 97.&lt;br&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://splitforms.com/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsplitforms.com%2Fog%2Fhero-form-to-inbox.webp" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://splitforms.com/" rel="noopener noreferrer" class="c-link"&gt;
            Free Form Backend &amp;amp; Contact Form API for HTML, Next.js &amp;amp; React
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            splitforms is a free form backend API: point any HTML, Next.js, React or Astro form at one POST endpoint and get a dashboard plus spam filtering. 500 submissions/mo free, Starter is $1/mo.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsplitforms.com%2Ffavicon.ico" width="64" height="64"&gt;
          splitforms.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vzsx7it9bnv90cuxxyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vzsx7it9bnv90cuxxyd.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you need a contact form.                                                                        &lt;/p&gt;

&lt;p&gt;And suddenly you're staring at three bad options:                                                    &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a backend.&lt;/strong&gt; Spin up an Express server, configure Nodemailer, set up SMTP, handle spam,
deploy it somewhere. All for a form that sends an email. A &lt;em&gt;contact form&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Formspree.&lt;/strong&gt; It works. But the free tier caps you at 50 submissions/month. Fifty. If your
site gets any real traffic, you'll burn through that in a week. Then it's $10/month. For a contact
form.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a PHP script.&lt;/strong&gt; It's 2026. I shouldn't have to explain why this is a bad idea.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I kept thinking: &lt;em&gt;why is this so hard?&lt;/em&gt; A contact form is one POST request. It writes to a database&lt;br&gt;&lt;br&gt;
and sends an email. That's it.                                                                         &lt;/p&gt;

&lt;p&gt;So I built splitforms.                                                                               &lt;/p&gt;

&lt;p&gt;## What splitforms does                                                                              &lt;/p&gt;

&lt;p&gt;One endpoint. No SDK. No backend code.                                                               &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;lt;form action="https://splitforms.com/api/submit" method="POST"&amp;gt;                                  
    &amp;lt;input type="hidden" name="access_key" value="YOUR_KEY"&amp;gt;                                       
    &amp;lt;input name="email" type="email" required&amp;gt;                                                     
    &amp;lt;textarea name="message" required&amp;gt;&amp;lt;/textarea&amp;gt;                                                  
    &amp;lt;button&amp;gt;Send&amp;lt;/button&amp;gt;                                                                          
  &amp;lt;/form&amp;gt;                                                                                          
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's it. Submissions land in your dashboard with spam filtering, email notifications, and webhook&lt;br&gt;&lt;br&gt;
integrations.                                                                                          &lt;/p&gt;

&lt;p&gt;## The free tier I wanted                                                                            &lt;/p&gt;

&lt;p&gt;Here's how splitforms compares on what actually matters — the free tier:                             &lt;/p&gt;

&lt;p&gt;| Service | Free Submissions/Month |&lt;br&gt;&lt;br&gt;
  |---|---|&lt;br&gt;&lt;br&gt;
  | Formspree | 50 |&lt;br&gt;&lt;br&gt;
  | Basin | 50 |&lt;br&gt;&lt;br&gt;
  | Getform | 50 |&lt;br&gt;&lt;br&gt;
  | Netlify Forms | 100 |&lt;br&gt;&lt;br&gt;
  | Web3Forms | 250 |&lt;br&gt;&lt;br&gt;
  | &lt;strong&gt;splitforms&lt;/strong&gt; | &lt;strong&gt;500&lt;/strong&gt; |                                                                         &lt;/p&gt;

&lt;p&gt;500 submissions/month. No credit card. No time limit. No "14-day trial."                             &lt;/p&gt;

&lt;p&gt;When you do want paid features — webhooks to Slack/Discord, CSV exports, auto-responders — Starter is&lt;br&gt;
&lt;strong&gt;$1/month&lt;/strong&gt;. Not $10. Not $20. One dollar.                                                            &lt;/p&gt;

&lt;p&gt;## Features developers actually asked for                                                            &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Signed webhooks (HMAC-SHA256)&lt;/strong&gt; — pipe submissions anywhere with retry and dead-letter handling
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI spam classifier&lt;/strong&gt; — catches LLM-generated spam that honeypots miss
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — Claude Code, Cursor, and Windsurf can read submissions and manage forms natively. 
Yes, your AI coding agent can wire up forms for you.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row-level-secured Postgres&lt;/strong&gt; — GDPR-compliant. We literally can't read your submissions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge-deployed&lt;/strong&gt; — 14ms median latency across 14 regions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with everything&lt;/strong&gt; — HTML, React, Next.js, Vue, Svelte, Astro, Hugo, Gatsby, Webflow,
Framer, Carrd, WordPress
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## The MCP angle (this is the fun part)                                                              &lt;/p&gt;

&lt;p&gt;splitforms ships an official Model Context Protocol server. That means you can tell Claude Code or&lt;br&gt;&lt;br&gt;
Cursor:                                                                                                &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Create a contact form on my Next.js site and wire it to splitforms."&lt;/em&gt;                              &lt;/p&gt;

&lt;p&gt;And the AI agent does it — creates the form, gets the access key, writes the JSX, and submits a test &lt;br&gt;
entry. No copy-pasting API keys, no reading docs.                                                      &lt;/p&gt;

&lt;p&gt;## What I learned building it                                                                        &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing is the hardest decision.&lt;/strong&gt; I went with 500 free because I wanted the free tier to be&lt;br&gt;&lt;br&gt;
genuinely usable for a real site — not just a trial that runs out in a week.                           &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spam is harder than it looks.&lt;/strong&gt; Honeypot fields catch the dumb bots. But in 2026, bots use LLMs to &lt;br&gt;
fill forms with personalized-seeming messages. That's why I added an AI classifier on top.             &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People care about email deliverability more than I expected.&lt;/strong&gt; Shared SMTP pools tank your inbox&lt;br&gt;&lt;br&gt;
placement. Dedicated SMTP with proper SPF/DKIM is non-negotiable.                                      &lt;/p&gt;

&lt;p&gt;## Try it                                                                                            &lt;/p&gt;

&lt;p&gt;If you're currently paying for a form backend — or hitting free tier limits — give splitforms a try: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free forever:&lt;/strong&gt; 500 submissions/month, 2 forms, no credit card →
&lt;a href="https://splitforms.com" rel="noopener noreferrer"&gt;splitforms.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter:&lt;/strong&gt; $1/month for webhooks, exports, and integrations
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3-Year plan:&lt;/strong&gt; $59 once, 15,000 submissions/month for 36 months
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm the founder and I read every email. Reach me at &lt;a href="mailto:hello@splitforms.com"&gt;hello@splitforms.com&lt;/a&gt;.                            &lt;/p&gt;

&lt;p&gt;If you found this useful, I'd love an upvote or a share. I'm a solo dev building this — every bit of &lt;br&gt;
distribution helps. 🙏                                                                                 &lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


──────────────────
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>sideprojects</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
