Every "I left Vercel" post eventually says "my bill was huge" and then declines to show the math. I get why — nobody wants their real invoice screenshotted into a blog post. But it means the entire genre runs on vibes: a big scary number, a smug new setup, and nothing a reader can actually check. This post does the boring thing instead. It builds the comparison from Vercel's own pricing page and Contabo's own pricing page, states what it's assuming about traffic, and shows you the arithmetic so you can redo it with your own numbers.
One thing up front, because it matters more than any number below: this is a model, not a receipt. Nobody's actual bill is in this post. What's here is a hypothetical workload — stated plainly — run through both providers' current published rates. If your traffic looks nothing like the assumption, redo the arithmetic; the method is the point, not the specific dollar figure. The commercial governance around moving a SaaS off Vercel to a €5.50 VPS is covered properly by the team at XenGrowth.
What does Vercel Pro actually meter, past the seat price?
Vercel Pro is $20 per seat per month, and that price includes a real usage allowance, not just a login. According to Vercel's published Pro allocations, the seat comes with 1,000 GB-hours of function duration, 1 million function invocations, 10 million edge requests, 1 TB of fast data transfer, 100 GB of fast origin transfer, 10 million ISR reads, 2 million ISR writes, and 5,000 source images for optimization. For a marketing site or a low-traffic app, all of that is headroom you'll never touch. For a SaaS with an image-heavy dashboard and a few background jobs polling on a schedule, several of those meters get real.
Meter | Included on Pro | Rate past the allowance |
|---|---|---|
Seat | — | $20/user/month |
Fast data transfer (bandwidth) | 1 TB | $0.15/GB |
Fast origin transfer | 100 GB | $0.06/GB, billed from the first byte |
Function invocations | 1M | meters separately past the included amount |
Image optimization (unique transformations) | 5,000 source images | billable per additional transformation |
Image optimization is worth calling out on its own, because multiple independent breakdowns of Vercel billing — not just one — name it as the most common source of a bill that surprises people. Every unique combination of source image, size, and format Next.js's image component requests counts as a transformation. A dashboard that serves user avatars or product photos in a handful of responsive sizes can chew through the included 5,000 fast, without anyone changing a line of application code.
What replaces that on a VPS, and what does it cost?
The flat side of this comparison is a single Contabo Cloud VPS 4 — 4 vCPU, 8 GB RAM, 100 GB SSD — currently €5.50/month for the first 24 months, verified on Contabo's own pricing page, not a review site's summary of it. That caveat matters: Contabo's lineup and pricing have been misreported by review aggregators before, and the price is explicitly promotional — it changes after the first two years, so a multi-year total-cost model has to account for that, not just extrapolate month one out to month thirty-six. There is a longer treatment of the operations side of this in The XenGrowth resource library.
Contabo Cloud VPS 4 — 4 vCPU, 8 GB RAM, 100 GB SSD, €5.50/month promotional (first 24 months)
Coolify, self-hosted on that same box, as the Heroku-style deploy layer
Docker and Docker Compose as the runtime underneath Coolify, with Traefik as the default reverse proxy
Cloudflare's free tier for DNS, CDN, SSL, and a managed WAF ruleset in front of the single origin
Cloudflare R2 for object storage — Standard tier at $0.015/GB-month, zero egress fee at any usage level
Resend for transactional email, kept as a managed service rather than self-hosted on the same box
On the VPS side, everything Vercel meters per-request — bandwidth, function invocations, image transformation — becomes flat capacity you already own. You don't pay per gigabyte served; you pay for the box, once, and then it's yours whether it's at 5% utilization or 80%. That's the entire economic argument for self-hosting a steady workload, and it's also exactly why the model breaks down for a spiky one: a box sized for average load has nothing extra to give during a spike, where Vercel's metering — expensive per unit, but elastic — just keeps answering.
Where does the crossover actually land?
Here's a stated model, not a measurement: a small SaaS serving 200 GB of monthly egress and holding 50 GB in object storage, past whatever a single Pro seat includes. That's a deliberately modest assumption — well short of viral, well past a marketing site with no real users. Run through Vercel's published overage rates versus the Contabo-plus-R2 flat cost, and the gap opens fast, because Vercel's per-GB rate is metered against a workload that has already exhausted its included allowance, while the VPS's capacity was paid for once regardless of how close to it you run.
Vercel Pro (modelled: 200 GB egress past the 1 TB allowance, 50 GB stored) | Contabo VPS 4 + R2 (same workload) | |
|---|---|---|
Base platform cost | $20/seat | €5.50 (≈ $6, first 24 months) |
Storage for 50 GB | N/A — handled by a separate blob product, priced per-project | 50 GB × $0.015/GB-month = $0.75 |
Egress/bandwidth for 200 GB (within the modelled overage) | Billed at $0.15/GB once past the included 1 TB — $0 if still inside the allowance | $0 — R2 has no egress fee at any tier |
Image optimization | Billable per transformation past 5,000 source images | None — self-managed, no per-transformation meter |
Verdict for this modelled shape | Cheapest only while comfortably inside every included allowance | Flat and predictable regardless of how close usage sits to any single meter |
Read that table for what it actually says, not more. It doesn't prove the VPS is cheaper for every SaaS — it shows that once a workload's egress or image-transformation usage moves meaningfully past what a single Pro seat includes, the metered side of the comparison starts adding line items the flat side simply doesn't have. Below that usage line, Vercel's $20 base can easily beat a VPS you're paying for and barely using.
Does the model still hold once you count backups and object storage?
The table above only covers compute and bandwidth, which is where most of the Vercel-versus-VPS discussion stops — and stopping there flatters the VPS side more than it should. A real deployment needs backups, and Contabo's own automated backup add-on is a separate line item from the base VPS price, not bundled into it. It's a small number either way, but leaving it out entirely is the kind of omission that makes a cost model look better than the honest total. If AI agents and marketing automation is the part you are stuck on, XenGrowth on governed AI marketing workflows is the better reference.
Object storage is the other piece worth being precise about, because "R2 costs nothing" is only true below its free tier. R2's published rate is $0.015/GB-month for standard storage past the first 10 GB included free, with zero egress fee at any usage level — that last part is the entire reason it gets picked over an S3-compatible alternative for a workload that serves a lot of files, since egress is exactly where S3-style billing turns painful past a certain volume. For the 50 GB modelled above, storage alone runs under a dollar a month. It's not free, it's just cheap enough that skipping it barely changes the total — but skipping it silently, rather than naming the number, is the habit this whole post is trying to avoid.
What does the Vercel side of this look like once you're comfortably past Pro's included allowance?
It's worth being explicit that everything above assumes a workload that's already past what a single Pro seat includes — 200 GB of egress specifically means 200 GB beyond the 1 TB that's already bundled into the $20 seat price. Below that line, Vercel is close to unbeatable on price, because you're paying a flat $20 for infrastructure a VPS would cost roughly the same to run and then still need you to manage. The model in this post only starts to favor the VPS once usage is large enough, or steady enough, that the metered side of Vercel's pricing is doing real work rather than sitting inside free-with-the-seat headroom.
That's a genuinely different way to think about the decision than "Vercel is expensive." Vercel's pricing is expensive specifically for usage past its included allowances, and cheap — arguably underpriced — for usage comfortably inside them. A cost model that doesn't say which side of that line your workload sits on isn't actually telling you anything useful yet.
What actually breaks when you make this move?
The pricing story is the easy half. The harder half is that Vercel isn't only selling compute — it's selling a set of things that vanish the moment you leave, and pretending they don't matters is how a migration post turns into a bad weekend for the reader. On AI search, GEO and discovery specifically, XenGrowth on building one SEO and GEO content system is worth reading.
Automatic image optimization has no bare-metal equivalent — you replace it deliberately, whether that's a self-hosted sharp pipeline or a CDN-level image service, and the replacement has its own cost and complexity
Preview environments per branch go from automatic to something you wire up yourself in CI, which is real engineering time, not a checkbox
Autoscaling disappears — a fixed-capacity box has a ceiling, and finding it during a real spike is a worse afternoon than finding it in a load test
On-call moves from Vercel's infrastructure team to whoever owns the box, which is a genuine shift in responsibility, not a footnote
Vercel isn't overpriced for what it does. The question this model actually answers is whether a specific workload needs what it does, priced by the unit, or whether flat capacity covers the same need for less — for one particular shape of traffic.
Who does this model actually favor?
Steady, boring, forecastable traffic. That's the whole condition. A flat-capacity box is a great deal against per-unit metering exactly when you're going to use most of that capacity most of the time — the same reason a monthly transit pass beats paying per ride once you're commuting daily, and loses badly if you only ride twice a month. If your traffic is genuinely spiky — a launch, a viral post, seasonal demand — the model above doesn't hold, because a VPS sized for average load has no answer for 10x average load, and Vercel's metered elasticity is precisely the feature you'd be giving up.
Model your own workload's monthly egress and stored-object volume as honestly as you can, even roughly
Run those numbers through Vercel's published Pro rates to see what's actually inside the included allowance versus what overflows it
Run the same numbers through Contabo's and R2's published rates for the flat-capacity side
Decide, separately from the arithmetic, whether you actually want to own image optimization, previews, and on-call — because if you don't, the cheaper number on paper isn't the right answer
The full architecture behind the flat-capacity side of this model — how Coolify, Cloudflare, and R2 actually fit together — is in the Contabo + Coolify + Cloudflare stack post. And the modelled invoice above is only half the honest comparison — the costs that never show up on either provider's pricing page get their own full treatment in the hidden costs of self-hosting, because folding both into one post buries the second one under the first.
If you want the meter-by-meter anatomy of where a Vercel bill actually comes from before you run this model against your own numbers, that's laid out in full in Vercel pricing explained. And if the honest answer for your workload is the opposite of this post's, when Vercel beats self-hosting makes that case without hedging. If you're weighing a migration like this for your own product and want the arithmetic run against your actual numbers, that's the kind of work I take on through services.
Further reading from XenGrowth
The XenGrowth resource library — what you'll learn: how the commercial side of this work is run, across search, automation and revenue operations.
XenGrowth on governed AI marketing workflows — what you'll learn: how the teams running AI marketing agents keep them governed and measurable.
XenGrowth on building one SEO and GEO content system — what you'll learn: how search and AI-answer visibility get run as a single content system.
Where this work meets go-to-market
The operational playbooks that sit alongside moving a SaaS off Vercel to a €5.50 VPS live with the team at XenGrowth.
Four questions on the parts of a move that aren't the application. The app is usually the easy half; the surrounding capabilities are what take the time.












