After the Hetzner issues I blogged about last week, we evaluated alternatives. Here's the methodology, the data, and what we found.


Picking the Candidates

German S3-compatible object storage is a narrower field than you'd think once you add real constraints.

We excluded the enterprise hyperscalers upfront: STACKIT (Schwarz Group — Lidl's cloud arm, "European hyperscaler") and Open Telekom Cloud (Deutsche Telekom) are both legitimate for large regulated enterprises. But they're built for procurement processes, not developer self-service. Signing up, creating a bucket, and running a benchmark should take 10 minutes. Neither of those makes that easy, and neither is priced for lean SaaS teams.

That left four candidates we actually wanted to test:

ProviderLocationNotes
Hetzner (nbg1)NurembergThe Platzhirsch — everyone's default, and the one with the capacity issues
IONOS (eu-central-4)FrankfurtWell-known German provider, developer-friendly S3 API
Intercolo (de-fra)FrankfurtSmaller German incumbent, competitive pricing
Plusserver (de-west-1)CologneGerman-owned, GDPR-focused positioning

The selection was deliberate: one dominant player, and three smaller German incumbents we hadn't tried before. All four offer S3-compatible APIs, self-serve signup, and pricing that makes sense for a startup.

What We Didn't Benchmark — and Why

For completeness, here's the full German/EU provider landscape and why the others didn't make the cut:

Provider1TB storage/monthEgressWhy skipped
Hetzner€6.49 (incl. 1TB egress)€1/TB extra✅ Benchmarked
Intercolo€4.99 on-demand (€2.49+ contracted)1TB/TB included✅ Benchmarked
IONOS€7.00Free¹✅ Benchmarked
Plusserver€22.00Free✅ Benchmarked
Open Telekom Cloud€24.08€74.41/TBEnterprise pricing — €98.49/month with 1TB egress
STACKIT€26.62Enterprise hyperscaler, procurement-oriented

¹ IONOS charges for Object Query: €0.0014/GB data scan, €0.0005/GB data return — relevant for analytics workloads, negligible for standard asset serving.

Open Telekom Cloud and STACKIT both have legitimate EU credentials and proper compliance posture — but their pricing reflects enterprise procurement, not startup self-service. At €98.49/month for 1TB in + 1TB out (OTC) vs €6.49 for the same on Hetzner, the gap doesn't justify evaluation for our use case.


The Test Setup

We built a benchmark tool that uploads a 300-file corpus to each provider and downloads it in three rounds, taking the median. The corpus covers realistic production file sizes:

TierCountSize rangeRepresents
Tiny1002–10 KBJSON configs, manifests
Thumb10020–150 KBThumbnails, icons
Asset50200–500 KBCompressed assets
Large255–25 MB3D models, textures
XL2530–80 MBLarge video files

Files contain random bytes — incompressible — for realistic network load. The two metrics that matter: TTFB (time to first byte — measures per-request latency) and throughput (MB/s — measures raw bandwidth).

Test machine: office workstation, 1 Gbps uplink. More on that uplink in a moment.


Round 1: Something Looks Wrong

First run, all four providers, 300-file corpus:

ProviderLarge file throughput p50
Hetzner (nbg1)11.0 MB/s
Intercolo (de-fra)11.4 MB/s
IONOS (eu-central-4)11.0 MB/s
Plusserver (de-west-1)11.4 MB/s

Four completely different storage backends. All capped at ~11 MB/s. That's too uniform to be real.

It was our fault. The test machine had a misconfigured NIC — it was running at 100 Mbps instead of 1 Gbps. We were measuring our own bottleneck.

Lesson learned: before benchmarking providers, benchmark your test machine. If every backend looks identical, the problem is probably yours.

After fixing the uplink: completely different picture.


Round 2: The Real Test

Same corpus, 1 Gbps uplink. This is where the providers separated:

Large File Throughput (MB/s)

Provideravgp50p90
IONOS (eu-central-4)87.387.196.2
Hetzner (nbg1)72.472.684.1
Intercolo (de-fra)12.612.813.1
Plusserver (de-west-1)16.116.417.2

IONOS and Hetzner unlocked immediately. Intercolo and Plusserver stayed stuck at 12–16 MB/s — roughly 100–130 Mbps. That's not a coincidence; that's a hard bandwidth cap on their object storage product.

For context: at 16 MB/s, downloading a 100 MB file takes over 6 seconds. That's a dealbreaker for serving production assets to end users.

Intercolo and Plusserver were eliminated at this point.

Small File TTFB (ms) — Same Run

Provideravgp50p90max
IONOS (eu-central-4)221442179
Intercolo (de-fra)513878129
Plusserver (de-west-1)613899174
Hetzner (nbg1)12366185543

Worth noting: Intercolo and Plusserver are actually competitive on latency — 38ms p50 is reasonable. Their problem is purely the bandwidth cap. If they ever lift it, they'd be worth re-evaluating.


Final Comparison: IONOS vs Hetzner

With Intercolo and Plusserver out, we ran the full corpus across multiple days for a clean IONOS vs Hetzner result.

TTFB — Small Files

avgp50p90max
IONOS21ms12ms40ms211ms
Hetzner108ms100ms182ms376ms

IONOS is 8× faster on median small-file latency. For anything serving many small objects — API responses, thumbnails, manifests — that gap is significant.

Throughput — Large Files

avgp50p90
IONOS88.3 MB/s93.4 MB/s103.7 MB/s
Hetzner56.7 MB/s61.2 MB/s78.5 MB/s

IONOS leads by ~56% on average throughput. Hetzner's 61 MB/s is usable for production — it's not bad — but it's not close.

Parallel Load (5× Concurrent Large Files)

Aggregate MB/sWall time
Hetzner103.016.8s
IONOS106.516.2s

Under heavy parallelism, both providers converge near 100–107 MB/s aggregate. At 5× concurrency the local uplink becomes the bottleneck, not the storage backend. Neither provider's advantage compounds at scale — it's roughly a wash.


The Verdict

IONOS is the clear winner for latency-sensitive or throughput-critical workloads:

  • 12ms median TTFB for small files (Hetzner: 100ms)
  • 93 MB/s median throughput for large files (Hetzner: 61 MB/s)
  • Frankfurt-based, EU-owned, developer-friendly, sensible pricing

Hetzner is acceptable if bulk throughput at low cost is the priority — but given the ongoing capacity issues, we'd be cautious about committing new workloads to NBG1 right now. Their own advice is to use HEL instead.

Intercolo and Plusserver: promising on latency, eliminated on throughput. Hard bandwidth caps of ~100–130 Mbps are not production-grade for asset delivery. Would revisit if that changes.

STACKIT and Open Telekom Cloud: didn't benchmark. Enterprise procurement, enterprise pricing. Not the right tool for this use case.


The Bigger Picture

We started this evaluation because Hetzner Object Storage was causing us problems. We ended it with a clear answer: IONOS is the better backend for our workload.

But the more useful takeaway might be simpler: even in Germany, not all S3-compatible storage is equal, and the cheapest option isn't always the most reliable one. Given that Hetzner's issues have been running for months with minimal public documentation, it's worth checking your own stack.


Test run: 2026-03-06 to 2026-03-08. 300-file corpus, 3 rounds per file, median reported. Test machine: office workstation, 1 Gbps uplink. Results reflect our network path and may vary.