Built a tool that monitors SaaS pricing pages for meaningful changes.
Here's the technical problem nobody talks about:
Generic diffing is useless.
Pixel diff: false alarm every time a banner rotates.
HTML diff: breaks on dynamic classes.
Text diff: timestamps and cookie notices trigger constantly.
What actually worked:
Only alert on the first three.
Still unsolved: structural reorganization. When a competitor moves a feature to a different plan section without changing the text, line diff misses it entirely.
Thinking about extracting structured data (plan → price → features[]) and diffing the schema instead of raw text.
Has anyone solved this kind of semantic diff problem before? Curious what approach you'd take.
Stack: Playwright + Next.js + Supabase + node-cron if anyone's curious about specifics.
Alarming-Match-7464 discusses the challenges of creating a tool to monitor SaaS pricing pages for meaningful changes. They highlight the limitations of generic diffing methods and share a solution using text extraction and normalization. However, structural reorganizations remain a challenge. They seek advice on solving semantic diff problems and invite others to test their tool.
Built this to scratch my own itch, lost a deal because I missed a competitor's price drop and found out during the call.
If anyone wants to test it on a real pricing page: https://priceblind.vercel.app/
Free, no account needed. Curious if the detection holds up on pages you throw at it.
I went through this same thing and the “what actually changed” part hurt way more than the scraper. Text-only + normalization got me 80% too, but structural moves were the silent killers. What helped was treating each plan as an object with invariants instead of lines: anchor on stable cues like exact plan name, closest recurring price pattern, and a few “signature” features, then cluster those together every run. If a feature’s cluster jumps plans, I tag it as an upgrade/downgrade even if the text is identical.
I also kept a small manual mapping layer for edge cases where regex kept screwing up. ChartMogul and Baremetrics alerts gave me downstream revenue signals, and I ended up on Pulse for Reddit after trying F5Bot and Brand24 just to catch when users complained about “surprise” pricing changes that slipped past my rules and tune the detectors around those cases.