← Browser Extensions
Browser Extensions 2026-09-21

Shrinkwatch

Same price, smaller box? You'll know, because your browser remembers what you saw last time.

Shrinkwatch
Prototype

ShrinkWatch

Same price, smaller box? You'll know, because your browser remembers what you saw last time.

Date: 2026-09-21 Form factor: Browser extension (Manifest V3) Browser surface: content script, toolbar popup, chrome.storage.local Status: Prototype

What it is

ShrinkWatch sits quietly on Amazon product pages and reads the price and package size every time you visit one. If you come back later and the box is smaller but the price didn't move, it says so, right on the page, with the unit price spelled out. No account, no upload, no guessing whether the cereal box really did get thinner.

Why it has to be an extension

A website can only ever show you what's on the page right now. It has no memory of what you looked at three weeks ago on a different visit, in a different tab, with no login involved. ShrinkWatch's whole premise depends on comparing today's package against a snapshot it saved locally the last time you were on that exact product page — that snapshot lives in chrome.storage.local, tied to your browser, not to Amazon's account system or anyone's server.

Who it serves

Shoppers who buy the same brands on repeat and have started doing the mental math themselves: is this box actually smaller than last month, or does it just feel that way? A 2026 Capgemini Research Institute survey found 64% of consumers call shrinkflation "unfair" or "very unfair," and a UMass Amherst analysis of packaged food sizes found average reductions of 14.6% across the products it tracked. People are already suspicious. ShrinkWatch just gives them the receipt.

Why it could be profitable

Free tier: track up to 8 products locally, no account required. Paid tier: unlimited tracking plus cross-device sync, so a size change you catch on your laptop shows up when you're back on your phone — that sync layer needs a real backend, which this prototype stubs out rather than builds. A subscription in the $2–4/month range is plausible if retention holds, though that's the part I can't verify from a prototype: shrinkflation anger is well documented, but whether people pay monthly for a tool that mostly confirms a suspicion they already had is a real open question, not a given. The honest comparison is to browser price-history tools like Camelizer and Keepa, which monetize a similar "I want to know if this changed since I last looked" itch and have stayed around for years.

How to load it in Chrome

  1. Open chrome://extensions and turn on Developer mode.
  2. Click Load unpacked and select this folder's extension/ directory.
  3. Visit any Amazon.com product page. The badge appears under the price on the first visit (just the unit price) and flags a shrink only once ShrinkWatch has a prior visit to compare against.

How to try the demo

  1. Open index.html in any modern browser. It loads sample-data.json over fetch, so serve the folder locally (e.g. python3 -m http.server) rather than opening it as a bare file:// path, since some browsers block fetch on file://.
  2. Click the ShrinkWatch button in the mock toolbar to open the popup.

The mock page simulates a return visit to a cereal box that shrank from 16 oz to 14 oz at the same price — the badge and popup both reflect that comparison. On the real extension, content.js does this comparison live against your actual browsing history; here, script.js recreates just that one comparison from the sample data, since there's no real page to read.

Permissions, and why each one

Permission Why it's needed
storage Saves each tracked product's price/size history locally so the next visit has something to compare against.
activeTab Lets the popup identify the tab you're on and ask its content script for that page's current reading.

What's in this prototype

  • A content script that parses title, price, and package size on Amazon product pages and computes a normalized unit price.
  • Local, per-ASIN history (up to 6 snapshots) stored in chrome.storage.local, with shrink detection based on quantity down / price flat-or-up.
  • An on-page badge showing the unit price, and the shrink comparison when one applies.
  • A popup with an "on this page" card and a scrollable list of everything tracked, including a free-tier cap at 8 products with an upgrade prompt.
  • A demo harness with 12 sample tracked products covering shrinks, plain price increases, and untouched products, so the popup has something to show beyond the live page.

Roadmap

  • Extend content-script matching to Walmart, Target, and Kroger product pages.
  • Add a manual "compare this size against the one I'm looking at" mode for products Amazon lists under different ASINs per pack size.
  • Build the cross-device sync backend the paid tier depends on.
  • Let users export their tracked history as CSV.
  • Surface a "better unit price nearby" suggestion when a tracked product's shrink pushes it above a same-aisle alternative.

Sources

Requirements

ShrinkWatch — Requirements

