Quick start

  1. Install the "HTML Forms to Google Sheets" add-on from the Google Workspace Marketplace, from any Google Sheet.
  2. Open the add-on sidebar and click Create Form Link. This adds our service account as an editor on your sheet and gives you an endpoint like https://forms.codeaddon.com/s/abc123.
  3. Paste that URL into your form's action attribute. Submit the form — a new row appears in your sheet.

Plain HTML form example

Field name attributes become your sheet's column headers. _gotcha is a hidden honeypot field — leave it empty and hidden.

<form action="https://forms.codeaddon.com/s/your-form-id" method="POST">
  <input type="text" name="name" placeholder="Your name">
  <input type="email" name="email" placeholder="Your email">
  <textarea name="message" placeholder="Message"></textarea>
  <input type="text" name="_gotcha" style="display:none">
  <button type="submit">Send</button>
</form>

AJAX / JSON submissions

Send Accept: application/json and the endpoint responds with JSON instead of redirecting. CORS is open (*) so this works from any origin.

fetch(endpoint, {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data)
}).then(r => r.json());
// { "status": "success" }

Field names → sheet columns

Every field's name attribute maps to a column, matched exactly (case-insensitively) against your header row. New field names become new columns automatically. A Timestamp column is added automatically as the first column when your sheet is empty.

Spam protection

Add a hidden field named _gotcha. Real users never fill it in because it's hidden with CSS; bots that fill every field trip it. When _gotcha is non-empty, the submission is silently dropped — the visitor still sees a normal success response, but nothing is written to your sheet.

After-submit behavior

By default, visitors are redirected to /thanks/:formId — a plain "Submission received" page. On paid plans you can:

  • Set a custom thank-you title and message (Essential+).
  • Redirect to any HTTPS URL of your own instead (Essential+).
  • Replace the thank-you page with your own full HTML (Pro).

The "Powered by CodeAddon Forms" footer is removed on all paid plans.

Email alerts, auto-response & webhooks

Sending identity

All emails send from notify@mail.codeaddon.com with your chosen display name. Reply-To is set to your own email, so replies land in your inbox — the from address itself is always ours (needed for deliverability; user-supplied From addresses would fail sender authentication).

Monthly email quotas

Alerts and auto-responses share one monthly pool per account: Essential 500/mo, Pro 2,000/mo. Over quota, sends are skipped silently — submissions themselves are never affected.

Smart rules (Pro)

Auto-response supports up to 5 rules: "if field X equals/contains Y → send template B." Rules are checked top to bottom; the first match wins. If nothing matches, the default template is used.

Merge tags

Use {{fieldName}} anywhere in a subject or body to insert a submitted value, e.g. Hi {{name}}, we got your message. Unknown tags are replaced with nothing.

Every auto-response includes a small "Delivered by CodeAddon Forms" footer line, on all plans — this is separate from the "no branding" promise, which covers thank-you pages only.

Webhooks (Pro)

Set an HTTPS webhook URL and every submission is POSTed there as JSON, 5-second timeout, no retries:

{
  "formId": "abc123",
  "formName": "Contact form",
  "submittedAt": "2026-07-08T09:14:00.000Z",
  "data": { "name": "Ada", "email": "ada@example.com" }
}

Cloud Backup & data storage

Free plan: submissions go only to your Google Sheet. We store nothing beyond small counters used for your usage stats.

Paid plans: Cloud Backup keeps a searchable copy of every submission on our servers — 30 days on Essential, 90 days on Pro. From the add-on you can browse it, export it as CSV, or run Restore to sheet, which writes all backed-up submissions into a new tab in your spreadsheet (your live tab is never touched).

Limits & quotas

FreeEssentialPro
Forms3UnlimitedUnlimited
Submissions/month3002,00010,000
Included emails/month05002,000
Cloud Backup30 days90 days
Analytics chart7 days30 days90 days

Troubleshooting

Sheet sync failing

Usually means the service-account editor was removed from your sheet. Re-create the form link from the add-on sidebar to re-add it.

Multipart forms rejected

File uploads aren't supported. Remove enctype="multipart/form-data" from your form tag.

Over quota

Submissions are rejected with a clear message until your usage resets on the 1st of the month, or until you upgrade.

Auto-response not sending

Check that the submission includes a field with "email" in its name and a valid email value, and that you haven't hit your monthly email quota.