Skip to content

Google Sheets integration

Append Formkove submissions to a Google Sheet automatically. This is a Pro and Agency feature.

Formkove connects to Google Sheets through a Google Apps Script that you deploy to your Google account. When a submission comes in, Formkove sends the data to your script’s URL, which writes it to your spreadsheet.

This approach keeps your data in your own Google account — no third-party access required.

  1. Open the Google Sheet you want submissions in, then go to Extensions → Apps Script
  2. Delete any placeholder code and paste this starter script (also shown in the Formkove dashboard):
function doPost(e) {
const payload = JSON.parse(e.postData.contents || "{}");
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow([
new Date(payload.created_at),
payload.submission_id || "",
payload.form_id || "",
payload.form_name || "",
JSON.stringify(payload.data)
]);
return ContentService
.createTextOutput(JSON.stringify({ ok: true }))
.setMimeType(ContentService.MimeType.JSON);
}
  1. Want one column per field? Replace JSON.stringify(payload.data) with the fields you need, e.g. payload.data.name, payload.data.email. AI results are in payload.ai (sentiment, tags, spam_score) when AI is on.
  2. Click Deploy → New deployment
  3. Choose Web app as the deployment type
  4. Set Execute as to Me and Who has access to Anyone
  5. Click Deploy and copy the Web app URL (it looks like https://script.google.com/macros/s/.../exec). Only /exec URLs work; /dev URLs are rejected.
  1. Open app.formkove.com and select your form
  2. Go to Integrations → Google Sheets
  3. Paste your Apps Script web app URL
  4. Save

Use the Send test button on the connection, or submit a real entry through your form. A new row should appear within a few seconds. Test rows have payload.test set to true.

Problem Fix
No data appears Check the script’s execution logs in the Apps Script editor
Authorization error Redeploy the script and ensure access is set to Anyone
Wrong columns Edit the appendRow([...]) list in your script, then create a new deployment version