Form to Google Sheets Automation: Build It in Zapier, Make or n8n Without Duplicate Rows

Sending form answers to a spreadsheet is the simplest automation there is until the same person submits twice, a field arrives empty or the sheet write fails. This guide starts with the case that needs no tool at all, then builds the flow step by step in Zapier, Make or n8n, with the step names, plan limits and usage units each one uses.

By · Updated 9 Oct 2026 · About 14 min read · Plan terms taken from each tool profile

The short answer

Is it a Google Form? Link the responses to a sheet from the form itself: Responses, then Select destination for responses. No automation tool is needed.

Is it any other form, or does each row need a check? Zapier Free writes one row per submission in a two-step Zap. A duplicate check needs a third step: Professional on Zapier, while Make Free and n8n fit it.

Will it run often? n8n counts one execution per submission however many steps run; Zapier and Make count each step that does work.

Do you need an automation tool to send form responses to Google Sheets?

Google Forms: link the sheet inside the form

In shortA Google Form already writes every new response to a linked sheet. Reach for Zapier, Make or n8n only when the form lives elsewhere or a row needs checking first.

  1. Open the form in Google Forms.
  2. Click Responses, then Summary.
  3. Click More, then Select destination for responses.
  4. Pick Create a new spreadsheet or Select existing spreadsheet, then click Create or Select.

Two details matter later. Form collaborators get access to a newly created response spreadsheet, but later permission changes on the form do not carry over to the sheet; update both. Unlinking stops new responses reaching the sheet and leaves the existing rows in place.

Sources: Google Forms: choose where to save responses.

When an automation tool earns its place

In shortFind your situation; the right column is the route this guide builds.

Your situationRoute
A Google Form, and every response should become a rowThe built-in link above
A website form or a form app that is not Google FormsA webhook into Make, a Form trigger in n8n, or the form app’s trigger in Zapier
A repeated submission must not create a second rowA lookup on an event ID before the write: step 4 below
Empty or malformed answers should go to a review list instead of the sheetA validation branch before the write: step 3 below
Text such as “=2+2 please” must stay textA write step set to store values as typed: step 5 below

Zapier, Make or n8n: which fits a form-to-sheet flow?

The same five steps in each tool

In shortEach row is one step of the build below, with the name the vendor gives it. The last row is the smallest plan that runs every step.

StepZapierMaken8n
Start on a submissionThe form app’s trigger; checks every 15 minutes on Free, 2 on Professional, 1 on Team. Webhooks from ProfessionalCustom webhook: starts the moment a request arrivesn8n Form trigger, which hosts the form itself
Branch on bad inputFilter or Paths step, which uses no tasksRouter and filters, with a fallback routeStop And Error node fails the run on purpose
Look up the event IDLookup Spreadsheet Row, set to proceed when nothing is foundSearch Rows, with a filterGet Row(s) with a filter, or Append or Update Row
Write the rowCreate Spreadsheet RowAdd a RowAppend Row, or Append or Update Row
Keep “=2+2” as textNot covered in the sources checkedAdd a Row: Value input option RawNot covered in the sources checked
Smallest plan with all of itProfessional: Free Zaps stop at two stepsFree: 1,000 credits, 2 active scenariosCloud trial or Starter; Community if you run the server
Zapier Help Center Free plan article with 100 tasks, the 15-minute polling interval and two-step Zap workflows marked
Zapier Free: 100 tasks, 15-minute polling, two-step ZapsOfficial page · help.zapier.com · captured 2026-10-01

Sources: Zapier Google Sheets integration, Make Google Sheets modules, n8n Google Sheets sheet operations, n8n Form trigger.

One tool each, by what the flow has to do

If a two-step flow is enough: Zapier

Best for a plain trigger and one row per submission

Best when no duplicate check is needed, or when the team already pays for Professional.

  • Free 100 tasks a month, two-step Zaps
  • Entry USD 19.99 / month Professional, billed yearly; USD 29.99 billed monthly, 750 tasks

Zapier connects one app’s event to an action in another. Triggers, Filter and Paths steps use no tasks; each successful action uses one, and actions that error or halt are not billed. Every run is logged in Zap history, and unsuccessful runs can be replayed.

Where it fits this flow

Free covers form-to-row with no checks: one task per submission, so about 100 submissions a month. Adding the lookup makes a three-step Zap, which needs Professional.

See the Zapier profile for plans, limits and sources.

Visit Zapier (opens in a new tab)

Sources: Zapier pricing, Zapier task usage, Zapier Google Sheets integration.

If you want the check on a free plan: Make

Best for a webhook flow with a lookup at no cost

Best for a single form that needs validation and a duplicate check without a subscription.

  • Free 1,000 credits a month, 2 active scenarios
  • Entry Confirm current quote paid plans are priced by credit package

