Privacy-first price tracking extension for Chrome. No cookie hijacking. No fake coupons. Just honest price tracking.
Extensions like Honey and Rakuten have a dark secret:
โ They hijack your affiliate cookies - replacing the creatorโs commission with their own
โ They upload your browsing data - tracking every product you view
โ They show fake coupons - that never work, just to collect your clicks
โ Hidden revenue model - you think itโs free, but youโre the product
โ
100% Privacy-First - All data stays on YOUR device (IndexedDB)
โ
No Cookie Modification - We NEVER touch your cookies
โ
No External Upload - Zero network requests (except to retailers)
โ
100% Open Source - Audit every line of code yourself
โ
Transparent & Honest - No hidden agendas, no dark patterns
# Clone repository
git clone https://github.com/mingshi/honest-price-tracker.git
cd honest-price-tracker
# Install dependencies
npm install
# Build extension
npm run build
# Load in Chrome
# 1. Open chrome://extensions/
# 2. Enable "Developer mode"
# 3. Click "Load unpacked"
# 4. Select the `dist/` folder
| Feature | Honest Price Tracker | Honey | Keepa |
|---|---|---|---|
| Privacy | 100% local, no upload | โ Uploads browsing data | โ Uploads to servers |
| Cookie Modification | โ Never | โ Hijacks affiliate cookies | โ Doesnโt modify |
| Price Tracking | โ Amazon, eBay, Walmart | โ Multiple sites | โ Amazon only |
| Alerts | โ Free browser notifications | โ Free | โ $18/month for alerts |
| Open Source | โ MIT License | โ Closed source | โ Closed source |
| Cost | โ Free forever | Free (but youโre the product) | Free (limited) / $18/mo |
| Coupons | ๐ง Coming soon (verified only) | โ Fake coupons | N/A |
| On-Page Widget | โ Yes | โ No | โ Yes |
storage, notifications, alarmshonest-price-tracker/
โโโ src/
โ โโโ background/ # Service worker (monitoring, alerts)
โ โ โโโ index.ts # Background script entry
โ โ โโโ monitor.ts # Price monitoring service
โ โโโ content/ # Content scripts (page injection)
โ โ โโโ index.ts # Product detection & tracking
โ โ โโโ inject.ts # On-page widget injection
โ โโโ extractors/ # Price extraction logic
โ โ โโโ amazon.ts # Amazon price extractor
โ โ โโโ ebay.ts # eBay extractor (TODO)
โ โ โโโ walmart.ts # Walmart extractor (TODO)
โ โโโ storage/ # IndexedDB wrapper
โ โ โโโ db.ts # Database operations
โ โโโ components/ # Reusable UI components
โ โ โโโ PriceChart.ts # Price history chart
โ โโโ popup/ # Extension popup UI
โ โ โโโ index.html
โ โ โโโ index.ts
โ โ โโโ popup.css
โ โโโ options/ # Settings page
โ โโโ index.html
โ โโโ index.ts
โ โโโ options.css
โโโ dist/ # Built extension (load in Chrome)
โโโ tests/ # Unit tests
โโโ assets/ # Icons and images
โโโ manifest.json # Extension manifest
โโโ webpack.config.js # Build configuration
โโโ tsconfig.json # TypeScript configuration
// Object Store: products
{
id: string; // "{retailer}_{productId}"
url: string; // Product URL
title: string; // Product name
retailer: string; // "amazon" | "ebay" | "walmart"
productId: string; // ASIN, item ID, etc.
currentPrice: number; // Latest price
lowestPrice: number; // Historical low
highestPrice: number; // Historical high
averagePrice: number; // Average price
currency: string; // "USD", "EUR", etc.
firstTracked: number; // Timestamp
lastChecked: number; // Timestamp
checkCount: number; // Total checks
}
// Object Store: price_history
{
id?: number; // Auto-increment
productKey: string; // Foreign key to products
price: number; // Price at this point
timestamp: number; // When recorded
source: string; // "manual" | "auto"
}
// Object Store: alerts
{
id?: number; // Auto-increment
productKey: string; // Foreign key to products
targetPrice: number; // Alert threshold
notified: boolean; // Already sent notification?
createdAt: number; // Timestamp
}
// Object Store: settings
{
key: string; // Setting name
value: any; // Setting value
}
# Install dependencies
npm install
# Start development mode (watch mode)
npm run watch
# Build for production
npm run build
# Run tests (requires setup)
npm test
# Lint code
npm run lint
npm run buildchrome://extensions/dist/ foldersrc/extractors/{retailer}.tsexport function is{Retailer}ProductPage(): boolean
export function extract{Retailer}Product(): Promise<ProductData>
src/content/index.tsmanifest.json: *://*.{retailer}.com/*src/content/inject.ts with injection pointWe welcome contributions! See CONTRIBUTING.md for guidelines.
git checkout -b feature/my-featuregit commit -m "feat: add my feature"git push origin feature/my-featureMIT License - Feel free to use, modify, and distribute.
TL;DR: You can do whatever you want with this code, as long as you include the original license.
Full policy: PRIVACY_POLICY.md
Summary:
If you find this project useful, please consider giving it a star on GitHub!
Made with โค๏ธ and honesty
No dark patterns. No hidden agendas. Just price tracking done right.