neesh Inc.
Scenarios

Your competitor changed their pricing. You found out three days later.

Every morning, Alex Nguyen, Ridgeline Outdoor Co.'s buying manager, opened the same four bookmarks, checked the same competitor pages, and updated the same spreadsheet. Then a competitor ran a 3-day flash sale on expedition packs that pulled 30% of Ridgeline's weekly organic search traffic. The spreadsheet said: no changes. PriceWatch monitors those pages every day, filters the noise automatically, and delivers a plain-language briefing, so the next time something matters, you find out in hours, not days.

COMPOSITE_DEPLOYMENTS Composite scenarios: fictional companies, built on our platform, with outcomes stated as design targets.

BUILT_ON WatchBase · in build

Python FastAPI PostgreSQL + pgvector Claude Haiku Claude Sonnet HuggingFace Transformers Playwright AWS ECS Fargate
4 days pre-warning on Black Friday pricing competitor move detected Tue 18 Mar; Ridgeline adjusted by Thu
< 2 hrs first competitive response time design target; down from 3 days, or missing the window entirely
45 min saved per day eliminating the morning manual check across 4 competitor sites
$0.04 AI cost for the week that caught it design target; 50 changes detected, 3 significant enough to narrate, 47 filtered by the local model

What Manual Monitoring Actually Costs

Ridgeline Outdoor Co. had been monitoring competitors the same way since 2019: a bookmark folder, a morning routine, and a shared spreadsheet. It worked, until it stopped working in the worst possible way.

The Buying Manager

  • Four competitor sites. Same four bookmarks, every morning. 45 minutes before the real work starts, and that assumes nothing changed overnight. If something did change, the real work is reconstructing when.
  • TrailHaven's sale started Tuesday at 6am. Alex checked at 9am Thursday. The spreadsheet showed no changes Wednesday, but the check was a visual scan, not a system. Alex missed the update on Wednesday entirely.
  • By Thursday, TrailHaven's sale was in its third day. Ridgeline had already lost the traffic window. The retrospective showed the sale ran from Tuesday to Thursday. The entry in the spreadsheet said: "prices similar to last week."
  • The question that followed the retrospective: what else did we miss that we just never found out about?

The Founder

  • This is a 4-person team. 45 minutes per day of manual monitoring is 10% of one person's working week. On a task that produces uncertain results on good days and wrong results on bad ones.
  • We didn't lose the sale because we didn't have the information. We lost the sale because the information arrived too late to act on. That's a different problem, and a solvable one.
  • The next Black Friday is in eight months. I'd rather know what's happening with our competitors' pricing four days before it matters than four days after.
  • The question was never whether to monitor. It was whether to do it manually.

Four Stages From Pages to Intelligence

Most of the monitoring process is free. Playwright scrapes pages at zero marginal cost. The diff engine compares snapshots locally. HuggingFace ML scores significance on the same machine. The narration model only fires when a change scores 0.40 or more, a default set so that about one change in ten goes further, and each weekly briefing adds one short summary call. The infrastructure costs more than the intelligence.

The PriceWatch Pipeline

1

Scrape

Playwright headless browser visits each target page on its configured schedule, from every 15 minutes to weekly. The scraper strips navigation, headers, footers, sidebars, ads and cookie banners to keep the page's own content. The result is a clean text snapshot stored alongside a SHA-256 hash for fast change detection.

2

Diff

Each new snapshot is compared against the previous one using difflib line-by-line comparison. The diff engine extracts additions, removals, and modifications with their structural context: what changed, where it appeared on the page, and how much of the page was affected.

3

Score

One local HuggingFace model, a DeBERTa zero-shot classifier, scores each detected change on four weighted factors: its category (40%), the target's keywords (25%), the sentiment of the added text (20%) and the size of the diff (15%), plus a small bonus when a price, sale or stock element changed. A change scoring below the 0.40 default is stored and goes no further. No API call is made. No cost is incurred.

