Watch competitor prices and alert Slack on changes

Every four hours, check each product URL in your sheet, compare to the last known price, and ping Slack when anything moves more than a few percent.

Deterministic Code
Google SheetsScrapingBeeSlackOperationsMarketingResearch & MonitoringNotifications & AlertsData Sync
PromptCreate

Build a code-based workflow that watches a Google Sheet of competitor product prices on a recurring schedule and alerts Slack when prices move.

Trigger: cron, every 4 hours.

Inputs the workflow needs: the Google Sheets spreadsheet id, the name of the watch list tab, the name of the history tab, the Slack channel id that should receive alerts, and a percent change threshold with a default of 5.

The watch list tab has one row per product with three columns: product URL, the CSS selector for the price element on that product's page, and the last known price as a number.

On every run, do the following in order:

1. Use Google Sheets Get Values to read every row of the watch list tab.

2. For each row, call ScrapingBee Extract Structured Data with CSS/XPath, passing the row's product URL and the row's CSS selector as a single extract rule, to fetch the current price text. Parse that text into a number by stripping currency symbols, thousands separators, and whitespace, and normalising the decimal mark. If the scrape fails or no numeric price can be parsed, skip that row entirely (do not update its last known price, do not log it).

3. Compute the percent change between the parsed new price and the row's last known price. If the absolute percent change is greater than or equal to the threshold, mark the row as crossed.

4. For every crossed row, use Google Sheets Append Values to append a row to the history tab with these columns: product URL, ISO 8601 timestamp of the run, old price, new price, and percent change (signed).

5. If at least one row crossed the threshold, use Slack Send a Message to post a single summary message to the configured channel. List each crossed product on its own line with the product URL, the old price, the new price, and the signed percent change. Use an up or down arrow to indicate direction. If no rows crossed, skip Slack entirely and post nothing.

6. For every row where the scrape succeeded and produced a numeric price (crossed or not), use Google Sheets Update Values to overwrite the last known price column on that row with the new price, so the next run compares against the most recent value.

Determinism matters: same inputs should produce the same writes. No LLM judgement calls. The CSS selector per row is what lets one workflow handle heterogeneous storefronts.

What does this prompt do?

  • Reads the list of competitor product URLs you keep in a Google Sheet and pulls the live price for each one, on a four hour schedule.
  • Compares the latest price to the last known price and flags anything that moved more than your chosen threshold (5 percent by default).
  • Posts one clean Slack message that lists every flagged product with the old price, the new price, and the percent change.
  • Writes a row to a separate history tab for every change so you build an audit trail you can chart later.
  • Stays silent on runs where nothing crossed the threshold, so the channel never fills with noise.

What do I need to use this?

  • A Google Sheet with one row per product. Three columns: the product URL, the CSS selector that points to the price element on that page, and the last known price.
  • A second tab in the same sheet to hold the change history.
  • A ScrapingBee account for the actual page fetch and price extraction.
  • A Slack workspace and the channel that should receive the alerts.

How can I customize it?

  • The alert threshold. Default is 5 percent; raise it for noisy categories or drop it to catch smaller moves.
  • How often the watcher runs. Every four hours by default; easy to make it hourly, twice a day, or once a week.
  • The Slack channel that receives the alerts.
  • Which tab holds the watch list and which tab holds the history, in case you want to keep them in separate sheets.

FAQs

How do I add or remove products from the watch list?
Just add or delete rows in the Google Sheet. The workflow re-reads the full list at the start of every run, so changes take effect on the next scheduled run with no redeploy.
What if I'm watching products on lots of different storefronts?
That's the whole point of the selector column. Each row has its own CSS selector for the price element, so you can mix Shopify stores, Amazon listings, and bespoke storefronts in the same sheet without writing a new workflow per site.
Will Slack get spammed if a lot of prices change at once?
No. Every flagged product is rolled into one summary message per run, and the workflow stays completely silent on runs where nothing crossed your threshold.
Why a Google Sheet instead of a database?
Most pricing and merchandising teams already live in spreadsheets. Adding a product is just pasting a URL and a selector, and the history tab gives you a free audit trail you can pivot or chart however you like.
What happens if a competitor changes their page and the selector breaks?
The scrape returns no value for that row, the workflow skips it without overwriting the last known price, and you fix the selector in the sheet. The next run picks up the change automatically.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.

AbuseIPDB
Gmail
Slack
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task
Turn each week's football fixtures into a venue staffing plan

Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.

API-Sports
Google Calendar
Slack
Agentic Task

Stop refreshing competitor pricing pages by hand.

Connect Google Sheets, ScrapingBee, and Slack once, and Geni checks every product in your sheet four times a day.