Auction
Second-hand dedicated machines whose price falls on a timer. The busiest feed by far. Fires when a listing appears matching your bounds, or when an existing listing's price drops into them.
Droptape watches everything Hetzner sells that moves and messages you when something crosses a line you drew. This page is how you draw the line, and how to read the numbers on the way there.
The overview, the auction table, the cloud grid and the history charts need no account. Only monitors do.
The fastest route to a working monitor is not the form. Find a machine on the auction table that is roughly the shape you want, open it, and press Watch this config. That prefills a monitor with the CPU vendor, the core count, the memory, the total disk and the region of the listing in front of you. Those bounds match at least one real machine, because they came from one.
Then loosen it. Widen the price, drop the CPU model, add a second region. Loosening a spec that already matches is far easier than tightening one that has never matched anything.
Every monitor has exactly one kind, chosen first, because the four watch different things.
Second-hand dedicated machines whose price falls on a timer. The busiest feed by far. Fires when a listing appears matching your bounds, or when an existing listing's price drops into them.
A cloud server type coming back into stock in a location, or going out of it. The "CCX33 is finally orderable in Ashburn again" alert. Comes back in stock, goes out of stock, or changes either way.
A published cloud price changing. Rare, and worth knowing about when it happens. Falls, rises, or moves at all — optionally with a ceiling so only cheap-enough changes reach you.
New AX, EX, SX, GEX or DX machines becoming orderable, or their list price dropping. Polled every 10 minutes rather than every 60 seconds, because Hetzner's Robot API is rate limited per endpoint.
All present constraints AND together. Members of a list OR together. So price at most 45, regions FSN and HEL, NVMe drives at least 2 means (price ≤ 45) AND (region is FSN or HEL) AND (at least two NVMe drives).
Leave a field blank and it is not a constraint. Blank is not zero.
Price at most / at least is monthly, in euros. Compare against decides whether that bound is checked against the net price or the price including your VAT rate; it defaults to your account setting. Setup fee at most is rarely useful — most auction listings have none.
RAM at least / at most in GB, and ECC memory as a three-way: either, required, excluded. ECC is the single most common reason a monitor that "should" match does not. Plenty of cheap listings are non-ECC.
CPU vendor (Intel or AMD), Cores at least, and two
free-text lists: Model contains any of and
Model contains none of. These substring-match the model string Hetzner
publishes, so EPYC and Ryzen both work, and
i7-7700 will exclude a great many old machines in one go.
Cores at least counts physical cores as derived from the model, not threads.
This is where specs go wrong, so it has the most fields.
NVMe drives at least: 2 plus Each NVMe at least: 900 means two NVMe drives, neither smaller than 900 GB. It does not mean "at least 1.8 TB of NVMe somewhere" — that is NVMe total at least.
All sizes are decimal GB, straight from the feed. See §09.
Regions are FSN (Falkenstein), NBG (Nuremberg) and HEL (Helsinki).
Specific datacenters goes finer — FSN1-DC14 — and is
validated against the datacenter list in Hetzner's own feed metadata, so it stays correct
when Hetzner adds one.
Prefer regions. Prices differ between regions; DC5 and DC14 within Falkenstein do not, so pinning a datacenter narrows a monitor without buying you anything.
GPU, Intel NIC, hardware RAID and redundant PSU, each three-way: either, required, excluded.
The fields that make this more than a price alert.
10
means "no more than 10% above the cheapest this exact configuration has been in the
last 90 days". Configuration means the fingerprint: CPU, memory, ECC, sorted disk sizes
by class, region and specials — the same physical machine spec, not the same listing
id. This catches a good price without you having to know what a good price is.
Warn me before a scheduled cut takes it below — a euro figure. Every auction listing carries the exact timestamp of its next automatic reduction. Droptape projects the post-cut price from the observed reduction step and warns you before the drop lands, rather than after it. This is the feature that turns "you missed it" into "be ready in four minutes".
Press Describe it instead and type a sentence:
A language model turns that into a spec. Then deterministic code takes over: the output is JSON-parsed, validated against the same schema the form uses, and rendered back into the form so you can see exactly what it understood. Nothing saves until you look at it.
If the model returns something invalid it gets one retry with the validation errors attached. If that fails too, you get the empty form and a message saying so. It never silently guesses.
Voice works the same way where the browser supports the Web Speech API — the transcript is produced on your device at no cost, and everything after that is identical.
Two limits worth knowing. Parsing is rate limited to 20 an hour per account. And Droptape treats the text you type as untrusted input: a prompt injection produces a nonsensical monitor, which is exactly what the confirmation step is there to catch.
Before saving, and any time afterwards, Test run answers three questions: how many subjects match right now, how many times the monitor would have fired in the last 7 days, and how many in the last 30. Read them together.
| Now | 7d | 30d | What it means |
|---|---|---|---|
| 0 | 0 | 0 | Matches nothing and has matched nothing. Loosen it — start with ECC and the disk-class bounds. |
| 0 | 2 | 9 | Healthy. Nothing matches this second, but roughly one a week does. |
| 0 | 0 | 3 | Tight, but alive. Expect long silences. |
| 40 | 300 | 1200 | Far too loose. A message every few minutes until the daily cap stops it. |
A monitor with zero 30-day matches is the most common support issue, and it is almost never a delivery bug. It is usually ECC, a datacenter pinned instead of a region, or a per-drive size bound where a total was meant.
Link it once in settings: press Connect, open the link, and the bot binds your chat. Messages carry the price and the delta in bold, the spec, the datacenter, the next scheduled reduction, and two buttons — Hetzner's order page and the Droptape detail page.
Bot commands are read-and-toggle only: /start, /monitors,
/pause, /resume, /mute 2h, /status,
/unlink. Monitor creation stays in the web app, because that is where the
confirmation UI lives.
Email is the only part of this system that can cost real money, so it is digest-only by default. Instant email is opt-in per monitor and capped at 5 a day. Your digest arrives at the hour you choose, in your timezone. Every message carries a one-click unsubscribe that works from the Gmail and Outlook header, not only from a link in the body.
Six suppression rules, applied in this order. Every one records a row on your alert history with the reason, so nothing disappears silently.
And one that is not suppression but looks like it: cloud availability waits for two consecutive polls before it alerts. Stock flickers when it is thin, and a type can flip four times in a minute. Two-poll confirmation means a cloud alert lands up to 150 seconds after the flip, and a type that flaps five times in ten minutes produces at most one message. That is a deliberate trade.
Set a window like 23:00-07:00 in settings, in your timezone. Inside
it, alerts are queued, never dropped. The moment the window ends, everything that
accumulated is collapsed into one catch-up message rather than fifteen. A window that
starts and ends at the same time counts as no quiet hours, not as permanent silence.
Email alerts and anything queued overnight arrive as one digest at your chosen digest hour, local time — one per user per local day. A missed digest hour does not strand anything: the daily job sweeps out whatever is older than the threshold regardless.
The auction page is every current listing, filterable on exactly the terms a monitor uses. The filter state lives in the URL, so a search you like is a link you can keep.
| Column | What it is |
|---|---|
| CPU | Model string as Hetzner publishes it. |
| RAM | Total GB. ECC is a badge, not a column. |
| Disks | Grouped by class — NVMe, SATA SSD, HDD. Count × size. |
| DC | The datacenter, e.g. FSN1-DC14. The region is the first three letters. |
| Price | Monthly, net of VAT. |
| € / TB | Price divided by total disk in decimal TB. The storage-value column. |
| € / GB RAM | Price divided by total memory. The memory-value column. |
| First → now | The price when this listing first appeared, and its price now. The gap is how far it has already fallen. |
| Next drop | When Hetzner has scheduled the next automatic reduction for this listing. |
Every row carries an inline sparkline of its own price history.
A listing that vanishes is recorded as "no longer listed", never "sold." Sold, withdrawn, and reissued-under-a-new-id all look identical in the feed. Claiming otherwise would be a lie. An id that reappears within 24 hours counts as the same listing, not a new one.
Auction ids are numeric and change on every reissue, so a listing link that worked last month can point at nothing today. That is the feed, not a broken link.
The cloud page is server types down the rows and locations across the columns, in three cell states:
The middle state is the interesting one, and it is the whole point of the page: "offered but out of stock" is a thing you can wait for. "Not offered" is not.
Hovering a cell tells you how long it has been in its current state.
Series tabs group the range the way Hetzner's own pages do. CX and CAX are cost-optimized shared vCPU, Intel and Ampere Arm. CPX is AMD shared. CCX is dedicated vCPU.
Per-location hourly and monthly prices sit alongside. The history page charts availability over time from the daily rollups, which answers whether a type is always scarce or had one bad afternoon.
Prices are net of VAT. Every figure on this site is what Hetzner publishes, which is the price before tax. Set your rate in settings and the app does the arithmetic. The default is 0, so out of the box you see Hetzner's own numbers unchanged.
Prices are monthly unless a column says otherwise. The feed carries hourly prices too; they are not the headline.
Both currencies are real. The feed publishes EUR and USD natively, so the USD figure is Hetzner's own price and not a conversion Droptape invented. There is no exchange rate anywhere in this codebase.
Disk sizes are decimal. A "4 TB" drive is 4,000 GB in the feed and 4,000 GB here. Your operating system will report about 3.64 TiB for the same drive. Neither is wrong; they count differently. € / TB uses the decimal TB, so it matches the number on the label.
Disk totals come from the per-class breakdown, never from the per-disk size field. That field is the size of one drive, and multiplying it by the drive count breaks on any machine with mixed sizes.
Cores are physical cores, derived from the CPU model rather than the feed's own count, which counts sockets.
Times are shown in your timezone, from settings. Everything is stored in UTC.
"Next drop" is Hetzner's scheduled time, not an estimate. The projected price after that drop is an estimate, derived from the reduction steps that listing has already taken.
A price that has not moved is not stale. Droptape writes nothing when nothing changes; that is the design.
| VAT rate | Entered as a percentage. 19 for Germany. Applies to every displayed price and, optionally, to monitor price bounds. |
|---|---|
| Currency | EUR or USD. Both come from the feed. |
| Timezone | Drives quiet hours, the digest hour, and every timestamp shown to you. |
| Quiet hours | HH:MM-HH:MM. Queues, never drops. |
| Digest hour | 0–23, local. When the daily email lands. |
| De-duplicate alerts | On by default. Turn off only if you want every overlapping monitor to fire. |
| Telegram | Connect or disconnect. |
| Unsubscribe from everything, without deleting the account. | |
| Theme | Dark, light, or follow the system. Dark is the default; your OS preference is respected on the first visit. |
The feeds are undocumented and have changed shape before. When one drifts, Droptape aborts that poll with zero writes and alerts the operator, rather than ingesting garbage. The visible symptom is data that has stopped moving, not data that has gone wrong.
Otherwise: open an issue. For an alert that did not arrive, use the "Monitor did not fire" template. It asks for the monitor spec, what you expected it to match, the listing id and the time in UTC — those four replay the moment against the archived feed.