Weekday competitor price and promo watch with Airtop

By General Input

Every weekday at 8am, check each competitor's product page in a real browser, log every reading to Google Sheets, and Slack the team only when a price, promo, or stock status actually moves.

Integrations

  • Airtop
  • Google Sheets
  • Slack

Type

Agentic Task

Categories

  • Marketing

Every weekday at 8am, watch competitor pricing and promotions using an Airtop cloud browser and post one consolidated Slack alert only when something material actually changes.

Trigger: cron, every weekday (Monday to Friday) at 8am.

Step 1 — read the tracked list. Use Google Sheets Get Values on the Competitors tab. Each row has three columns: competitor name, product-page URL, and expected price. Skip the header row.

Step 2 — read the recent history. Use Google Sheets Get Values on the Price History tab and keep the last recorded reading per competitor in memory (competitor name, price, promo banner, stock status, timestamp). This is what today's readings will be diffed against.

Step 3 — capture today's readings with Airtop. Create one Airtop session with Create Session, then for each row in the Competitors list: use Create Window with the competitor's product-page URL, then run Query Page against that window with a structured output schema of shape { currentPrice: number|null, currency: string|null, promoBannerText: string|null, stockStatus: 'in_stock'|'low_stock'|'out_of_stock'|'unknown' }. Wait for the page to fully render before querying. Close the window when done. Terminate the session at the end of the run so credits don't keep burning.

Step 4 — log every reading. For each competitor, use Google Sheets Append Values to add one row to the Price History tab with columns: timestamp (ISO 8601, UTC), competitor name, product URL, current price, currency, promo banner text (empty string if none), stock status, and a short 'notes' column (leave empty unless the page failed to load or the price could not be read). Append every reading, even when nothing changed — the tab is the audit trail.

Step 5 — reason across the batch to decide whether to alert. For each competitor, compare today's reading to the last previously recorded reading in Price History. Flag a competitor as material if any of the following is true:

  • the current price is more than 5% below the last recorded price for that competitor,

  • a promo banner appeared that was not present in the last reading (banner text went from empty to non-empty, or the text substantively changed),

  • stock status flipped to out_of_stock on a competitor whose row in the Competitors tab is a headline SKU.

Step 6 — post the consolidated Slack alert. If at least one competitor is material, use Slack Send a Message to #competitive-intel with a single message that includes one bullet per flagged competitor. Each bullet should say what changed in plain language (old value → new value or 'new promo: <banner text>' or 'out of stock'), and include the product-page URL as the source. If a reading failed to load, mention it briefly at the bottom of the same message so someone can fix the tracked URL. If nothing is material, do not post anything — stay silent on quiet days.

Business rules and nuance:

  • Only ever post one Slack message per run, never one per competitor.

  • When a competitor has no prior reading in Price History (first run), append the reading but do not treat it as a change.

  • Normalize prices to a number before comparing (strip currency symbols, commas, thousands separators). If the currency changed between readings, note it and skip the % comparison.

  • Treat any Query Page result with meta.status of 'failure' as a failed reading — log with a notes value and do not compare.

  • Always terminate the Airtop session at the end so it doesn't keep billing.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageWin back LiveChat visitors whose chats went unansweredLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardChat quality review board for LiveChat support leadsLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seats