Send waitlist signups, feedback and changelog entries to Google Sheets
A row per waitlist signup, per feedback item or per published entry in a spreadsheet you already share with a co-founder or a designer. Launch does not write to Sheets itself; a small automation carries the event there.
How do I connect Nordva Launch to Google Sheets?
Send the Nordva Launch webhook to Zapier, n8n or Make and add their Google Sheets “append row” action, mapping data.email, data.position and data.source to columns. A Google Apps Script web app cannot be the endpoint directly: Apps Script answers every POST with a 302 redirect, and Launch does not follow redirects.
01Get the Google Sheets URL
- Pick a carrier: n8n (free self-hosted, or cloud), Make (free tier with an operations cap), or Zapier (Webhooks by Zapier needs a paid plan). Follow that destination's page to get a hook URL and paste it into Launch.
- In the same workflow add the Google Sheets action: n8n “Google Sheets → Append row”, Make “Google Sheets → Add a row”, Zapier “Google Sheets → Create Spreadsheet Row”. Authorise your Google account there, not in Launch.
- Make the sheet's header row first: created_at, email, position, source, referral_code for signups; created_at, classification, summary, page_url for feedback.
02Create the endpoint
Three ways, same result. In the dashboard: Webhooks → Add webhook, paste the URL, tick the events, press Test. Over the API with a secret key:
curl -X POST https://api.nordva.dev/v1/webhooks \
-H "Authorization: Bearer nv_live_…" \
-H "Content-Type: application/json" \
-d '{
"url": "https://…",
"events": ["waitlist.signup.created", "feedback.created"],
"description": "Google Sheets"
}'
# → data.signing_secret is returned once; keep it if you verify signatures Or from an AI agent with the MCP server connected: “send new waitlist signups and feedback to Google Sheets, here is the URL”. The agent calls create_webhook, then test_webhook, and reads the delivery log if the test fails.
Events you can subscribe to: waitlist.signup.created, waitlist.signups.invited, changelog.entry.published, changelog.subscriber.created, feedback.created, or "*" for all of them.
03What Google Sheets receives
A POST with the JSON envelope. Every event has the same outer shape; data depends on the type. A signup:
{
"id": "evt_01K5…",
"type": "waitlist.signup.created",
"created_at": "2026-09-17T20:41:07.512Z",
"project_id": "prj_01K4…",
"data": {
"signup_id": "ws_01K5…",
"email": "[email protected]",
"position": 42,
"referral_code": "JANE42",
"referred": false,
"source": "hn",
"utm_source": null,
"created_at": "2026-09-17T20:41:07.512Z"
}
} Headers: Nordva-Event-Id, Nordva-Event-Type, Nordva-Delivery-Id, Nordva-Signature (HMAC-SHA256, t=…,v1=…). The full field list per event is in the webhooks guide.
- Map each column from the envelope: data.email, data.position, data.source, data.referral_code, and created_at for the time.
- Why not Apps Script: a web app deployed from Apps Script replies to a POST with 302 Found pointing at script.googleusercontent.com. Launch counts a 3xx as a failure and retries, then disables the endpoint after 20 failures in a row. The automation tools above answer 200 directly.
- For a one-off copy rather than a live sheet, export the waitlist as CSV from the dashboard (Indie and up) and import it.
Delivery, retries, limits
- Any 2xx within 10 seconds counts as delivered. A 3xx, 4xx, 5xx or a timeout is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours, then given up.
- An endpoint that fails 20 deliveries in a row is switched off; the dashboard says why, and one click switches it back on.
- Every delivery of the last 30 days is in the log with what was sent and what Google Sheets answered.
- Indie includes 2 endpoints per project, Builder 5. Webhooks are not on the Free plan.
- A webhook never slows or fails the API call that caused it: if Google Sheets is down, the signup still succeeds.
Questions
Can I use Google Apps Script as the webhook URL?
No. Apps Script web apps answer every POST with a 302 redirect to script.googleusercontent.com, and Launch does not follow redirects, so each delivery would fail. Route through n8n, Make or Zapier, whose Google Sheets actions append rows directly.
Will the sheet get the signup's email?
Yes for waitlist.signup.created and changelog.subscriber.created. Feedback events carry has_email but not the address; read it from the API when needed.