CoolFace
Datasetpublic

trader298/hetzner-auction-history

Hetzner Server Auction — Price History A daily-growing, unbounded-history archive of the Hetzner server auction (Serverbörse): every listing observed on every day, kept long past the rolling 90-day window that the upstream feed retains. One row per auction listing (id) per calendar day (day), taking the latest observation that day. Hetzner sells returned/refurbished dedicated servers via a live auction whose prices drift down until each box sells. This dataset preserves the… See the full description on the dataset page: https://huggingface.co/datasets/trader298/hetzner-auction-history.

sourceHugging Facecc-by-4.0updated 17d agoView on Hugging Face
0likes324downloads
Dataset Card

Hetzner Server Auction — Price History

A daily-growing, unbounded-history archive of the Hetzner server auction (Serverbörse): every listing observed on every day, kept long past the rolling 90-day window that the upstream feed retains. One row per auction listing (id) per calendar day (day), taking the latest observation that day.

Hetzner sells returned/refurbished dedicated servers via a live auction whose prices drift down until each box sells. This dataset preserves the long-run price history — base drift, seasonality, per-spec trends — as month-partitioned Parquet, queryable directly from DuckDB or 🤗 datasets.

Attribution — built on Server Radar

The underlying facts are Hetzner's public auction listings. The 5-minute scrape and the CPU-spec enrichment (Geekbench-style benchmarks, CPU generation, structured disk layout) are the work of [Server Radar](https://radar.iodev.org/) by @elsbrock (elsbrock/hetzner-radar), which publishes the rolling-90-day DuckDB snapshot this archive accumulates. This dataset is a downstream, long-term mirror of that feed and would not exist without it — please credit Server Radar.

Not affiliated with or endorsed by Hetzner or Server Radar. "Hetzner" is a trademark of its owner. Data provided as-is, with no correctness guarantee.

Structure

data/month=YYYY-MM/data.parquet   # one Hive-partitioned shard per calendar month

month is a Hive partition column (also stored in the file). Each row is one listing observed on one day. Columns follow Radar's server schema (~39 columns), including:

  • —identity / time: id, seen (observation timestamp), day (YYYY-MM-DD, the per-day key), month (YYYY-MM, the shard partition)
  • —CPU: cpu, cpu_generation, cpu_cores, cpu_threads, cpu_score (single-core), cpu_multicore_score
  • —memory / disk: ram_size, is_ecc, nvme_drives / nvme_size, sata_drives / sata_size, hdd_drives / hdd_size
  • —misc / auction: datacenter, is_highio, with_gpu, price, setup_price
Prices are gross (include 19% German VAT), matching Radar. Divide price by 1.19 for the net price a non-EU buyer pays.

Usage

python
from datasets import load_dataset

ds = load_dataset("trader298/hetzner-auction-history", split="train")

Or query the shards in place with DuckDB — no download, hive_partitioning=true exposes month as a column and prunes by it over the whole history:

sql
-- cheapest listing seen each day in a given month
SELECT day, min(price / 1.19) AS min_net_eur
FROM read_parquet('hf://datasets/trader298/hetzner-auction-history/data/**/*.parquet', hive_partitioning=true)
WHERE month = '2026-06'
GROUP BY day ORDER BY day;

-- price trajectory of one auction id across its life
SELECT day, price, price / 1.19 AS net_eur
FROM read_parquet('hf://datasets/trader298/hetzner-auction-history/data/**/*.parquet', hive_partitioning=true)
WHERE id = 1234567 ORDER BY day;

License

  • —Data (this dataset): CC-BY-4.0 — use freely, credit Server Radar and this dataset.
  • —Code (the updater): MIT — <https://github.com/ak2k/hetzner-auction-history>.