Make draws a scenario as connected modules. An ordinary module run normally uses one credit. Custom webhooks start a scenario when a request arrives, and each module can carry an error handler.

Where it fits this flow

Free fits the whole flow with a webhook trigger. A 15-minute schedule instead would spend about 2,880 credits a month on checks alone, nearly three times the Free allowance.

See the Make profile for plans, limits and sources.

Visit Make (opens in a new tab)

Sources: Make webhooks, Make credits, Make Google Sheets modules.

If submissions are many or steps are long: n8n

Best for one execution per submission, on Cloud or your own server

Best when the flow grows past a few steps, or when the data must stay on infrastructure you run.

  • Free Community self-hosted; 14-day Cloud trial
  • Entry EUR 20 / month Starter Cloud, billed annually: 2,500 executions

n8n counts one execution per full workflow run, with unlimited steps. Its Form trigger starts a workflow when someone submits an n8n form, and an error workflow can run whenever an execution fails.

Where it fits this flow

Every step from validation to write stays inside one execution. Starter runs 5 executions at once and keeps logs for 7 days; Pro raises that to 20 and 30 days.

See the n8n profile for plans, limits and sources.

Visit n8n (opens in a new tab)

Sources: n8n pricing, n8n Form trigger, n8n: handle errors gracefully.

How do you build the flow step by step?

Step 1: Build a test sheet and a five-event fixture

In shortNever wire the live form and sheet first. Five test events give every later step a known right answer.

Create a test sheet with the columns event_id, submitted_at, email and request, and a test form with matching fields. Use addresses under example.com. Download the automation evaluation pack (ZIP) and its instructions (Markdown); this guide uses form-inputs.json, form-expected.json and form-observations.csv. The ten-order exercise in the pack belongs to the workflow automation task.

EventEmailRequest textExpected result
A01one@example.comQuote for 20 unitsOne new row
A02two@example.comCall me backOne new row
A02, sent again within a secondtwo@example.comCall me backNo second row
A03emptyMissing contactNo row; one review item
A04four@example.com=2+2 pleaseOne row, text shown as typed

The accepted outcome is three rows (A01, A02, A04), one review item for A03 and nothing else. The timestamps in the pack are synthetic input, not times of a run.

Step 2: Start the flow when a form is submitted

In shortAn instant trigger writes the row within moments; a polling trigger adds a wait, and on Make a scheduled check costs credits even when nothing arrived.

  • Zapier: the trigger is checked every 15 minutes on Free, every 2 on Professional and every minute on Team; trigger steps never use tasks. Webhooks are listed from Professional.
  • Make: a custom webhook starts the scenario as soon as its URL receives a request, and each webhook keeps its own request queue. A scheduled webhook can instead collect requests and process the queue at set times.
  • n8n: the Form trigger takes its fields from the form (text, email, dropdown, file and others). It registers a test URL when you execute the workflow while it is inactive, and a production URL only once the workflow is published; give the real form the production URL.
Make Help Center webhooks article with the instant trigger sentences marked
Make webhooks start a scenario as soon as a request arrivesOfficial page · help.make.com · captured 2026-10-01

Sources: Make webhooks, n8n Form trigger, Zapier pricing.

Step 3: Map fields by name and validate before any write

In shortBad input goes to a review list first, so A03 never reaches the sheet.

  1. Map event_id, submitted_at, email and request explicitly; do not rely on column order.
  2. Branch on an empty or malformed email. In Zapier, a Filter or Paths step does this without using tasks. In Make, a router with filters sends the record down one route, and a fallback route catches anything unmatched. In n8n, a Stop And Error node fails the execution on purpose, so A03 shows as a failed run rather than a silent skip.
  3. Record the review item somewhere you check, such as a second tab of the test sheet.

Sources: Make router, n8n: handle errors gracefully, Zapier task usage.

Step 4: Look up the event ID before writing

In shortDeduplicate on the event ID, never on email alone: a second request from the same person is a real new row.

ToolLookup stepWhere two copies can still race
ZapierLookup Spreadsheet Row finds a row by column and value. Set it to proceed when nothing is found, which makes the search use 1 task, then filter on whether a row came backNot covered in the sources checked
MakeSearch Rows with a filter on event_id, then a filter that stops the route when a row comes backInstant webhook runs are processed in parallel by default, so two copies of A02 can both pass the lookup. Turn on Process data in order in the scenario settings
n8nAppend or Update Row with event_id as the Column to Match On updates the existing row instead of adding one; Get Row(s) with a filter works as a plain lookupStarter runs up to 5 executions at once; ordering between them is not covered in the sources checked

Process data in order serializes one Make scenario; a second scenario or person writing to the same sheet can still race. Keep one writer per sheet, and note any exception in the runbook.