4

Narrate

A change scoring 0.40 or above is first matched against past narrations in a pgvector semantic cache; a close match is reused without a model call. Otherwise it reaches Claude (Haiku, or Sonnet for a change scoring 0.70 or more) with a narrow prompt: the page, its category, the score, the added and removed text and the structural changes. The model returns a short account of what changed and why it matters, an urgency and, when one is warranted, a recommended action, and the narration is stored in the cache.

Your Weekly Intelligence Briefing

PRICEWATCH Weekly Intelligence Briefing
Ridgeline Outdoor Co. · Mar 17–24, 2025
8 targets monitored · 3 significant · 47 filtered · $0.04 AI cost
HIGH PRICING TrailHaven trailhaven.com
Detected Tue 18 Mar, 2:41 AM

"Expedition pack pricing dropped 15% across 6 SKUs, with new "limited time" callouts added to 4 product pages. Pattern is consistent with pre-event promotional positioning. Based on last year's cadence, the window is likely 2–3 weeks."

Match pricing on hero SKUs before Thursday
MED PRODUCT GearDepot geardepot.com
Detected Wed 19 Mar, 11:08 AM

"New "Winter Ascent" category page added with placeholder content and no inventory yet visible. Structural indicators suggest launch preparation: category added to nav, breadcrumbs live, no product listings."

Monitor weekly: watch for SKU additions
MED HIRING Summit Supply summitsupply.com
Detected Thu 20 Mar, 7:22 PM

"3 new engineering roles posted, all platform-focused. No product page changes detected this week. Hiring activity suggests internal tooling investment rather than customer-facing product development."

No action required cached

The weekly briefing that reached Slack on Monday. The pricing change itself went out the moment it was detected, on Tuesday.

The narration prompt is deliberately narrow

The LLM receives the change and its context: the page it came from, the page category, the significance score, the added and removed text and the structural changes. It is asked for a short plain-language account of what changed and why it matters, an urgency, and a concrete action only when one is warranted. It is not asked to be comprehensive or helpful in a general sense. A narrow prompt on ML-filtered input produces consistently useful output. A general prompt on unfiltered input produces noise, regardless of model quality. The first version of the narration prompt asked for a full summary of the page. Half the output was descriptions of copyright year changes and footer updates. The ML filter and the narrow prompt are both required. Either one without the other produces a product you stop reading.

The System

The pipeline has four stages. Three of them are free. The ML significance gate is the product, not the narration.

Only a change that scores 0.40 or more reaches a paid model A model running on the monitoring server scores every page change. Below the 0.40 default the change is logged and no paid model is called; at 0.40 or more a close match from past narrations is reused, or Claude writes a new one, and the change is delivered. Page change Playwright anddifflib Scorer local model Log no paid call Cache past narrations Claude Haiku or Sonnet Delivery by significance logs below 0.40reuses a matchsends thediffpasses 0.40and upsends a missnarrates
Only a change that scores 0.40 or more reaches a paid model A model running on the monitoring server scores every page change. Below the 0.40 default the change is logged and no paid model is called; at 0.40 or more a close match from past narrations is reused, or Claude writes a new one, and the change is delivered. Page change Playwright anddifflib Scorer local model Log no paid call Cache pastnarrations Claude Haiku orSonnet Delivery bysignificance logsbelow0.40reuses a matchsends the diffpasses 0.40and upsends a missnarrates

The local model decides what is worth a paid call. The 0.40 threshold is a default each organization can change.

Four Decisions That Define the Signal

A monitoring tool that fires on everything is a tool you stop reading. These four decisions are the difference between a weekly briefing you act on and a daily digest you unsubscribe from.

Local ML before the LLM

One HuggingFace model runs on the same worker as the scraper: no API call, no per-change cost. It classifies every detected change, and the sentiment of what was added, before anything external is contacted. The default threshold is set so that about one change in ten goes further; the rest stop inside the deployment. Infrastructure costs more than intelligence, and that is by design.

