A self-hosted dashboard for monitoring Indonesian online auctions. Scrapes listings from multiple sites, displays them in a Steam-style dark UI, and sends push notifications when watchlist items appear.
| Site | Method |
|---|---|
| lelang.go.id | REST API (KPKNL state auctions) |
| ibid.astra.co.id | REST API (Astra vehicle auctions) |
| timedauction.jba.co.id | DOM scraping |
- All listings, no guessing — fetches every lot across categories; keywords are badge labels, not filters
- Watchlist keywords — highlight matching items and receive push notifications when new ones appear
- Sidebar filters — opt-in brand and model checkboxes, resets cleanly when switching categories
- Three view modes — Grid (4-column), List, Compact
- Configurable page size — 20 / 50 / 100 / 200 / 500 / All items per page
- Thumbnail caching — images downloaded via browser session at scrape time, served locally
- Web Push notifications — VAPID-based, works in Chrome/Edge without an app
- Auto-refresh — configurable interval with countdown timer
- Python 3.10+
- Playwright Chromium browser
- A modern browser for the UI
git clone https://github.com/wisnuub/auction-watchlist
cd auction-watchlist
pip install -r requirements.txt
playwright install chromiumStart the web server:
python3 server.pyOpen http://localhost:8765 in your browser.
Run the scraper manually (CLI):
python3 watchlist.py # all sites
python3 watchlist.py --site lelang # one site: lelang | ibid | jba
python3 watchlist.py --discover # print API calls for debuggingThe web UI has a ⟳ Refresh button that runs the scraper in the background and reloads results automatically.
Edit keywords directly in the UI: open the Watchlist tab → Edit keywords. One keyword per line. Keywords are matched case-insensitively against item titles and highlighted as badges on matching cards.
Keywords are saved to watchlist.json and used on the next scrape.
Click the 🔔 bell button in the top bar and allow notifications. The server sends a push when new watchlist-matching items appear after a scrape.
auction-watchlist/
├── watchlist.py # scraper (lelang, ibid, jba)
├── server.py # Flask web server + image proxy + push
├── watchlist.json # keyword list (editable via UI)
├── static/
│ ├── index.html
│ ├── app.js
│ ├── style.css
│ └── sw.js # service worker for push notifications
└── results/ # scrape output JSON + thumbnail cache (git-ignored)
lelang.go.idandfile.lelang.go.idblock server-side HTTPS (TLS fingerprinting). Thumbnails are fetched through a headless Chromium session at scrape time and cached locally.ibid.astra.co.iduses a subscription key embedded in the page — it is discovered automatically by intercepting browser requests on startup.- The VAPID keys in
server.pyare pre-generated. Regenerate them for your own deployment withpy_vapid.