Workflow
Website form submission → row in a spreadsheet
A form submission arrives on a webhook, is normalised, checked for duplicates, and appended as a row. Built and executed against a local test stack using synthetic leads only.
No link on this page is an affiliate link. We are in the programme below, so we could earn a commission elsewhere on this site — but not from anything on this page. We recommend free tools where they are the better answer, including ones that earn us nothing.
- Make.com: 35% of subscription payments for 12 months; extra-operation purchases do not earn commission (terms verified 2026-09-24)
The problem this addresses: I manually copy new website leads into a spreadsheet.
The steps
- Receive the submission on a webhook. The form posts JSON. No polling, so there is no delay and no wasted operations.
- Normalise the fields. Trim whitespace, lowercase the email, and add a server-side timestamp rather than trusting the form's.
- Check whether the email already exists. This is the step most tutorials leave out, and it is why duplicate rows appear.
- Append the row. One row per unique submission.
What we measured
What this measurement is, and what it is not
These numbers come from running this workflow’s logic against a local test stack over real HTTP, using synthetic data. They describe the workflow design — how many units of work it costs and how it behaves when things go wrong. They are not measurements of Make, n8n or Pabbly, and nothing here should be read as a claim about any vendor’s product.
We tested itThis workflow design cost 4 outbound calls per submission and completed in 30ms against local endpoints.
| Design | Rows created |
|---|---|
| With the duplicate check | 1 |
| Without it (the version most tutorials show) | 2 |
An empty submission is accepted silently
We submitted a completely empty payload. It was accepted, every field was stored as null, and no error was raised anywhere. Nothing would tell you this had happened.
Platform status
n8n (self-hosted Community) — Community (self-hosted)
- Not tested. n8n Community could not be installed on this machine: the npm install exhausted available disk space and failed. See 15_qa_report.md for the exact figures. Workflow JSON has been authored and is ready to import, but IT HAS NOT BEEN RUN, so no n8n result is claimed.
- We do not describe untested workflows as working. This section will be updated once the test is possible.
Make.com — Free
- Not tested. Requires an account, which the agent is not permitted to create. Owner action needed before this platform can be tested.
- We do not describe untested workflows as working. This section will be updated once the test is possible.
Pabbly — Free
- Not tested. Requires an account, which the agent is not permitted to create. Owner action needed before this platform can be tested.
- We do not describe untested workflows as working. This section will be updated once the test is possible.
Limitations and failure cases
- A duplicate check against a growing sheet gets slower as the sheet grows; it is fine at hundreds of rows and not at hundreds of thousands.
- If the form posts a field you did not map, it is silently dropped. Nothing warns you.
- Webhook delivery is fire-and-forget. If your automation platform is down when the form posts, the submission is gone — the form tool will not retry forever.
Failure cases we induced deliberately
- Malformed or empty payload — tested, see the run log.
- Duplicate submission of the same email — tested; without step 3 this creates a second row.
- Downstream append target unavailable — tested against a deliberately failing endpoint.
Access and permissions this needs
- Write access to the destination spreadsheet.
- A publicly reachable webhook URL. Anyone who learns that URL can post to it, so treat it as a secret and add a shared-secret header.
Security and privacy
- The payload contains personal data — a name, an email, often a phone number. Depending on your jurisdiction and how you use that data, privacy law may treat your business as the controller or equivalent responsible party for it.
- Test with synthetic records first. Never point a new workflow at live submissions.
- If your automation platform stores execution payloads, those personal details sit in its logs. Check the retention setting before you connect a real form.
Free options, and when you would have to pay
- Google Forms writes to Google Sheets natively with no automation tool and no limit.
- Self-hosted n8n Community has no execution limit at all; you pay in maintenance instead.
What pushes you onto a paid plan: You need a paid tier when you add scheduling, retries, or more than the free tier's monthly runs — not for this workflow on its own.
The limits of this test
What we can say
- We built this workflow and ran it end to end against a local test stack.
- We can state the number of steps, the measured run time, and what happened on each failure case, because we induced them.
- We can state that the duplicate check works, because we submitted the same email twice and counted the rows.
What we cannot say
- We cannot say how it behaves against the real Google Sheets API under rate limiting — we did not test against Google's API.
- We cannot compare it to Make or Pabbly until those are tested. Building is not testing.
- We cannot claim any time saving for a real business, because we do not run a business that uses this workflow.