The threshold is a risk policy, not a tuning knob

Ridgeline uses a significance threshold of 0.4, balanced for eCommerce competitor monitoring. A legal firm monitoring regulatory pages would configure 0.25: catch everything borderline. A retailer monitoring competitor blogs might use 0.55: only fire on clear signals. The threshold belongs to the deployment, not the product. Treating it as a fixed parameter would make the same platform useless for half its use cases.

The cache pays once for a repeated change

After a change is narrated, its embedding is stored in pgvector for that organization. When a later change that clears the threshold matches one already narrated (the same competitor running the same annual promotion), the stored narration is reused without a model call. The design target for this scenario is a 58% hit rate at 90 days. The platform gets cheaper as it accumulates history. That is the inverse of most software operating cost curves.

PriceWatch hands off by webhook

A signed outgoing webhook fires on every high-significance change, to whichever endpoint you subscribe, such as a workflow tool or a script of your own. PriceWatch detects the signal, and whatever receives the webhook runs the response. Neither side needs to know anything about the other's internals, because the webhook is the contract.

What We Learned

Lessons Learned

The demo is the sales call

PriceWatch doesn't need a slide deck. It needs one week and a prospect's three competitor URLs. The briefing (on real data, about their actual competitors) closes faster than any narrative. This is the only product in the portfolio where the first deliverable to a prospect is the pitch itself. Every other product has to explain what it does. PriceWatch shows you what your competitors did last Tuesday.

Noise filtering matters more than narration quality

The first version narrated every detected change. 47 changes a week became noise. After two weeks, the buying manager stopped opening the daily digest. The product had not failed technically: the narrations were accurate. It had failed as a communication product. The ML filter is not an optimisation. It is what makes the briefing trustworthy. A perfect narration of a copyright year update is worthless. A good narration of a pricing move, four days before Black Friday, is worth 45 minutes a day and then some.

Cost visibility is a trust feature

Showing '$0.04 AI cost this week' in the briefing footer is not a technical decision. It is a trust decision. Anyone carrying cloud cost anxiety needs to see the number. '$0.04 versus 45 minutes every morning' is the ROI argument made self-evident, without a slide or a spreadsheet. The number should never be hidden. It is one of the most persuasive things in the briefing.

What I'd Improve

  • Screenshot comparison alongside text diff: detect layout changes and visual promotions that plain text extraction misses
  • Multi-page correlation: detect when multiple competitors change simultaneously, signalling a market-wide shift rather than an isolated move
  • Authenticated page monitoring: extend coverage to behind-login competitor pages for clients with legitimate access

The Signal, Then the Response

PriceWatch is one configuration of WatchBase, the engine that watches what changes outside the firm. The detect-and-deliver pattern works the same way when the trigger is a regulatory page change, a competitor's new job listings, or a brand mention on a third-party site. A high-significance change goes straight to Slack, email, the app and a signed webhook to any endpoint you subscribe; a medium one waits in the app. The response starts in the tools your team already runs.

The more a change matters, the more places it reaches A change that scores 0.70 or more goes to Slack, email, the signed webhook and the app at once, even in quiet hours. A change that scores 0.40 to 0.69 goes to the app only. Scoredchange Dispatcher default bands Every channel Slack, email,signed webhook,app App only filesenterssends atonce
The more a change matters, the more places it reaches A change that scores 0.70 or more goes to Slack, email, the signed webhook and the app at once, even in quiet hours. A change that scores 0.40 to 0.69 goes to the app only. Scored change Dispatcher default bands Every channel Slack, email,signed webhook,app App only filesenterssends atonce

PriceWatch detects the signal and delivers it by significance. A high change goes out even in quiet hours.

Book a call and we'll scope a first briefing on your competitors.

Book Free Assessment