Daily competitor watch: 47 pages, alerts only on real moves by Sabin MainaliDaily competitor watch: 47 pages, alerts only on real moves by Sabin Mainali

Daily competitor watch: 47 pages, alerts only on real moves

Sabin Mainali

Sabin Mainali

Competitor Watch is an internal tool I built for Calilio, a B2B SaaS phone system. Every morning at 9:00 Nepal time it checks 47 pages across 10 competitors and Calilio's own site. It posts to Slack only when something material moves: a price, a plan, a new AI feature, a new country or major news. It runs for free, with no server. The work was AI-assisted with Claude Code and human-checked.

What was the problem?

Calilio competes with 10 business phone systems, including Aircall, Dialpad, JustCall and RingCentral. Their homepages, pricing pages, changelogs and blogs change all the time, and most of those changes do not matter. The person reading the brief at 9:00 wants one answer: did a competitor do something we should react to?

What did I build?

A Python script that runs on GitHub Actions every morning:
A free external scheduler starts the run at 9:00 Nepal time. Only one report goes out per day.
It fetches the 47 watched pages. For each competitor that means the homepage, pricing, integrations and blog, plus the changelog for the 4 that publish one. It also watches Calilio's own homepage, pricing, What's New and blog.
It strips the noise first: cookie banners, "5 min read" labels, clock times and copyright lines. On pricing pages it also recovers prices that only load through JavaScript.
It compares each page with the saved copy, line by line. Lines that only moved around do not count as a change.
Google Gemini, with Groq as a backup, reads each real change and returns a verdict: is it material, how severe is it, what changed, what it means for Calilio and one action.
The brief lands in Slack. Each alert has three parts: what changed, the impact on Calilio and what to do next. A quiet day is a single line.
The 47 pages it watches: 10 competitors plus Calilio's own site.

How did I check the output?

A changed line must still be there 12 hours later before it can become an alert. A rotating testimonial or an A/B price test flips back and is dropped.
The same alert is never repeated within 14 days.
Dialpad's pricing page is not watched. It shows two different price sets at random, and no scraper can tell a real change from that test.
The AI writes the sentence, but code checks it. A figure that is not in the page change is flagged. A price claim must match the direction the price really moved. A low-confidence alert can never show as high severity.
If prices could not be read reliably, the change goes to a "Worth a human eye" note instead of an alert.
11 of the 47 pages are blog indexes. New posts go into a weekly round-up, so they do not bury a pricing move.
An offline self-test runs before every run.

What was the result?

It has run since 13 July 2026. The bot saved a completed run on 73 of the 74 days up to 24 September 2026. The one gap, 7 September, is the Slack bug described below.
It runs on free tiers only: a free scheduler, GitHub Actions and free-tier AI. One run takes about 2 minutes.
A real fix, before and after: up to 18 August the 12-hour rule was tied to the whole page, and only 2 alerts reached Slack in 14 days. I gave each line its own clock, so a busy blog no longer hides a real price change.
A second fix: on 7 and 8 September every run checked all 47 pages with 0 fetch failures, but the weekly round-up held 84 new posts from 10 sites. That was over Slack's 3,000-character limit, so Slack rejected the whole brief. I split the round-up into parts, so a busy week can no longer silence the report.

What would this look like for your business?

Pick the competitors and the pages you care about. I build a watch that checks them on a schedule, filters the noise and sends a short brief to Slack or email when something real changes. This one is written in Python. For clients I build it in n8n or Python, whichever your team can maintain. It fits my "AI workflow automation with n8n" service, $450 on Contra: a short call to map the process, one workflow built, tested and documented, a written handover guide and 7 days of fixes.
Like this project

Posted Sep 15, 2026

Internal tool for Calilio. Checks 47 pages of 10 competitors every morning and posts to Slack only when a price, plan or feature really changes. Free to run.