Skip to main content

Cloudflare Workers Bills $51, Vercel Bills $1,640: The Real Math Behind a 32x Edge-Compute Gap

8 min readDora NodaDora Noda
Share
On this page

Run the same function, at the same 100 million monthly requests, on both platforms that sell you "deploy a function to the edge," and one bill arrives at $51.40. The other arrives at $1,640.28. That's a 32x gap for identical code, identical traffic, identical response payloads — and neither number is a marketing figure. Both are computed directly from each vendor's own published 2026 rate card.

The platforms are Cloudflare Workers and Vercel. Both pitch themselves as the place you deploy a function and let the platform handle the edge, the scaling, and the routing — Workers on V8 isolates spun up in Cloudflare's network, Vercel's Fluid Compute on its own managed function runtime. The gap between what they charge for that pitch isn't a rounding error or a worst-case cherry-pick — it's what happens when one vendor meters your workload on two dimensions and the other meters it on five.

The workload we're pricing

To keep this honest, here's the exact scenario, so you can swap in your own numbers and get your own answer:

  • 100,000,000 requests/month — roughly 38.6 requests/second sustained, a mid-size API or SSR backend
  • 10ms average Active CPU per request — a lightweight compute path: auth check, JSON transform, template render. Not a no-op redirect, not a heavy image transform
  • 100KB average response payload — a typical JSON API response or small rendered HTML page
  • 50ms average wall-clock duration per request (10ms CPU + 40ms waiting on I/O — a database call, an upstream fetch)
  • Vercel's cheapest region, US East (iad1) — pick São Paulo or Osaka instead and every Vercel line item gets worse
  • Storage and database add-ons (Cloudflare KV/D1/R2, Vercel Blob/Edge Config) are excluded from both sides — this is strictly the compute-and-networking meter, not the data layer

Cloudflare Workers: $51.40

Workers Paid is a $5/month base plan with two metered dimensions above the included allowance, and nothing else:

Line itemIncludedUsageOverageRateCost
Base plan$5.00
Requests10M100M90M$0.30/million$27.00
CPU time30M ms1,000M ms970M ms$0.02/million ms$19.40
Data transfer (egress)10TB$0$0.00
Total$51.40

Cloudflare doesn't charge for data transfer out of Workers at all — "no additional charges for data transfer (egress) or throughput (bandwidth)," per its own pricing docs. A 100KB response and a 10KB response cost exactly the same to serve. That single fact turns out to matter more than anything else in this comparison.

Vercel: $1,640.28

Vercel's Fluid Compute pricing meters the same request across five separate dimensions — Edge Requests, Function Invocations, Active CPU, Provisioned Memory, and Fast Data Transfer — each billed independently on top of the $20/month Pro seat:

Line itemIncludedUsageOverageRateCost
Edge Requests10M100M90M$2.00/million$180.00
Function Invocations100M100M$0.60/million$60.00
Active CPU277.8 hrs277.8 hrs$0.128/hr (iad1)$35.56
Provisioned Memory (1GB instances)1,388.9 GB-hrs1,388.9 GB-hrs$0.0106/GB-hr (iad1)$14.72
Fast Data Transfer1TB10TB9TB$0.15/GB$1,350.00
Total (usage)$1,640.28

That's before the $20/month seat, which the usage credit only dents. Fast Data Transfer alone — $1,350.00 — is 82% of the entire bill. It exists because Cloudflare's "no egress charge" line has no Vercel equivalent: every gigabyte your function ships to a client past the included 1TB costs $0.15, whether that gigabyte is a cache-hit static asset or a dynamically generated response.

Provisioned Memory is the one line item worth explaining, because it's the clearest example of what a fifth metered dimension buys the vendor and costs the customer. Vercel bills memory for the instance's entire wall-clock lifetime — from the moment the first request arrives until the last in-flight request finishes — not just the milliseconds the CPU is actively running. A function waiting 40ms on a database call is idle on CPU (Active CPU billing pauses) but the 1GB reserved for that instance is still on the clock, still accruing GB-hours. Cloudflare's isolate model has no equivalent charge: an idle Worker waiting on fetch() costs nothing beyond the CPU time it actually consumes. Vercel's own docs frame this as "you pay for memory whenever work is in progress, never for idle CPU, and nothing at all between requests" — true, but "whenever work is in progress" includes every millisecond spent waiting on I/O, which is exactly the time a request-heavy, I/O-bound workload spends the most of.

