Free Make.com template · Webhook → Google Sheets

Save webhook data to Google Sheets without duplicates

Forms, scripts and apps often send the same request twice: a retry after a timeout, a double click. This template saves each webhook request to a Google Sheet once. It looks up the request’s request_id in column F first and adds a row only when it isn’t there yet.

This page contains affiliate links, marked “affiliate link”.

Download the free Webhook-to-Sheets ZIP v1.0 · about 62 KB zip · no sign-up needed · blueprint, example sheet, 2-page PDF guide
How setup works

Free download. No sign-up needed. You’ll need your own Make and Google accounts. We’ve also submitted it to Make’s template gallery; until Make approves it, import the blueprint from the ZIP.

Webhook to Google Sheets with duplicate check: three modules and a Leads sheet where a repeated request_id is skipped
Fictional example: the second request with the same request_id adds no row.

What it does

One Make scenario with 3 modules. It runs in your own Make account with your own Google connection. Nothing runs through Flowpaja.

1 · Receive

Webhook in, incomplete requests out

A custom webhook receives the JSON. A filter stops requests without a request_id or email.

2 · Search

Looks up column F

Google Sheets › Search Rows checks whether the request_id is already in column F of the Leads tab.

3 · Add

Adds a row only if not found

Add a Row writes columns A–G. The email is trimmed and lower-cased, and received_at is the time Make wrote the row.

What’s in the download

One zip (v1.0, 2 Oct 2026). Tested in Make on fictional data: two new requests added two rows, two repeats added nothing and a request without a request_id was stopped by the filter.

  • Flowpaja_Webhook_to_Sheets_Dedupe_FREE_blueprint.jsonThe Make scenario. No connections, IDs or tokens inside. You connect your own Google account and create your own webhook.
  • SETUP_GUIDE.pdf2 pages: setup in 6 steps, the test plan, measured credits, limits and fixes for common problems.
  • Webhook_to_Sheets_EXAMPLE_sheet.xlsxThe Leads tab with the 7 columns and 2 fictional rows, plus a How to use tab.
  • test_requests.txtFour test requests (new, duplicate, second new, missing request_id) for curl and PowerShell, plus Leads_tab.csv and a README.txt.

Setup in about 10 minutes

You need a Make.com account (the Free plan works), a Google account and something that sends JSON (a form backend, a script, or curl for testing). No Make account yet? Create a free Make account (affiliate link).

Copy the sheet

Upload the example .xlsx to Google Drive and save it as a Google Sheet. Keep the Leads tab and the column order (request_id in F).

Import the blueprint

In Make: Create a new scenario › ⋯ menu › Import Blueprint. In module 1 click Add to create your webhook and copy its address.

Connect Google

In modules 2 and 3, pick your Google connection, the same spreadsheet and the Leads tab.

Test, then switch on

Click Run once and send the test requests from test_requests.txt. A repeat must not add a row. Then switch the scenario on.

Limits

A free, deliberately simple template.

  • The sender must reuse the request_id. Send a unique request_id per submission and the same one on every retry. A new ID on each retry defeats the check.
  • Credits. Measured in our test: 3 credits for a new request, 2 for a duplicate, 1 for a request stopped by the filter. Each Retry attempt adds 1. No requests, no credits.
  • Errors switch it off. A scenario with an instant trigger like a webhook is switched off after its first unhandled error. Both Sheets modules have a Retry handler (3 attempts, 15 minutes apart) for temporary Google errors, and that needs “Store incomplete executions”, which the blueprint turns on.
  • Only column F is checked. Two different requests from the same email are both added. Edited or deleted IDs in column F are not detected.
  • Default reply. Make answers every request with “Accepted” (HTTP 200) when it receives it. Add a Webhook response module if your sender needs other JSON or status codes.

Want leads in HubSpot and Slack instead?

Lead Router ($19) is built for Google Form leads: it creates or updates one HubSpot contact per email (no duplicate contacts), posts each lead to Slack, sends $10k+ budgets to #sales-hot and posts error alerts.

Need more than one? Get all 3 paid templates for $39 (opens Gumroad in a new tab) (Lead Router, Polite Invoice Reminder and Quote Follow-Up Assistant).

FAQ

Do I need a paid Make plan?
No paid-only features are used. A webhook scenario uses credits only when requests arrive: 3 per new row and 2 per skipped duplicate in our test.
What counts as a duplicate?
A request whose request_id is already in column F of the Leads tab. The same email with a new request_id is a new row.
My form doesn’t send a request_id. Can I still use it?
Only if you can add one. Generate an ID once per submission in your form backend or script and send the same ID on retries. Without it, the filter stops the request.
What happens if two copies arrive at the same time?
The blueprint turns on “Process data in order” (sequential processing), so the second copy is checked after the first one has been written.
Is my data sent to Flowpaja?
No. The scenario runs in your own Make account with your own webhook and Google connection. The download contains no connections, IDs or tokens.

Collecting leads with a form tool? See Tally to Google Sheets (with the same duplicate check on the response ID) and Typeform to Make.

More free templates: Overdue Invoice Digest, Google Form responses to Slack and One quote follow-up draft.

New to Make? Create a free Make account (affiliate link: Flowpaja may earn a commission if you later buy a paid plan, at no extra cost to you). Questions: [email protected].

Tools we use for our builds: our tools page.

Make, Google and Google Sheets are trademarks of their owners. Flowpaja is independent and not affiliated with or endorsed by them.