TL;DR: Cloudflare Workers costs $5 a month for most small apps, because the Paid plan's minimum covers 10 million requests and 30 million milliseconds of CPU time. With KV and D1 on top, a medium API costs about $26 and a busy one about $263.
- Pick Workers Free if your app stays under 100,000 requests a day and 10 ms of CPU per request. Past the daily limit, requests fail or skip your Worker until midnight UTC.
- Pick Workers Paid if your app is mostly static files and short API calls. Static assets are free and unlimited, and there's no egress charge.
- Pick something else if you need more than 128 MB of memory, a process that stays up between requests, or Postgres next to your code.
- Pick Ployz, which I build, if your Workers bill is past about $10 and you want it flat. The busy app below, $263 a month on Workers, runs on a $19 server with git-push deploys.
Cloudflare Workers is a serverless platform that runs your JavaScript, TypeScript or WebAssembly on Cloudflare's network, close to your users. Cloudflare Workers pricing bills requests and CPU time, not wall-clock time, so a request waiting on a database costs the same as one that isn't. Storage products like KV, D1 and Durable Objects have their own meters on the same bill.
How much does Cloudflare Workers cost?
$0 on the Free plan, or $5 a month per account on the Paid plan, plus usage past what the $5 includes. The Paid plan covers Workers, Pages Functions, KV, Hyperdrive and Durable Objects "for a minimum charge of $5 USD per month for an account" (Workers pricing).
| Workers Free | Workers Paid | |
|---|---|---|
| Monthly price | $0 | $5 minimum per account |
| Requests | 100,000 a day | 10 million a month, then $0.30 per million |
| CPU time | 10 ms per request | 30 million ms a month, then $0.02 per million ms |
| Duration, egress, static assets | Not billed | Not billed |
| Past the limit | Requests fail or skip your Worker | You pay the overage |
Prices are from Cloudflare's Workers pricing docs. KV, D1 and the other storage products bill on top; their rates are further down.
What would your app cost on Cloudflare Workers?
Pick the app closest to yours: small, medium and busy are the three worked bills below. For your real numbers, open your Worker's Metrics in the Cloudflare dashboard, read requests and median CPU time, and set them under Customize. The calculator assumes one KV read per request.
- Requests a day
- 66,667
- CPU time a month
- 10M ms
- KV reads (one per request)
- 2M
- Workers Free plan
- fits, $0
- Server needed
- Hetzner CX23
- Cloudflare Workers Paid$5/mo
$5 minimum, then $0.30 per million requests past 10M, $0.02 per million CPU ms past 30M, plus KV ($0.50 per million reads past 10M, $5 per million writes past 1M) and D1 past their included amounts.
- Your own server + Ployz$7/mo
Hetzner CX23 to CX43 sized for 4x your average CPU, plus $0.60 IPv4, with Postgres or Redis on the same server. Ployz is free. Servers are in Germany and Finland.
The server line assumes your Worker's CPU time would cost about the same CPU on a server, and sizes the server for four times the average. That's a rough match, not a benchmark. KV and D1 become Redis and Postgres or SQLite on the same server, which is why they don't add to its price.
How does CPU-time billing work on Workers?
Workers bills the milliseconds your code runs on the CPU, not the time a request takes. A request that spends 5 ms parsing JSON and 300 ms waiting for a database is billed for 5 ms. That's what keeps Workers cheap for APIs that mostly wait on other services.
Cloudflare's own examples on the pricing page:
| Example | Bill |
|---|---|
| 15 million requests at 7 ms of CPU each | $8.00 |
| 15 million requests, 12 million of them static assets | $5.00 |
| 100 million requests at 7 ms each | $45.40 |
| The same 100 million, with 80% served from cache | $34.20 |
| An hourly cron job using 180,000 ms (3 minutes) of CPU per run | $6.99 |
Several things that cost money elsewhere are free here. A WebSocket upgrade counts as one request, and its messages aren't counted. Subrequests to other services aren't billed, and calls between Workers through service bindings don't add a request fee. A cache hit is billed as a request but not for CPU.
$0.02 per million CPU milliseconds works out to $0.072 per CPU-hour. Vercel bills its functions on more meters:
| Meter | Cloudflare Workers Paid | Vercel Pro (Washington, D.C.) |
|---|---|---|
| CPU time | $0.072 per CPU-hour | $0.128 per CPU-hour |
| Memory | Not billed | $0.0106 per GB-hour, while a request is in flight |
| Requests | $0.30 per million | $0.60 per million |
| Source | Workers pricing | Vercel docs |
Workers doesn't bill memory or waiting time at all, so for the same code it's usually the cheaper of the two. Vercel's plan fees and the rest of its bill are in my Vercel pricing breakdown.
What are the limits of the Workers Free plan?
100,000 requests a day across your account, and 10 ms of CPU time per request. The daily count resets at midnight UTC. Past it, each route either fails open and bypasses your Worker, or fails closed and returns Cloudflare's error 1027, depending on how you set the route (Workers limits).
That's a hard stop, not a bill. On a launch day with 150,000 requests on Free, the last 50,000 requests, a third of the day's traffic, fail or skip your Worker. Cloudflare doesn't charge you for them.
The storage products have daily limits on Free too:
| Product | Free plan, per day |
|---|---|
| KV reads | 100,000 |
| KV writes, deletes and lists (each) | 1,000 |
| D1 rows read | 5 million |
| D1 rows written | 100,000 |
| Durable Objects requests | 100,000 |
| Queues operations | 10,000 |
| Hyperdrive queries | 100,000 |
| Workers AI | 10,000 Neurons |
KV storage on Free is 1 GB and D1 storage is 5 GB. On Free, KV operations over the limit fail. 1,000 KV writes a day is the limit people hit first: a session store that writes on every login runs out at about 40 logins an hour.
Requests to static assets don't count against any of this. Cloudflare's static assets docs say they're free and unlimited, with no storage cost. Only requests that run your Worker script, like server-side rendering, are billed.
What do KV, D1, Durable Objects and R2 cost?
Each storage product has its own meter, and on the Paid plan each includes a monthly amount before it bills. The rate that surprises people is KV writes, at $5.00 per million, ten times the price of a read.
| Product | Included on Paid, per month | Then |
|---|---|---|
| KV reads | 10 million | $0.50 per million |
| KV writes, deletes and lists (each) | 1 million | $5.00 per million |
| KV storage | 1 GB | $0.50 per GB-month |
| D1 rows read | 25 billion | $0.001 per million |
| D1 rows written | 50 million | $1.00 per million |
| D1 storage | 5 GB | $0.75 per GB-month |
| Durable Objects requests | 1 million | $0.15 per million |
| Durable Objects duration | 400,000 GB-s | $12.50 per million GB-s |
| Queues operations | 1 million | $0.40 per million |
| R2 storage (standard) | 10 GB-month | $0.015 per GB-month |
| R2 Class A operations (writes) | 1 million | $4.50 per million |
| R2 Class B operations (reads) | 10 million | $0.36 per million |
| Workers AI | 10,000 Neurons a day | $0.011 per 1,000 Neurons |
| Hyperdrive queries | Unlimited |
Sources: Workers pricing for KV, D1, Queues and Hyperdrive; Durable Objects pricing; R2 pricing; Workers AI pricing.
KV, D1, Queues and R2 don't charge for egress. R2 says "there are no charges for egress bandwidth for any storage class," which is the main reason people store files there.
What do real apps cost on Cloudflare Workers?
With my assumptions, a small app costs $0 on Free or $5 on Paid, a medium one $26.40 and a busy one $262.65 a month. The busy bill is mostly storage: KV reads alone are $95, about as much as requests and CPU time together ($96.40).
| Line | Small | Medium | Busy |
|---|---|---|---|
| Paid plan minimum | $5.00 | $5.00 | $5.00 |
| Requests | $0 | $6.00 | $57.00 |
| CPU time | $0 | $5.40 | $39.40 |
| KV reads | $0 | $10.00 | $95.00 |
| KV writes | $0 | $0 | $5.00 |
| D1 rows written | $0 | $0 | $50.00 |
| D1 storage | $0 | $0 | $11.25 |
| Monthly bill on Paid | $5.00 | $26.40 | $262.65 |
| Fits on Free? | Yes, $0 | No | No |
The three apps, per 30-day month:
- Small: a side-project API. 2 million requests at 5 ms of CPU, one KV read per request, 10,000 KV writes, 500,000 D1 rows written, 0.5 GB in D1.
- Medium: a small SaaS. 30 million requests at 10 ms, one KV read per request, 500,000 KV writes, 10 million D1 rows written, 2 GB in D1.
- Busy: a busy API. 200 million requests at 10 ms, one KV read per request, 2 million KV writes, 100 million D1 rows written, 20 GB in D1.
These are assumptions, not measurements. The small app averages about 67,000 requests a day, which fits under Free's 100,000, but one busy day takes it over. I'd pay the $5 for any app people depend on.
The busy bill has the shape mine had on Railway. I paid $500+ a month there, and it climbed every month. Most of it came from the database, which was hit hard and kept growing. On Workers, the storage meters grow with your data the same way. Today one dedicated server at €80 a month runs everything, far more than I ever ran on Railway.
Why is my Cloudflare Workers bill higher than expected?
Usually because of a storage meter, not Workers itself. Requests and CPU time are cheap; KV writes, Durable Object duration and logs are where bills jump.
- KV writes. At $5.00 per million, writing on every request costs ten times what reading does. A counter or session store that writes 10 million times a month is $45 in KV writes alone.
- Durable Objects holding WebSockets. A Durable Object is billed for duration while it's active, at 128 MB whatever it uses. Cloudflare's own example of 100 objects with 50 standard WebSocket connections each costs $142.95 a month. Its Hibernation API example, 100 objects with 100 connections each, costs $20.65, because a hibernating object isn't billed for duration.
- Workers Logs, from 1 December 2026. Logs move to Cloudflare Observability pricing: 50 GB of ingestion a month included on Paid, then $0.25 per GB, and 10 GB-month of storage, then $0.10 per GB-month (Observability pricing). Until then, Paid includes 20 million log events a month, then $0.60 per million.
run_worker_first. Static assets are free until you route them through your Worker. Requests matched byrun_worker_firstrun your script and are billed (static assets docs).- Heavy cron jobs. Cron runs are billed CPU like any request. Cloudflare's example hourly job at 3 minutes of CPU adds $1.99 a month, so the bill is $6.99 with the $5 minimum.
- Workers AI. Past 10,000 Neurons a day, it's $0.011 per 1,000 Neurons, billed per model by Neurons, not by request.
For the fees other platforms add (seats, egress, minimums per service), see the hidden costs of PaaS pricing.
What can't you do on Cloudflare Workers?
Run anything that needs more than 128 MB of memory, or a process that stays up. A Worker starts per request and stops when it's done, with no server you can keep a connection pool, a background job or a large in-memory cache in. Cloudflare sells Containers for that, priced separately by memory, CPU, disk and egress (Containers pricing).
| Limit | Workers Free | Workers Paid |
|---|---|---|
| CPU time per request | 10 ms | 30 seconds by default, up to 5 minutes |
| Memory per isolate | 128 MB | 128 MB |
| Subrequests per request | 50 | 10,000 |
| Workers per account | 100 | 500 |
| Cron triggers per account | 5 | 250 |
Limits are from Cloudflare's Workers limits. On Paid, queue consumers and Cron Triggers that run hourly or less often can use up to 15 minutes of CPU per run.
The other limits that shape what fits:
- No Postgres next to your code. D1 is SQLite with its own meters. For Postgres, Hyperdrive connects your Worker to a database you host somewhere else.
- Size limits. A Worker can be up to 64 MiB uncompressed, and a static asset up to 25 MiB per file (Workers limits).
- Cloudflare-specific APIs. Code that uses KV, D1 or Durable Objects bindings doesn't run anywhere else as-is. Moving off Workers means swapping them for Redis, Postgres or SQLite.
Netlify and Fly.io draw these lines differently. Netlify bills credits per request and bandwidth (Netlify pricing), and Fly.io runs full machines billed per second they run (Fly.io pricing).
Is Cloudflare Workers cheaper than your own server?
For a small app, Workers wins. The small app is $0 or $5 on Workers and $7.09 on a Hetzner CX23. Past that, the server wins: the medium app is $26.40 against $7.09, and the busy one is $262.65 against $19.09 on a CX43.
| Server | Specs | Monthly price | Source |
|---|---|---|---|
| Hetzner CX23 | 2 vCPU, 4 GB RAM, 40 GB NVMe, 20 TB traffic | $6.49 | Price list, specs |
| Hetzner CX33 | 4 vCPU, 8 GB RAM, 80 GB NVMe, 20 TB traffic | $9.99 | Same |
| Hetzner CX43 | 8 vCPU, 16 GB RAM, 160 GB NVMe, 20 TB traffic | $18.49 | Same |
| Hetzner primary IPv4 | about $0.60 (€0.50) | Hetzner docs | |
| DigitalOcean Basic droplet | 2 vCPU, 4 GiB RAM, 80 GiB SSD, 4,000 GiB transfer | $24 | DigitalOcean pricing |
Hetzner prices are after its 15 June 2026 adjustment, before VAT, and the CX line is only in Germany and Finland. In the US, the DigitalOcean droplet above costs $24, which is about the medium Workers bill.
| Small | Medium | Busy | |
|---|---|---|---|
| Cloudflare Workers | $0 (Free) or $5 (Paid) | $26.40 | $262.65 |
| Hetzner server + Ployz | $7.09 (CX23) | $7.09 (CX23) | $19.09 (CX43) |
The busy app's 2 billion CPU milliseconds a month average under one vCPU, so the CX43 has plenty of headroom. A V8 isolate and a Node process don't use CPU one-to-one, so treat the server column as a rough match.
What you give up on a server:
| Workers gives you | On your own server |
|---|---|
| Code running close to every user | One location, so users far away wait longer |
| Scaling with traffic, no capacity planning | One server has a ceiling until you add another |
| $0 for a quiet app | You pay for the server whether it's busy or not |
Workers or your own server?
Stay on Workers if your app is stateless or light on storage, your bill is under $10, or your users are spread around the world and latency matters. Static sites with a few API routes cost $5 or nothing, and nothing self-hosted beats that.
Pick your own server if your bill is past $10 and growing with KV or D1, you need more than 128 MB of memory or a process that stays up, or you want Postgres next to your app. A $7 to $19 server covers what costs $26 to $263 on Workers.
Where Ployz fits
Ployz turns a server you rent into something that deploys like a hosted platform. Push to GitHub and it builds on your server, with no Dockerfile needed for Node, Python, Ruby, PHP, Go, Rust, Java and Elixir.
ployz up --server root@your-server
That installs Ployz on a Linux server, builds the current directory and gives it an HTTPS address. Connect a GitHub repo and every pull request gets a preview environment on the servers you already pay for. Deploys have zero downtime once you set a health check. Postgres, MySQL, Redis and MongoDB are one click each, so the KV and D1 lines of a Workers bill become services on the same server.
| You need | Ployz | Do instead |
|---|---|---|
| Git-push deploys and preview environments | Yes | |
| Postgres or Redis next to your app | Yes, one click | |
| More servers when one fills up | Yes, over WireGuard | |
| A copy of your database on another server | Yes, a mirror synced when you ask | |
| Code at the edge, close to every user | No | Stay on Workers |
| A CDN | No | Put a CDN in front of your server |
Ployz is free on your own servers, custom domains included. Start free on your own server.
FAQ
Is Cloudflare Workers free?
Yes, up to 100,000 requests a day and 10 ms of CPU per request. Past the daily limit, requests fail with error 1027 or bypass your Worker until midnight UTC. You aren't billed for them.
How much does the Workers Paid plan cost?
$5 a month per account, with 10 million requests and 30 million CPU milliseconds included. After that, it's $0.30 per million requests and $0.02 per million CPU milliseconds.
What are the limitations of Cloudflare Workers?
128 MB of memory per isolate, a CPU cap per request (10 ms on Free, up to 5 minutes on Paid) and no process that stays up between requests. Free also caps you at 100,000 requests and 1,000 KV writes a day.
Does Cloudflare charge for bandwidth on Workers?
No. Workers, KV, D1 and R2 have no egress or bandwidth charge, and requests to static assets are free and unlimited.
How much does Cloudflare Workers AI cost?
10,000 Neurons a day are free on both plans, then $0.011 per 1,000 Neurons. Neurons per request depend on the model, so check the model's rate on the Workers AI pricing page.
What are the limits of the D1 free tier?
5 million rows read and 100,000 rows written a day, and 5 GB of storage. On Paid, 25 billion rows read and 50 million written a month are included.
Is Cloudflare Workers cheaper than Vercel?
Usually, for the same code. Workers CPU time works out to $0.072 per CPU-hour with no memory charge, while Vercel Pro bills $0.128 per CPU-hour in Washington, D.C., plus memory while a request is in flight and $0.60 per million invocations.
Is Cloudflare Workers good?
For stateless APIs, redirects, auth checks and sites that are mostly static, yes: it's cheap and close to users. For apps that need a big in-memory working set, long jobs or Postgres next to the code, a server fits better.
How I checked
Prices were checked on 8 October 2026 on Cloudflare's Workers pricing, Workers limits, static assets billing, Durable Objects pricing, R2 pricing, Observability pricing, KV pricing, D1 pricing, Containers pricing and Workers AI pricing docs, and on Hetzner's, DigitalOcean's and Vercel's own pages, linked next to each number. Cloudflare's marketing plans page didn't show prices when I fetched it, so every Cloudflare number is from the docs. The three apps are assumptions, not measurements, and the server sizing is a rough match. I build Ployz, which competes with hosted platforms like Workers, so the maths is all here to check.
Deploy this on your own server with Ployz, free: get started.