Sources: Zapier Google Sheets integration, Make webhooks, Make Google Sheets modules, n8n Google Sheets sheet operations.

Step 5: Write the row so text stays text

In shortA04 checks that “=2+2 please” is stored as the customer typed it, not calculated.

The Google Sheets API has two input modes: USER_ENTERED parses values as if typed into the sheet, so text starting with an equals sign can become a formula, while RAW stores values as given. Make’s Add a Row exposes this as Value input option, with User entered and Raw. Whether Zapier’s Create Spreadsheet Row or n8n’s Append Row offer the same setting is not covered in the sources checked; if no such setting is visible, mark A04 unconfirmed rather than passed. Quoting a CSV field alone does not stop a spreadsheet from reading it as a formula.

Google Sheets API ValueInputOption reference with the RAW option description marked
Sheets API: RAW stores values without parsingOfficial page · developers.google.com · captured 2026-10-01

Sources: Google Sheets input modes, Make Google Sheets modules.

Step 6: Run the fixture and compare row by row

In shortPass only when the sheet matches the expected column exactly.

  1. Send the five events one at a time, then send the second A02 straight after the first.
  2. Compare the sheet with form-expected.json and log what actually happened in form-observations.csv.
  3. Clear the sheet and repeat once. One clean parallel run does not prove the race cannot happen.
  4. Rerun the fixture whenever a form field, a sheet column or the plan changes.

What happens when a sheet write fails, and how do you retry it?

Break the write on purpose, then recover

In shortPoint the write at a sheet the connection cannot reach, send A01, restore access and retry. A retry passes only if it leaves one row, not two.

ToolWhere the failed submission waitsHow you retryWhat a retry can repeatLog kept
ZapierZap history, with its status; runs over the monthly task limit are held, not lostReplay from Zap history; automatic replay of errored actions needs a paid planReplaying a whole run counts its earlier successful steps again, the lookup includedZap history; retention not covered in the sources checked
MakeWherever the write module’s error handler sends it: Skip, Retry, Resume, Commit or RollbackRetry suits a sheet that is briefly unreachable; Skip drops the record unless something else logs itNot covered in the sources checked7 days on Free; longer on paid packages
n8nThe executions list, filtered by status; an error workflow starting with the Error Trigger can record itRetry the failed executionNot covered in the sources checked7 days on Starter, 30 on Pro

In n8n, if the failure happens in the trigger node or the execution was not saved, the error workflow receives no execution ID or URL, so keep event_id in the failure record. A run marked successful with an empty mapped cell is also a failure, even though nothing raised an error.

Zapier Help Center Zap limits article with the sentence that runs are held and can be replayed marked
Zapier holds runs at the task limit and replays them laterOfficial page · help.zapier.com · captured 2026-10-01
n8n documentation on error workflows with the paragraph on running when an execution fails marked
n8n error workflows run when an execution failsOfficial page · docs.n8n.io · captured 2026-10-01

Sources: Zapier Zap limits, Zapier Zap history, Make error handlers, n8n: handle errors gracefully, n8n executions.

Hand over the flow with five files

In shortWhoever inherits the flow should be able to rerun the fixture and find a failure without asking you.

  • form-inputs.json: the five events, including the duplicate and the formula-like text.
  • form-expected.json and form-observations.csv: the three required rows and the review item, kept apart from what was actually observed.
  • Workflow export: the workflow file or scenario export where the platform offers one, or annotated screenshots of each step and its mapping.
  • runbook.txt: who owns failures, where they are recorded, how to retry and how long the plan keeps logs.
  • usage.txt: the monthly submission estimate and the plan limit it was checked against.

On an n8n Cloud trial that ends without an upgrade, the workspace is removed but workflows stay downloadable for 90 days, so export the file into this folder before the trial ends.

n8n documentation on the Cloud free trial with the 90-day workflow download window marked
n8n: 90 days to download workflows after a trialOfficial page · docs.n8n.io · captured 2026-10-01

Sources: n8n Cloud trial.

How many form submissions does each plan cover?

What one submission costs in each unit

In shortThe flow from step 2 to step 5: a trigger, a validation branch, a lookup and a write. Different units are never divided into each other.

EventZapier tasksMake creditsn8n executions
A valid new submission2: the lookup and the write; trigger and filter are freeAbout 3: webhook, Search Rows and Add a Row1, whatever the step count
A duplicate stopped after the lookup1: the lookupAbout 2: webhook and Search Rows1
An invalid submission sent to review0 if the filter stops it; 1 more if a step records the review itemAbout 1 for the webhook, plus 1 for any module that records it1 per run; whether a failed run counts is not covered in the sources checked
A failed write, then a successful retry3: the failed write is free, the replay recounts the lookupNot covered in the sources checked1 per run; whether the failed run and the retry both count is not covered in the sources checked
300 valid submissions a month600 (300 × 2)About 900 (300 × 3)300

