You bookmark a GPU on Newegg, add the same SKU on Amazon to your notes, and still miss the drop because CamelCamelCamel only covers one market and your phone floods with third-party deal spam. Price tracking is boring infrastructure until you care about a purchase, and then you want history, rules, and alerts that match how you actually shop.
Discount Bandit (Cybrarist/Discount-Bandit, ~760 GitHub stars, PHP/Laravel/Filament) is a multi-user self-hosted price tracker for Amazon, AliExpress, eBay, Walmart, Target, Best Buy, Canadian Tire, Costco, Newegg, Noon, and dozens more, plus custom store URLs you define yourself. You set criteria per product (target price, percent drop, lowest-in-X-days, stock, official sellers only, and more) and get notified when something matches. Docs and a Docker image live on the project site.
What you get
- Many stores out of the box — big-box and regional retailers in one UI; paste a product URL for stores the scraper understands, or wire custom stores when you need something niche.
- Price history and comparison — track the same product across multiple shops to see trends instead of guessing which tab was cheapest last Tuesday.
- Flexible alert rules — desired price, percentage drop, “lowest in N days”, stock available, any price change, official sellers only; multiple notification profiles per link (handy when shipping or seller type changes the real cost).
- Push alerts — Ntfy, Telegram, and Gotify integrations so alerts land in the channel you already use.
- Multi-user — first-run admin, then separate accounts with per-user products and optional caps on how many links each person can add (household or small team without sharing one login).
- Currency conversion — optional default currency per user with an API key in
.envwhen you track cross-border listings.
Community store packs can be shared via GitHub; upstream encourages exporting a working store definition from your instance when you add something new. A browser companion extension is marked “coming soon” for one-click adds from a product page.
Self-host vs SaaS trackers
Free deal sites monetize your clicks and rarely let you tune rules. Browser extensions often stop working when a retailer redesigns. Running Discount Bandit on your own VPS means your watch list, scrape schedule, and notification hooks stay under your roof. You are not handing a shopping profile to another ad network.
The tradeoff is maintenance. This is a PHP app with Composer, a web server, and MySQL or SQLite (SQLite is the default path for lighter installs). Docker image cybrarist/discount-bandit is the fastest on-ramp if you do not want to assemble Apache/Nginx, PHP, and a database by hand. Scraping storefronts is inherently fragile: when a site changes markup, feeds break until upstream or you fix the store definition. That is true for every tracker, self-hosted or not; at least here you can see failures and patch without waiting on a vendor.
Quick start
Bare metal (from the README): composer install, copy .env.example to .env, fill variables per the environment docs, point Nginx or Apache at the app, and run migrations from the installation guide on the same site.
Docker users pull from Docker Hub and mount persistent volumes for the database and app data. Put HTTPS and authentication in front of the web UI if the instance is reachable from the internet; it is a multi-user app with its own logins, but you still do not want a public admin URL sitting open.
Who it is for
Good fit: deal hunters who want Canadian Tire and Costco next to Amazon; families with separate accounts and shared infrastructure; homelabbers already running Ntfy or Gotify; small resellers watching competitor pricing on a handful of SKUs.
Skip it: if you only care about one marketplace and a free email alert is enough; if you cannot tolerate occasional scrape breakage; if you need a managed mobile app with zero server work.
Hosting in Canada
Alerts are useless if the checker is down. A small Canadian CloudBox VPS is enough for personal or household use: SQLite or a local MySQL instance, daily backups of the data directory, and your notification endpoints pointed at the same region (or your home Ntfy) keeps latency predictable. Retail sites you watch may still be US or global; the point of self-hosting here is where your lists, history, and notification credentials live.
Respect retailer terms of service and rate limits; run one instance for your household, not a public scraping service.
Bottom line
Discount Bandit is the self-hosted answer when “track these 40 URLs across six stores with different rules and push me on Telegram” is the spec, not a spreadsheet and three different apps. It is PHP stack energy, not a one-click SaaS, but that is the point: your criteria, your notifications, your data.
Talk with Swift Host if you want help sizing a Canadian VPS, TLS, and backups for a Discount Bandit box. We are in St. Albert and actually answer the phone.