What Cloudflare actually costs in 2026
A plain-English breakdown of Workers, D1, R2, and Pages pricing — the free tiers, the paid tiers, and the gotchas that show up on your bill.
Jun 21, 2026 · by Nadeem Siddique
Cloudflare’s pricing is genuinely cheap — but it’s priced on axes that don’t map to how you think about your app. You think in “users” and “features.” Cloudflare bills you in requests, CPU-milliseconds, rows read, and storage-gigabyte-months. The surprises on your bill almost always come from that translation gap.
Here’s what each of the core products actually costs, and where the bill comes from.
Workers
The free plan covers 100,000 requests/day. The Workers Paid plan is $5/month and includes 10 million requests, then a per-million rate beyond that.
The gotcha isn’t requests — it’s CPU time. Cloudflare bills the CPU milliseconds your code actually burns, not wall-clock time. Waiting on a fetch or a database query is free; a tight loop parsing a big JSON blob is not. Most people over-estimate this cost because they assume a slow request is an expensive one. It usually isn’t. (We wrote a whole TIL on why Workers bills CPU, not wall-clock time.)
D1
D1’s free tier is generous: 5 GB of storage, millions of rows read per day, and a daily write allowance. Paid usage is billed on rows read and rows written — not on query time, not on connections.
This is the single most misunderstood line on a Cloudflare bill. A SELECT * with no index that scans a million rows to return ten costs you a million rows read, even though you only wanted ten. Your indexes are a billing decision, not just a performance one. The cheapest D1 app is a well-indexed one.
Storage is billed per GB-month, and D1 has a per-database size ceiling — once you approach it, the move is to delete data (a few thousand rows at a time) rather than fight the limit.
R2
R2’s headline feature is what’s not on the bill: zero egress fees. You pay for storage per GB-month and for operations (Class A writes/lists cost more than Class B reads), but pulling data back out is free. That’s the structural difference from S3, and it’s why R2 is the right home for backups, logs, and anything you read often.
The gotcha here is operations, not storage. A job that lists a bucket in a tight loop, or writes millions of tiny objects, racks up Class A operations fast. Batch your writes and avoid chatty list calls.
Pages
Static assets on Pages are effectively free — unlimited requests and bandwidth on the free plan, with a monthly build allowance. Pages Functions are billed on the same model as Workers, because under the hood they are Workers.
The hidden cost on Pages isn’t money — it’s storage of deployments you forgot about. Cloudflare keeps every deployment indefinitely, and they quietly pile up across projects.
The real problem: the bill you didn’t decide to run up
Notice the pattern. Cloudflare’s per-unit prices are low. The surprises come from usage you never consciously chose:
- An un-indexed query reading 100× more rows than it returns.
- Workers and Pages deployments accumulating forever.
- R2 buckets full of logs nobody set a lifecycle rule on.
- A staging environment left running because nobody remembered it.
This is exactly the gap Ampliflare is built to close. Deployment cleanup sweeps stale Workers and Pages builds on a schedule (keep-last-N or older-than-N-days, always with an audit trail so it’s reversible). Hard spend limits (on the roadmap) stop a runaway bill before it happens. The D1 and R2 viewers let you actually see what’s accumulating instead of finding out at the end of the month.
Cloudflare gives you the cheap primitives. Staying cheap is an operational discipline — and that’s the part we automate.
Want to stop paying for usage you forgot about? See how Ampliflare’s cleanup works, or start free.
ampliflare