Cloudflare Workers vs Vercel vs AWS Lambda: real pricing for a side project at 1M requests.
Same workload, three platforms, three bills. We modeled a typical side project at 1M requests/month and 50 GB of egress. The gap is bigger than it looks.
For a typical side project (1M requests/month, 50 GB egress, a database, a file store), the bills are: Cloudflare ~$5 · Vercel ~$25 · AWS ~$30. The deltas come from three places: egress fees (Cloudflare has none), included free tiers, and the cost of the auxiliary services. Below is each bill, fully itemized.
The hypothetical workload
- 1,000,000 HTTP requests/month
- 5ms average CPU per request
- 5 GB database (reads dominant)
- 10 GB file storage
- 50 GB egress to users (mostly file downloads)
- 500k background queue messages
Round 1 — Cloudflare
| Line item | Cost |
|---|---|
| Workers (1M req, free tier covers 3M) | $0 |
| D1 (5 GB at the free line) | $0 |
| R2 (10 GB storage) | $0 |
| R2 (50 GB egress) — no egress fee | $0 |
| Queues (500k messages) | $0.20 |
| Workers Paid (required for Queues) | $5.00 |
| Total | $5.20 |
Round 2 — Vercel
| Line item | Cost |
|---|---|
| Pro plan (required to ship anything serious) | $20.00 |
| Function invocations (1M, free tier covers it) | $0 |
| Function GB-seconds (free tier on Pro covers small) | $0 |
| Bandwidth (50 GB out of 1 TB Pro tier) | $0 |
| Postgres / KV (Vercel Storage) | ~$5 |
| Blob storage (10 GB) | ~$0.50 |
| Total | ~$25.50 |
Vercel's Pro plan covers a lot, but the floor is $20 — you don't get a free production tier the way Cloudflare gives you. For a 1M-request app, that's the entire bill.
Round 3 — AWS Lambda + auxiliary
| Line item | Cost |
|---|---|
| Lambda invocations (1M) | $0.20 |
| Lambda compute (5ms × 1M, 256MB) | $0.20 |
| API Gateway (1M req) | $3.50 |
| RDS Postgres t4g.micro | $13.50 |
| S3 storage (10 GB) | $0.23 |
| S3 egress (50 GB out) | $4.50 |
| CloudFront (50 GB) — optional but recommended | $4.25 |
| SQS (500k messages) | $0.20 |
| Route 53 (1 zone) | $0.50 |
| NAT Gateway if needed (often forgotten) | $32+ |
| Total (without NAT) | ~$27 |
| Total (with NAT, real prod) | ~$59 |
The NAT Gateway is the AWS surprise nobody mentions in tutorials. If your Lambda needs to reach the public internet from a VPC, you pay $32/month just for that, regardless of usage.
AWS Lambda is cheap. The 11 things you need to wire around AWS Lambda are not.
Where each one wins
Cloudflare wins for…
- Side projects and small SaaS (cheapest by 4-6x)
- Apps with heavy egress (R2's no-egress is huge)
- Real-time / multiplayer (Durable Objects)
- Edge latency (200+ POPs, smaller cold start)
Vercel still wins for…
- Next.js apps with heavy ISR / image optimization
- Teams that want one vendor for build + deploy + analytics
- Frontend-first projects with simple backends
AWS still wins for…
- Enterprise compliance and audit requirements
- Apps that need many AWS-specific services (Bedrock, etc.)
- Workloads where a CFO has already done the negotiated-rate math
What changes at 100x scale
The picture shifts when you move from 1M to 100M requests/month:
- Cloudflare: ~$50–80/mo (mostly Workers + DO + D1 storage)
- Vercel: ~$200–500/mo (Pro plan ceilings hit, then enterprise)
- AWS: ~$200–400/mo (Lambda scales linearly, RDS gets bigger)
Cloudflare's lead narrows but doesn't disappear. The egress savings keep compounding.
For 90% of side projects and small SaaS, Cloudflare is the cheapest by 4–6x.
The bigger you get, the more the picture depends on what you're shipping. But for the kind of project you're starting on a Sunday afternoon, the gap is enormous and not closing.
Ship on the cheapest one — without the wiring.
buildr scaffolds the cheapest stack by default and deploys it to your Cloudflare account. Same bill, zero terraform.
Build my app free