What the gap is actually made of

It's tempting to credit the whole 32x to "Vercel has five meters, Cloudflare has two" — but that conflates two different effects: charging more per unit on the meters both platforms share, and charging for units Cloudflare doesn't meter at all. Separating them changes the story:

1. Same two dimensions, different rates. Both platforms meter something request-shaped and something CPU-shaped. Cloudflare's requests ($27.00) + CPU time ($19.40) = $46.40. Vercel's closest equivalents — Invocations ($60.00) + Active CPU ($35.56) = $95.56 — cost roughly 2.1x more for the identical two dimensions, before Vercel adds anything Cloudflare doesn't have.

2. Two dimensions Cloudflare doesn't meter at all. Vercel separately bills Edge Requests ($180.00) on top of Invocations, and Provisioned Memory ($14.72) for the instance's full wall-clock lifetime, not just active compute. Cloudflare has no charge resembling either. That's $194.72 that exists purely because Vercel's model has more metered surface area — dimension count as a cost, independent of any per-unit rate.

3. Bandwidth. Fast Data Transfer: $1,350.00 against Cloudflare's $0.00. This single line dwarfs the other two effects combined — it's not a multi-metering story so much as a "one vendor gives you free egress and the other doesn't" story.

$95.56 (rate premium on shared meters) + $194.72 (extra metered dimensions) + $1,350.00 (bandwidth) = $1,640.28 — rate premium, extra dimensions, and free-vs-metered bandwidth all stack, and bandwidth is by far the largest of the three.

How much of this is the assumptions? A sensitivity check

None of the above holds if you change the workload, so here's what moves and by how much:

ScenarioCloudflare totalVercel totalMultiplier
Light: 1ms CPU/request, 10KB response, 100M req/mo$33.40$246.50~7.4x
Baseline (above): 10ms CPU, 100KB response, 100M req/mo$51.40$1,640.28~31.9x
Low-traffic: same 10ms/100KB profile, 1M req/mo$5.00 (base only, all usage in free tier)~$20.00 (seat fee; usage charges of ~$1.10 absorbed by credit)~4x

The multiplier isn't a fixed constant — it's driven almost entirely by response payload size, because that's what feeds Fast Data Transfer, Vercel's single largest line item. A chatty API returning small JSON payloads sees a 7-8x gap. A backend serving 100KB+ responses at real scale sees 30x or more. And at low traffic, both bills collapse toward their fixed floor — but even there, Vercel's $20/month seat is 4x Cloudflare's $5/month base, before either platform has billed a single unit of usage.

The number a self-hosted alternative has to beat

None of this is really an argument for Cloudflare over Vercel specifically — it's a demonstration that "metered by the request" and "metered by the request" can mean bills 32x apart depending on how many separate dimensions get billed and whether bandwidth is one of them. A self-hosted edge or function tier doesn't get to hand-wave that away by pointing at either vendor's sticker price; it has to actually beat the cheaper of the two on its own merits — near-zero marginal cost per request and per CPU-millisecond, and no metered egress at all, because the bandwidth is already paid for by the box you own.

That's a real bar, not a rhetorical one. Cloudflare's $51.40 already sets a low floor for a platform that owns nothing and rents everything from Cloudflare's edge network. A team running the same 100M-request workload on hardware it already owns — a Hetzner box, a bare-metal cluster, anything with a flat monthly cost and unmetered bandwidth — isn't just avoiding Vercel's $1,640.28. It's competing against Cloudflare's $51.40, and the only way to win that comparison is architecture: no per-request meter, no per-CPU-ms meter, no per-GB meter, because the machine is already paid for whether it serves 1 request or 100 million.

That's the bar Bex.co is built against: push a git repo, get a running HTTPS service on machines you own, with no per-request, per-CPU-ms, or per-GB meter standing between your traffic and your bill. It won't beat Cloudflare's free egress by being cheaper per gigabyte — it beats it by not metering the gigabyte at all. Star the repo on GitHub or deploy your first app today.


Sources:

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex