RG Forms logoRG Forms
Comparison

RG Forms vs FormSubmit

FormSubmit is the lowest-friction thing in this whole category, and that deserves respect. No signup, no dashboard, no config file — put an email address in a form action and you’re taking submissions.

The difference is what you have afterwards.

Last updated August 19, 2026

The short answer

FormSubmit and RG Forms solve the same problem with different amounts of setup. FormSubmit needs no account at all — you point your form at their endpoint with your email address, confirm it once, and submissions are forwarded to your inbox, which makes it the fastest option in the category. RG Forms takes about two minutes to set up because it provisions a Google Sheet and an Apps Script endpoint inside your own Google account, and in exchange every submission is stored as a spreadsheet row you own rather than existing only as an email. Pick FormSubmit for speed on a small site; pick RG Forms when you want a searchable, sortable record that survives a deleted inbox.

Side by side

FormSubmitRG Forms
Account requiredNo — confirm your address on first submissionYes — sign in with Google
Time to first working formUnder a minuteAbout two minutes
Where submissions end upYour inboxA Google Sheet in your Drive, plus optional email
Searchable historyWhatever your mail client gives youA spreadsheet you can sort, filter and annotate
Works without JavaScriptYes — plain form post with redirectNo — fetch required
CostFreeFree
Custom redirect / thank-you pageYes, via hidden fieldsYou stay on the page and show your own success state
Spam protectionBuilt-in options including a captcha toggleHoneypot, plus Cloudflare Turnstile verified server-side

The real question: is an email enough?

For a personal site or a one-page portfolio, yes. Messages arrive, you reply, done. Adding a spreadsheet to that is ceremony you don’t need.

It stops being enough at a predictable moment — usually when someone asks a question the inbox can’t answer. *How many enquiries did we get last month? Which ones haven’t been replied to? Can you send the marketing person a list?* Email is a delivery mechanism, not a record. If a notification is filtered, deleted, or sent to someone who has since left, the submission is simply gone.

RG Forms writes the row first and emails second. If the email fails or the quota is hit, the row is still there. That ordering is the entire difference.

Choose FormSubmit when

You want zero setup. No account, no OAuth, no provisioning step. Hard to beat.

JavaScript can’t be a requirement. The plain form post with a redirect works with JS disabled.

The site is small and personal. A handful of messages a month, one person reading them.

You want a classic redirect flow. Submit, land on a thank-you page. Some people prefer that to an in-page success state.

Choose RG Forms when

You need the history. Every submission, timestamped, in a sortable sheet — including the ones you deleted from your inbox by accident.

Someone else may need access. Share a spreadsheet with a colleague; you can’t share your inbox.

It’s a client site. Handing over a Google Sheet of leads is a deliverable. Forwarding emails isn’t.

You want the data to do something. Charts, filters, a “replied?” column, or anything that reads Google Sheets.

The RG Forms integration

index.html
<form id="contact-form">
  <label>Name <input name="name" required /></label>
  <label>Email <input type="email" name="email" required /></label>
  <label>Message <textarea name="message" required></textarea></label>

  <!-- Honeypot: humans never see it, bots fill it in -->
  <input type="text" name="_hp" tabindex="-1" autocomplete="off"
         style="position:absolute;left:-9999px" aria-hidden="true" />

  <button type="submit">Send</button>
  <p id="form-status" role="status"></p>
</form>

<script>
  const ENDPOINT = "https://script.google.com/macros/s/AKfycb.../exec";
  const form = document.getElementById("contact-form");
  const status = document.getElementById("form-status");

  form.addEventListener("submit", async (event) => {
    event.preventDefault();
    status.textContent = "Sending…";

    const res = await fetch(ENDPOINT, {
      method: "POST",
      // text/plain avoids the CORS preflight Apps Script can't answer
      headers: { "Content-Type": "text/plain" },
      body: JSON.stringify({
        tab: "contact",
        fields: Object.fromEntries(new FormData(form)),
      }),
    });

    const data = await res.json();
    status.textContent =
      data.result === "success" ? "Thanks — we'll be in touch." : "Something went wrong.";
    if (data.result === "success") form.reset();
  });
</script>

Common questions

Is FormSubmit’s no-account setup a security problem?

No — they confirm ownership of the destination address before forwarding starts, which is the check that matters. It’s a sensible design for what it does.

Does RG Forms have a redirect option?

Not built in. Because it’s a fetch, you stay on the page and show your own success state — which is generally the better experience, and you can always window.location to a thank-you page yourself after a success response.

Which one handles more volume?

Both are fine at contact-form volume. RG Forms’ one real ceiling is notification email — Google caps Apps Script at roughly 100 recipients/day on free Gmail — but rows keep saving past that, so nothing is lost.

Can I switch later without changing my form much?

Yes. Both are “point your form somewhere” tools. Moving means changing the endpoint URL and the submit handler — an hour of work at most, and you keep whatever history you already have.

More answers in the full FAQ.

Your endpoint goes live in ~90 seconds