Google Sheets + OpenAI: clearer Google review insights
Copying Google reviews into a spreadsheet sounds easy… until you’re doing it for 10 locations, or 30 competitors, or a weekly client report you can’t miss. Then it turns into tabs, errors, and “wait, did we already pull this one?” chaos.
Marketing managers usually feel this first. Local SEO consultants and operators running multi-location businesses run into the same wall. This Google review automation pulls reviews into Google Sheets and turns them into clear, comparable summaries you can actually act on.
You’ll see what the workflow does, what you need to run it, and how it changes review analysis from a messy chore into a repeatable system.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets + OpenAI: clearer Google review insights
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If review text is NOT empty ", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Analyze Review Sentiment", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Data"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Cleans It Up"]
n5@{ icon: "mdi:database", form: "rounded", label: "Pull Sample Restaurants ", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Export Data", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Failed Reviews (e.g. review ..", pos: "b", h: 48 }
n3 --> n4
n4 --> n1
n2 --> n6
n5 --> n3
n1 --> n2
n1 --> n7
n0 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2 ai
class n1 decision
class n5,n6,n7 database
class n3 api
class n4 code
classDef customIcon fill:none,stroke:none
class n3,n4 customIcon
The Challenge: Turning messy reviews into clear decisions
Google Maps reviews are packed with useful signals, but they’re not packaged for decision-making. If you’re comparing multiple restaurants (yours, clients, or competitors), you end up scraping by hand, cherry-picking a few comments, and calling it “insight.” It’s slow, and it gets worse as you scale. Worse, the manual version is inconsistent: one week you focus on service complaints, the next week you notice pricing, then you forget to track either. The opportunity cost is real because review insights should be steering your landing pages, ad angles, and ops fixes.
It adds up fast. Here’s where it breaks down in the real world.
- Pulling reviews listing-by-listing wastes about 10 minutes per venue, and that’s before you summarize anything.
- When reviews are empty or fail to load, people skip them, which quietly biases your analysis.
- Teams end up with “notes” that can’t be compared across locations because everyone summarizes differently.
- By the time you finish, the insights are stale and you don’t trust them enough to share.
The Fix: Google Sheets + OpenAI review summaries, automatically
This workflow starts with a simple input: a Google Sheet that lists the venues you want to analyze. When you run it, n8n pulls the listing’s review data from Google Maps using a SerpAPI-powered HTTP request, then cleans and normalizes the response so it’s usable (instead of a blob of JSON). Next, it checks if a review actually has content. If it does, OpenAI reads that text and produces a structured summary with sentiment and keywords you can compare across venues. If it doesn’t, the workflow logs the venue into a separate “skipped” sheet so nothing gets lost. Finally, everything lands back in Google Sheets, ready for reporting, sharing, or follow-up.
The workflow kicks off from a manual run (easy for ad-hoc research). It then loops through your venues, fetches reviews, filters out empty items, and sends the meaningful text to an OpenAI Chat Model for “what people are really saying” notes. Results get appended to your results tab, while misses get tracked separately so you can retry or investigate.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you’re analyzing 15 restaurants for a competitor sweep. Manually, you might spend about 10 minutes per venue to open the listing, scan reviews, copy a few lines, and write a quick summary. That’s roughly 2.5 hours, and you still have uneven notes. With this workflow, you update the list in Google Sheets, hit run, and let it process in the background; even if it takes about 20 minutes to fetch and summarize, you’re not doing the repetitive work, and your output is standardized.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your venue list and outputs.
- SerpAPI to fetch Google Maps review data.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Beginner. You’ll connect accounts, paste an API key, and edit a prompt.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Manual run from n8n. You start it when you want a fresh batch of review insights, like a weekly check-in or a one-off competitor audit.
Venue list pulled from Google Sheets. The workflow reads rows from your input tab (restaurant name, place identifiers, or whatever you store) so you’re not editing the automation every time.
Review data fetched and cleaned. n8n calls a SerpAPI endpoint via HTTP Request, then normalizes the returned fields so review text, ratings, and metadata are consistent for the next steps.
Only real review content gets summarized. An If check routes empty or failed items to a “skipped” sheet, while valid review text goes to the OpenAI Chat Model for sentiment and keyword extraction.
Results land back in Google Sheets. Summaries are appended to a results tab you can filter, pivot, and share. You can easily modify the OpenAI prompt to match your brand voice or to focus on specific themes (service, pricing, cleanliness) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow manually to test review ingestion and sentiment analysis end-to-end.
- Add the Manual Execution Start node as your trigger.
- Connect Manual Execution Start to Retrieve Sample Venues to begin the data flow.
Step 2: Connect Google Sheets
Pull sample venues from Google Sheets and prepare output destinations for analyzed and skipped reviews.
- Open Retrieve Sample Venues and select the spreadsheet Document with ID
[YOUR_ID]and the Sheetgid=0. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Retrieve Sample Venues. - Open Append Results Sheet and confirm Operation is set to
append, Document is[YOUR_ID], and Sheet is1346480145. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Append Results Sheet. - Open Log Skipped Reviews and confirm Operation is set to
append, Document is[YOUR_ID], and Sheet is1253412439. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Log Skipped Reviews.
Step 3: Set Up Listing Fetch and Data Normalization
Fetch listing data from SerpAPI and normalize review content for downstream validation.
- Open Fetch Listing Data and set URL to
https://serpapi.com/search.jsonwith Send Query enabled. - In Fetch Listing Data, set query parameters: engine to
google_maps, type tosearch, q to={{ $json['Restaraunt Name'] }}, and api_key to[CONFIGURE_YOUR_API_KEY]. - Open Normalize Review Data and keep the JavaScript Code as provided to extract
restaurant,reviewText,stars, andpostedAt. - Confirm the connection path: Retrieve Sample Venues → Fetch Listing Data → Normalize Review Data.
[CONFIGURE_YOUR_API_KEY] with your real API key.Step 4: Configure Review Validation and AI Analysis
Filter out empty reviews and send valid content to OpenAI for sentiment and keyword extraction.
- Open Validate Review Content and verify the condition uses
={{ $json.reviewText }}with operatornotEmptyand={{ $json.restaurant }}as the right value. - Ensure Validate Review Content routes valid items to Assess Sentiment & Keywords and invalid items to Log Skipped Reviews.
- Open Assess Sentiment & Keywords and set Model to
gpt-4-turbo. - In Assess Sentiment & Keywords, set the message content to the provided prompt with expressions like
{{ $json.restaurant }}and{{ $json.reviewText }}. - Credential Required: Connect your
openAiApicredentials in Assess Sentiment & Keywords.
Step 5: Configure Output Destinations
Append successful analysis results and log skipped reviews to separate Google Sheets.
- In Append Results Sheet, map columns to values: Stars →
={{ $('Normalize Review Data').item.json.stars }}, Analysis →={{ $json.message.content }}, Restaraunt →={{ $('Normalize Review Data').item.json.restaurant }}, and Review Text →={{ $('Normalize Review Data').item.json.reviewText }}. - In Log Skipped Reviews, map columns to values: Stars →
={{ $json.stars }}, Keywords →Skipped (no reviewText), Sentiment →Skipped (no reviewText), Restaraunt →={{ $json.restaurant }}, and Review Text →={{ $json.reviewText }}.
Step 6: Test and Activate Your Workflow
Run a manual test to verify review extraction, AI analysis, and sheet updates before activating the workflow.
- Click Execute Workflow to trigger Manual Execution Start and process sample venues.
- Verify that Append Results Sheet receives new rows containing
Stars,Analysis,Restaraunt, andReview Text. - If any reviews are empty, confirm they are logged in Log Skipped Reviews with the placeholder text.
- Once verified, toggle the workflow to Active for production use.
Watch Out For
- SerpAPI credentials can expire or need specific permissions. If things break, check your SerpAPI dashboard usage and API key status first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About 30 minutes if your accounts and API keys are ready.
Yes. No coding required, just copy credentials and edit a Google Sheet.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in SerpAPI usage and OpenAI API costs (often a few cents per run, depending on how many reviews you summarize).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You’ll mainly customize the “Assess Sentiment & Keywords” OpenAI step. Common tweaks include forcing a fixed output format (like bullets for “Top complaints” and “Top praises”), adding categories that match your business (speed, friendliness, delivery), and telling it to compare locations instead of summarizing one venue at a time. If you want to pull different review sources, you can swap the “Fetch Listing Data” HTTP Request to a different endpoint while keeping the same Sheets output.
Usually it’s an expired Google authorization in n8n. Reconnect your Google account in n8n’s credentials, then confirm the selected spreadsheet and tab names still match what your nodes expect. If someone renamed a sheet, the workflow can “fail” even though your account is fine. Also check sharing permissions if the sheet lives in a different Workspace.
If you self-host n8n, there’s no fixed execution cap; your server and API rate limits become the bottleneck. On n8n Cloud, plan limits depend on your tier, but most small teams can run weekly batches comfortably. Practically, you can process dozens of venues per run, and then scale up by splitting your sheet into segments (or running on a schedule) so the API calls don’t spike all at once.
Often, yes, because this isn’t a simple “A triggers B” job. You’re fetching data, normalizing it, branching based on content, and then running AI summarization before writing back to Sheets, which is where n8n tends to be more flexible. The self-hosting option is a big deal if you want to run lots of review pulls without watching task counts. Zapier or Make can still work for lighter versions, but you may hit limits once you start looping through many venues. If you’re on the fence, Talk to an automation expert and we’ll sanity-check the simplest setup for your volume.
Once this is running, review analysis stops being a once-in-a-while project and becomes a simple habit. Honestly, that’s when the insights start paying off.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.