I run my main products and most older projects on Hetzner, deployed with Kamal 2. A few projects are exceptions, but Hetzner + Kamal is now my default.

The smallest useful unit in my setup is a Hetzner CAX21 server at about $11/month with backups. I did the math on what the same kind of full-stack SaaS setup would cost on Vercel or Render.

The exact Hetzner vs Vercel comparison is messy, because PaaS pricing depends on traffic, function time, database size, and how you split projects. But the rough difference is still large enough that I think small SaaS apps should at least consider a VPS.

Here are real numbers from my production setup.

My Hetzner Hosting Cost

My baseline Hetzner bill for one CAX21 app server, checked against public pricing on May 21, 2026:

Resource Monthly Cost
CAX21 server (4 vCPU ARM, 8GB RAM, 80GB disk) $9.49
20TB included bandwidth $0
Backups (20% of server cost) ~$1.90
DNS via Cloudflare $0
Total ~$11.39/month

(Check Hetzner’s current pricing page for exact numbers – they adjust occasionally.)

That’s enough for a lot of indie SaaS work — Vue frontends, Fastify API servers, PostgreSQL databases, background workers, cron jobs. The CAX-series ARM instances are hard to beat for this kind of workload.

I also use Cloudflare for DNS and CDN (free tier). SSL is handled by Kamal via Let’s Encrypt. No extra cost.

What Vercel Would Cost for the Same SaaS

Let me map the same workload to Vercel + a managed database. I’ll assume moderate traffic — 100K function invocations/month, 100GB transfer, and a small Postgres database.

Resource Monthly Cost
Vercel Pro $20
Function invocations (100K) included
Fast Data Transfer (100GB) included
Neon Postgres $0-15 for a small app, usage-based after that
Blob storage (if needed) $0-5
Total ~$20-40/month

That is not terrible for one small app. Vercel’s current Pro pricing includes 1M function invocations and 1TB Fast Data Transfer, and Vercel Postgres has moved to Neon, which is usage-based.

The cost changes when you run multiple apps, add separate databases, use Blob, Image Optimization, cron, queues, or start paying overages. For a couple of small apps, my rough Vercel number is more like $20-70/month depending on whether the databases stay tiny and whether the apps share one Pro team. Still much more than Hetzner, but not automatically $100/month.

The bigger difference is predictability. Vercel hosting cost follows usage. On Hetzner, I pay the same ~$11 until I outgrow the server.

What Render Would Cost for the Same SaaS

Render sits between Vercel and self-hosting.

Resource Monthly Cost
Web service (Starter) $7
Background worker $7
PostgreSQL (small paid database) ~$6+ storage
Total per app ~$20-25/month

A couple of apps puts you around $40-50/month on compute and database alone. Render’s current pricing also has workspace plans: Hobby is $0/month, Pro is $25/month plus compute. If I wanted the production-grade workspace plan, that pushes a couple of small apps closer to $65-75/month.

That is still a reasonable product for what Render gives you. But it is several times what I pay on Hetzner, and small managed databases leave you less room than a local Postgres on an 8GB VPS.

The Bandwidth Gap

This is where Hetzner is still hard to match. My CAX21 comes with 20TB of included bandwidth per month. Twenty terabytes. I will not use that on these apps.

Vercel Pro includes 1TB. After that, bandwidth is usage-based. If you’re serving images, OG cards, or any media-heavy content, bandwidth costs can still add up, but the included allowance is much better than it used to be.

Render includes bandwidth based on your workspace plan, with overage charges after. The public pricing page currently lists 5GB on Hobby, 25GB on Pro, and 1TB on Scale. Better than it used to be in some cases, but still nowhere near 20TB included.

The Hidden Costs of Self-Hosting a SaaS

I’m not going to pretend self-hosting is free in every sense. There are costs that don’t show up on the invoice:

  • Initial setup time — setting up a server, configuring Docker, getting Kamal working, setting up SSL, configuring firewalls. I spent a weekend on this the first time. Now I do it in under an hour because I’ve codified everything in Stacknaut — Terraform for provisioning, Kamal for deployment, all pre-configured.
  • Maintenance — OS updates, Docker updates, disk space monitoring, log rotation. Maybe 30 minutes a month. I have scripts and cron jobs for most of it.
  • On-call — if the server goes down at 3am, that’s on me. In practice, Hetzner’s uptime has been excellent. I’ve had zero unplanned downtime in over a year. I use uptime monitoring (Uptime Robot, free tier) and get notified via Telegram if anything goes wrong.

If you value your time at $75/hour, that initial weekend of setup “costs” $1,200. That is the real counterargument. The monthly savings are obvious; the setup time is where the decision gets personal.

For me, it pays off because I reuse the setup. And if you use a starter kit with the infrastructure already configured, the setup cost drops a lot.

Database Performance on Hetzner vs Vercel

On Hetzner, PostgreSQL runs on the same server as my app. Queries have minimal latency because there’s no network hop.

On Vercel + Neon, the database is a separate service. On Render, you can use internal networking when the app and database are in the same region, but it is still a separate managed database. For most small apps this is fine. For chatty server-rendered pages with multiple database queries, the extra round trips can show up.

When Vercel or Render Make Sense

I’m not anti-PaaS. Vercel and Render are good products. They make sense when:

  • You’re validating an idea fast and don’t want to think about infrastructure
  • Your team doesn’t have anyone comfortable with Linux servers
  • You need global edge deployment (Vercel’s edge network is genuinely good)
  • You’re spending someone else’s money and time-to-market matters more than cost

But if you’re an indie developer watching monthly expenses, paying $40-75/month for something you can run for about $11 is hard to justify once the app is stable. That’s roughly $340-760/year you could spend on marketing, tools, or just keeping your runway longer.

The Math Over Two Years

Setup Monthly 2-Year Total
Hetzner self-hosted ~$11.39 ~$273
Render (couple of apps) ~$40-75 ~$960-1,800
Vercel (couple of apps) ~$20-70 ~$480-1,680

Self-hosting on Hetzner saves me roughly $200-1,500 over two years compared to these PaaS alternatives. The range is wide because the PaaS bill depends on how much managed infrastructure you use.

The stack I use — Vue + Fastify + PostgreSQL on Hetzner, deployed with Kamal, provisioned with Terraform — runs cleanly on small Hetzner servers. The infrastructure work people fear about self-hosting has gotten much simpler. One command deploys. SSL is automatic. Docker handles the environment.

It’s not 2015 anymore.