Back to Blog
Self-Hosting on Hetzner vs. Deploying on Vercel: A Real Cost Comparison

Self-Hosting on Hetzner vs. Deploying on Vercel: A Real Cost Comparison

Dennis Reinkober3 min read

We use both Vercel and Hetzner. Not because we can't decide — because they solve different problems at different price points. But the "which one is cheaper?" question comes up on every project, so we finally sat down and compared real numbers.

The Setup

We'll compare costs for three real scenarios from our project portfolio:

  • Small MVP — a Next.js app with light traffic (5K monthly visitors, simple CRUD)
  • Medium SaaS — a platform with moderate traffic (50K monthly visitors, file uploads, background jobs)
  • High-traffic marketplace — a content-heavy app with significant traffic (200K+ monthly visitors, image-heavy, real-time updates)

All prices are monthly. All numbers are from actual invoices, not pricing calculator estimates.

The Numbers

Small MVP (5K monthly visitors)

ComponentVercelHetzner
Compute$0 (Hobby) or $20 (Pro)€4.50 (CX22)
Database$0 (Neon free tier)Included (self-hosted PG)
BandwidthIncludedIncluded (20 TB)
SSL/DomainIncludedFree (Let's Encrypt + Caddy)
CI/CDIncludedFree (GitHub Actions)
Total$0–$20/mo€4.50/mo

Winner: Vercel. At this scale, the free tier or Pro plan is unbeatable. Zero ops, instant deploys, preview environments out of the box. The €4.50 Hetzner box works fine, but you're maintaining it yourself.

Medium SaaS (50K monthly visitors)

ComponentVercelHetzner
Compute$20 (Pro)€16 (CX32)
Database$19 (Neon Launch)Included
Blob Storage$20–40 (Vercel Blob)€3 (Hetzner Object Storage)
Bandwidth$40/100GB overage riskIncluded (20 TB)
Background Jobs$25 (Vercel Cron + Functions)Included (systemd timers)
Monitoring$0 (basic)€0 (Grafana + Prometheus)
Total~$124–$145/mo~€19/mo

Winner: Hetzner. This is where the gap opens up. Vercel's per-feature pricing adds up fast once you need storage, background jobs, and real bandwidth. Hetzner gives you a full server for less than Vercel's database add-on.

The Hidden Cost

Hetzner's price doesn't include your time. If you spend 4 hours per month on server maintenance at a €100/hr rate, that's €400 in hidden ops cost. For a solo founder, Vercel might still be cheaper in total cost of ownership.

High-Traffic Marketplace (200K+ monthly visitors)

ComponentVercelHetzner
Compute$20 (Pro) + $150–300 (function invocations)€36 (CX42)
Database$69 (Neon Scale)Included
Image Optimization$50–100 (Vercel Images)€0 (self-hosted Sharp)
Bandwidth$200–500 (image-heavy)Included (20 TB)
CDNIncluded€0 (Cloudflare free)
Storage$60+ (Vercel Blob)€6 (Object Storage)
Total~$550–$1,000+/mo~€42/mo

Winner: Hetzner, by a mile. At this scale, Vercel's consumption-based pricing becomes painful. Bandwidth alone can dwarf the base subscription. Meanwhile, Hetzner's flat-rate model means costs barely increase with traffic.

Beyond the Invoice

Cost isn't just the monthly bill. Here's what the spreadsheet doesn't capture:

Where Vercel Wins

  • Zero ops overhead. No SSH, no nginx configs, no security patches. Push to git, it's deployed.
  • Preview environments. Every PR gets its own URL. This is genuinely valuable for client reviews.
  • Edge network. Global CDN included. Your app is fast everywhere without configuration.
  • DX speed. From git push to live in 30 seconds. On Hetzner, even with CI/CD, it's 2–5 minutes.

Where Hetzner Wins

  • Predictable costs. You know exactly what you'll pay next month. No surprise bills.
  • Full control. Need a cron job? A message queue? A second database? Just install it.
  • Bandwidth freedom. 20 TB included. Stream video, serve images, host downloads — no per-GB charges.
  • Data sovereignty. Hetzner data centers are in Germany and Finland. For EU clients with compliance requirements, this matters.
# Our standard Hetzner setup — takes 30 minutes once, then it just works
# Caddy (auto-SSL reverse proxy) + Docker Compose + PostgreSQL

# docker-compose.yml
services:
  app:
    image: ghcr.io/client/app:latest
    restart: always
    environment:
      DATABASE_URL: postgresql://app:${DB_PASS}@db:5432/app
    depends_on:
      - db

  db:
    image: postgres:16
    restart: always
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: ${DB_PASS}

  caddy:
    image: caddy:2
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile

volumes:
  pgdata:

Our Decision Framework

After deploying dozens of projects on both platforms, here's when we choose which:

Choose Vercel When:

  • The client is a solo founder or tiny team with no ops experience
  • The project is an MVP that might not survive 3 months
  • Preview environments are critical for the workflow (design reviews, client approvals)
  • Traffic is low and predictable
  • Budget is flexible but time is not

Choose Hetzner When:

  • Monthly traffic exceeds ~30K visitors
  • The project involves file uploads, image processing, or media serving
  • The client has compliance requirements (EU data residency)
  • There are background jobs, workers, or scheduled tasks
  • Cost predictability matters (bootstrapped startups, fixed-budget contracts)
  • We're available for ongoing maintenance
The Hybrid Approach

Our favorite pattern: Vercel for the Next.js frontend (SSR, edge caching, preview deploys) and a Hetzner box for the API, database, and background workers. Best DX where it matters, best pricing where it counts.

The Bottom Line

Vercel is a developer experience product. Hetzner is an infrastructure product. Vercel charges for convenience. Hetzner charges for compute.

Neither is wrong. But if you're paying €500+/month on Vercel and your app is a standard Next.js CRUD app — we should talk.


We help teams choose the right infrastructure and manage migrations. Learn more about our Cloud & DevOps services.

Similar Posts