Automated auction monitoring tool for Drouot.com - Never miss a deal again!
- Passive Scraping: Automatically extracts lots from Drouot pages you visit
- Advanced Filtering: Filter by category, keywords, price, date, and auction house
- NEW/SEEN State Tracking: Track which items you've viewed
- Visual Indicators: Badges and highlights on Drouot pages
- Smart Scoring: Prioritizes items based on match quality
- Local Storage: All data stays on your device
- React-powered UI: Beautiful, responsive popup interface
- Node.js 16+ and npm
- Chrome/Chromium browser
-
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Load in Chrome:
- Open
chrome://extensions/ - Enable "Developer mode" (top right)
- Click "Load unpacked"
- Select the
dist/folder
- Open
For active development with auto-rebuild:
npm run devThen reload the extension in Chrome after changes.
- Click the extension icon
- Go to Settings (βοΈ)
- Configure your filters:
- Select categories (e.g., Mobilier, Art Contemporain)
- Add include keywords (e.g., "louis xvi", "empire")
- Add exclude keywords (e.g., "reproduction", "style de")
- Set price range
- Select auction houses (e.g., Artcurial, Drouot Estimations)
- Save
- Browse Drouot.com naturally - The extension works passively
- Extension scrapes lots as you visit pages
- Badge shows NEW count - Click to view
- Review matches in popup
- Mark as seen or favorite items
- Click item to open on Drouot.com
On Drouot pages, you'll see:
- π NEW badges - Unviewed matching items
- β FAVORITE badges - Items you starred
- π SEEN badges - Previously viewed items
- Highlighting - Color-coded borders around matching items
See ARCHITECTURE.md for detailed system design.
- Content Script (
content/content.js): Scrapes DOM, adds badges - Background Worker (
background.js): Processes lots, manages state - Popup UI (
popup/): React app for viewing and managing items - Storage Service (
src/services/storage.js): chrome.storage wrapper - Filter Engine (
src/services/filter.js): Matching algorithm
All data is stored locally using chrome.storage.local:
- Lots: Scraped auction items
- User States: NEW/SEEN/FAVORITE/IGNORED per item
- Filters: Your configured filters
- Preferences: UI settings
See STORAGE_SCHEMA.md for detailed schema.
The extension matches lots against your filters using:
- Category matching - Must be in selected categories
- Keyword inclusion - Must contain at least one include keyword
- Keyword exclusion - Must not contain any exclude keywords
- Price range - Estimate must be within min/max
- Date range - Auction date must be within range
- Auction house - Must be from selected auction houses
See SCRAPING_STRATEGY.md for scraping details.
Each matching lot receives a score (0-100) based on:
- Category match: +15
- Keyword matches: +10 per keyword
- Title matches: +5 bonus
- Price proximity: up to +15
- Recency: up to +10
- Auction urgency: up to +15
- Has image: +5
- Auction house match: +10
Higher scores appear first in the popup.
drouot-monitor/
βββ manifest.json # Extension manifest
βββ background.js # Service worker
βββ content/
β βββ content.js # Content script
β βββ content.css # Page styling
βββ popup/
β βββ popup.html # Popup HTML
β βββ popup.jsx # React entry
βββ src/
β βββ components/ # React components
β β βββ App.jsx
β β βββ ItemCard.jsx
β β βββ ItemList.jsx
β β βββ TabNavigation.jsx
β β βββ Settings.jsx
β βββ services/ # Business logic
β β βββ storage.js
β β βββ scraper.js
β β βββ filter.js
β β βββ messaging.js
β βββ utils/ # Utilities
β β βββ date.js
β β βββ price.js
β βββ constants.js # Constants
βββ assets/ # Icons
βββ package.json
βββ webpack.config.js
βββ README.md
- New filter type: Add to
DEFAULT_FILTERSinconstants.js, updatematchesFilters()infilter.js, add UI inSettings.jsx - New item state: Add to
ItemStateenum, updatestorage.jsindexes - New scraping pattern: Add selectors to
SCRAPING_PATTERNSinscraper.js
Test on real Drouot pages:
- Listing pages:
https://www.drouot.com/ventes - Search results:
https://www.drouot.com/recherche - Lot details:
https://www.drouot.com/l/*
- Check console logs in:
- Content script: Page console (F12)
- Background: Extension service worker (chrome://extensions β Details β Inspect)
- Popup: Right-click popup β Inspect
- Check console for errors
- Verify Drouot page structure hasn't changed
- Click π button on page to manually re-scrape
- Ensure filters are enabled in Settings
- Check filter criteria aren't too restrictive
- Re-save filters to trigger re-evaluation
- Reload extension
- Check background service worker for errors
- Verify storage isn't corrupted:
chrome://extensionsβ Developer tools
- Scraping: <100ms per page
- Filter matching: <10ms per lot
- Storage: Unlimited (uses chrome.storage.local)
- Memory: ~20MB for 10,000 lots
- No tracking: Zero analytics or telemetry
- Local-first: All data stays on your device
- No external requests: Only scrapes pages you visit
- Open source: Inspect all code
This extension:
- β Only scrapes pages the user actively visits
- β Does not make automated requests to Drouot
- β Respects robots.txt (implicitly via browser)
- β Is for personal use only
- β Does not resell or share data
Not affiliated with Drouot.com
See MVP_ROADMAP.md for detailed roadmap.
- Scraping engine
- Filter matching
- State tracking (NEW/SEEN/FAVORITE)
- Popup UI
- Content script badges
- Multi-device sync (Firebase/Supabase)
- Email notifications
- Price tracking & alerts
- Export to CSV
- Browser extension for other auction sites
- Fork the repo
- Create feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing) - Open Pull Request
MIT License - See LICENSE file for details
For issues or questions:
- Check ARCHITECTURE.md for technical details
- Check SCRAPING_STRATEGY.md for scraping info
- Open an issue on GitHub
Made with β€οΈ for auction enthusiasts