Direct answer
As of 17 September 2026, cross-cloud object-storage pricing usually compares as two bills: storage and data movement. Storage is the cost of keeping bytes in a provider’s buckets, while data movement includes egress from the source, ingress to the destination, and any third-party transfer service. A provider that advertises free ingress can still produce a high total bill if the source charges egress. Cloudflare R2 is often positioned as a low-egress alternative to Amazon S3, and a 2026 comparison on shattered.io claims 99% lower egress; that can be directionally useful, but it is not a universal quote and should be checked against the destination, retrieval tier, API calls, and current published rates.
Also worth reading: What is an object storage data-plane for startups and how does it work? · What are the core unified object storage management strategies for modern enterprise platform teams? · object storage vs block storage for enterprises?
The most useful comparison is not simply AWS vs Google Cloud. Azure Blob, Oracle Object Storage, Wasabi, Backblaze B2, and Cloudflare R2 can all enter the equation, especially for platform teams that move data between regions or providers. AWS and Google Cloud remain major choices, but a 2026 market-share gap reported by tech-insider.org should be treated as directional rather than as a pricing rule. The right answer depends on request volume, storage class, replication, retention, and whether the data remains inside a cloud region or crosses a provider boundary.
A practical way to state the answer is this: if the goal is to avoid source egress, use an egress-friendly destination such as Cloudflare R2, but only if the source transfer path is priced correctly. If the goal is native integration with AWS or Google services, the cheapest-looking storage class may become expensive through retrieval, replication, and API traffic. The total cost of ownership should be calculated at the byte level, not by comparing headline monthly rates alone.
What pricing actually includes
Object-storage pricing is rarely a single monthly number. The main components are storage bytes, requests, data retrieval, replication, egress, and the cost of the transfer tool or SaaS layer. For example, a low storage rate can be offset by many small GET requests, frequent delete operations, or expensive retrieval from a cold tier. Platform teams should therefore compare the complete request path, including metadata operations and lifecycle transitions.
Ingress is often free at major object-storage providers, but that does not mean the whole migration is free. AWS’s documentation on scalable cross-cloud migration to Amazon S3 using distributed rclone shows that rclone can be used for distributed transfers, but it does not eliminate source egress or prove that every provider charges the same amount. Oracle’s cross-region backup discussion also shows that region choice can change the billing path, even when the same general service family is used. Always check the current pricing page for the exact region and class.
A second hidden cost is consistency. Public prices can change, and provider billing rules may differ for storage classes, minimum object sizes, early deletion, or data located in a different zone. The date context for this comparison is 17 September 2026, so any dollar figure should be revalidated before a purchase order is signed. The safest method is to build a spreadsheet from current published rates and then test it with a small measured transfer.
AWS, Google Cloud, and R2 comparison
| Feature | Amazon S3 | Google Cloud Storage | Cloudflare R2 | Wasabi | Backblaze B2 | Azure Blob | Oracle Object Storage |
|---|---|---|---|---|---|---|---|
| Common use | Broad AWS-native workloads | Google-native analytics and AI | Low-egress archival or edge-adjacent storage | Simple flat-fee storage | Cost-sensitive archives | Microsoft ecosystem | Oracle workloads and backups |
| Pricing model | Tiered storage, requests, retrieval, egress | Tiered storage, requests, retrieval, egress | Storage plus requests; low or no provider egress in many plans | Flat fee with included egress | Storage plus requests and egress | Tiered storage and egress | Tiered object storage and region-dependent charges |
| Best fit | Services already on AWS | GCP data pipelines | R2-to-app traffic or low-egress retention | Predictable archive bills | Long-term low-cost storage | Azure data platforms | Oracle database or application estates |
The 28% vs 15% market-share gap reported by tech-insider.org suggests that AWS has a much larger installed base than Google Cloud in the cited comparison. That can affect tooling, staff availability, and integration effort, but it does not prove that AWS is more expensive. Likewise, the shattered.io R2 vs S3 claim of 99% cheaper egress is useful as a warning about egress exposure, not as a complete pricing verdict. A platform team should compare the same workload on each provider before deciding.
How cross-cloud transfers change the bill
A cross-cloud move can create three separate charges: the source provider’s egress, the destination provider’s storage, and the cost of the transfer mechanism. If rclone is run on an AWS EC2 instance, the instance cost and network path may matter in addition to S3 egress. If the transfer runs through a third-party SaaS, that vendor may charge by GB moved, active transfers, or storage retained. The AWS article on distributed rclone migration is useful because it shows that large moves can be parallelized, but parallelism is not the same as lower pricing.
Replication is another cost multiplier. Copying the same object from S3 to Google Cloud Storage, then from Google to Azure, can turn one original dataset into several billed copies. Lifecycle rules may reduce storage cost, but they can also trigger retrieval or transfer fees when objects are moved to a lower tier. Early deletion penalties and minimum storage durations should be included, especially for short-lived AI datasets or temporary model artifacts.
The practical test is to measure bytes in, bytes out, and bytes retained. A 10 TB dataset that is transferred once may look cheap on storage alone, but if it generates 20 TB of egress during validation, the egress charge can dominate. A 1 TB dataset with millions of small requests may behave differently from a 10 TB dataset with large sequential reads. The pricing model should be tested with the actual object sizes, request rates, and retention period of the workload.
How to calculate the real total
The basic formula is simple: total cost equals storage plus requests plus retrieval plus egress plus replication plus transfer-tool cost. For a fair comparison, use the same object count, object-size distribution, and retention period on every provider. A useful estimate is: monthly cost = average stored bytes times storage rate, plus request count times request rate, plus egress bytes times egress rate, plus any fixed SaaS or infrastructure charge. Add a contingency for failed copies, retries, and data that must be kept during migration.
A second formula is needed for cross-cloud migration. Migration cost equals source egress plus destination ingress, usually zero at many providers, plus the cost of the transfer runner. If the runner is a virtual machine, include compute, storage, and network time. If the runner is a managed service, include per-GB or per-transfer pricing. The result should be compared with the annual cost of leaving the data in the source provider.
The third calculation is the cost of staying put. A provider with higher egress may still win if it avoids replication, reduces operational labor, or provides better performance for the application. Conversely, a low-storage provider may lose if its requests are expensive or its region lacks the required integration. The best model is therefore a three-way comparison: move once, replicate continuously, or keep the data native and pay the existing egress pattern.
Alternatives to moving everything
One alternative is to keep the source of truth in one provider and place a cache or CDN in front of the application. This reduces repeated reads from expensive regions, but it adds latency and operational complexity. Cloudflare R2 can be useful for archived assets or edge-facing content, while a CDN may be better for frequently requested media. The choice depends on whether the bottleneck is storage retention or application traffic.
A second alternative is selective replication. Keep hot data in AWS or Google Cloud, and move cold archives to R2, Wasabi, B2, or another lower-cost provider. This can reduce egress exposure without forcing a full rewrite. It does require consistent metadata, versioning, and restore procedures, and it can increase the number of vendors a platform team must support.
A third option is to redesign the workload around data locality. If an AI training job needs rapid access to large datasets, moving the dataset to the compute provider may cost less than repeatedly pulling it across clouds. The CoreWeave item in the research context points to the broader demand for large-scale AI infrastructure, but it is not an object-storage pricing source. It does show why storage location matters when compute scale and data movement are both high.
Common mistakes that inflate cost
The first mistake is comparing only storage rates. A provider with the lowest dollar per TB can have high request, retrieval, or egress charges that dominate the bill. The second mistake is ignoring object size. Many small files create many requests, while large sequential objects may be cheaper to move and read. The third mistake is assuming free ingress means free migration; source egress and transfer infrastructure still count.
The fourth mistake is underestimating lifecycle behavior. Moving an object to a cold tier can lower storage cost but increase retrieval latency and fees. Keeping an object in a hot tier because it is “almost always available” can be wasteful if the actual access pattern is rare. Early deletion penalties also matter when datasets are generated for short experiments and then discarded.
The fifth mistake is treating market share as a cost signal. A larger provider may offer more integrations and a larger talent pool, but that does not make its bill lower. The tech-insider.org 28% vs 15% comparison is useful context for platform planning, not proof that one provider is cheaper. The shattered.io 99% R2 egress claim is similarly useful as a prompt to test egress exposure, not as a substitute for a current quote.
When to act on a migration
Act when the projected annual egress and request costs exceed the cost of storage, transfer, and operational work. A useful threshold is to compare the next 12 months of current spending against a pilot that includes one representative data set. If the pilot shows a 20% or greater annual saving after transfer and support costs, a broader migration may be worth evaluating. The exact threshold should reflect risk, compliance, and application uptime requirements.
Act sooner when data is already moving frequently. A dataset that crosses cloud boundaries every day can turn a small per-GB difference into a large monthly bill. It is also worth acting when a provider’s region or storage class no longer matches the workload, or when a new service requires lower-latency access. Oracle’s cross-region backup lessons are a reminder that region placement can affect both reliability and cost.
Do not act solely because a benchmark says one provider is cheaper. Run a pilot with the actual object mix, request pattern, and retention policy. Measure restore time, API latency, and error rates as well as price. If the application depends on native AWS or Google services, the integration benefit may outweigh a modest storage saving.
Practical migration steps
Start by inventorying objects, storage classes, request counts, and monthly egress. Then choose a small, representative slice that includes large objects, many small files, and frequently read content. Use rclone or another supported tool to measure transfer time and error rate before committing to a full move. The AWS distributed rclone reference is a good starting point for understanding how parallel transfer can work in practice.
Next, build a bill model for the destination. Include storage, requests, retrieval, egress, replication, and the cost of the transfer runner. Run a second model for the source if the data remains there. Compare both models over 12, 24, and 36 months because lifecycle rules and access patterns can change the answer.
Finally, migrate in waves and verify checksums, metadata, versioning, and restore behavior. Keep the source available until the application has proven stable. After cutover, monitor egress and request volume for at least one billing cycle, then adjust lifecycle rules. The goal is not merely to move data; it is to move it at a cost that remains predictable when the workload grows.