Every custom website we build eventually hits the same moment: the client sees the finished design, loves it, and then asks — "Great, but how does the contact form work?"
It's a fair question. And the honest answer is that a static website can't process a contact form on its own. This is one of the few genuine trade-offs of building a fast, modern, custom site rather than a WordPress install with a form plugin. But it's a problem we kept running into often enough that we built a free tool to solve it — for ourselves and for everyone else. That tool is RG Forms.
In this post we'll explain exactly why static sites have this limitation, walk through the options most developers reach for (and why they fall short), and show you how RG Forms gives any static website a working contact form in about two minutes — for free, forever.
Why Static Websites Can't Handle Forms on Their Own
A static website is made up of HTML, CSS, and JavaScript files. When a visitor loads your site, those files are delivered directly from a CDN — there's no server running code, no database sitting behind the scenes, nothing "live" waiting to process requests.
That's exactly what makes static sites so fast, secure, and cheap to host. But it also means that when a visitor fills out a contact form and clicks "Submit," there's nothing on your server to receive that data, validate it, store it, or email it to you. The form submission has nowhere to go.
With WordPress, a PHP server is always running in the background. Plugins like WPForms or Contact Form 7 hook into that server to handle submissions. Take PHP out of the equation — as you do with modern frameworks like Nuxt, Next.js, Astro, or plain HTML — and those plugins don't work.
According to the State of the Web report from HTTP Archive, static and JAMstack sites now make up a significant and growing share of the web — precisely because they're faster, more secure, and easier to maintain. But that growth means more developers and business owners running into this exact form problem.
The Usual "Solutions" — And Why They Miss the Mark
Once you understand the problem, the common fixes are easy to find. The issue is that most of them come with a catch.
Third-Party Form Services (Formspree, Typeform, EmailJS)
Services like Formspree, Typeform, and Basin are popular for a reason — they work. You drop in a form that points to their endpoint and they route submissions to your inbox. But:
- Free tiers are heavily limited. Formspree's free plan caps you at 50 submissions per month and shows their branding. Paid plans start around $8–$16/month.
- Your data lives on their servers. Every submission passes through a third party. That's a privacy and compliance consideration for businesses handling sensitive contact info.
- Vendor lock-in. If the service shuts down, raises prices, or changes its terms, your forms break.
For a small business paying monthly hosting and domain fees, adding another $10–20/month for a contact form subscription adds up fast — especially when the form collects maybe 5–10 submissions per week.
Netlify Forms / Vercel Form Handling
If you're hosting on Netlify or Vercel, both platforms offer built-in form handling. Netlify Forms is genuinely useful — but it ties you to their hosting platform and, again, the free tier is capped at 100 submissions per month. Move hosts and you're rebuilding your form setup from scratch.
DIY with Google Apps Script (the Hard Way)
There's a well-known open-source pattern — documented by the DWYL team on GitHub and trusted by thousands of developers — that uses Google Apps Script as a free, serverless form endpoint. Here's how it works: you create a Google Sheet, attach an Apps Script project with a doPost() handler, deploy it as a web app, and point your HTML form's action attribute to that deployment URL. Submissions land in your Sheet and trigger an email notification.
The pattern is free, privacy-respecting, and completely owned by you. The catch? Setting it up manually takes 20–30 minutes, requires navigating Google's API console, uploading script code, and manually deploying — and doing that for every new client site is tedious.
That's the exact problem we solved with RG Forms. We automated the entire setup process so it takes two minutes instead of thirty.
See what's included in a custom website build →
What We Built: RG Forms
RG Forms is a free tool we built at RG Marketing Group to automate the DWYL serverless form pattern. Sign in with Google, configure your fields, and in about two minutes you have a working contact form endpoint — plus a copy-paste HTML snippet ready to drop into any static site.
Here's what makes it different from every paid form service:
- No RG Forms server. RG Forms is itself a static web app. It makes API calls directly from your browser using your own Google OAuth token. We never see your data.
- Everything lives in your Google Drive. The tool creates a Google Spreadsheet for submissions and an Apps Script project as the endpoint — both owned entirely by your Google account.
- No ongoing subscription. There's nothing to pay. The infrastructure runs inside Google's free tier indefinitely.
- No vendor lock-in. Since the script and sheet are in your Drive, you own them completely. You can edit the script, move the sheet, or stop using RG Forms entirely — your form keeps working.
How It Works, Step by Step
Understanding what RG Forms actually does under the hood helps you trust what you're installing on your site — and it's genuinely elegant.
1. Sign In with Google
You authenticate with your Google account. RG Forms requests only the specific permissions it needs: access to create new Drive files (not read existing ones), and the ability to create and deploy Apps Script projects. Your access token lives only in browser memory and is never sent to any RG Forms server.
2. Configure Your Form
Give your form a name (this becomes the spreadsheet title), set the email address where you want submission notifications sent, and add your fields. Supported types include text, email, phone, textarea, and select dropdowns. You can also add CC/BCC recipients, a custom email subject, and a sender name.
3. Your Google Sheet Gets Created
RG Forms calls the Google Sheets API to create a new spreadsheet in your Drive, pre-populated with column headers matching your field names. Every submission will appear as a new row in this sheet.
4. Your Apps Script Gets Deployed
RG Forms calls the Google Apps Script API to create a script project, upload a custom doPost() handler based on your field definitions, and deploy it as a public web app. This deployment produces a unique HTTPS URL — the endpoint your form will POST to.
5. Authorize Once, Then You're Done
Because the script is deployed via API, Google requires a one-time manual authorization. RG Forms walks you through it — click one button, approve the permissions dialog, and the script is live.
6. Copy the Embed Snippet
RG Forms generates a self-contained HTML + JavaScript snippet with your deployment URL already built in. Paste it anywhere in your site's HTML. That's it — your contact form is live.
When a visitor submits the form, their browser posts directly to your Apps Script URL. Google's servers run your doPost() handler, which appends a row to your sheet, sends you an email notification, and returns a success response. Nothing touches our servers at any point.
See examples of custom sites we've built →
Who This Is For
RG Forms works for any static or custom-built website — regardless of the framework or hosting provider.
Nuxt 3 / Next.js / Astro sites — the typical output of a modern custom build. No PHP, no server, no problem.
Plain HTML sites — if you or a client has a simple brochure site with no framework at all, the embed snippet drops straight in.
Sites already hosted anywhere — Netlify, Vercel, Cloudflare Pages, GitHub Pages, S3, wherever. RG Forms doesn't care where your site is hosted because the form endpoint isn't on your host at all.
For our clients at RG Marketing Group — therapy practices, photographers, restaurants, boutiques, service providers — this means their custom website gets a fully functional contact form on day one, without a subscription, without giving a third party access to their client inquiries, and without us having to build a backend just to handle an email notification.
A 2023 study by Salesforce found that 68% of consumers say they're more likely to contact a business that makes communication easy. A broken or missing contact form doesn't just cost a conversion — it signals that the business isn't paying attention.
Limitations Worth Knowing
RG Forms is honest about what it doesn't do:
Email quota: Google Apps Script free accounts send up to ~100 email notifications per day. For most small business contact forms, this is more than enough. High-volume lead gen forms may need a different approach.
No file uploads: The form handles text-based fields only. If you need clients to upload documents or photos, you'll want a different solution.
Basic spam protection: RG Forms adds an optional honeypot field (a hidden input that bots fill in, causing the submission to be discarded). For extra protection, you can manually add a reCAPTCHA to the embed snippet.
Apps Script API must be enabled: First-time users need to flip one toggle in their Google account settings. RG Forms detects this and links you directly to the setting if it isn't on yet.
For the vast majority of small business contact forms — name, email, phone, message — none of these are real constraints.
Frequently Asked Questions
Does RG Forms cost anything?
No. RG Forms is completely free to use. The form endpoint runs on Google Apps Script, which is part of Google's free tier. There's no subscription, no per-submission fee, and no paid tier.
Is my submission data private?
Yes. RG Forms has no server and stores nothing. When you provision a form, the tool makes API calls from your browser directly to Google using your own credentials. Form submissions go straight from your visitor's browser to your Apps Script endpoint — they land in your Google Sheet and are emailed to you. RG Forms never receives or processes them.
Will my form stop working if RG Forms shuts down?
No. Once your form is provisioned, the endpoint is a Google Apps Script deployment in your own Google account. It has no dependency on rgforms.com after setup. Your form will continue working whether or not RG Forms exists.
What's the difference between RG Forms and Formspree?
Formspree (and similar services) routes your submissions through their servers and charges a monthly fee for full functionality. RG Forms routes submissions directly to your own Google Apps Script — no middleman, no monthly cost, no external data storage.
Can I use RG Forms on a site I didn't build with RG Marketing Group?
Absolutely. RG Forms is a standalone tool — it works with any static website, regardless of who built it.
The Bigger Picture: Why This Matters for Custom Websites
One of the most common objections we hear when proposing a custom-built site over WordPress is "but what about forms?" It's a reasonable concern. WordPress has a mature plugin ecosystem for forms. Custom sites historically required either a backend server or a third-party service to match that functionality.
RG Forms closes that gap. A custom Nuxt or Next.js site can now have a working, privacy-respecting, cost-free contact form on the same day it launches — without compromising on the speed, security, and design quality that made the custom build worth doing in the first place.
We built it because we needed it for our own clients. Now it's free for everyone.
Want a custom website with a contact form already built in? At RG Marketing Group, every site we build is custom-designed for your brand — fast, accessible, and ready to convert visitors into clients from day one. Reach out at rgmarketinggroup.com or email us at rgmarketinggroup01@gmail.com and tell us about your project. We'd love to help.