How RG Forms actually works
RG Forms gives you a live contact form endpoint in under 2 minutes — backed entirely by a Google Sheet you own. No server to manage, no monthly fee, no third-party data storage.
Most form tools keep your data. RG Forms gives it back.
The usual way
Most contact form tools store your submissions on their servers. You pay monthly, you depend on their uptime, and your data lives in their database.
The RG Forms way
Every submission goes directly into a Google Sheet in your own Google Drive, sent by an Apps Script you own and control. RG Forms provisions that sheet and script for you — about 90 seconds — then your endpoint works forever at no cost, independent of any RG Forms server.
No server in the middle
RG Forms is a fully static web app. There is no RG Forms server, no database, and no backend. Every API call during setup goes directly from your browser to Google using your own OAuth token.
Setup (one time, in your browser):
Your Browser
├─── Google OAuth ──▶ Short-lived token (memory only)
├─── Google Drive API ──▶ Creates Sheet + Drive folder
└─── Apps Script API ──▶ Creates & deploys form handler
Live endpoint (after provisioning):
Your Website / App
└─── POST to script URL
└─── Apps Script (in your Google account)
├─── Appends row to Google Sheet
├─── Sends email notification
└─── Returns { result: "success" }Five steps, about 90 seconds
Here's the whole flow, start to finish.
Sign in with Google
You grant RG Forms a temporary OAuth access token. This token lives only in browser memory — it's never sent to any RG Forms server, never written to disk, and disappears when you close the tab.
Token stays in your browser
Configure your form
Give your form a name, set the email address for notifications, and configure your fields. Add any fields you need — text, email, phone, textarea, select — and mark them required or optional.
Form fields
We provision everything
RG Forms creates a Drive folder, a Google Sheet with your column headers and a hidden _manifest tab, and an Apps Script project — deployed as a public HTTPS web app with a permanent endpoint URL.
Authorize your script
Because the script was deployed via API, Google requires a one-time manual authorization. Open the script URL, sign in if prompted, and approve. It only requests access to its one spreadsheet and email sending — nothing else.
Start receiving submissions
POST JSON to your endpoint from any website, app, or no-code tool. Each submission appends a row to your Google Sheet and sends you an email notification — edit fields any time without reprovisioning.
What lands in your Google Drive
A Drive folder
Named after your form slug. Contains your Google Sheet. Browse, share, and manage it like any other Drive folder.
A Google Sheet
One tab for your form submissions, pre-populated with your column headers, plus a hidden _manifest tab the script reads on every request.
An Apps Script web app
Handles form submissions (POST), appends rows, and sends email notifications. Deployed as a permanent HTTPS endpoint under your Google account.
Submit from anywhere
Your endpoint accepts a JSON POST with a tab and fields object. Use text/plain — this avoids a CORS preflight that Apps Script cannot respond to, while the body is still parsed as JSON.
The RGFORMS.md export from your dashboard gives any AI assistant the exact field names, tab name, and endpoint URL — so it can wire up the form for you automatically.
// POST directly from your site — no server proxy needed.
// Use Content-Type: text/plain to avoid a CORS preflight.
const res = await fetch(FORM_SCRIPT_URL, {
method: 'POST',
headers: { 'Content-Type': 'text/plain' },
body: JSON.stringify({
tab: 'contact',
fields, // { name, email, phone, message, ... }
}),
});
const data = await res.json();
// { result: 'success' } or { result: 'error', error: '...' }Everything that's included
Email notifications
Every submission triggers an email to your notification address. Configurable subject line.
CC / BCC support
Copy other addresses on every notification without exposing them in your frontend code.
Reply-to field
Map a form field (like email) as the reply-to address so you can respond directly.
Honeypot spam protection
A hidden field bots fill out; the script silently discards those submissions.
Captcha (Cloudflare Turnstile)
Optional Turnstile verification, checked server-side on every submission. Toggle on or off from the dashboard — no redeploy.
Multiple forms
Add more form tabs to the same sheet from the dashboard — separate tabs, same endpoint.
Edit fields any time
Update labels, add fields, remove fields — no reprovisioning or redeployment needed.
RGFORMS.md export
Export an AI skill file compatible with any AI IDE — Claude Code, Cursor, Copilot, Windsurf, and more.
Manifest JSON
Download your full configuration as JSON for your own records or tooling.
Honest about the limits
Email quota
Google Apps Script accounts are limited to roughly 100 email notifications per day on free Google accounts. This is a Google-imposed quota.
One-time script authorization
After provisioning, you must open the script URL once while signed in to Google and approve the permissions. This is a Google requirement for scripts deployed via API.
Apps Script API must be enabled
The Google Apps Script API must be enabled in your Google account before provisioning. RG Forms detects this and shows a direct link to enable it — a single toggle.
Spam protection is opt-in at creation
Every form gets a zero-config honeypot. Cloudflare Turnstile (verified server-side) is also built in, but its permission is granted when you create the project — enable it then if you may want it. You add the Turnstile widget to your own frontend; the dashboard handles verification.
No data leaves your Google account
RG Forms is a static app that makes API calls on your behalf using a short-lived access token that never touches our servers. Submissions go directly from your website to your own Apps Script endpoint and land in your own Google Sheet.