RG Forms logoRG Forms
Documentation

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.

architecture.txt
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.

1Step 1

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.

Sign in with Google

Token stays in your browser

2Step 2

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

NameREQ
EmailREQ
PhoneREQ
MessageREQ
3Step 3

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.

Drive folder created
Google Sheet created
Apps Script deployed
Finalizing endpoint…
4Step 4

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.

This app wants access to
See & manage this one spreadsheet
Send email on your behalf
5Step 5

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.

New submission
Row appended · email sent

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.

send-contact.js
// 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.