What is Cloudflare R2?
Cloudflare R2 is the S3-compatible object-storage service launched in 2021 with one disruptive promise: zero egress fees, ever, at any volume. Where AWS S3 charges $0.05–$0.09 per GB to leave the bucket and Wasabi conditionally waives egress only when egress ≤ stored volume, R2 simply does not bill for outbound data — making it the cheapest object storage in the industry for high-traffic workloads (video CDN origins, public APIs, web assets, ML model serving). Storage is $0.015/GB/month ($15/TB) for Standard, with a free tier of 10 GB-month storage + 1 million Class A operations + 10 million Class B operations per month. R2 buckets sit on Cloudflare's global edge network, fronted natively by Cloudflare CDN, R2 Workers binding, and Cloudflare's own Image Optimization and Stream products.
R2's storage cost is slightly higher than B2 ($6/TB) or Wasabi ($6.99/TB) — the trade is paid back when egress is high. A 1 TB bucket serving 100 TB of egress per month costs ~$15 on R2 vs ~$1,000 on B2 (after the 3× free tier) or ~$5,000 on AWS S3. CloudsLinker connects to R2 via its S3-compatible API and treats it like any other S3-class destination, while preserving R2's zero-egress benefit on the read side. The R2 connector is also the easiest way to migrate into R2 from existing S3, B2, or Wasabi buckets without touching local disk — typical multi-TB seeds finish in a single day.
Key features of Cloudflare R2
Why connect Cloudflare R2 to CloudsLinker
CloudsLinker connects to Cloudflare R2 using R2's S3-compatible API: an Access Key ID + Secret Access Key generated from R2 API Tokens, plus the account-specific endpoint https://<account-id>.r2.cloudflarestorage.com. Once connected, transfers run server-to-server using S3 multipart upload — objects above 200 MiB use multiple Class A operations to maximize parallelism. The connector handles all R2 storage classes (Standard, Infrequent Access), preserves user metadata and content-type headers, and supports R2 as both source and destination.
What you can do with Cloudflare R2 on CloudsLinker
S3 multipart copies into R2
Migrate from AWS S3, B2, Wasabi or GCS into R2 at full multipart-parallel speed. Once on R2, your egress to the public internet is permanently free.
Runs server-to-server
R2 transfers execute on CloudsLinker's servers. Your home or office bandwidth is irrelevant.
Scheduled & incremental sync
Hourly / daily / weekly jobs with delta mode. Pair R2 with a CloudsLinker schedule to keep a Cloudflare-served origin in sync with a working bucket on S3.
Filter by prefix, size, modified date
Migrate only <code>r2://bucket/assets/2026/</code>, skip files > 4 GB (close to R2's 4.995 GB single-PUT cap), or sync only this week's changes.
Common Cloudflare R2 transfer scenarios
Cut AWS / GCS egress bills: migrate to R2 for high-traffic origin
If your S3 bucket serves > $200/month in public-internet egress, migrating to R2 saves money from day one. CloudsLinker scripts the initial multipart-parallel seed (typically 1–3 TB/day per connection), then nightly delta sync keeps R2 current. Front R2 with Cloudflare CDN and your egress bill effectively drops to zero permanently.
Public model / dataset distribution (ML, OSS releases)
Open-source projects and ML model authors who'd otherwise pay AWS thousands a month to distribute large model weights via S3 use R2's zero-egress model to serve free downloads at any scale. CloudsLinker handles the initial migration from S3 to R2 and ongoing replication.
Cross-provider DR: B2 → R2 or R2 → B2
Run a primary on B2 ($6/TB cheap storage) and a DR replica on R2 (zero egress for restore). CloudsLinker mirrors between the two with delta sync for ~$21/TB/month combined — versus ~$45/TB just for primary on AWS S3.
Web asset hosting: replace S3 + CloudFront with R2
The classic 'S3 origin behind CloudFront CDN' pattern is expensive at scale. CloudsLinker migrates the bucket to R2 in one job; bind R2 to a custom domain via Cloudflare DNS for native integrated CDN. Result: same architecture, ~80–95 % lower bill.
Backup target for Cloudflare-centric infrastructure
If you already run on Cloudflare (Workers, Pages, D1, Durable Objects), R2 is the natural backup destination — same auth model, same dashboard, same performance characteristics. CloudsLinker schedules incremental backups from your existing S3 / Wasabi / B2 buckets into R2 on a nightly cadence.
How to connect Cloudflare R2 to CloudsLinker
R2 authenticates via the S3-compatible API: an Access Key ID + Secret Access Key generated from a Cloudflare R2 API Token, plus an account-specific endpoint URL.
Before you start
Create a dedicated R2 API Token scoped to specific buckets — never use a token with full-account permissions for a third-party tool:
- Sign in to the Cloudflare dashboard at https://dash.cloudflare.com.
- Go to R2 in the left navigation.
- Click Manage R2 API Tokens in the right sidebar.
- Click Create API Token.
- Configure:
- Token name — e.g.
cloudslinker-migrate - Permissions — Object Read & Write (for migration); Object Read only (for source-only)
- Specify bucket(s) — select the specific bucket(s); avoid “Apply to all buckets in this account”
- TTL — set an expiry to limit blast radius
- Token name — e.g.
- Click Create API Token. Copy the Access Key ID and Secret Access Key — Cloudflare shows the secret only once.
- Note your Account ID (visible in the right sidebar of the R2 page).
Connection steps
- In CloudsLinker, click Add Cloud → choose Cloudflare R2.
- Enter a display name (e.g. “R2 — production”).
- Paste the Access Key ID and Secret Access Key from step 6 above.
- Enter the Endpoint URL in this format:
https://<account-id>.r2.cloudflarestorage.com— substituting your Account ID from step 7. - Click Confirm — CloudsLinker validates with
ListBucketsand shows the connection as ready.
Revoke access
To revoke CloudsLinker’s token later: dash.cloudflare.com → R2 → Manage R2 API Tokens → find the token → Roll (rotate) or Delete (immediate revocation).
Cloudflare R2 upload & download limits you should know
R2’s limits are S3-compatible with a few R2-specific quirks (object size 5 GB shy of 5 TB, single PUT 5 MB shy of 5 GB):
- Maximum object size: 4.995 TB (5 TB minus 5 GB).
- Maximum single PUT / single multipart part: 4.995 GB (5 GB minus 5 MB).
- Multipart trigger: objects above 200 MiB are uploaded as multipart automatically by most S3 clients (CloudsLinker included), each part counting as a separate Class A operation.
- Free tier (per month): 10 GB-month storage, 1 million Class A operations, 10 million Class B operations. Egress always free regardless of tier.
- Storage pricing: Standard $0.015/GB/month ($15/TB). Infrequent Access cheaper but with higher operation fees.
- Operation pricing: Class A (writes / list) $4.50/million; Class B (reads) $0.36/million.
- Egress: $0/GB always. Via S3 API, Workers binding, public r2.dev domain, or custom domain — all free outbound.
- API rate limits: R2 enforces per-bucket and per-account limits, with automatic back-off on excess. CloudsLinker handles
503 Slow Downresponses. - Bucket / object count: practically unlimited.
- Versioning: supported via S3-compatible API (
PutBucketVersioning). - Object Lock: available in beta for WORM retention.
Sources: Cloudflare R2 docs: Limits, Cloudflare R2 docs: Pricing, Cloudflare R2 docs: Upload objects, Cloudflare R2 announcement: zero egress.
Cloudflare R2 + CloudsLinker — Frequently Asked Questions
Are R2 egress fees really zero in all cases?
r2.dev domains. There is no monthly cap, no proportional-to-storage rule (unlike Wasabi), no overage. Class B (read) operation fees still apply ($0.36/million GETs), but the bytes themselves are free.
What's the maximum object size on R2?
How does the free tier work?
What are Class A vs Class B operations?
Are my R2 credentials safe with CloudsLinker?
Does CloudsLinker support R2's Infrequent Access tier?
Can I use R2 as a destination for backing up other clouds?
How fast can CloudsLinker push data into R2?
Does R2 support Object Lock for ransomware-resistant backups?
Is this an official Cloudflare partnership?
Cloudflare R2 transfer guides
Step-by-step walkthroughs for moving data to and from Cloudflare R2.
Conclusion
Cloudflare R2's zero-egress model rewrites the economics of object storage for any workload where data is read more than it's written — CDN origins, ML distribution, public datasets, web assets, anything that flows out of the bucket more than it flows in. CloudsLinker makes migrating into R2 a single multipart-parallel job, with delta sync to keep ongoing replication efficient. Connect with R2 API Token and account-specific endpoint, and run your first migration in minutes.
Online storage services supported by CloudsLinker
Transfer data between over 49 cloud services with CloudsLinker
Didn't find your cloud service? Contact: [email protected]