Google Sheets + Gmail: competitor price change alerts
You check a competitor’s pricing page, then another, then three more. Later you realize you missed a small change that quietly undercut your offer. That’s how “I’ll just keep an eye on it” turns into lost deals and last-minute scrambles.
Marketing managers feel this when campaigns are priced around stale intel. Founders feel it when margins get squeezed. And agency leads get the awkward client call. This price change alerts automation puts competitor pricing into a single Google Sheet and pings you in Gmail when something actually changes.
Below is the exact n8n workflow behind it, how it behaves week to week, and what you can tweak so the alerts match how your team makes decisions.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Gmail: competitor price change alerts
flowchart LR
subgraph sg0["📅 Run weekly Check Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "MCP Client", pos: "b", h: 48 }
n2@{ icon: "mdi:play-circle", form: "rounded", label: "📅 Run weekly Check", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "🛒 Product Page URL", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "🤖 Scrape Competitor Prices (..", pos: "b", h: 48 }
n5@{ icon: "mdi:message-outline", form: "rounded", label: "📧 Notify: Prices Logged in S..", pos: "b", h: 48 }
n6["<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/>🧹 Format Products for Google.."]
n7@{ icon: "mdi:database", form: "rounded", label: "📄 Save to Google Sheets (Com..", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Auto-fixing Output Parser", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n1 -.-> n4
n0 -.-> n4
n9 -.-> n8
n2 --> n3
n3 --> n4
n8 -.-> n4
n10 -.-> n8
n6 --> n7
n4 --> n6
n4 --> 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 n2 trigger
class n4,n8,n10 ai
class n0,n9 aiModel
class n7 database
class n6 code
classDef customIcon fill:none,stroke:none
class n6 customIcon
The Problem: Competitor pricing changes are easy to miss
Keeping up with competitor pricing sounds simple until you’re doing it across multiple products, regions, and “special offer” pages that change without warning. You open tabs, scan for differences, paste numbers into a spreadsheet, and hope you didn’t misread a monthly price as annual. Then someone asks, “When did they change this?” and you’re stuck digging through browser history or Slack messages. The real cost isn’t just the time. It’s the mental overhead, the uncertainty, and the bad decisions that come from incomplete snapshots.
It adds up fast. Here’s where it breaks down.
- Manual checks are inconsistent, so you spot changes late or not at all.
- Copy-pasting into a sheet invites small errors that turn into big pricing conversations.
- Teams argue over “current” numbers because there’s no trustworthy record of what the page said last week.
- Most scraping attempts get blocked, which means your monitoring quietly stops working.
The Solution: Weekly competitor price monitoring with Sheets + Gmail
This workflow runs on a weekly schedule in n8n and checks competitor pricing pages for you. It starts by assigning the product link (or set of links) you want to monitor, then uses a Bright Data-powered scraper to fetch the page in a way that’s less likely to get blocked. Next, an AI agent (using an OpenAI chat model) reads the messy real-world page content and extracts the pieces you actually care about, like plan names, current prices, and any promotional wording. The workflow then prepares clean rows and appends a fresh snapshot to Google Sheets. If the agent detects a meaningful change, it sends a Gmail alert so you see it without logging into yet another tool.
The workflow starts with a schedule trigger, so it runs automatically even when nobody remembers to check. Scraping and AI parsing happen in the middle to turn “whatever the page looks like today” into consistent data. Finally, Google Sheets becomes your running history and Gmail becomes your early-warning system.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you monitor 8 competitor pages across 2 product lines. Manually, you might spend about 10 minutes per page to load the site, confirm the plan, and paste the numbers into a sheet, which is roughly 80 minutes each week (and that’s on a “good” week). With this workflow, you spend about 10 minutes once to add the URLs and map your sheet columns, then the weekly run happens on its own. You only touch it again when Gmail flags a change worth reacting to.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for storing weekly pricing snapshots.
- Gmail to deliver change alerts to your inbox.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect accounts, paste in URLs, and adjust a couple of fields so the sheet matches your pricing format.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A weekly schedule kicks things off. n8n runs the workflow on a set cadence (weekly in this version), so competitor monitoring doesn’t rely on someone remembering.
The workflow assigns the pricing page(s) to check. A “set fields” step defines the competitor product link, and you can expand that idea into a list of URLs if you track multiple pages.
Scraping and AI turn a messy page into usable data. Bright Data fetches the page content, then the AI agent and structured parsers extract consistent fields like plan name, price, billing period, and promo text. If the output needs cleanup, the auto-fixing parser helps normalize it so your sheet stays tidy.
Google Sheets becomes the history, Gmail becomes the alert. The workflow prepares rows in code, appends a dated snapshot to Google Sheets, and sends a Gmail message when it detects a change that matters.
You can easily modify the URLs and the change rules to match how you track pricing (for example, alert only on the “Pro” plan). See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow starts on a weekly schedule to run the competitor scan automatically.
- Add the 📅 Weekly Schedule Trigger node.
- Set the schedule rule to run weekly on day 1 at hour 9 (as configured in the node’s Rule).
- Connect 📅 Weekly Schedule Trigger to 🛒 Assign Product Link.
Step 2: Connect the Product URL Source
Define the competitor category or product page URL that will be scraped each run.
- Add the 🛒 Assign Product Link node.
- In Assignments, set url to
https://www.nike.com/w/training-gym-clothing-58jtoz6ymx6. - Connect 🛒 Assign Product Link to 🤖 Competitor Scrape Agent.
Step 3: Set Up the AI Scrape and Parsing Stack
This step configures the AI agent, scraping tool, and output parsers that extract structured product data.
- Open 🤖 Competitor Scrape Agent and set Text to
=scrape all the details about every product from the following url: {{ $json.url }}. - Ensure AI Chat Engine is connected as the language model for 🤖 Competitor Scrape Agent. Credential Required: Connect your openAiApi credentials.
- Ensure MCP Scraper Client is connected as the AI tool for 🤖 Competitor Scrape Agent with Tool Name set to
scrape_as_markdownand Tool Parameters set to{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Tool_Parameters', ``, 'json') }}. Credential Required: Connect your mcpClientApi credentials. - Ensure Auto Repair Output Parser is attached as the output parser for 🤖 Competitor Scrape Agent, and Structured Parser B is attached to Auto Repair Output Parser.
- Open Structured Parser B and confirm JSON Schema Example matches your expected output structure (as provided in the node).
Step 4: Configure Output Processing and Parallel Actions
The scrape result branches in parallel to prepare rows for Google Sheets and send an email alert.
- Connect 🤖 Competitor Scrape Agent to both 🧹 Prepare Sheet Rows and 📧 Send Pricing Alert in parallel.
- In 🧹 Prepare Sheet Rows, keep the JavaScript Code that maps
items[0].json.outputinto rows withname,description,price, andurl. - In 📧 Send Pricing Alert, set Send To to
[YOUR_EMAIL], Subject toCompetitor product pricing has just logged into google sheets, and Message to the provided text. Credential Required: Connect your gmailOAuth2 credentials.
Step 5: Connect Google Sheets
Append the structured product data into your pricing sheet.
- Add the 📄 Append Pricing Sheet node and connect it after 🧹 Prepare Sheet Rows.
- Set Operation to
append. - Select Document with ID
[YOUR_ID]and Sheet Namegid=0(Sheet1). - Map the columns as follows: URL →
{{ $json.url }}, Name →{{ $json.name }}, Price →{{ $json.price }}, Description →{{ $json.description }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Step 6: Test and Activate Your Workflow
Run a manual test to confirm the scrape, sheet append, and email alert all complete successfully.
- Click Execute Workflow to run from 📅 Weekly Schedule Trigger or manually execute 🤖 Competitor Scrape Agent with test data.
- Confirm that 📄 Append Pricing Sheet adds new rows to your Google Sheet and that 📧 Send Pricing Alert emails
[YOUR_EMAIL]. - If the output parser returns errors, verify the schema in Structured Parser B and the language model in AI Chat Engine B. Credential Required: Connect your openAiApi credentials.
- Set the workflow to Active to enable weekly monitoring in production.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials tab and confirm the connected Google account still has edit access to the target spreadsheet.
- 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.
Frequently Asked Questions
About 30–60 minutes if your accounts and sheet are ready.
No. You’ll mostly connect tools and adjust a few fields. The only “technical” part is making sure the extracted columns match your Google Sheet headers.
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 OpenAI API usage and your Bright Data plan.
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.
Yes, and it’s a simple change. Swap the Weekly Schedule Trigger to a daily schedule, then tighten your alert condition so you don’t get spammed by tiny wording changes. Many teams also customize the AI agent prompt to extract only a few fields (like “Pro plan monthly price” and “promo text”) so the comparisons stay stable. If you track multiple competitors, you can also expand the Assign Product Link step into a list and loop through it.
Usually it’s expired Google credentials or the spreadsheet permissions changed. Reconnect the Google Sheets credential in n8n, then confirm the exact spreadsheet and tab still exist and your Google account can edit them. If it fails only sometimes, you may also be appending malformed rows, which is often caused by the AI output not matching the expected columns.
Dozens per run for most small teams, assuming your scraper plan can keep up.
Often, yes, because this workflow leans on scraping plus AI parsing and benefits from n8n’s flexibility. Zapier and Make can work, but multi-step logic, retries, and structured parsing tend to get clunky fast, and costs can jump once you run frequent checks across many URLs. With n8n, you can keep everything in one workflow, add branches for “big change” vs “small change,” and store a clean history in Sheets. The tradeoff is a bit more setup responsibility, especially if you self-host. If you’re torn, Talk to an automation expert and pick the simplest option that won’t break at scale.
Once this is running, competitor pricing stops being a weekly chore and becomes a quiet background system. You get the snapshots, the history, and the heads-up emails. Honestly, that peace of mind is the point.
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.