Weekday competitor pricing watcher with Browserbase and Slack

Every weekday at 8am ET, load each competitor's pricing page with a real browser, log the price to Google Sheets, and ping Slack only when something actually moved.

Deterministic Code
BrowserbaseGoogle SheetsSlackMarketingOperationsResearch & MonitoringNotifications & AlertsData Sync

Build a code workflow that runs every weekday at 8am America/New_York and watches a configurable list of competitor pricing page URLs. The list of URLs (with a friendly competitor name and an optional product/tier label per row) should be a workflow input, or read from a small config tab in the same Google Sheet used for logging.

For each URL, run the following deterministic per-URL flow in parallel where possible:

1. Browserbase Create Session to provision a fresh headless browser session and get its connect URL.

2. Drive that session with Stagehand or Playwright over the connect URL. Navigate to the competitor URL, wait for the pricing content to render, then extract the current sticker price as a number, the plan or tier name, any "starting at" or "from" copy near it, and the effective currency. Capture a screenshot of the rendered page and keep its public URL.

3. Browserbase Release Session immediately after extraction so the session does not sit idle.

Before writing the new row, use Google Sheets Get Values to read the most recent prior snapshot for that competitor and product from the Pricing Log tab (or a separate Latest Snapshot tab), so you can compute the absolute and percent change.

Then use Google Sheets Append Values to write one row per competitor per run to the Pricing Log tab with these columns: timestamp (ISO), competitor name, product or tier, URL, price (numeric), currency, raw starting-at copy, screenshot URL, previous price, absolute change, percent change. Both raw and percent change columns must be present so the sheet doubles as a pricing dashboard.

For every row whose absolute percent change exceeds a configurable threshold (default plus or minus 3 percent), use Slack Send a Message to post an alert to a configurable channel that names the competitor and product, shows the old price, the new price, and the percent change, and includes both the screenshot URL and a link to the source pricing page. Suppress the alert when the change is below the threshold or when there is no prior snapshot (the first run for a new URL only logs a baseline).

Keep the Browserbase step deterministic: one session per URL, fixed Stagehand instructions or Playwright selectors per competitor, always capture the screenshot, always release the session. Handle per-URL failures gracefully so one broken page never blocks the rest of the run, and log a clear row in the sheet (or a separate Errors tab) when a URL fails so the team can fix it.

Additional information

What does this prompt do?
  • Loads each competitor pricing page in a real headless browser so JavaScript-rendered prices and A/B-tested tiers show up correctly.
  • Appends a timestamped row per competitor to Google Sheets on every run, so the sheet doubles as a clean historical pricing dashboard.
  • Compares the new price to the last recorded snapshot and only fires a Slack alert when the change crosses your threshold.
  • Sends a Slack message with the old price, new price, percent change, a screenshot of the page, and a link back to the source.
What do I need to use this?
  • A Browserbase account (the free tier is enough to get started).
  • A Google account with edit access to the sheet you want to log into.
  • A Slack workspace and the channel you want alerts posted in.
  • A list of competitor pricing page URLs you want to track.
How can I customize it?
  • Change the schedule. Default is every weekday at 8am ET, but any cron pattern works.
  • Set the alert threshold. Default is plus or minus 3 percent. Tighten it for noisy markets, loosen it for stable ones.
  • Pick the Slack channel and tweak the alert wording to fit your team.
  • Add or remove competitor URLs in one place without editing the rest of the workflow.

Frequently asked questions

Why does this use a real browser instead of a simple web request?
Most modern SaaS pricing pages are rendered by JavaScript, sit behind bot detection, or serve different content to different visitors through A/B tests. A real headless browser loads the page the way a customer would, so the price you capture matches what people actually see.
Will the Google Sheet keep growing forever?
Yes, by design. The sheet doubles as a historical pricing dashboard, so you can chart how each competitor's prices have moved over weeks and months. Archive older rows whenever you want to keep it tidy.
How do I add a new competitor to the watch list?
Add a row with the product URL to the input list. The next run will pick it up, log a baseline price, and start alerting on changes from that point on.
What happens if one pricing page is down or changes its layout?
The run for that one URL fails cleanly without breaking the others, and you can see the error in the run history so you know which competitor to look at.
How do I change which Slack channel gets the alerts?
Edit the channel in the Slack step once and every future run will post there. You can also route different competitors to different channels if you want.

Stop refreshing your competitors' pricing pages.

Connect Browserbase, Google Sheets, and Slack once, and Geni runs the pricing watch every weekday at 8am for you.