- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| doc | ||
| src/domhunter | ||
| .gitignore | ||
| .python-version | ||
| DomHunter.md | ||
| manage.py | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
DomHunter
Tool for tracking CZ.NIC domain auctions (.cz expired-domain auctions at
domenovyprohlizec.cz). It fetches upcoming
and running auctions daily, samples price action while auctions are live,
imports ended-auction history, and stores everything as append-only snapshots —
building a local dataset for scoring domains (0–110 pts, see DomHunter.md)
and backtesting price predictions.
Django + SQLite, internal tool. Python 3.11, managed with uv.
Setup
uv sync
uv run manage.py migrate
uv run manage.py runserver
Admin at /admin/ (create a user with uv run manage.py createsuperuser).
Management commands
fetch_auctions — daily catalog update
uv run manage.py fetch_auctions [--ended-file PATH] [--timeout N]
- Fetches the
new(upcoming auctions) export and upsertsDomainAuctionrows. - Sweeps the
in_auctionexport so auctions that already started (no longer listed innew) are stored too. --ended-fileimports a downloadedauction-list-endedCSV. Idempotent: overlapping files from different days are safe; duplicates are skipped, status transitions (e.g.pending_payment→finished_success) are applied. Rows are keyed by(domain, round); one final price snapshot per ended auction, anchored atauction_to.
Run once a day.
fetch_bids — live price sampler
uv run manage.py fetch_bids [--interval N] [--timeout N]
Loops forever, fetching the in_auction export and storing PriceSnapshot
rows (price + bid count per auction). Only fetches while auctions may be live
(12:00–21:00 CEST, extensions until 9:00 next day per the auction rules).
--interval N— base loop interval in minutes (default 10).- Within 5 minutes of an auction's end (bids in the last 5 minutes extend it by 5 minutes each), and for 15 minutes past the last known end, it samples every 1 minute instead — capturing endgame action and discovering extensions.
- Snapshots are stored only when
(price, bids)changes for an auction, so repeated unchanged fetches cost nothing.
Intended to run under systemd/supervisor/nohup during the auction window.
Data model
DomainAuction— one auction instance per(domain, auction_from);status(scheduled/running/finished_*/pending_*),round(repeated auctions when the winner doesn't pay — a scoring signal).PriceSnapshot— append-only(price, bids)observations per auction; unique per(auction, price, bids).