Direct Google Sheets connection · 8 min read
How to automate review requests from Google Sheets
Written by Mannie Gill, Founder & Lead Developer at EmbedMyReviews. LinkedInPublished
Connect a dedicated Google Sheet tab directly to EMR to start a review campaign for new customer contacts. The rows can come from staff, Google Forms or software that already exports completed work. Use only eligible customers in the tab: EMR does not treat a Status column or a hidden row as permission to send.
TL;DR
The short version
- The simplest route when eligible customer details already arrive in a Sheet. No Zapier, Make or API key is needed between Google Sheets and EMR.
- Start with one test contact in a new tab. Activation can process existing rows from your selected starting row.
- Best for a first request to each customer. Adding the same customer again does not turn this into a request after every visit.
Before you set this up
If staff find spreadsheets awkward on a phone, Google Forms can add the rows for them. They only see the form, not the customer list.
Use a staff form to fill the Sheet automatically →What happens automatically?
- 01
A completed job is added to the tab
- 02
EMR syncs the contact
- 03
The campaign sends the invitation
Choose this when: One-off cleaning, removals, trades and small teams that need a first campaign invitation for each new customer and already maintain eligible rows.
Choose another route when: A mixed list of leads and unfinished jobs, or an every-visit request for repeat customers. A filtered view or hidden rows do not exclude data from EMR.
Who does what?
The business owner
Maintains the ready-to-invite tab, adds only completed jobs and shares the spreadsheet with the Google account used for the connection.
You, the agency
Connects Google from the agency account, maps the columns, limits the initial import, tests delivery and checks sync health.
Set up EMR Automations while signed in as the agency owner and working in the intended client location. The business owner handles access to their own software. They do not need your agency login or a daily EMR task.
A message you can send the business owner
“We can use a simple Completed jobs tab to send review requests. Please share that spreadsheet with the Google account we agree and add only customers whose work is finished. I will connect the tab, match its columns to your review campaign and test it with our own details. Your team can then keep working in the sheet.”
Once it is connected
Staff add completed customers to the selected tab, or the client’s existing software adds them. EMR checks for new contacts automatically. Staff do not open EMR to send the request. If they type each row themselves, that remains their one manual step.
Have these ready
- A dedicated spreadsheet tab containing only eligible customers and initially just your test record.
- A Google account authorised for the spreadsheet. Use edit access if enabling status write-back.
- A campaign and a matching email or phone column. For SMS, use full international phone numbers.
First client? Prepare the review campaign first
From your agency, open Business → Customers → Manage Customers → Open dashboard (or the Customer tab if shown). Select the business location you are setting up.
A campaign is the review message and any follow-ups you want EMR to send. A feedback form controls where the customer is invited to leave their review.
Use Grow → Review Tools → Feedback Forms to prepare the customer’s review destination, then Grow → Campaigns → Request Reviews to create the campaign. Choose its feedback form, message and working sender. Start with one email step for this walkthrough. Add your own test contact through Grow → Campaigns → Invites and verify the message and link.
Set the campaign’s sending window and duplicate-request window. Honour opt-outs. For Google review campaigns, ask eligible customers consistently, leave review gating off and offer no incentives.
Do I need to understand APIs or write code?
No API key, Zapier or code is needed. Sign in with Google, choose a spreadsheet and match its column headings to EMR’s contact fields. “Mapping” simply tells EMR which column contains the email, name or phone.
A key or token is a private connection credential. A webhook is an automatic notice that something happened, such as a payment completing. Keep connection credentials private; the business owner does not need to share their everyday login password.
The walkthrough
Set it up, step by step
Connect Google and match spreadsheet columns. Work through this together the first time.
Business owner
Create a simple ready-to-invite tab
Create a tab called Completed jobs. In row 1 use First name, Last name, Email and, if needed, Phone. Add optional Status and Date added columns for EMR to update.
Put your own test details in row 2. Keep old customers out for now. A status column containing Done does not filter a mixed sheet: only put eligible jobs into this tab.
Before moving on: The tab contains headers and a single contact you control.
Agency
Connect the Google account that can access the sheet
Open the client dashboard from your agency account and select the location. Go to Connect → Integrations → Automations and click Connect Google Sheets. If it shows Manage Connections, open that instead.
Sign in to the intended Google account and approve the requested connection access. If you land on the Google Sheets page without a connected account, click Connect Google Account. The business can share this sheet with an agency-managed Google account instead of sharing its password.
Before moving on: The connection shows the expected Google account and the spreadsheet is visible.
Agency
Choose the campaign, spreadsheet and tab
Click Create Your First Automation, or New Automation if you already have one. Select the campaign, then the spreadsheet and Completed jobs tab.
Map Email Address to Email, First Name to First name and Last Name to Last name. Map Phone Number only if you have that column and need SMS. Review the data preview.
Before moving on: The preview shows the customer’s details in the correct fields.
Agency
Check the starting row and optional write-back
Set Header Row to 1 and Start Reading From Row to 2 for the new test tab. On an existing sheet, everything from the selected start row can be considered during the first sync.
If helpful, enable spreadsheet updates and choose the separate Status and Date added columns. EMR writes Added when a contact is added to a campaign; that is a record of being added, not a delivered-message receipt.
Before moving on: No unintended historical customers are within the selected input range.
Together
Activate, inspect the sync, then add a new row
Review and click Activate Automation. Activation starts an initial sync. Check the sync result, campaign activity and the test inbox.
Add a second unique test contact after activation. Click Check for New Customers on the automation’s details page for a prompt check, or allow the normal sync cycle. Once both tests pass, let staff append completed jobs.
Before moving on: Both the initial test and a newly appended row reach the correct campaign.
Your test tab should look like this
Row 1 contains the headings. Put your own details in row 2; replace the example email with an inbox you control.
| Row | First name | Last name | |
|---|---|---|---|
| 2 | Alex | Taylor | [email protected] |
Swipe across the table to see every column.
Use Google Sheets as the middleman
EMR does not need a direct connection to the original software if that software can reliably put the right customers into a Sheet. The important question is: who creates the row?
- The client’s software already writes completed jobs to Sheets
- Use its existing export or workflow. Send the customer’s name and email into a dedicated tab only after completed, eligible work. EMR reads that tab directly. Confirm the export includes new jobs automatically; a downloadable CSV is a manual export.
- Staff can submit a short completion form
- Google Forms can create the rows for you, without another automation subscription. Follow the cleaning-team form walkthrough →
- The office exports a customer list each week
- Copy only completed, eligible new customers into the mapped columns, leaving the headings unchanged. Assign one person to do this. EMR automates the invitation after the row arrives; downloading and adding the list remains an office task.
Optional: make a “Ready to invite” tab from a mixed jobs list
A filter view or a hidden row does not stop EMR reading it. This optional recipe creates a separate tab that actually contains only the rows you approve. If the team already has a clean completed-customer tab, skip this.
- Start in a new test spreadsheet. Name the first tab Jobs. Put these headings in row 1, in this order: First Name (A), Last Name (B), Email (C), Status (D), Ready to invite (E).
- Select E2:E and choose Insert → Checkbox. Keep the default checked and unchecked values. Staff tick a row only when the work is finished and the customer is eligible for this follow-up. An opted-out customer stays unticked. This is not a satisfaction check.
- Create a second tab called Ready to invite. In A1:C1 enter First Name, Last Name, Email. Paste this formula into A2. It copies rows with Status = Completed, a customer email and a ticked checkbox.
=IFNA(FILTER(Jobs!A2:C, Jobs!D2:D="Completed", Jobs!C2:C<>"", Jobs!E2:E=TRUE),"")- Add two test jobs using your own inboxes. Mark one Completed and tick its checkbox. Leave the other in progress. Only the completed, ticked job should appear in the output tab. Untick it before connecting EMR and confirm the output becomes empty.
- Follow the setup above, selecting the Ready to invite tab. Use Header Row 1 and Start Reading From Row 2. Map its three columns. Keep write-back off so EMR does not add status columns to the formula output.
- Activate the connection. Tick your eligible test row, use Check for New Customers, and follow it through to the delivered email. Then test a fresh customer row. Leave the output tab alone; make changes in Jobs.
What this adds: a staff approval checkbox, not a fully automatic completion feed. If the source already selects eligible customers reliably, use a direct export instead. Existing ticked rows are included in the first sync, so keep historical customers unticked.
What it does not change: the Sheet connection still remembers processed email/phone combinations. It does not become a repeat-visit trigger. Unticking or deleting a row after EMR has picked it up does not recall the invitation.
Formula error? Check the tab name, column order and exact Completed label. Keep the output cells below A2 empty. If your spreadsheet locale uses semicolons between formula arguments, replace the commas with semicolons.
Example: an end-of-tenancy cleaner uses a shared sheet
After each one-off clean, the office adds the eligible customer to Completed jobs. EMR picks up new contact details and starts the campaign. A Google Form or an existing software export can create the row instead. Staff entry remains manual; a native export can automate that handoff. Repeating the same mapped customer details does not produce a new invitation for each job.
How to know it is working
Follow the event all the way to a message you receive. A green connection or a successful test response is only part of that journey.
Where to look: Open Automations → Google Sheets and view this automation. Check Recent Sync History and the customer activity rows. Use View customer activity where available, or find the test email under Grow → Campaigns → Invites. Finally check your inbox.
When to expect the message: The default automatic check is every 60 minutes; you can use Check for New Customers for your test. Once a contact is added, the campaign’s first-step delay and sending hours control the message. A new row does not guarantee an immediate email.
Testing again? Use another email address you control for a second successful-send test. Reusing the first address can correctly trigger your duplicate-request rule. Keep that protection on for real customers.
Test 1: Activate with one test contact from row 2.
Expected result: The sync records the row and the campaign sends to your test address according to its rules.
Test 2: Append a different test contact, then sync.
Expected result: The new contact is processed; the previous contact is not invited again merely because a new row exists.
Test 3: If using a manually maintained tab, test optional write-back.
Expected result: Added means the contact was added to the campaign; confirm delivery separately. For the formula-based Ready to invite tab, keep write-back off and check EMR activity instead.
If something does not work
The spreadsheet is missing
Check the Google account shown in EMR and the sheet’s sharing permissions. Reconnecting the wrong account will not fix access.
Old customers were imported
Pause the automation to stop further syncing, then check Grow → Campaigns → Invites for the imported contacts and any pending requests. Pausing the sheet does not remove people already added to the campaign. Correct the campaign’s queued recipients as well, and use a clean Completed jobs tab before resuming.
A repeat customer does not trigger again
The Sheets connection remembers processed contact identities. Use an appointment or transaction integration for recurring visits rather than copying the same contact to another row.
At handover, record the connection name, source account, client location, campaign, timing, test result and person responsible for failures. Test again after changing the workflow. Keep passwords, API keys and private webhook URLs out of the handover notes.
Cost, reliability and the simpler alternatives
Cost: No Zapier or Make subscription for the Sheets-to-EMR connection. If another tool writes the rows, its charges are separate. Budget for EMR and the campaign’s sending provider.
Reliability: EMR remembers processed email/phone combinations within this Sheet connection, including contacts skipped by campaign rules. Reordering rows, adding a new job ID or waiting past the campaign’s duplicate window does not reset that history. Changing the mapped email/phone combination can make it a new identity, so keep those fields consistent. The default check is every 60 minutes.
When to use something else: Use a native appointment or payment connection for recurring customer visits. For a team without a consistent spreadsheet habit, a completed-job form can make the handoff easier to follow.
Common questions
Need help with a setting?
Another workflow to connect?
Jotform + Make
How to send review requests from a completed-job form with Make
Read the walkthrough →
Google Forms + Sheets
Send review requests from a staff form with Google Forms and Sheets
Read the walkthrough →
HighLevel → inbound webhook
Send review requests from a HighLevel workflow directly to EMR
Read the walkthrough →