What a funnel actually costs on Cloudflare Workers at 100k sessions
Worked from Cloudflare published rates on 2026-08-03: a 100k-session month costs $5 on Workers, and the meter that bites is not the request count.
“Self-hosting is cheaper” is the kind of claim that deserves a number attached to it, so here is the number, worked from Cloudflare’s published rates on 2026-08-03.
The short version: for a funnel doing 100,000 sessions a month, the Cloudflare bill is $5. The interesting part is not that figure, it is which line item nearly stops you from getting there, and it is not the one anybody worries about.
The rates
From Cloudflare’s Workers and Hyperdrive pricing pages, checked today:
| Free | Paid | |
|---|---|---|
| Requests | 100,000 / day | 10 million / month, then $0.30 per additional million |
| CPU | 10 ms per invocation | 30 million CPU-ms / month, then $0.02 per additional million |
| Static assets | free and unlimited | free and unlimited |
| Hyperdrive | included, 100,000 queries / day | included, unlimited queries |
| Workers KV | 100k reads, 1k writes / day | 10M reads, 1M writes / month |
Workers Paid has a $5/month minimum. Hyperdrive costs nothing extra on either plan, connection pooling and query caching included, and Cloudflare charges no data transfer fees.
That “static assets are free and unlimited” row does more work than it looks like. Every image, font, stylesheet and script your funnel serves is outside the billing model entirely. The only things that count are the requests that actually run your code.
Modelling 100,000 sessions
Assume a four-step funnel: landing page, order form, one-click upsell, thank-you page. Not every visitor sees all four, so call it 2.5 dynamic page renders per session.
page renders 100,000 sessions x 2.5 = 250,000 requests
API calls order create, payment, etc.
100,000 x ~1.5 = 150,000 requests
static assets css, js, images, fonts = free and unlimited
-----------------
worker requests ~ 400,000 / month
400,000 against 10,000,000 included. You are using 4% of the request allowance on the $5 plan.
CPU is the other meter. CPU time on Workers excludes I/O wait, so the time spent waiting on Postgres does not count against it. An SSR render with a template pass and some JSON work lands in single-digit to low-double-digit milliseconds. Even at a generous 20ms:
400,000 requests x 20 ms = 8,000,000 CPU-ms
Against 30,000,000 included. Also comfortable.
Workers bill: $5/month. You would need roughly 2.5 million sessions a month before either meter starts charging overage.
The line item that actually bites
Look at the free plan again. 100,000 requests a day is 3 million a month, and our funnel needs 400,000. The request count is not the constraint.
The constraint is 10 milliseconds of CPU per invocation.
That is the free plan’s per-request ceiling, and server-rendering a page with a database round trip is exactly the workload that flirts with it. The DB wait itself is free, but the render, the serialisation, and the JSON work all count. A simple page will fit. A heavy checkout page with a large component tree may not, and when it does not, you get an error rather than a bill.
So the honest guidance is inverted from the usual advice: do not plan your Workers deployment around the request allowance, plan it around per-invocation CPU. If you are on the free plan, the first thing to measure is CPU time per render, not traffic.
What the $5 does not cover
This is the part that gets left out of “it runs for free” posts, so let me be specific about what else you are paying for.
Postgres. Not a Cloudflare product and not included. A managed instance runs from $0 on a free tier to roughly $20 to $25 a month for a small paid one. For most funnels this is the largest single line item, several times the Workers bill.
Object storage for media. Any S3-compatible bucket. R2 keeps it inside Cloudflare with no egress fees; small funnels sit in cents.
An email provider. Receipts and abandoned-cart recall need one. Resend’s free tier caps at 100 emails a day, which is too restrictive for recall at any real volume.
LLM tokens, if you use AI generation. Bring your own key. Every agent run ships the current page layout plus the full component catalog to your provider, so iteration sessions add up.
Realistic all-in for a 100k-session funnel: $5 Workers + $0 Hyperdrive + $20-ish Postgres + small change for storage and email. Call it $25 to $35 a month.
Compare that to ClickFunnels Scale at $197/month. Compare it to our own managed Cloud and something awkward falls out: Cloud is a flat $29/month at any volume, which lands inside the range you just costed for running it yourself.
So self-hosting is not the money argument at this traffic level. It is a control argument - you own the Postgres, the secrets and the deploy - and the operational cost of that ownership is your time, which does not appear on either bill. Above 100k sessions the infrastructure line grows and Cloud’s does not, so the comparison eventually tips back, but not for the reason people expect.
Why this is not the usual serverless cost story
Most “we moved to serverless and saved money” posts are about traffic that spikes. This is not that. The reason a funnel fits Workers so well is the opposite property: funnels are idle most of the time.
A launch does 100,000 sessions in four days and then the funnel sits there for three weeks. On a VPS you pay for those three weeks. The always-on floor for a self-hosted Node app with a managed database and a load balancer is somewhere around $40/month before a single visitor arrives, and the funnel does not care that nobody is visiting.
Workers has no floor beyond the $5 plan minimum, and static assets stay free whether one person or a million people load them. For a business shape that is bursty by nature, that matches the cost curve to the actual work better than any amount of right-sizing an instance.
Check my arithmetic
Every rate in this post is on Cloudflare’s public pricing pages and every step of the model is above. If your funnel is heavier than 2.5 renders per session, or your CPU per render is 60ms rather than 20ms, redo the multiplication; the structure holds and only the headroom changes.
The Workers deploy path, including the KV and Hyperdrive setup, is in the installation docs, and the shorter overview of what running a funnel builder on Cloudflare Workers involves is there too. The whole thing is Apache-2.0, so you can measure your own CPU time before you commit to anything.