Skip to content
Via Zapier/Make

Send New Google Sheets Rows to LeadCentre

If enquiries end up in a spreadsheet, you can send each new row to LeadCentre so someone gets an alert and can call. There's no add-on and no import. You have three real options: Zapier, Make or a short Apps Script that you paste into the sheet.

Via Zapier/Make: Connect it through a Zapier or Make account of your own.

What This Does

Something watches your sheet for new rows and posts each one to your LeadCentre webhook URL. LeadCentre matches your column headings to its fields and creates a lead. It works in one direction: updates in LeadCentre don't change the sheet, and changing a row after it's sent doesn't change the lead.

Which option to choose

  • Zapier: Google Sheets with New Spreadsheet Row, then Webhooks by Zapier, which isn't on Zapier's Free plan. The simplest if you already pay for it. Zapier's help says only rows added at the bottom count as new, and that deleting or sorting rows can cause missed or repeated runs.
  • Make: Google Sheets Watch New Rows, then HTTP Make a request. It checks on a schedule, and the shortest interval depends on your plan. Make warns that a blank row stops it processing the rows after it.
  • Apps Script: free and yours to control, but you look after it. It's the one to pick if rows get sorted or deleted, or if you'd rather not pay for another tool.

Don't expect any of these to be immediate. Zapier and Make depend on Google and their own schedules, and the script runs on a timer. If the leads start in a form or an ad, connect that source directly if you can, and keep the sheet as your record.

The Apps Script option

This checks your sheet on a timer and posts any row with an empty Sent column, then fills that cell in. A timed trigger is the right fit, because Google doesn't fire edit triggers for rows added by scripts or API requests, and many tools add rows that way.

var SHEET_NAME = 'Leads';

function sendNewRows() {
  var props = PropertiesService.getScriptProperties();
  var url = props.getProperty('LEADCENTRE_URL');
  var sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_NAME);
  var rows = sheet.getDataRange().getValues();
  var headers = rows[0];
  var sentColumn = headers.indexOf('Sent');
  if (sentColumn < 0) throw new Error('Add a Sent column');
  var count = 0;
  for (var i = 1; i < rows.length && count < 50; i++) {
    if (rows[i][sentColumn] || rows[i].join('') === '') continue;
    var lead = {};
    headers.forEach(function (name, column) {
      if (name && column !== sentColumn) lead[name] = rows[i][column];
    });
    var response = UrlFetchApp.fetch(url, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(lead),
      muteHttpExceptions: true
    });
    count++;
    if (response.getResponseCode() !== 200) continue;
    var result = JSON.parse(response.getContentText()).results[0];
    if (result !== 'test') {
      sheet.getRange(i + 1, sentColumn + 1).setValue(new Date());
    }
  }
}

A row sent during a test isn't marked as sent, so it goes again once you stop listening. Each run sends up to 50 rows, which stays well inside LeadCentre's limit of 120 a minute.

A few things to know: the timer runs under the account of whoever created it, so it stops if that person loses access. Anyone who can edit the sheet can open the script and find your URL, so limit who can edit.

Useful For

  • A small team whose Google Form responses land in a sheet nobody checks often enough
  • A business buying leads from a supplier who adds them to a shared sheet
  • An assistant typing phone enquiries into a sheet, who wants the salesperson told about each one
  • Anyone using a sheet as a stopgap who wants alerts and follow-ups before changing how leads are captured

How Leads Flow Into LeadCentre

  1. Step 1

    A new row appears

    Added by a person, a Google Form or another tool.

  2. Step 2

    It gets picked up

    Your Zap, scenario or Apps Script timer finds the new row, the next time it checks.

  3. Step 3

    The row is posted to LeadCentre

    As JSON, with your column headings as field names.

  4. Step 4

    LeadCentre creates the lead

    Your saved matching fills in the fields, and a push notification goes to the app.

