You note a rival's prices and offers once. The note is out of date the next time they run a sale or launch a range. The website monitor repeats the same read on a cadence you set and compares each run with the last good one. You see what changed.
It reads three things. Pages: each rival's sitemap, found through the Sitemap lines in robots.txt and the usual sitemap addresses, including nested sitemap indexes. Prices: the schema.org Product and Offer data on the homepage and on a handful of product pages picked from the sitemap in a stable order, so the same pages are compared each time. Offers: promotional language on the homepage, with guards against the obvious false positives, so that "free quote" is not counted as a promotion and a banner repeated three times counts once.
It does not report what it did not see. Every run records which areas it actually reached for each rival. A page only counts as removed if this run read that rival's sitemap in full; a price only counts as changed if the product page was readable both times. When a read is incomplete the change is marked "not checked" with the reason, instead of being reported as a launch or a withdrawal that never happened.
This loop is in build. The engine, the comparison and the internal interface are written and tested on a development branch, but the database tables it needs are not applied in production and the scheduled job is switched off. Nothing on this page runs for a customer today, and it is not on sale.