Back to all posts

Published October 23, 2026

How to track Hetzner Cloud costs before the invoice

Piotr HajkowskiBy Piotr Hajkowski

In this article

  1. What Hetzner gives you to track costs
  2. Check the month so far on the Usage page
  3. Set a cost alert on every project
  4. Reconcile each invoice against its consumption statement

To track Hetzner Cloud costs, use the Usage page in the Hetzner Console for the current month, an email cost alert on each project, and the individual consumption statement, which arrives with each invoice as a CSV of per-resource charges. For your own scripts, the Cloud API's Pricing endpoint and the hcloud CLI give you list prices. Hetzner has no API for usage, costs or invoices, so a longer history, a running forecast or a view across accounts is something you build or buy.

The short version.

  • The Usage page shows the current month per project; the Usage preview breaks it down per resource. Neither shows a finished month before its invoice arrives.
  • Cost alerts are per project, off by default and email only. Hetzner calls them a convenience, not a spending limit.
  • The consumption statement CSV is the only per-resource record of a finished month, and it can arrive up to 28 days after the month ends.
  • The activity history reaches back 90 days. Export it every month: it is your main evidence if a bill looks wrong.
  • The Cloud API returns list prices, not what you are billed. Servers created before 15 June 2026 keep their older price, so a script based on list prices overstates them.

What Hetzner gives you to track costs

Five native tools each answer a different question:

ToolWhereWhat it tells you
Usage page and Usage previewconsole.hetzner.com/usage, Hetzner ConsoleCurrent-month costs per project, and accrual per resource
Cost alertsUsage page, per projectAn email when a project passes the limit you set
Invoice and individual consumption statementaccounts.hetzner.com/invoiceThe billed month: invoice PDF plus one CSV row per resource
Activity historyconsole.hetzner.com/activitiesCreate, delete, attach and assign events, with CSV export
Pricing endpoint and hcloudCloud API referenceList prices per server type and location, net and gross

Check the month so far on the Usage page

The Usage page is the only place Hetzner shows costs before an invoice exists. Open "Usage" in the menu bar above the project list, or go to console.hetzner.com/usage. It lists each project's costs for the current month, Object Storage as a separate account-wide line, and an account total. Generate preview produces the Usage preview, with one line per resource: ID, name, hourly rate, monthly cap, hours so far and net amount. That is where a forgotten volume or test server shows up.

The Usage page shows gross amounts in the account's currency, and a note below the total states the VAT rate, such as "All prices incl. 19 % VAT". The preview lists net amounts and adds the VAT line below them, so compare net with net when you check your own estimate.

The view has one hard limit, stated in Hetzner's billing FAQ: "In the Hetzner Console, you can only view the usage data for the current month." At midnight on the first it switches to the new month, and the old one is gone from the Console until the invoice arrives. A figure you note yourself never covers a complete month either, because the last hours always come after it.

Set a cost alert on every project

On the Usage page, turn on the email warning in a project's row and set an amount; the billing FAQ describes this under "How do I keep my costs under control?". Alerts are off by default and work per project, so set one on every project, including staging and sandbox projects, and on each new one.

The FAQ calls them "a convenience feature rather than a spending limit": nothing stops, and usage is billed even if an email is late or never arrives. Traffic works the same way, with notices to the project owner at 75% and 100% of the included traffic. An alert also says only that a total was passed, not which resource caused it, so set the limit below your real budget, where you would start investigating.

Reconcile each invoice against its consumption statement

The invoice is where the finished month becomes visible, and the FAQ says it can be late: "we may create them up to 28 days after the last month was completed." Accounts with less than €10 of usage are invoiced later still, once the balance passes €10 or after three months.

The invoice PDF groups similar resources into single lines. The individual consumption statement, linked from the invoice and downloadable as CSV, lists every resource on its own row with its ID, start and end dates, rate and total. Save it every month. Our invoice audit guide walks through checking a line, and Hetzner Cloud billing explained covers the hourly rates and monthly caps behind each row.

Export the activity history on a schedule

The activity history at console.hetzner.com/activities records who created, deleted, attached or assigned what, and when. It is account-wide, filterable by project and date, and exportable as CSV. If you suspect a bill is wrong, it is your most important evidence, because it shows when each resource existed, and the charges have to match that.

