Amazon S3, Cloudflare R2 and DigitalOcean Spaces all provide object storage, but their strongest use cases differ: S3 offers the deepest AWS ecosystem, R2 removes its own internet-egress bandwidth charge, and Spaces bundles storage plus outbound transfer into a simple monthly plan. Compare total storage, API operations, retrieval and egress—not price per GB alone.
For a real workload, total cost can include storage, API operations, retrieval, internet egress, CDN delivery, replication and minimum-retention rules. The right choice therefore depends on how much data you store, how often it is read, where it is delivered, and which provider-specific features your application requires.
| Factor | Amazon S3 | Cloudflare R2 | DigitalOcean Spaces |
|---|---|---|---|
| Pricing model | Usage-based by Region, class, requests and transfer path | Usage-based storage + Class A/B operations | Monthly bundle + overage |
| Internet egress | Depends on Region and transfer path | No R2 bandwidth charge | Included allowance, then overage |
| API | Reference S3 API | S3-compatible | S3-compatible |
| Best reason to evaluate | AWS-native lifecycle, replication and governance | Egress-heavy delivery and Cloudflare-native architecture | Simple predictable bundle in the DigitalOcean ecosystem |
This comparison uses current official pricing and product documentation from Cloudflare, DigitalOcean and AWS. Pricing examples show the formula, units, region, request counts and transfer assumptions rather than claiming a universal cheapest provider. No Digital Bhatti latency, throughput or durability benchmark is claimed.
Last verified: September 24, 2026. Object-storage prices, free allowances, regions, request classes and transfer rules can change; recheck the live provider pricing pages before production migration.
Cloudflare R2 Standard: $0.015/GB-month, $4.50/million Class A operations, $0.36/million Class B operations, 10 GB-month + 1M Class A + 10M Class B included monthly, and no R2 internet-egress bandwidth charge.
DigitalOcean Spaces Standard: $5/month base subscription including 250 GiB storage and 1,024 GiB outbound transfer; additional storage $0.02/GiB-month and additional outbound $0.01/GiB.
Amazon S3: this article uses US East (N. Virginia) only for its worked example. S3 storage, request and transfer prices vary by Region, storage class and transfer path, so the AWS Pricing Calculator remains the appropriate production estimator.
Model Storage + Requests + Retrieval + Egress Before Choosing
Cloudflare R2 deserves close evaluation when internet egress would dominate the bill. DigitalOcean Spaces is straightforward when its bundled storage and outbound allowance fit the workload. Amazon S3 deserves close evaluation when AWS-native storage classes, lifecycle, replication, governance and service integration are central. None is universally cheapest for every workload.
1. Amazon S3 vs Cloudflare R2 vs DigitalOcean Spaces: Comparison Matrix
| Provider | Storage Model | Internet Egress | API / Ecosystem |
|---|---|---|---|
| Cloudflare R2 | Standard and Infrequent Access, plus Class A/B operation pricing. | No R2 internet-egress bandwidth charge; connected metered Cloudflare services can still have their own charges. | S3-compatible API plus Cloudflare Workers/edge ecosystem. |
| DigitalOcean Spaces | Monthly Standard bundle plus optional Cold Storage. | 1,024 GiB outbound included monthly; additional outbound billed per GiB. The built-in CDN shares this allowance, and origin-to-edge transfer counts toward it. | S3-compatible API and integrated CDN workflow. |
| Amazon S3 | Many storage classes and region-dependent pricing. | Depends on region and transfer path; AWS provides a shared monthly internet data-transfer allowance and tiered transfer pricing. | Reference S3 API and deep AWS lifecycle, replication, event, analytics and governance integrations. |
2. Current Cloudflare R2 Pricing
Cloudflare currently lists the following R2 rates:
- Standard storage: $0.015 per GB-month.
- Standard Class A operations: $4.50 per million requests.
- Standard Class B operations: $0.36 per million requests.
- Standard free tier: 10 GB-month storage, 1 million Class A operations and 10 million Class B operations per month.
- Internet egress: no R2 bandwidth charge.
- Infrequent Access: $0.01 per GB-month, $0.01 per GB retrieval processing, higher operation rates and a 30-day minimum storage duration.
R2 bills storage in GB-months and rounds usage to the next billing unit. Its free tier applies to Standard storage, not Infrequent Access. Operation billing is also rounded by billing unit: for example, 1,000,001 billable operations can be charged as 2 million operations. That rounding matters when a workload sits just above an included allowance or operation block.
3. Current DigitalOcean Spaces Pricing
DigitalOcean currently lists Spaces Standard at $5 per month, including:
- 250 GiB of Standard storage across the subscription.
- 1,024 GiB of outbound data transfer per month.
- Additional Standard storage at $0.02 per GiB per month.
- Additional outbound transfer at $0.01 per GiB.
DigitalOcean also documents a Cold Storage tier at $0.007 per GiB-month with $0.01/GiB retrieval pricing, a 30-day minimum-retention model, early-deletion/update considerations and 128 KiB minimum object/retrieval billing behavior. DigitalOcean currently waives Cold Storage retrieval fees up to the workload's average daily Cold Storage usage for the month. Do not compare Cold Storage directly with frequently accessed Standard storage without including those rules.
For Spaces Standard, the integrated CDN is included at no additional CDN subscription charge, but CDN and origin traffic share the same Spaces transfer allowance. DigitalOcean also states that transfer between Spaces origin and its CDN edge counts toward that allowance.
4. Amazon S3 Pricing Requires a Region and Transfer Path
Amazon S3 does not have one universal price. Storage class, AWS Region, request type, retrieval behavior, management features and data-transfer destination can all affect the bill.
As a common reference point, AWS public pricing shows $0.023 per GB-month for the first 50 TB of S3 Standard storage in common U.S. regions such as US East (N. Virginia). Standard request pricing commonly used in the same region includes $0.005 per 1,000 PUT/COPY/POST/LIST-class requests and $0.0004 per 1,000 GET-class requests. AWS also provides 100 GB per month of free data transfer out to the internet aggregated across eligible AWS services and regions, with tiered internet transfer pricing after that allowance.
Important: that 100 GB internet-transfer allowance is shared across eligible AWS services rather than being an independent 100 GB allowance for each S3 bucket. If another AWS service consumes the allowance, less may remain for S3.
For any production estimate, use the live AWS S3 pricing page or AWS Pricing Calculator for the chosen region and architecture rather than copying a fixed number from a generic comparison.
5. Cloudflare R2 vs DigitalOcean Spaces: Egress and Pricing Model
This is the clearest current GSC opportunity for this page. The key difference is not simply storage price—it is how outbound delivery is billed.
| Question | Cloudflare R2 | DigitalOcean Spaces |
|---|---|---|
| Base storage model | Usage-based GB-month pricing with a Standard free tier. | $5 monthly bundle includes 250 GiB. |
| Internet egress | No R2 bandwidth charge. | 1,024 GiB included, then $0.01/GiB. |
| Operations | Separate Class A/B operation pricing after free allowances. | Evaluate documented API and product limits rather than assuming R2-style operation billing. |
| Best reason to shortlist | High outbound delivery or Cloudflare-native architecture. | Simple predictable bundle inside the DigitalOcean ecosystem. |
6. Keep GB, GiB, TB and TiB Explicit
Provider pricing pages do not always use the same units. Cloudflare R2 and Amazon S3 commonly publish GB-based prices, while DigitalOcean Spaces uses GiB for its storage and transfer allowances.
For reproducible cost modeling:
- 1 GB = 1,000,000,000 bytes.
- 1 GiB = 1,073,741,824 bytes.
- 1 TB = 1,000 GB.
- 1 TiB = 1,024 GiB.
Do not compare “500 GB” on one provider to “500 GiB” on another as though they are identical. The worked scenario below starts with the same byte-level workload and converts it into each provider's published billing unit.
7. Worked Example: 500 GB Stored + 2 TB Internet Delivery + API Requests
This dated example assumes the same workload across providers for one month:
- 500 GB of frequently accessed object data stored for the full month.
- 2 TB (2,000 GB) delivered to the public internet.
- 2 million write-type requests.
- 20 million read-type requests.
- No replication, special analytics, object-lock, accelerated-transfer, taxes, negotiated discounts or paid CDN layer.
- For Amazon S3 only: US East (N. Virginia), S3 Standard, first 50 TB storage tier, first internet-transfer tier, and the general 100 GB/month AWS internet-transfer allowance assumed unused by other eligible AWS services.
For DigitalOcean, 500 GB converts to approximately 465.66 GiB, while 2,000 GB converts to approximately 1862.65 GiB.
| Provider | Storage | Requests | Internet Delivery | Illustrative Monthly Total |
|---|---|---|---|---|
| Cloudflare R2 Standard | 500 GB − 10 GB included = 490 billable GB × $0.015 = $7.35. | 2M Class A − 1M included = 1M × $4.50 = $4.50; 20M Class B − 10M included = 10M × $0.36/M = $3.60. | R2 internet-egress bandwidth charge: $0. | ≈ $15.45 |
| DigitalOcean Spaces Standard | $5 base includes 250 GiB; extra 215.66 GiB × $0.02 ≈ $4.31 additional storage. | The current Spaces pricing page does not list a separate Standard per-request charge comparable to R2 Class A/B or S3 request billing; API/service limits still apply. | 1,024 GiB included; extra 838.65 GiB × $0.01 ≈ $8.39. | ≈ $17.70 |
| Amazon S3 Standard — us-east-1 assumption | 500 GB × $0.023 ≈ $11.50. | 2M PUT-class × $0.005/1K ≈ $10.00; 20M GET-class × $0.0004/1K ≈ $8.00. | 2,000 GB − 100 GB shared AWS allowance = 1900 GB × $0.09 ≈ $171.00. | ≈ $200.50 |
Interpretation: R2 is inexpensive in this particular scenario because public internet egress is not billed by R2, but request charges are visible once the free operation allowances are exceeded. Spaces remains comparatively simple because storage and transfer are bundled. S3 is expensive in this specific direct-to-internet scenario largely because data transfer dominates the example; that does not imply the same result for an AWS-native workload, a CloudFront design, low-egress storage, archive classes or negotiated pricing.
8. Additional Cost Scenarios to Model
Before choosing a provider, calculate at least these workload shapes:
- 100 GB stored / low download: storage price and minimum monthly bundle matter more than egress.
- 500 GB stored / 500 GB monthly delivery: compare bundle utilization, operations and CDN path.
- 1 TB stored / 2 TB monthly delivery: egress becomes materially more important.
- Backup archive: compare storage class, retrieval fees, minimum retention and restore frequency.
- Public media library: include read operations, CDN behavior, custom domain and cache-hit ratio.
Use consistent units when modeling. Cloudflare commonly presents GB-based R2 pricing, while DigitalOcean Spaces documents GiB allowances.
Also model a request-heavy workload. Cloudflare's own R2 pricing examples show that a small amount of stored data can still produce a material bill when Class B read volume is very high. “Free egress” should never be interpreted as “free object storage.”
9. S3-Compatible Does Not Mean Feature-Identical
Cloudflare R2 and DigitalOcean Spaces support S3-compatible APIs, which allows many SDKs, CLI tools and backup applications to work after changing endpoint and credentials.
Compatibility should still be tested feature by feature. Check the exact behaviors your application needs, including:
- multipart uploads,
- presigned URLs,
- CORS,
- versioning,
- lifecycle rules,
- bucket policies,
- encryption,
- event notifications,
- object locking, and
- provider-specific storage classes.
Amazon S3 remains the reference API and has the deepest native AWS integration, but portability depends on the subset of S3 features your application actually uses.
10. CDN Delivery and Custom Domains
Object storage and CDN delivery are related but separate layers.
- Cloudflare R2: can be exposed through Cloudflare custom domains and edge services.
- DigitalOcean Spaces: includes an integrated CDN workflow. CDN delivery uses the same Spaces transfer allowance, and DigitalOcean says origin-to-edge transfer also counts toward that allowance.
- Amazon S3: is commonly paired with CloudFront or another delivery layer.
Do not assume a CDN cache hit and an origin-object request have the same cost or latency. Model the actual delivery architecture.
11. WordPress Media Offload
All three services can be candidates for WordPress media offload when the chosen plugin supports the endpoint and required features.
Test on staging before moving a production media library. Verify:
- original attachments and generated image sizes,
- custom-domain or CDN URLs,
- media deletion behavior,
- private media requirements,
- plugin compatibility,
- backup behavior, and
- migration/reversal procedure.
Object storage can reduce local VPS disk pressure, but it does not automatically improve WordPress TTFB, database performance or Core Web Vitals. If media is offloaded and removed locally, verify that your backup system still captures the object-storage copy or maintains an independent recoverable copy.
12. Backups and Archives: Object Storage Is Not Automatically a Backup
A bucket containing the only copy of production data is still a single logical copy. If an application, compromised credential or administrator can delete that copy, simply moving files to object storage has not created independent recovery.
For backup workloads, evaluate:
- versioning,
- retention or object-lock controls,
- cross-account or cross-provider copies,
- retrieval cost,
- minimum retention,
- restore speed, and
- tested recovery procedures.
For the broader backup decision, see the Cloud Storage & Backup Options Guide.
13. Migration Cost and Exit Planning
When migrating, the source provider's outbound-transfer rules can matter more than the destination's storage price.
AWS currently documents an approval process that can provide eligible customers with credits for data transfer out when moving all data off AWS or all data off a particular AWS service. Treat that as a migration-specific program with eligibility and process requirements—not as ordinary free S3 egress. Check the current AWS FAQ before planning a move.
DigitalOcean documents cross-region Spaces migration as a copy into a newly created destination bucket rather than an in-place region move. That makes object verification, source retention and cutover planning important during migration.
Before moving production data:
- estimate source-side egress,
- estimate destination write operations,
- test multipart behavior,
- preserve metadata where required,
- verify checksums or object counts,
- plan DNS/custom-domain cutover, and
- keep a rollback path until verification is complete.
14. Linux and Automation Workflow
S3-compatible tooling such as rclone can simplify migration and backup workflows, but destructive synchronization commands should be tested carefully.
rclone copy /var/www/html/backups remote:my-company-backups \
--transfers 8 \
--checkers 8
copy is shown here rather than a destructive mirror command. If you use sync, understand its deletion behavior and test against disposable data first.
Use least-privilege API credentials and keep them out of public repositories, logs and screenshots.
15. Workload Decision Matrix
| Workload | Strong Candidate to Evaluate | Reason to Evaluate |
|---|---|---|
| High-egress public assets | Cloudflare R2 | No R2 internet-egress bandwidth charge; still model operations and connected services. |
| Predictable small/medium media workload | DigitalOcean Spaces | Simple $5 bundle with 250 GiB storage and 1 TiB outbound included. |
| AWS-native application | Amazon S3 | Broad native AWS storage classes, lifecycle, replication, event and governance integrations. |
| WordPress media offload | R2 / Spaces / S3 | Plugin compatibility, delivery path and deletion/backup behavior matter more than brand alone. |
| Backup/archive | Compare storage classes and recovery model | Retrieval, minimum duration and independent recovery controls can dominate the decision. |
16. Common Object-Storage Comparison Mistakes
- Comparing only storage $/GB: requests, retrieval and egress may dominate.
- Calling R2 “free”: egress bandwidth is free, but storage and operations can be billable.
- Ignoring the Spaces bundle: a $5 minimum can be efficient or wasteful depending on utilization.
- Using one S3 number globally: S3 pricing varies by region, class and transfer path.
- Assuming S3-compatible means identical: test the exact operations you depend on.
- Treating a bucket as a backup by default: recovery requires deliberate redundancy/retention.
- Claiming one provider is always faster: latency requires controlled testing across regions, cache states and object sizes.
- Mixing GB and GiB silently: normalize the same byte-level workload before comparing bills.
- Ignoring request-volume rounding: R2 operation billing rounds to billing units, so an overage just above a block can cost more than a simple per-request mental model suggests.
- Treating the Spaces CDN as separate free bandwidth: the CDN shares the Spaces transfer allowance, including origin-to-edge transfer.
- Applying the AWS 100 GB transfer allowance per bucket: the allowance is aggregated across eligible AWS services and regions.
17. Related Digital Bhatti Guides
- Cloud Storage & Backup Options — broader backup/storage selection.
- Shared vs VPS vs Cloud Hosting — choose the compute layer separately.
- Image Optimization Guide — optimize image formats and delivery.
- TTFB Optimization Guide — diagnose server-response latency independently of object storage.
Frequently Asked Questions
Does Cloudflare R2 charge egress fees?
Cloudflare currently lists no R2 bandwidth charge for data transferred to the internet from either Standard or Infrequent Access storage. Storage and operations still have pricing, and Infrequent Access adds retrieval processing and a minimum storage duration.
How much outbound transfer does DigitalOcean Spaces include?
DigitalOcean currently includes 1,024 GiB of outbound transfer per month with a Spaces subscription. Additional outbound transfer is listed at $0.01 per GiB.
Is Cloudflare R2 cheaper than DigitalOcean Spaces?
Not universally. R2 can be attractive for egress-heavy workloads, while Spaces can be simple and cost-effective when its bundled storage and transfer fit the workload. Calculate storage, operations and outbound delivery for your own usage.
Are R2 and Spaces fully compatible with Amazon S3?
No. Both support S3-compatible workflows, but compatibility does not guarantee every S3 feature, event model, storage class or policy behaves identically.
Which is better for WordPress media offload?
Any of the three may fit if the offload plugin supports it correctly. Compare plugin support, CDN/custom-domain behavior, egress, API compatibility, deletion behavior and backup strategy.
Is object storage a backup?
Not automatically. If the bucket is the only copy and deletion or compromised credentials can remove it, you still need versioning, retention, replication or another independent recovery copy.
Does DigitalOcean charge separately for the Spaces CDN?
DigitalOcean currently includes the Spaces CDN without an additional CDN subscription charge, but CDN traffic uses the Spaces transfer allowance. DigitalOcean also states that transfer between the bucket origin and CDN edge counts toward that allowance.
Why can an R2 bill increase even when egress is free?
R2 still charges for storage and billable operations after the included monthly allowances. Infrequent Access can also add retrieval processing and minimum-duration charges. Very request-heavy workloads can therefore cost materially more than their stored-data size suggests.
Is AWS's 100 GB internet-transfer allowance available separately for every S3 bucket?
No. AWS documents the 100 GB monthly internet data-transfer allowance as aggregated across eligible AWS services and regions, not as a separate allowance for every S3 bucket.
Abdul Shakoor
Founder of Digital Bhatti, an independent technical publication focused on web hosting and infrastructure, WordPress, technical SEO, web performance and automation.
Pricing comparisons are documentation-led and dated. Recheck live vendor pricing and your exact region, transfer path and request mix before production migration.