Competitor Price Monitoring Bot That Runs Every Morning
An online electronics retailer was spending 2 hours every morning manually checking competitor prices across 250 SKUs. We built an n8n pipeline that scrapes, compares, and delivers a Slack digest before the trading day starts — and found 12% of their margin sitting on the table.
The problem
James runs a five-person online electronics shop. Every morning, someone on his team would open a spreadsheet, manually visit four competitor websites, find matching products, and log the prices. It took about two hours. On the days they skipped it — bank holidays, busy periods — they were flying blind.
Twice in six months they'd missed a competitor running a weekend flash sale and watched conversion drop without understanding why until Monday morning. By then it was too late.
Proper repricing tools exist, but they're built for Amazon and priced accordingly. James didn't need dynamic repricing. He needed visibility — fast enough to act on it.
What we built
A fully automated price monitoring pipeline on n8n. Here's the flow:
The scraper hits four competitor sites at 6 AM using plain HTTP requests and CSS selectors — no headless browser needed since prices are server-rendered. Each scraped price is matched against a Google Sheet mapping table (competitor URL → James's SKU) and compared with live Shopify prices via the Admin API.
Items where a competitor is more than 3% cheaper get flagged as exposure. Items where James is cheaper than all competitors get tagged as potential margin upside. Everything logs to a rolling Google Sheet — one row per SKU per day — giving him a 90-day price history he'd never had before.
The Slack message lands at 6:30 AM. On quiet days it's two lines. On the day a competitor ran a 15% category flash sale at 7 PM, the midnight re-run caught it and the team matched prices before Friday opened.
The edge cases
A few things that aren't obvious until you're building it:
- Out-of-stock items — when a competitor hides price on OOS products, we treat it as "unknown" not zero, so it doesn't corrupt the comparison.
- Bundled pricing — one competitor lists some items in multi-packs. The mapping table includes a unit-price multiplier so comparisons stay apples-to-apples.
- Site redesigns — we checksum the scraped HTML structure. If it changes significantly, n8n sends an alert before the next run instead of returning garbage data silently.
- Rate limiting — randomised 2–6 second delay between requests, rotating user-agent. Polite, not aggressive.
The result
The margin finding was the real surprise. By surfacing SKUs where James was cheaper than all four competitors — often by 10–20% — he raised prices on 42 products in the first three weeks. Conversion didn't move. Revenue did.
"I'd been leaving money on the table for two years without knowing it," he told us. "The bot paid for itself in week one."
The build
We scoped this under our single-flow Starter tier. The build took about two and a half days: scraper and Shopify integration on day one, comparison logic and Sheets logging on day two, Slack output tuning and edge-case testing on day three.
James got the full n8n workflow JSON, the Google Sheets mapping template, and a short doc for adding new competitors or updating SKU mappings himself. No ongoing dependency on us.
Running an e-commerce store and still doing price research manually? Let's talk.
[ let's talk ]