Arithmetic on the units in each profile, assuming ordinary non-AI steps. A Zapier AI step or a Make AI module would add more per submission.

Zapier Help Center task usage article with the sentence that only successful actions count marked
Zapier counts only successful actions as tasksOfficial page · help.zapier.com · captured 2026-10-01

Sources: Zapier task usage, Make credits, n8n pricing.

How many valid submissions each entry allowance carries

In shortDivide each allowance by the per-submission count above, then keep room for fixture runs and retries.

ToolPlanAllowanceValid submissions a month
ZapierFree100 tasksAbout 100, without the lookup: the two-step Zap uses 1 task each
ZapierProfessional750 tasks; USD 19.99 per month billed yearly, USD 29.99 monthly375 (750 ÷ 2)
ZapierTeam2,000 tasks; USD 69 per month billed yearly, USD 103.50 monthly1,000 (2,000 ÷ 2)
MakeFree1,000 creditsAbout 333 (1,000 ÷ 3); 300 leave about 100 credits for tests and retries
MakePaidConfirm current quoteCredit package divided by 3
n8nCloud trial1,000 executions in 14 days1,000
n8nStarter Cloud2,500 executions; EUR 20 per month billed annually2,500
n8nPro Cloud10,000 executions; EUR 50 per month billed annually10,000
n8nCommunityFree software on your own serverNo execution allowance listed; servers and upkeep are yours

The gap widens with each extra step: a fifth app action adds a task per submission on Zapier and a credit on Make, and nothing on n8n. For the same units across other workloads, see Make vs n8n.

n8n pricing page with the executions-based pricing line and the Starter price of 20 euros a month billed annually marked
n8n prices by executions, not stepsOfficial page · n8n.io · captured 2026-10-01

Sources: Zapier pricing, Make credits, n8n pricing.

Questions, and what this guide does not judge

Common questions

How do I populate a Google Sheet from a Google Form?

In Google Forms, open the Responses tab and choose Select destination for responses from the More menu. Pick a new spreadsheet or an existing one and confirm. From then on each new response arrives as a row automatically, with no automation tool or plan involved. Sharing is managed separately on the form and on the sheet.

Can a website form that is not a Google Form send responses to Google Sheets?

Yes, through an automation tool. Make starts a scenario from a custom webhook URL that the form posts to, n8n can host the form itself with its Form trigger, and Zapier starts from the form app's own trigger. Each one then writes the answers to the sheet with its Google Sheets step.

Is there a free way to automate a form to Google Sheets?

Several. The Google Forms link costs nothing. Zapier Free runs a two-step Zap on 100 tasks a month, enough for about 100 submissions without a duplicate check. Make Free gives 1,000 credits and two active scenarios. The n8n Community edition is free software, but you run and maintain the server yourself.

How do I stop a form from creating duplicate rows in Google Sheets?

Give every submission an event ID and search the sheet for it before writing; if a row already carries that ID, stop. Do not match on email, because one person can send two real requests. On Make, switch on Process data in order as well, because two copies arriving together are otherwise handled at the same time.

What happens to existing rows if I unlink a Google Form from its sheet?

They stay. Unlinking only stops new responses from reaching the spreadsheet, and the data already collected remains intact. Access is a separate matter: later changes to the form's permissions are not copied to the linked sheet, so check who can still open the spreadsheet and change it there.

What this guide does not judge

Which tool is quickest to set up, how fast each one writes a row and how often each service is down are not documented in the vendor pages behind this guide, so they are not judged here. Neither are AI fields that summarise responses inside the sheet, which some guides add.

Google Apps Script, AppSheet, Zenphi, Jotform and form-specific add-ons also appear in results for this search. They are left out until each has a profile with checked plan terms. Filling a form from a spreadsheet, the reverse direction, is outside this guide. More tools sit in the automation category.

Proposed evaluation, not performed:

On Make Free, first confirm that the account offers a custom webhook, Search Rows and Add a Row with the Raw option; if one is missing, record it rather than upgrading. Build the flow against the test sheet, post the five fixture events with the second A02 sent straight after the first, and run it once with Process data in order off and once with it on. Record the credits each run used from the scenario history.

It passesthe second run leaves exactly three rows, one review item for A03, and A04 shown as typed
It failsA02 appears twice, A03 gets a row, or A04 shows a calculated value

How this guide was made

Plans, units and limits come from the Zapier, Make and n8n profiles on this site, which cite the vendors’ pricing and help pages and carry their own check dates. Step names, the Google Forms link and the Sheets input modes come from the Google, Zapier, Make and n8n documentation linked in each section. Sections follow the topics the top-ranking pages for this search cover, limited to what the vendors document. No rating is given. See our editorial policy.