Competitor Price Watch: know within the hour when a rival changes a price
An n8n workflow that checks a list of competitor product pages on a schedule, extracts the current price with Claude (so layout changes don't break it), compares against the last known price in Google Sheets, and pings your Telegram the moment something moves.
- 1
Keep the watchlist in a sheet
Create a Google Sheet with columns
url,label,last_price. Add aSchedule Trigger(every 6 hours) and aGoogle Sheetsnode that reads all rows. Adding a competitor product later = adding one row, no workflow edits. - 2
Fetch each product page
Add an
HTTP Requestnode that GETs each URL with a normal browser User-Agent header, followed by anHTMLnode (operation: extract text) to strip the markup down to readable text. Add a small randomWaitbetween requests to stay polite. - 3
Ask Claude for the price
An
HTTP Requestnode to the Claude API: 'Here is the text of a product page. Return JSON {price: number, currency: string} for the main product's current price. If there is a sale price and an original price, return the sale price.' This one prompt works across wildly different store layouts. - 4
Compare and alert on change
A
Codenode compares the extracted price withlast_pricefrom the sheet. If it differs by more than 1% (guards against currency-rounding noise), anIFbranch fires aTelegrammessage —⚠️ Rival dropped Phone Case X: $24.99 → $19.99 (−20%)— and aGoogle Sheetsupdate writes the new price back so the next run has fresh state.
Frequently asked questions
Why use Claude to read the price instead of CSS selectors?
Selectors break every time a competitor redesigns their product page — and you find out weeks later when your data is silently stale. Claude reads the rendered text and finds 'the price of the main product' the way a human would, which survives redesigns. It costs a fraction of a cent per page check.
Is scraping competitor prices allowed?
Reading publicly visible prices is generally lawful in most jurisdictions (you're doing what any visitor does), but always check the site's terms and keep your polling gentle — this recipe defaults to every 6 hours per page, which is far below anything that would burden a server. Don't hammer, don't bypass logins or paywalls.
How many products can I track?
The list lives in a Google Sheet — one row per URL. Fifty products checked 4x a day is 200 light requests and about $0.20/day in Claude calls. If you need hundreds of SKUs across marketplaces, switch the fetch step to an Apify actor built for that store.