On this page
Google Sheets is the easiest shared database most teams have. Sales can sort leads, support can track requests, and anyone can build a quick chart. So it's natural to want your website's form submissions to land there automatically — one row per submission.
There are three ways to do it. We'll cover each, starting with the simplest.
Method 1: A built-in Google Sheets integration (easiest)
With a form backend that has a native Sheets integration, you connect your Google account once and every new submission is added as a new row. No code, no scripts to maintain.
Step 1: Point your form at Formclick
<form action="https://api.formclick.io/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="checkbox" name="botcheck" style="display: none;">
<label for="name">Name</label>
<input id="name" name="name" required>
<label for="email">Email</label>
<input id="email" name="email" type="email" required>
<label for="company">Company</label>
<input id="company" name="company">
<label for="interest">Interested in</label>
<select id="interest" name="interest">
<option>Starter</option>
<option>Pro</option>
<option>Business</option>
</select>
<button type="submit">Request a demo</button>
</form>
Step 2: Connect Google Sheets
- Open your form in the Formclick dashboard and go to Integrations.
- Choose Google Sheets and sign in with Google.
- Pick the spreadsheet that should receive submissions.
- Send a test submission — it appears as a new row.
The Google Sheets integration is available on Pro plans. Submissions are still emailed to you and stored in your dashboard, so the sheet isn't your only copy.
Method 2: Google Apps Script (free, more work)
You can write a small Apps Script web app that receives a POST and appends a row. It's free, but you maintain it yourself.
// In your Google Sheet: Extensions → Apps Script
function doPost(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Submissions');
const data = e.parameter;
sheet.appendRow([new Date(), data.name, data.email, data.message]);
return ContentService
.createTextOutput(JSON.stringify({ success: true }))
.setMimeType(ContentService.MimeType.JSON);
}
Deploy it as a web app, set access to "Anyone", and use the deployment URL as your form's action. The downsides:
- No spam protection — the URL is public and anyone can post junk into your sheet.
- No email notifications unless you script them too.
- Hard-coded columns — every new form field means editing the script and redeploying.
- Quotas and redirects — Apps Script has execution limits, and its responses don't redirect visitors nicely.
Method 3: Automation tools (Zapier, Make, n8n)
Send submissions to an automation tool with a webhook, then add a "Create spreadsheet row" step. This is flexible — you can also add the person to a CRM or post to Slack in the same flow — but it's another service to pay for and maintain. Formclick supports custom webhooks on paid plans and has a native n8n integration.
Which method should you choose?
| Built-in integration | Apps Script | Automation tool | |
|---|---|---|---|
| Setup time | Minutes | An hour+ | 15–30 minutes |
| Code to maintain | None | Yes | None |
| Spam protection | Yes | No | Depends on source |
| Email notifications | Yes | DIY | Extra step |
| Extra cost | Pro plan | Free | Tool subscription |
Tips for spreadsheet-friendly forms
- Use clear, stable field names —
company_sizemakes a better column header thanfield3. - Prefer dropdowns and radios over free text where you'll want to filter or count.
- Add hidden context fields such as
sourceorpageto see where leads came from. - Use standard formats —
type="date"submitsYYYY-MM-DD, which Sheets sorts correctly. - Don't edit the header row after connecting; add new columns at the end instead.
Want more destinations? Formclick also connects to Notion, Airtable, monday.com and databases — see all integrations, or read How to Receive HTML Form Submissions Online.



