S3-compatible storage lets you keep application uploads, backups and downloadable files outside a server's filesystem while continuing to use familiar tools. The important comparison is the whole workload: stored bytes, object count, downloads, requests, retention and the features your application uses.
This guide compares European hosting options and providers with EU locations. It also distinguishes ordinary region selection from jurisdiction restrictions and S3 API compatibility from a promise that every AWS feature is supported. We operate DanubeData, which is included in the comparison.
Last reviewed: 2 November 2026. Prices are public list-price references in their original currencies, before applicable taxes unless stated otherwise. Provider billing units differ: a decimal TB is not a TiB. These are documentation checks, not throughput or restore benchmarks.
Price comparison: include the charging model
| Provider | Storage price reference | Traffic and other charges | Location/quote check |
|---|---|---|---|
| DanubeData | €5.49/month per bucket holding data; 1 TB included | 1 TB outbound included; storage and traffic overage below | Germany; excludes VAT |
| Hetzner | Account base fee with included storage quota | Account-wide quota and overage; active empty buckets still trigger base fee | Germany or Finland; check current localized quote |
| Cloudflare R2 Standard | $0.015/GB-month | Internet egress free; operations billed, with a free allowance | Choose EU jurisdiction when required |
| Backblaze B2 | Starts at $6.95/TB/month | Free egress up to 3× average stored data; excess/partner terms apply | Select the appropriate data region |
| Scaleway Standard | €0.00803/GB-month One Zone; €0.01606 Multi-AZ | 75 GB egress free, then €0.01/GB; requests included | Select region and redundancy class |
| OVHcloud | Varies by zone and storage class | Current Standard tables list external transfer/API requests free; cold classes differ | Use the regional currency and selected class |
| Amazon S3 | Region and storage-class quote | Requests, retrieval, transfer and optional features can add charges | Select the exact EU region |
| Google Cloud Storage | Region and storage-class quote | Operations, retrieval and transfer can add charges | Check XML interoperability rather than assume full S3 parity |
Sources: DanubeData pricing, Hetzner billing model, R2 rates, B2 rates, Scaleway rates, OVHcloud rates, S3 pricing and Cloud Storage pricing. A free trial or signup credit is not a permanent storage price.
Understanding the costs
Storage, downloads and requests are separate
A backup that is rarely restored and a file library downloaded repeatedly can have the same stored size and very different bills. List monthly average storage, outbound traffic and read/write requests separately. For backups, include full recovery traffic, not just the usual incremental uploads.
Small objects can make requests and metadata significant. Version history, incomplete multipart uploads and retention policies can increase stored bytes beyond the visible current files. A CDN can change origin traffic and request patterns; check its own bill and contractual conditions too.
Base fees change small-workload comparisons
DanubeData charges per bucket holding data; Hetzner documents an account-wide base fee for at least one active bucket, even empty. Those are different models. Ten small buckets do not necessarily cost the same as one bucket with ten prefixes. Compare the structure your access policies and application actually require.
DanubeData examples with explicit assumptions
The current rate is €5.49/month per non-empty bucket, including 1 TB storage and 1 TB outbound traffic. Empty buckets are free. Extra storage is €5.49/TB/month and extra outbound traffic €1/TB; uploads and API requests have no fee. Billing is hourly and prices exclude VAT.
- One bucket holding 100 GB throughout a full billing month and sending 200 GB remains within both included allowances: base charge €5.49.
- One bucket averaging 2 TB stored and sending 2 TB in the same period: €5.49 base + €5.49 extra storage + €1 extra outbound = €11.98.
- Two non-empty buckets each within their own allowances have two base fees: €10.98.
These are simplified full-month examples at the displayed rates, not invoices or performance measurements. Hourly usage and billing-period allocation affect an actual bill.
Provider details
Cloudflare R2
R2 is a candidate when repeated downloads would otherwise dominate cost. Free egress does not make the whole service free: stored data and operation classes still matter. Standard and Infrequent Access have different retrieval and request terms.
The old claim that R2 only offers location hints is incomplete. R2 supports EU jurisdiction restrictions, distinct from placement hints. Select the jurisdiction at creation and use the matching endpoint; it cannot be changed on an existing bucket. Review the rest of the application data flow separately.
Fit: download-heavy assets or applications already using Cloudflare. Check: API operations and features; the compatibility list supports lifecycle configuration but does not implement PutBucketVersioning. R2 bucket locks are not a substitute for assuming ordinary S3 versioning exists.
Backblaze B2
B2 is worth including for backup and archive workloads. Its current advertised starting rate is $6.95/TB/month, rather than the older $6 rate. Egress up to three times average monthly stored data is included; additional downloads are ordinarily $0.01/GB, with separate partner exemptions. Check the applicable region and rate terms.
Fit: backup software with B2 support and workloads whose storage/restore pattern suits the rates. Check: data-region selection, object history, retention and the exact S3-compatible API features your software needs. Do not assume every AWS administrative API is available.
Hetzner Object Storage
Hetzner documents endpoints in Falkenstein, Nuremberg and Helsinki. Its account-wide storage and traffic allowance can be useful when several buckets share a budget. Confirm the current price in the correct currency and VAT locale rather than copying an old rounded per-TB figure.
Versioning and lifecycle policies are supported. See the versioning guide and bucket/lifecycle FAQ. Configuration changes can take time to propagate, so follow the provider's stated waiting period before testing writes.
Fit: EU backup or application storage, including workloads already hosted at Hetzner. Check: the supported-actions exceptions, credentials, encryption and any public custom-domain requirements.
DanubeData Object Storage
DanubeData offers German-hosted storage with versioning, lifecycle expiration, CORS, bucket policies and pre-signed URLs. Existing application resources can be managed in the same platform. This convenience does not imply zero latency, a private route for every connection or full AWS feature parity.
Fit: application files and backup targets when the per-bucket allowance and Germany location suit the workload. Check: bucket count, growth, version retention and application behaviour with the endpoint. Review the current storage features and estimate a bucket.
Scaleway, OVHcloud, AWS and Google Cloud
Scaleway and OVHcloud offer several location and redundancy/storage-class choices; choose the actual class before comparing a price. A single-zone hot-storage row is not equivalent to a multi-zone row or a cold archive with retrieval fees.
AWS S3 can be the appropriate choice when an application depends on its broader integrations or precise S3 semantics. Keep the region, request mix, transfer path and lifecycle transitions in the quote. Google Cloud Storage is a related object-storage option, but its XML API interoperability should not be described as blanket compatibility with every S3 operation or SDK feature.
A compatibility matrix you can verify
Documentation status checked on 2 November 2026; this is not a runtime compatibility test:
| Provider | Object versioning | Lifecycle configuration | Primary reference |
|---|---|---|---|
| AWS S3 | Supported | Supported | Versioning and lifecycle |
| Cloudflare R2 | S3 PutBucketVersioning not implemented | Supported, with documented API differences | S3 operation matrix |
| Hetzner | Supported | Supported | Versioning and lifecycle behaviour |
| DanubeData | Supported | Expiration rules supported | Storage features |
These feature names do not imply identical retention, permissions or API coverage. Check the operations your software uses:
| Capability | What to check before committing |
|---|---|
| Core object operations | Upload, download, overwrite, delete, metadata and list pagination with your SDK |
| Large files | Multipart upload, retry, interrupted-upload cleanup and download verification |
| Versioning | Enable it in a scratch bucket, overwrite an object and retrieve the earlier version |
| Lifecycle | Current and noncurrent expiration behaviour, plus incomplete multipart cleanup |
| CORS and signed URLs | Allowed origins/methods, expiry, browser upload and unauthorized requests |
| Retention and locks | Supported API, creation-time requirements, permissions and deletion protection |
| Encryption | Supported modes and who manages the keys; client-side encryption requirements |
| Application integrations | Events, IAM, policies, replication and other provider-specific services |
Compatibility is a set of operations, not a single yes/no label. This checklist is not a claim that we ran the tests on every provider. For a concrete tool setup, use the existing rclone S3 guide.
Choosing by workload
- Mostly stored backups: compare storage and retention, then price a full restore. Test recovery before deleting the previous backup.
- Frequent public downloads: model egress and operation charges; include CDN behaviour and costs.
- Many small isolated buckets: compare per-bucket and account-wide minimums.
- Strict location requirements: select a documented region or jurisdiction and review backups, metadata, processors and application integrations.
- An existing platform: a shared console may simplify operations, but test the actual data path and recovery process.
There is no universal cheapest or fastest provider. A low storage rate can lose its advantage under frequent reads, a minimum commitment or a required feature that costs extra.
Migration without assuming an endpoint change is enough
- Inventory buckets, object counts and sizes, versions, policies, CORS, lifecycle rules and applications using signed URLs.
- Create a restricted destination credential and copy a representative sample. Validate content, metadata and application reads/writes.
- Plan how versions and retention are handled; an ordinary copy of current objects may not reproduce historical versions or policies.
- Copy the bulk data, then use a write freeze or a defined catch-up process for changes during the copy.
- Check counts and independent hashes where possible. Multipart ETags are not universally whole-file MD5 checksums.
- Switch the application configuration and monitor errors. Retain the original until verification and the agreed rollback window finish.
For backup use, continue with the Linux server backup guide. A copied repository is only useful if you can unlock and restore it with the keys and tooling available during an incident.
Frequently asked questions
Can I reuse an AWS SDK?
Usually for supported operations, with the provider's endpoint, credentials, region/signature settings and sometimes addressing-style changes. Test the SDK version and feature calls you use; do not assume an endpoint change covers IAM, events or every checksum mode.
Does an EU bucket make my application GDPR compliant?
Location is one requirement you may have. Your own purposes, access controls, retention, processor agreements and transfers through other services still need review. Provider headquarters alone does not answer those questions.
Is versioning a backup?
It helps recover overwritten objects, but permissions or retention changes can still expose versions to deletion. Keep an independent recovery plan and verify it with a restore.
Estimate DanubeData S3-compatible storage for your bucket count and traffic, then test it with a representative workload before migrating production data.