senduler

Google Sheets

Send each accepted submission straight into a spreadsheet. It takes about five minutes and needs no account connection — you deploy a tiny Google Apps Script bound to your sheet, and Senduler POSTs each submission to it.

1. Add the script to your sheet

Open your Google Sheet → Extensions → Apps Script, replace the contents with this, and Save:

function doPost(e) {
  var lock = LockService.getScriptLock();
  lock.waitLock(30000);
  try {
    var body = JSON.parse(e.postData.contents);
    var fields = body.fields || {};
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('Submissions') || ss.insertSheet('Submissions');

    // Header row = receivedAt + field names (grows as new fields appear).
    var headers = sheet.getLastRow() > 0
      ? sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
      : ['receivedAt'];
    Object.keys(fields).forEach(function (k) {
      if (headers.indexOf(k) === -1) headers.push(k);
    });
    sheet.getRange(1, 1, 1, headers.length).setValues([headers]);

    var row = headers.map(function (h) {
      if (h === 'receivedAt') return body.receivedAt || new Date();
      return fields[h] !== undefined ? fields[h] : '';
    });
    sheet.appendRow(row);

    return ContentService.createTextOutput(JSON.stringify({ ok: true }))
      .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}

2. Deploy it as a Web App

Click Deploy → New deployment → Web app:

  • Execute as: Me
  • Who has access: Anyone

Authorize when prompted, then copy the Web app URL — it looks like:

https://script.google.com/macros/s/AKfyc.../exec

3. Connect it to your form

On the form's Webhooks tab, choose Google Sheets as the type and paste the Web App URL.

Senduler POSTs { receivedAt, formName, submissionId, fields } to the script, which appends a row. Keep the URL private — like Slack, it's the shared secret. (A future update will add a native "connect your Google account and pick a sheet" flow.)