The history covers a rolling 90 days, and since January 2025 the Cloud API no longer offers a single list of all actions in a project. An invoice can arrive four weeks after its month ends, so the evidence for a disputed line may be close to expiring by then. Export the CSV once a month and keep it next to the consumption statement: together they record what existed and what it cost.

Estimate the run-rate from the API

Hetzner's Cloud API has a Pricing endpoint that "returns prices for all resources available on the platform", net and gross, and each server object carries its type's hourly and monthly price per location. With hcloud and jq, a first estimate of a project's month-end server cost takes one command:

# Monthly list price, net, of the servers that exist right now
hcloud server list -o json | jq '
  [ .[] | .location.name as $loc
    | .server_type.prices[] | select(.location == $loc)
    | .price_monthly.net | tonumber ] | add // 0'

Volumes work the same way: the size from hcloud volume list -o json times pricing.volume.price_per_gb_month from GET /v1/pricing. hcloud server-type describe cx23 prints one type's prices per location, including VAT.

This is a useful sanity check, and it is wrong in ways that matter:

  • It uses today's list price. The API returns the current price of a server's type, not what that server is billed. A server created before 15 June 2026, 08:00 CEST, keeps the 1 April 2026 price until it is rescaled, and for CPX and CCX servers today's list price is often more than double that (June change). The created field shows which side of that date a server is on; a rescale appears as a change_type action in the activity history and in GET /servers/{id}/actions. The billing FAQ lists rarer repricing cases, such as restoring a deleted server.
  • It sees only what exists now. A server created and deleted during the month is billed but missing from the list.
  • It leaves things out. Primary IPs, backups, snapshots, load balancers, traffic overage and Object Storage each need their own calculation.
  • It is net and per project. Each API token sees one project, so you need a token and an hcloud context per project, plus VAT.

Each fix is a small script; together they become a small service that records every resource's life, applies the right price to each hour, and keeps the history the Console drops on the first of the month.

Is there a Hetzner billing API?

No. The Cloud API covers infrastructure (servers, volumes, networks, load balancers, IPs, DNS zones) plus the Pricing endpoint, and none of its endpoints return usage, incurred costs or invoices. The api.hetzner.com API manages Storage Boxes, and the Robot webservice for dedicated servers returns order prices and setup fees but no invoices. Invoices and consumption statements are available only in your account at accounts.hetzner.com. In practice, "Hetzner billing API" means list prices from the Pricing endpoint, or costs you calculate from them yourself.

Where Hetzner's own tools stop

The native tools leave four gaps, and each is a common source of surprise invoices:

  • The month-boundary blind window. From the first of the month until the invoice arrives, up to four weeks later, no Hetzner view shows what last month cost.
  • No history and no forecast. Comparing this month with the last three means opening three CSVs, and nothing projects where the current month will end.
  • Alerts on project totals only. An email says a project passed its limit, not which resource caused it. Object Storage has no alert of its own, and nothing combines several accounts.
  • Robot servers appear only on the invoice. Dedicated servers ordered through Robot show up in no Cloud view, including their one-time setup fees, which are large and easy to miss; our billing gotchas cover them.

None of these is a flaw in the billing itself. They are the gaps between a billing system and cost tracking, and they decide whether you notice a cost increase the day it starts or weeks after the month ends.

A minimum tracking routine

If you do nothing else, this covers most surprises:

  1. Set a cost alert on every project, below your real budget, including each new project.
  2. Look at the Usage preview once a week.
  3. Each month, save the consumption statement CSV and an activity history export in one place.
  4. Turn on delete protection for servers with a locked price, so automation cannot delete and recreate them at the current list price.

Then, once a quarter, work through the usual culprits in Hetzner Cloud costs you're probably missing.

What ongoing cost tracking still needs

Hetzner gives you a running total for the current month, an email when a project passes a limit, and a detailed record of each finished month up to four weeks after it ends. That is enough to verify a bill, but not to see a cost change while it is happening. CloudTally closes that gap for Hetzner Cloud: it tracks every resource's cost as it accrues, at the price it is actually billed at, with budgets and a month-end forecast across all your projects, even when they sit in different Hetzner accounts.