Every CDN comparison article opens with a table of per-GB rates. CloudFront $0.085, Fastly $0.12, Bunny $0.01, Cloudflare “unmetered.” Then you migrate, and the bill doesn’t match the table.
The rate card is maybe 60% of your CDN bill. The rest is request charges, cache misses hitting your origin at full egress price, and a regional traffic mix that quietly moves you into a tier three times more expensive than the headline. I’ve watched a team migrate off CloudFront to save “90%” on bandwidth and land at 40% savings once the S3 origin egress showed up on the AWS invoice instead.
So here’s the cost of five CDNs at three volumes, with the corrections applied. Prices below are list rates as of July 2026 — verify against the vendor pricing page before you commit to anything, because AWS in particular has been rewriting its CDN pricing model aggressively over the last eight months.
Why the per-GB number lies
Four things sit between the rate card and the invoice.
Request charges. CloudFront bills $0.0100 per 10,000 HTTPS requests in the US and Europe (HTTP is $0.0075, but you’re not serving HTTP). Fastly is around $0.0075 per 10,000. For a static site serving 200 KB pages that’s noise. For a SaaS API doing 500M small JSON responses a month, requests are the majority of the bill. Run your actual requests-per-GB ratio before comparing anything.
Origin egress on cache miss. This is the one that ruins migration math. If your origin is S3 and your CDN is CloudFront, S3-to-edge transfer is free. Move to Bunny, Fastly, or Cloudflare and every cache miss pulls from S3 at standard internet egress — roughly $0.09/GB. At a 95% hit ratio and 50 TB of delivery, that’s 2.5 TB of misses, about $230/month you didn’t budget. At an 85% hit ratio it’s $690. Your hit ratio is a pricing variable, not a performance metric.
Regional mix. Bunny’s famous $0.01/GB is North America and Europe on the Standard Network. Asia-Pacific is up to $0.06/GB, Africa $0.06, South America and the Middle East around $0.045. If 30% of your traffic is APAC, your blended rate is closer to $0.025 — still cheap, but not the number in the headline. CloudFront has the same shape: $0.085 in the US and EU, $0.114 in Australia, $0.170 in South America.
Add-ons. WAF, bot management, image optimization, real-time logs. On some providers these are line items. On CloudFront’s new flat-rate plans they’re bundled and mandatory. Compare the bundle you’d actually deploy, not the naked CDN.
The thing that changed: CloudFront’s flat-rate plans
AWS launched flat-rate CloudFront pricing in November 2025 and it’s the single biggest shift in this market in years. Four tiers, no overage charges:
| Plan | Price/mo | Data transfer | Requests |
|---|---|---|---|
| Free | $0 | 100 GB | 1M |
| Pro | $15 | 50 TB | 10M |
| Business | $200 | 50 TB | 125M |
| Premium | $1,000 | 50 TB | 500M |
Read that Pro row again. Fifty terabytes of delivery for $15/month. On pay-as-you-go, 50 TB in the US costs about $4,150 in bandwidth alone. The plans bundle AWS WAF, DDoS protection, Route 53 DNS, a TLS cert, CloudWatch Logs ingestion, edge compute, and monthly S3 storage credits on top.
The catch is that the tiers are priced on requests, not bandwidth. All three paid tiers include the same 50 TB. What you’re buying as you move up is request headroom — 10M, then 125M, then 500M. A bandwidth-heavy, request-light workload (large file downloads, video segments) is exactly the shape that gets the absurd deal. A request-heavy, bandwidth-light workload (an API) pays $1,000/month for 500M requests, which pay-as-you-go would bill at $500. Flat-rate is worse for you.
And “no overage charges” doesn’t mean no consequences. Exceed your allowance and AWS “may reduce your performance” — in practice, serving your traffic from fewer or more distant edge locations. Notification of approaching limits can lag. The failure mode is an engineer chasing a p99 latency regression for two days before someone checks the plan dashboard. That’s a worse incident than a surprise bill, and it’s worth setting up your own request-volume alarm well below the cap.
There are harder limits too. Lambda@Edge is unsupported — you have to remove it before you can subscribe. Cache behaviors cap at 10 on Pro, 50 on Business, 100 on Premium. WAF rules cap at 25/50/75. Route 53 zones must be in the same account. One apex domain per plan, which makes custom-domain SaaS more or less impossible. Origin failover, mTLS, and origin shield are gated to higher tiers. Shield Advanced and Firewall Manager are incompatible entirely.
AWS extended Premium in May 2026 with configurable allowances up to 600 TB and 6 billion requests, self-service. The scaled price isn’t a flat $1,000 — check the console.
1 TB/month: a normal website
Say a content site or docs portal. 1 TB of delivery, 20M HTTPS requests, mostly US and EU.
- CloudFront pay-as-you-go: 1,024 GB × $0.085 = $87, plus 20M requests at $0.0100/10k = $20. About $107. The legacy always-free tier (1 TB out, 10M requests) still absorbs most of this for a lot of accounts, which is why so many small sites run CloudFront and pay nothing.
- CloudFront Pro: $15, but only if you’re under 10M requests. At 20M you’d be throttled and need Business at $200. Watch that boundary.
- Cloudflare: $0 on Free, $25 on Pro. Bandwidth is unmetered on self-serve plans for standard HTTP cache delivery.
- Bunny (Standard, NA/EU): 1,024 GB × $0.01 = ~$10. Requests aren’t separately billed.
- Fastly: 1,024 GB × $0.12 = $123, plus $15 in requests. About $138, against a ~$50/month minimum you’d clear anyway.
- Akamai: they won’t sell you 1 TB. Minimum annual commits start well above this.
At this volume the answer is Cloudflare’s free tier and you shouldn’t think about it further. If you need CloudFront specifically — you’re already deep in AWS, you want OAC to a private S3 bucket, whatever — the free tier or the $15 Pro plan covers you. Bunny is genuinely $10 and genuinely good, but $10 isn’t a reason to migrate anything.
50 TB/month: a busy SaaS
Now 50 TB and 500M requests. This is where the models diverge violently.
- CloudFront pay-as-you-go: first 10 TB at $0.085 = $870, next 40 TB at $0.080 = $3,277. Bandwidth $4,147. Requests: 500M at $0.0100/10k = $500. Total ~$4,650/month, a blended $0.091/GB.
- CloudFront Premium: $1,000/month, flat, covering exactly 50 TB and exactly 500M requests. Same workload, 4.6× cheaper. You are sitting right on both caps, which is uncomfortable, but the math is the math.
- Cloudflare Business: $200/month per zone. Unmetered bandwidth for cacheable HTTP content.
- Bunny (Volume Network, global flat): 51,200 GB × $0.005 = $256. On the Standard Network in NA/EU: $512.
- Fastly: 10 TB at $0.12 = $1,229, next 40 TB at $0.08 = $3,277, plus $375 in requests. ~$4,880 at list. With a 12-month commit, 20–40% off is standard, so realistically $2,900–3,900.
- Akamai: mid-market contracts in the 10–50 TB range land around $0.038–0.046/GB for NA/EU delivery, so about $2,150 of actual usage — except monthly minimum commits typically start at $5,000. You pay $5,000 and use less than half of it.
Add origin egress to the non-AWS options if your origin is S3: about $230/month at a 95% hit ratio. Cloudflare Business at $200 plus $230 of AWS egress is $430 all-in, which is still the cheapest credible number on this list.
Fifty terabytes is the volume where Akamai and Fastly stop making economic sense unless you’re buying something other than bytes — Akamai’s edge network in markets nobody else covers well, Fastly’s instant purge and VCL-level control, Compute@Edge. Those are real products. They are not, at this volume, a bandwidth decision.
500 TB/month: video, downloads, updates
Two billion requests, heavy large-object traffic.
- CloudFront pay-as-you-go: the tiers keep stepping down past 150 TB, toward $0.020/GB at petabyte scale. Blended, call it $0.045–0.055/GB — roughly $25,000–28,000/month at list, plus $2,000 in requests. Nobody actually pays list here; AWS private pricing agreements are the norm and routinely cut this substantially.
- CloudFront Premium with configurable allowances: covers up to 600 TB and 6B requests, priced above the $1,000 base. Check the console for your number. Structurally this is now AWS’s answer to Bunny, and it’s a serious one.
- Cloudflare: at 500 TB of video from a non-Cloudflare origin, you are having the Enterprise conversation whether you want to or not. Cloudflare moved the old Section 2.8 content restriction into its CDN-specific service terms — video and large files served through the CDN need to be hosted on a Cloudflare service (Stream, Images, R2) to sit cleanly inside the terms. Enterprise contracts start around $5,000/month and mid-market deployments commonly run $8,000–25,000.
- Bunny (Volume): 512,000 GB × $0.005 = $2,560, dropping to $0.003/GB above 500 TB. This is the 10× claim, and at this volume with this traffic shape, it is real.
- Fastly: blended maybe $0.06/GB at list, so ~$30,000; with a 30–50% commit discount, $15,000–21,000.
- Akamai: petabyte-scale contract rates reach $0.012/GB; at 500 TB expect $0.020–0.030, so $10,000–15,000, with the minimum commit long since absorbed.
The Bunny number is not a typo, and the honest question is what you give up. Fewer PoPs than Akamai or Cloudflare, thinner coverage in the places where coverage is hardest. Support is email and it’s good, but there is no TAM and no 15-minute SLA. If your business is streaming to Southeast Asia and a bad hour costs six figures, the $12,000 delta buys something. If you’re distributing game patches or OS images to a mostly Western audience, you are lighting money on fire not using Bunny.
The migration cost nobody quotes
Switching CDNs is not a DNS change.
Cache warming: your new CDN starts cold, and for the first day or two every request is a miss pulling full-price egress from origin. Budget one day of 100% origin egress. At 500 TB/month that’s 16 TB × $0.09 = $1,500, once.
Then the long tail. Custom VCL or Lambda@Edge logic doesn’t port — Fastly’s VCL and Cloudflare Workers and CloudFront Functions are three different execution models with three different limits. Signed URLs and token auth are provider-specific. Your log pipeline ingests a different format. Your WAF rules get rewritten. Somebody has to re-derive the cache key config that took two years of production incidents to get right, and they will get it wrong once.
Two engineer-weeks is a conservative estimate for a non-trivial property. If your annual saving is under $20,000, the migration doesn’t pay for itself in year one.
Picking by constraint
Static site, under 5 TB. Cloudflare Free. If you’re on AWS and want OAC to a private bucket, CloudFront’s free tier or the $15 Pro plan.
SaaS API, request-heavy, bandwidth-light. Cloudflare Business at $200/zone. CloudFront flat-rate is priced against you here — you’d be buying request headroom at $1,000/month that pay-as-you-go bills at $500.
Bandwidth-heavy, request-light, 10–50 TB. CloudFront Pro or Premium is now the arbitrage. $15 for 50 TB is a rate no one else can match, provided you fit under the request cap and can live without Lambda@Edge.
Video and large downloads above 100 TB. Bunny Volume Network, unless coverage in a specific hard market or a contractual SLA is load-bearing. Then Akamai.
You need VCL, instant purge, or edge compute with real control. Fastly, and negotiate a commit. You’re not buying bytes.
Regulated, global, contractually paranoid. Akamai. It costs what it costs.
The single highest-leverage move isn’t switching providers at all — it’s raising your cache hit ratio. Going from 85% to 96% cuts origin egress by nearly three quarters and shaves your bandwidth bill on any CDN. Pull last month’s hit-ratio-by-path report before you pull a single vendor quote. Half the time the CDN wasn’t the problem.
Sources: AWS CloudFront pricing, CloudFront flat-rate pricing plans (AWS docs), Duckbill: The Complete Guide to CloudFront’s Flat-Rate Pricing, Bunny CDN pricing, Cloudflare plans, Cloudflare: Goodbye, Section 2.8, Fastly pricing.