Monthly hosting cost, computed from list prices published on developers.cloudflare.com and vercel.com. Prices checked 10 Nov 2026, USD, excluding tax.
Vercel figures use iad1 rates, the cheapest region (tied with cle1 and pdx1). CDN rates actually depend on where visitors are, so this assumes US traffic. One deploying seat. Enterprise and negotiated pricing are not covered.
Free plans cost $0 on both platforms. What differs is how much you can run before you hit a hard limit. Neither free plan sells extra compute usage. On Cloudflare, R2 is a separate subscription and is billed beyond its free tier.
| Limit | Cloudflare Workers Free | Vercel Hobby |
|---|---|---|
| Base price | $0 | $0 |
| Commercial use | Allowed | Not allowed (personal, non-commercial only) |
| Compute requests | 100,000 / day (≈3M / 30 days) | 1M invocations / mo |
| CDN / static requests | Unlimited (static assets, without Workers Cache / Worker-first) | 1M CDN requests / mo (includes function requests) |
| CPU | 10 ms per invocation (small occasional overruns tolerated; sustained excess fails with Error 1102) | 4 Active CPU-hours / mo |
| Memory | 128 MB, not metered | 360 GB-hours / mo (2 GB fixed) |
| Bandwidth | Unlimited, $0 | 100 GB Fast Data Transfer + 10 GB Fast Origin Transfer |
| Max request duration | No wall-clock limit for HTTP while the client is connected | 300 s |
| Object storage | R2 (separate subscription, metered beyond free tier): 10 GB-mo, 1M Class A, 10M Class B | Blob: 1 GB, 2k uploads, 10k reads, 10 GB transfer |
| Key-value | KV: 100k reads/day, 1k writes/day, 1 GB | Global Config: 100k reads, 100 writes, 1 store (1 MB) |
| SQL database | D1: 5M rows read/day, 100k written/day, 5 GB | None first-party (Marketplace, provider-priced) |
| Image transforms | 5,000 unique / mo (Images Free) | 5,000 / mo |
| Queues | 10,000 ops / day | 1M ops / mo |
| Cron | 5 per account, as often as once/minute | Legacy Cron Jobs: 100/project, once/day. Schedules (beta): every 15 min, 1,000/team, 5,000 runs/period |
| Build minutes | 3,000 / mo | Basic machine included (unmetered), 1 concurrent |
| What happens at the limit | Worker requests fail (Error 1027 / 429), or bypass the Worker if the route is set to fail open; CPU overruns fail with 1102 | Feature paused, typically until the 30-day window resets. No paid overages on Hobby; upgrade to Pro to continue |
The month is 30 days, and Cloudflare traffic is assumed to stay under 100k requests on every day, not just on average. CPU-ms is assumed to be the same on both runtimes. Vercel memory uses 2 GB × wall time with no concurrency, which is an upper bound under this simplified model.
| Scenario | Cloudflare Free | Vercel Hobby |
|---|---|---|
| Personal static site 300k requests/mo, all static, 15 GB transfer | ✓ $0 | ✓ $0 |
| Small SSR app (light CPU) 500k SSR requests (8 ms CPU, 120 ms wall, 50 KB) + 1.5M static requests, 30 GB | ✓ $0 | ✗ Exceeds: 2M CDN requests > 1M; 25.0 GB origin transfer > 10 GB |
| Hobby JSON API 2.5M API requests (~83k/day), 3 ms CPU, 50 ms wall, 2 KB, 5 GB | ✓ $0 | ✗ Exceeds: 2.5M CDN requests > 1M; 2.5M invocations > 1M |
| Low-traffic SSR (heavy CPU) 300k SSR requests (25 ms CPU, 200 ms wall, 60 KB) + 600k static, 20 GB | ✗ Exceeds: 25 ms CPU > 10 ms/invocation cap | ✗ Exceeds: 18.0 GB origin transfer > 10 GB |
| Download / asset-heavy static site 400k static requests, 200 GB transfer | ✓ $0 | ✗ Exceeds: 200 GB transfer > 100 GB |
Vercel Pro is costed both ways: with Flat Rate CDN (the default for new Pro teams) and with on-demand CDN. The cheaper of the two is shown. The last column repeats the Vercel total with provisioned memory divided by 4, as if Fluid compute ran 4 requests at once per instance. Vercel doesn't publish a packing factor, so treat that column as a sensitivity check, not a quote. Expand any row to see the line items.
| Scenario | Cloudflare | Vercel | Cheaper | Vercel @ 4× concurrency | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Marketing site (static) 5M static requests, 250 GB transfer | $5.00 | $40.00 | Cloudflare by $35.00 (8.0×) | $40.00 | ||||||||||||||||||||||||
Line itemsCloudflare Workers Paid
$5.00 Vercel Pro (no in-instance concurrency)
$40.00 | ||||||||||||||||||||||||||||
| SaaS SSR app 3M SSR requests (20 ms CPU, 150 ms wall, 60 KB) + 12M static, 400 GB | $5.60 | $107.38 | Cloudflare by $101.78 (19.2×) | $105.40 | ||||||||||||||||||||||||
Line itemsCloudflare Workers Paid
$5.60 Vercel Pro (no in-instance concurrency)
$107.38 | ||||||||||||||||||||||||||||
| API backend 50M API requests (4 ms CPU, 80 ms wall incl. DB wait, 2 KB), 100 GB | $20.40 | $166.67 | Cloudflare by $146.27 (8.2×) | $149.00 | ||||||||||||||||||||||||
Line itemsCloudflare Workers Paid
$20.40 Vercel Pro (no in-instance concurrency)
$166.67 | ||||||||||||||||||||||||||||
| High-traffic SSR site 60M SSR requests (15 ms CPU, 200 ms wall, 80 KB) + 240M static, 25 TB | $37.40 | $4,776.67 | Cloudflare by $4,739.27 (127.7×) | $4,723.67 | ||||||||||||||||||||||||
Line itemsCloudflare Workers Paid
$37.40 Vercel Pro (no in-instance concurrency)
$4,776.67 | ||||||||||||||||||||||||||||
| CPU-heavy API (AI/PDF/etc.) 2M requests, 300 ms CPU, 2 s wall (waiting on upstream), 10 KB, 20 GB | $16.40 | $54.29 | Cloudflare by $37.89 (3.3×) | $36.62 | ||||||||||||||||||||||||
Line itemsCloudflare Workers Paid
$16.40 Vercel Pro (no in-instance concurrency)
$54.29 | ||||||||||||||||||||||||||||
The lower price for each resource is marked green and the higher one red. Rows without a colour use different billing units, so they can't be compared directly.
| Resource | Cloudflare (Workers Paid) | Vercel (Pro) | Notes |
|---|---|---|---|
| Plan base fee | $5 / account / mo (min.) | $20 / mo incl. 1 deploying seat + $20 usage credit (credit is per team); extra seats $20 each | Cloudflare lists no per-seat fee. |
| Compute requests | 10M incl., then $0.30 / 1M Worker requests | $0.60 / 1M invocations (from 1st unit, credit applies) + every public request is also a CDN request | |
| CPU time | 30M CPU-ms incl., then $0.02 / 1M CPU-ms = $0.072 / CPU-hour | Active CPU $0.128 / CPU-hour (iad1; up to $0.221) | Assumes equal CPU-ms per request on both runtimes. |
| Memory / wall-clock duration | Not billed (128 MB per isolate, fixed) | Provisioned memory $0.0106 / GB-hour (iad1), billed during I/O waits; 2 GB default | Vercel gives 2–4 GB per instance; Cloudflare caps at 128 MB. |
| Static asset requests | Free, unlimited (unless Workers Cache is enabled or the Worker runs first) | Count as CDN requests: Flat Rate tiers (1M incl.; $20 → 10M; $100 → 50M; $300 → 150M) or $2.00 / 1M on-demand | |
| Bandwidth / egress | $0 (Containers excepted) | 1 TB incl. in Flat Rate tier (50 TB on paid tiers); on-demand $0.15 / GB; plus Fast Origin Transfer $0.06 / GB (request + response bytes to/from Functions, ISR, Blob on cache miss) | |
| Object storage (R2 vs Blob) | $0.015 / GB-mo (10 GB free) | $0.023 / GB-mo | |
| Object writes | $4.50 / 1M Class A (1M free) | $5.00 / 1M advanced ops | |
| Object reads | $0.36 / 1M Class B (10M free) | $0.40 / 1M simple ops (cache misses) + CDN requests (Flat Rate tier or $2.00 / 1M) + Fast Origin Transfer on misses | |
| Object egress | $0 | Blob Data Transfer: covered by Flat Rate CDN tier for eligible traffic; otherwise $0.05 / GB (bulk file/download hosting is ineligible) | |
| Key-value reads (KV vs Global Config) | $0.50 / 1M (10M incl.) | $3.00 / 1M | Global Config is capped at 1 MB/store — it is a config store, not general KV. |
| Key-value writes | $5.00 / 1M (1M incl.) | $1.00 / 100 = $10,000 / 1M | Metering differs: Global Config counts whole-store reads/updates; KV counts per key. |
| Image transformations | Images Free: 5,000 / mo. Separate Images Paid plan: 5,000 incl., then $0.50 / 1,000 unique transformations (each counted once per month) | $0.05 / 1,000, billed per cache MISS/STALE (+ cache reads $0.40/1M, writes $4.00/1M, 8 KB units) | Cloudflare also bills $1 / 100k deliveries and $5 / 100k stored for images stored in Images. |
| Queue operations | 1M incl., then $0.40 / 1M (64 KB units) | $0.60 / 1M (4 KiB units) | Vercel's smaller chunk size means >4 KiB messages cost more operations; idempotent sends and concurrency-limited push count 2×; retries add ops on both. |
| Durable workflows | Steps: 500k incl., then $0.80 / 100k; storage 1 GB-mo incl., then $0.20 / GB-mo; plus Workers requests + CPU | Events: $0.02 / 1k; data written $0.50 / GB; retained $0.50 / GB-mo; plus Functions + Queues usage | Different billing units (steps vs events) — not directly comparable. |
| CI build minutes | 6,000 min incl. (4 vCPU), then $0.005 / min | $0.0035 / vCPU-min (Standard 4 vCPU = $0.014 / min); none included; each deployment rounded up to a whole minute | |
| Cron jobs | No separate fee (billed as requests + CPU); 250/account, as often as once/minute | No separate fee (billed as function usage). Legacy Cron Jobs: 100/project, 1/min. Schedules (beta): up to 10,000/team on Pro | |
| WAF / DDoS | Unmetered DDoS; WAF custom rules, 1 rate-limiting rule and Free Managed Ruleset on all zone plans (more on paid zone plans) | DDoS + custom rules free; rate limiting $0.50 / 1M allowed requests | Not modelled in scenarios. |
R2 doesn't need Workers Paid, but it is its own subscription. Blob needs Vercel Pro once usage goes past the Hobby limits, so the $20 platform fee and $20 credit are included. Blob downloads incur CDN requests, Blob Data Transfer, and Fast Origin Transfer on cache misses. Flat Rate CDN covers CDN requests and Blob Data Transfer for eligible application traffic, but bulk file or download hosting is ineligible. The main Vercel column assumes the traffic is eligible and takes the cheaper of Flat Rate and on-demand. The last column assumes it is ineligible, so everything is billed on-demand. Vercel's cache misses are assumed at 20% of both requests and bytes. R2 reads are counted conservatively: every download is a Class B operation, and every upload is one single-part operation. R2 rounds usage up to the next whole billing unit.
| Bucket profile | Cloudflare R2 | Vercel Blob (Pro, Flat Rate eligible) | Cheaper | Vercel Blob if ineligible | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Small bucket 50 GB stored, 100k uploads, 2M reads, 200 GB out | $0.60 | $20.00 | Cloudflare by $19.40 (33.3×) | $20.00 | ||||||||||||||||||||||||||||||||||||||||||
Line itemsR2 (no Workers Paid needed)
$0.60 Vercel Blob on Pro, Flat Rate eligible
$20.00 Vercel Blob on Pro, ineligible (on-demand)
$20.00 | ||||||||||||||||||||||||||||||||||||||||||||||
| Mid bucket 1 TB stored, 1M uploads, 20M reads, 5 TB out | $18.45 | $189.60 | Cloudflare by $171.15 (10.3×) | $379.60 | ||||||||||||||||||||||||||||||||||||||||||
Line itemsR2 (no Workers Paid needed)
$18.45 Vercel Blob on Pro, Flat Rate eligible
$189.60 Vercel Blob on Pro, ineligible (on-demand)
$379.60 | ||||||||||||||||||||||||||||||||||||||||||||||
| Large bucket 10 TB stored, 5M uploads, 200M reads, 50 TB out | $236.25 | $3,771.00 | Cloudflare by $3,534.75 (16.0×) | $3,771.00 | ||||||||||||||||||||||||||||||||||||||||||
Line itemsR2 (no Workers Paid needed)
$236.25 Vercel Blob on Pro, Flat Rate eligible
$3,771.00 Vercel Blob on Pro, ineligible (on-demand)
$3,771.00 | ||||||||||||||||||||||||||||||||||||||||||||||
| Workload | KV | Global Config | Cheaper |
|---|---|---|---|
| 1M reads, 100 writes | $0.00 | $4.00 | Cloudflare by $4.00 (∞) |
| 20M reads, 1,000 writes | $5.00 | $70.00 | Cloudflare by $65.00 (14.0×) |
| 200M reads, 10,000 writes | $95.00 | $700.00 | Cloudflare by $605.00 (7.4×) |
Global Config holds at most 1 MB per store and is built for feature flags and config. One read fetches the whole store, while KV bills per key, so only the read-heavy config case compares like for like. For general key-value storage on Vercel you need Marketplace Redis, which the provider prices.
| Workload | CF Images | Vercel Image Opt. | Cheaper |
|---|---|---|---|
| 5,000 transformations / mo | $0.00 | $0.25 | Cloudflare by $0.25 (∞) |
| 50,000 transformations / mo | $22.50 | $2.50 | Vercel by $20.00 (9.0×) |
| 500,000 transformations / mo | $247.50 | $25.00 | Vercel by $222.50 (9.9×) |
Transformations only. The units differ: Cloudflare counts each unique transformation once per month, while Vercel bills every cache MISS or STALE, so the same variant can be billed more than once. Cloudflare's rate needs the separate Images Paid plan. Vercel's image cache reads and writes (in 8 KB units) and CDN requests and transfer are extra. So are Cloudflare's Images storage and delivery fees, for images stored in Images.
| Workload | CF Queues | Vercel Queues | Cheaper |
|---|---|---|---|
| 1M messages / mo (3 ops each) | $0.80 | $1.80 | Cloudflare by $1.00 (2.2×) |
| 10M messages / mo (3 ops each) | $11.60 | $18.00 | Cloudflare by $6.40 (1.6×) |
| 30M messages / mo (3 ops each) | $35.60 | $54.00 | Cloudflare by $18.40 (1.5×) |
Assumes messages of 4 KiB or less, delivered once, with 3 operations per message: write/read/delete on Cloudflare and send/receive-or-notify/delete on Vercel. Retries add operations on both platforms. On Vercel, idempotent sends and concurrency-limited push deliveries count double. Consumer compute is excluded.
| Usage | Workers Builds | Vercel Standard (4 vCPU) | Cheaper | Vercel Basic (2 vCPU) |
|---|---|---|---|---|
| 300 build-min / mo | $0.00 | $4.20 | Cloudflare by $4.20 (∞) | $2.10 |
| 2,000 build-min / mo | $0.00 | $28.00 | Cloudflare by $28.00 (∞) | $14.00 |
| 10,000 build-min / mo | $20.00 | $140.00 | Cloudflare by $120.00 (7.0×) | $70.00 |
Workers Builds on the Paid plan uses 4 vCPU / 8 GB machines. Vercel Pro's default is Elastic machines (4–30 vCPU) at $0.0035 per vCPU-minute. Vercel rounds each deployment up to a whole minute, including post-build time.
| Cloudflare | Vercel | Availability |
|---|---|---|
| Workers | Vercel Functions (Fluid compute) | Both |
| Static Assets / Pages | Vercel CDN static hosting | Both |
| R2 | Vercel Blob | Both |
| Workers KV | Global Config (1 MB config store); ephemeral Runtime Cache; general KV via Marketplace (Upstash) | Partial |
| Queues | Vercel Queues (beta) | Both |
| Workflows | Vercel Workflows | Both |
| Images | Image Optimization | Both |
| Cron Triggers | Cron Jobs → Schedules | Both |
| Containers | Daemons (beta) / container images as Functions | Partial |
| AI Gateway | AI Gateway | Both |
| Sandbox | Sandbox | Both |
| WAF / DDoS | Vercel Firewall | Both |
| D1 (SQLite DB) | None first-party — Marketplace Postgres (Neon, Supabase), provider-priced | Cloudflare only |
| Durable Objects | No equivalent stateful actor with built-in storage (Workflows, Drives, Sandbox store other kinds of durable state) | Cloudflare only |
| Hyperdrive | None | Cloudflare only |
| Workers AI (hosted inference) | None (AI Gateway proxies 3rd-party providers) | Cloudflare only |
| Vectorize | None first-party — Marketplace | Cloudflare only |
| Analytics Engine | Observability custom metrics / querying (narrower scope) | Partial |
| Browser Run (formerly Browser Rendering) | None dedicated (DIY in Sandbox) | Cloudflare only |
| Email Routing / Sending | None | Cloudflare only |
| vinext ISR support; Workers Cache stale-while-revalidate + purge | ISR (Incremental Static Regeneration) | Both |
| Web Analytics (real-user Core Web Vitals: LCP, INP, CLS) | Speed Insights (real-user Core Web Vitals) | Both |
| No equivalent identified | v0 | Vercel only |
| Previews (Workers) — no per-seat fee | Preview deployments per branch | Both |
$5 + max(0, R−10M)/1M×$0.30 + max(0, R×CPUms−30M)/1M×$0.02. Requests for static assets are free and are not counted in R.$20 + CDN tier fee + max(0, usage − $20 credit). Usage is the sum of: