Search nomadLab

CDN Pricing in 2026: The Rate Card Is Not the Unit

Five providers, three volumes, list prices read off the vendors' own price files. The gap between the cheapest and the most expensive at 50 TB is 18x, and almost none of it comes from the per-GB number.

Updated

Every CDN comparison starts with per-GB rates, and per-GB rates are the least useful number on the invoice. CloudFront meters bytes and requests separately, with separate allowances. Bunny meters bytes only and charges nothing for requests. Cloudflare meters neither on its self-serve plans, and instead restricts what kind of content you are allowed to serve. Fastly meters both but publishes rates for only the first 20 TB.

Those are four different units, not four different prices. Comparing the rate cards compares the wrong thing.

Below are three volumes costed out against each. Bandwidth and request rates for CloudFront come from the AWS price list file (pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonCloudFront/current/index.csv) and the flat-rate plan documentation, everything else from the vendors’ pricing pages, all read on 22 August 2026. Arithmetic is mine and I have shown it where it matters.

What each one counts

BytesRequestsOther gate
CloudFront pay-as-you-gotiered per GB, per region$0.01 per 10,000 HTTPSnone
CloudFront flat-ratemonthly allowancemonthly allowance1 apex domain per plan
Cloudflare self-servenot meterednot meteredvideo and large files need Stream, Images, or the Developer Platform
Bunnytiered per GB, per regionnot billed$1 monthly minimum
Fastlytiered per GB, per region$0.01 per 10,000published rates stop at 20 TB
Akamaicontractcontractno public price at all

Akamai deserves its own line rather than an invented number. I could not find a single rate from an Akamai primary source, and the per-GB figures that circulate in comparison posts have no citation behind them. That absence is itself useful: if you are comparing Akamai, you are in a procurement conversation, and nothing in this post will tell you what you will pay.

CloudFront’s flat-rate plans, and what they actually sell

AWS launched flat-rate CloudFront plans in November 2025 and they are the reason this market looks different than it did. Four tiers with no overage charges: Free at $0, Pro at $15, Business at $200, Premium at $1,000, each covering one distribution with one apex domain.

A comparison of the three paid CloudFront flat-rate tiers. Pro at fifteen dollars, Business at two hundred dollars, and Premium at one thousand dollars per month all include the same fifty terabytes of data transfer. Their request allowances differ enormously: ten million for Pro, one hundred and twenty-five million for Business, and five hundred million for Premium, drawn to linear scale so that Pro's allowance is a sliver next to Premium's. All three paid tiers include the same 50 TB data transfer requests, to scale Pro $15 50 TB 10 M Business $200 50 TB 125 M Premium $1,000 50 TB 500 M Moving up a tier buys request headroom, plus features. It does not buy bytes.
Pro at $15 for 50 TB is the number people repeat. The request allowance next to it is what decides whether that number applies to you.

The Premium tier gained configurable allowances in May 2026, and publishes the levels rather than sending you to the console: 50 TB and 500M requests for $1,000, then 75 TB for $1,450, 125 TB for $2,250, 200 TB for $3,500, 350 TB for $6,000, and 600 TB with 6 billion requests for $10,000. Above that you talk to sales.

Two things about these plans have changed since the launch coverage and are worth correcting. The allowances are explicitly not hard limits: AWS documents that your first spike up to 3x the allowance in a month is absorbed, that sustained excess is evaluated over two to three months, and that the consequence is serving your traffic from fewer or more distant edge locations rather than a bill. Traffic blocked by AWS WAF never counts against the allowance at all. And Lambda@Edge is supported on every tier now, billed pay-as-you-go on the side, so it is no longer the blocker it was described as.

Real blockers remain, and they are configuration-shaped rather than price-shaped. A plan covers one apex domain, which rules out custom-domain SaaS. Multi-tenant distributions, continuous deployment and staging distributions, anycast IP lists, real-time access logs, field-level encryption, dedicated IP SSL, and origin access identity are all unsupported, and OAI in particular means older distributions need migrating to origin access control first. A WAF web ACL is mandatory and cannot be detached while the plan is active.

1 TB a month, 20M requests

A documentation site or a content site, mostly US and Europe.

Monthly
Bunny, Standard network$10.24
CloudFront Pro$15
Cloudflare Free$0
Cloudflare Pro$25, or $20 billed annually
CloudFront pay-as-you-go$107 at list
Fastlyabout $130

The CloudFront list figure is 1,024 GB at $0.085 plus 20M requests at $0.01 per 10,000. The price list also still carries an always-free allowance of 1 TB of transfer and 10M requests per month, which absorbs most of that for a lot of accounts and is why so many small sites run CloudFront and see nothing on the bill.

CloudFront Pro at $15 covers this on bytes with 49 TB to spare and covers it on requests with none to spare: 20M against a 10M allowance is double, every month, which is the sustained pattern the plan documentation says it eventually acts on. Fastly’s figure is 100 GB free, 924 GB at $0.12, and 19M billable requests at $0.01 per 10,000.

At this volume the correct answer is Cloudflare’s free plan and you should stop thinking about it. Bunny is genuinely ten dollars and genuinely good, but ten dollars is not a reason to migrate anything.

50 TB a month, 500M requests

This is where the units diverge violently.

Monthly
Bunny, Volume network$256
Cloudflare Business$250, or $200 billed annually
Bunny, Standard network, US and EU$512
CloudFront Premium$1,000
Fastly$2,036 for the first 20 TB, rest unpublished
CloudFront pay-as-you-go$4,647

The CloudFront pay-as-you-go number is 10 TB at $0.085 and 40 TB at $0.080, which is $4,147 of bandwidth, plus $500 of requests. Premium covers exactly this workload for $1,000, sitting precisely on both allowances, which is uncomfortable but is 4.6x cheaper.

Fastly is the honest gap here. Its published table has three rows: the first 100 GB free, 100 GB to 10 TB at $0.12 per GB in North America and Europe, and the next 10 TB at $0.08. There is no published fourth row. At 50 TB you are past the end of the price list and into a quote, and I am not going to extrapolate a rate the vendor chose not to print.

Then add the cost the rate cards never show. If your origin is S3 and your CDN is CloudFront, origin fetches are free. Move to anyone else and every cache miss pulls from S3 at internet egress, $0.09 per GB for the first 10 TB out of us-east-1. At a 95 percent hit ratio on 50 TB that is 2,560 GB of misses, $230 a month. At 85 percent it is $691. Your hit ratio is a line item, not a performance metric, and it is the single number that most changes a migration estimate.

Cloudflare Business at $250 plus $230 of AWS egress is $480 all in, still the cheapest credible answer on this list, with a caveat in the next section.

500 TB a month, 2 billion requests

Video, downloads, game patches, OS images.

Monthly
Bunny, Volume network$2,560
CloudFront Premium at the 600 TB level$10,000
CloudFront pay-as-you-go$26,627
Cloudflarenot on a self-serve plan
Fastly, Akamaiquote

CloudFront pay-as-you-go here is $24,627 of bandwidth across four tiers, blending to $0.048 per GB, plus $2,000 of requests. The Premium level that covers 600 TB and 6 billion requests costs $10,000, which works out to $0.0167 per GB. That is AWS pricing against Bunny directly, and while Bunny is still four times cheaper, the ratio used to be more like fifteen.

Cloudflare is not an option at this shape on self-serve, and not because of a bandwidth limit. The service-specific terms say you must use a paid product such as Stream, Images, or the Developer Platform “in order to serve video and other large files via the CDN”, and reserve the right to limit CDN access for serving “a disproportionate percentage of pictures, audio files, or other large files” otherwise. Unmetered bandwidth on the Pro and Business plans is unmetered for the content those plans are sold for. Read that clause before you build a video product on a $250 plan.

What Bunny gives up at this volume is coverage and contract. Fewer points of presence, thinner in the markets that are hardest to serve, support by email with no named contact and no fifteen-minute response commitment. If an hour of degraded streaming in Southeast Asia costs six figures, the delta buys something real. If you are pushing game patches to a mostly Western audience, it does not.

The migration cost nobody quotes

Switching CDNs is not a DNS change. Your new CDN starts cold, so budget roughly a day of full-price origin egress while the cache fills. At 500 TB a month that is about 16 TB, $1,500, once.

The long tail is the expensive part. Fastly VCL, Cloudflare Workers, and CloudFront Functions are three execution models with three sets of limits, and edge logic does not port between them. Signed URL schemes are provider-specific. Log formats differ. The WAF rules get rewritten. And someone has to re-derive the cache key configuration that took two years of production incidents to get right, and they will get it wrong at least once, in a way that shows up as a hit ratio drop rather than an error.

Two engineer-weeks is a light estimate for a property of any complexity. If the annual saving is under about $20,000, the move does not pay for itself in the first year.

Reading the table by constraint

Static site under 5 TB: Cloudflare Free, or CloudFront’s free tier if you want origin access control to a private bucket.

Request-heavy and bandwidth-light, like an API: the CloudFront flat rates are priced against you. Buying 500M requests for $1,000 when pay-as-you-go would bill them at $500 only makes sense if you also want the bundled WAF and DNS. Cloudflare Business is the cleaner answer.

Bandwidth-heavy and request-light in the 10 to 50 TB range: this is where CloudFront Pro and Premium became genuinely hard to beat, provided you fit under the request allowance and can live with one apex domain.

Large files above 100 TB: Bunny’s Volume network, unless coverage in a specific market or a contractual response time is load-bearing.

Before any of that, pull last month’s hit ratio by path. Going from 85 to 96 percent cuts origin egress by nearly three quarters and reduces the bill on every provider in the table at once, including the one you already have. It is also the only change on this page that costs nothing to try.

Keep reading