Goals

  • Detect when a product's package size drops between two visits to the same Amazon product page, without the price dropping to match.
  • Compute and display a normalized unit price ($/oz, $/ct, $/fl oz, etc.) on every visit, not just when a shrink is detected.
  • Keep a local, per-browser history of tracked products so the comparison works without an account or a server.
  • Give the user a single popup view of what changed on the page they're on, plus everything else they've tracked.

Primary user

A price-conscious grocery and household-goods shopper who buys the same handful of brands repeatedly on Amazon and suspects, correctly or not, that package sizes have quietly shrunk. They don't want to screenshot receipts or keep a spreadsheet; they want the browser to remember for them.

Functional requirements

  • FR1: The content script parses product title, price, and package size from the DOM on amazon.com product pages.
  • FR2: The content script extracts a quantity and unit from the title or detail bullets using a size-pattern match (oz, fl oz, lb, ct, g, kg, ml, l).
  • FR3: The extension computes unit price as price divided by quantity and rounds to four decimal places for storage, two for display.
  • FR4: On each visit, the extension looks up the product's ASIN in local storage and compares the new quantity and price against the last stored record for that ASIN.
  • FR5: A product is flagged as shrinkflation when quantity has decreased and price has stayed flat or increased, for the same unit.
  • FR6: The extension injects a badge on the page showing the current unit price and, when applicable, the shrink and price-change percentages.
  • FR7: The popup shows an "on this page" card for the active tab, built by messaging the content script.
  • FR8: The popup shows a scrollable list of every tracked product with its current unit price and a shrink flag where applicable.
  • FR9: Local storage caps history at the six most recent size/price snapshots per product.
  • FR10: The free tier caps active tracking at 8 distinct products; once at the cap, new products display a live unit price but are not added to the tracked list.
  • FR11: The popup shows an upgrade prompt once the free-tier cap is reached.
  • FR12: The content script guards against double injection on pages that reload content dynamically.
  • FR13: The demo harness renders the same popup markup, CSS, and JS as the real extension, sourcing its data from sample-data.json instead of chrome.storage/chrome.tabs.

User stories

  • As a shopper, I want to see a product's unit price on the page without doing the math myself, so that I can compare it to a different size or brand at a glance.
  • As a repeat buyer, I want to be told when a package got smaller since my last visit, so that I don't have to remember what the box looked like three months ago.
  • As a budget-conscious user, I want a free tier that still gives me real value, so that I can try the extension before deciding to pay for unlimited tracking.
  • As a privacy-conscious user, I want my browsing and purchase history to stay on my device, so that I'm not creating a new account or sending my shopping habits to a server.
  • As a first-time visitor, I want the popup to say clearly why nothing is flagged yet, so that I understand the extension needs a second visit to compare against.

Extension surfaces

  • Content script (amazon.com product pages) — parses product data, computes unit price, compares against stored history, injects the on-page badge.
  • Toolbar popup — shows the current tab's product and the full tracked-product list; queries the active tab and messages the content script.
  • chrome.storage.local — persists tracked-product history across sessions, the mechanism a plain website has no access to.

Non-functional requirements

  • Permissions are limited to storage and activeTab; no <all_urls>, no network requests, no remote code.
  • The content script only touches DOM it explicitly targets, and scopes its injected styles under a shrinkwatch- class prefix to avoid clashing with the host page.
  • All computation happens locally; the manifest declares no host permissions beyond the one content-script match.
  • The popup must render a useful state even with zero tracked products and even when the active tab isn't an Amazon product page.
  • History parsing must not throw on a page missing a title, price, or size string; the content script should exit quietly instead of injecting a broken badge.

Out of scope (for the prototype)

  • Retailers other than Amazon (Walmart, Target, Kroger, Instacart are listed as roadmap items).
  • The paid tier's cross-device sync backend — the prototype notes where it would plug in but doesn't implement a server.
  • Any UI for manually removing or editing a tracked product; the popup is read-only.
  • Currency or locale handling beyond USD and the units already listed.

Open questions

  • Amazon's product-page DOM changes frequently; a production version would need a more resilient parsing strategy (structured data, multiple selector fallbacks) than the regex approach here.
  • Whether "same ASIN, different pack configuration" (e.g., single unit vs. multi-pack) should be tracked as the same product or split out — the prototype treats each ASIN as one line, which can misfire if Amazon reuses an ASIN across pack sizes.
  • What the actual cross-device sync backend would need to be, and how much it would cost to run at a subscriber base large enough to be worth the engineering.

More from Browser Extensions