How to Set It Up

  1. 1

    Tidy the sheet first

    Give every column a heading in row 1, using names from the table further down. Format phone columns as plain text, or Sheets drops the leading 0 from a UK number. Remove blank rows. Decide what happens to your existing rows: whichever option you choose, anything it treats as new becomes a lead with its own alert.

  2. 2

    Create a key

    In LeadCentre, go to Settings > Connections. Under "Add another key", type a name such as Google Sheet and press "Create". Press "Copy" and keep the URL safe, as it's only shown once. Then follow "Next: test and match fields" and press "Listen for test data".

  3. 3

    If you use Zapier

    Start a Zap with Google Sheets and New Spreadsheet Row, choose your spreadsheet and worksheet, and test it. Add Webhooks by Zapier with POST, paste the URL, set Payload Type to JSON and add a Data row for each column. Test the step, and your fields appear in LeadCentre. Zapier suggests entering each row in one go, so a half-typed row doesn't trigger it.

  4. 4

    If you use Make

    Start a scenario with Google Sheets Watch New Rows and set Table contains headers to Yes. When asked where to start, choose to begin from now on, as All would process your existing rows too. Add the HTTP app's Make a request, paste the URL, set Method to POST and the body content type to application/JSON, and add your columns. Press Run once with a new row in place, and your fields appear in LeadCentre.

  5. 5

    If you use Apps Script

    Add a column headed Sent, and fill it in on any existing row you don't want sent. In the sheet, open Extensions, then Apps Script, and paste in the script above, changing Leads to your tab's name. In Project Settings, add a script property called LEADCENTRE_URL holding your URL. Select sendNewRows, press Run and authorise it when asked. Your fields appear in LeadCentre, and the Sent cells stay empty because it's still test data.

  6. 6

    Match the fields

    Check Smart Match's suggestions against your headings, choose a field for each or leave it on Do not use, then press "Save field matching". Press "Stop listening", because anything sent while listening counts as test data.

  7. 7

    Go live

    Turn the Zap or scenario on. For Apps Script, open Triggers, press Add Trigger, choose sendNewRows, choose a time-driven source and pick every 5 minutes. Then add a test row and wait for it to appear in your Leads list.

Supported Fields

Your column headings become the field names. Using the headings below means Smart Match can suggest the right field, and other names work if you pick the match yourself. A cell with nothing in it isn't sent, so make sure your test row is complete.

Be careful with dates sent as text. A UK date such as 04/11/2026 can be read as 11 April. The Apps Script sends real date cells in a safe format. In Zapier or Make, send dates like 2026-11-04, or leave Date received unmatched so the lead takes the time it arrives.

Field sentUsually matched to
Name, or First name and Last nameFull name, or First name and Last name
EmailEmail
PhonePhone (mobile or landline)
PostcodePostcode
ServiceEnquiry type
NotesEnquiry / Message
Date receivedDate received
Lead sourceLead source
ID, if your sheet has one that never changesUnique ID (stops duplicates)
Timestamp (Google Forms)Date received, or Do not use

Common Problems

My test data isn't showing

Press "Listen for test data" first, as it stops after 15 minutes. Then send from the POST step, or run the script. Testing a Zap's trigger or a Watch New Rows module on its own doesn't reach LeadCentre. Check you have the right key's page open.

New rows aren't being picked up

In Zapier, a row counts only when added at the bottom, and sorting or deleting rows can confuse it. In Make, a blank row stops the rows after it being processed. For Apps Script, check the timer exists under Triggers and read its Executions list for errors.

UK phone numbers have lost their leading 0

Sheets stored the number as a number. Format the column as plain text and retype the affected numbers. Existing leads need correcting by hand.

Old rows all arrived as new leads

They counted as new. In Make, choose to start from now on. In Apps Script, fill in the Sent column for rows you don't want to send, before the timer runs. Archive any leads you didn't want.

A lead shows "Waiting for field matching"

It was sent before anything was matched on that key, so it's being held. Match the fields and press "Save field matching". The banner tells you how many waiting leads were added.

I lost the webhook URL

It's shown once, and LeadCentre only keeps a scrambled copy, so it can't be looked up. Open the key and press "Replace this URL", or "Get a URL to copy" if it has never been used. Paste the new one into your POST step or script property. Your field matching stays.

I need to rotate the key

Press "Replace this URL", then update your POST step or script property straight away, as the old URL stops at once. With Apps Script, nothing is lost in the gap: refused rows stay unmarked, so they go on the next run. In Zapier or Make, check the run history for any failures to rerun.

Questions About This Connection

Is there a Google Sheets add-on or an import?

No. LeadCentre has no add-on, and there's no CSV or spreadsheet import. These options send new rows one at a time as they appear.

Can I use this to load my old leads?

The Apps Script will send any unmarked row, but each becomes a new lead with its own alert, and any Instant Reply you've set up can go out too. It isn't designed as an importer, so think carefully first. Marking old rows as Sent keeps them out.

Does LeadCentre update my sheet?

No. It works in one direction. Status, follow-ups and job values stay in LeadCentre.

Will the same row be sent twice?

It shouldn't, but sorting can make Zapier or Make see old rows as new, and a timed-out request could make the script send one again. If your sheet has a stable ID column, match it to Unique ID, and a repeat is skipped. Don't use the row number, as it changes when rows move and could cause a real lead to be skipped.

Get Your Leads Flowing.

Set up your LeadCentre account, connect this source and see your next enquiry arrive on your phone.

Get Started