Vercel Is Too Expensive for Your SaaS: Self-Hosting That Actually Works

By Aziz Ali
vercelself-hostingsaasdeploymentindie-hacker

I got a $340 Vercel bill last year from a side project that made $0 that month. Serverless function invocations from a bot crawl, edge middleware I forgot was running, bandwidth from a misconfigured image CDN. It all added up in 48 hours. That's when I decided Vercel was not the right home for production SaaS.

If you're an indie hacker or solo founder, Vercel is a seductive trap. Incredible DX for prototypes and marketing sites — but for SaaS running real customer traffic, the bill grows in ways you don't see coming. Here's exactly what it costs and what I use instead.

What Vercel Actually Charges You

Most founders see Vercel's free tier and assume costs are minimal. They're not. Once you move to Pro (required for custom domains without branding, team features, and proper analytics), here's the real picture:

Cost Item Vercel Price Notes
Pro plan $20/seat/month Per developer on the team
Serverless function execution $0.60/million invocations Plus duration charges
Bandwidth $0.15/GB over 1TB Traffic spikes = surprise bill
Edge middleware Billed per invocation Easy to forget it's running
Image optimization $5/1,000 images after 5K/mo Every Next.js <Image> tag counts
Build minutes $0.006/min after 6,000/mo Active repos burn through this fast

A solo founder running a SaaS with modest traffic — 10K MAU, a few API routes, some image assets — can easily land at $80–$150/month from Vercel alone. That's before your database, Redis, email service, or anything else.

The Hidden Traps Nobody Warns You About

Function invocations are not just your API calls. Every middleware execution, every internal redirect, every /api/health ping from your uptime monitor — all of it counts. If you use Next.js with heavy middleware, invocations stack up invisibly.

Edge runtime doesn't eliminate cold starts. The marketing says edge is fast everywhere. The reality: edge is fast for simple redirects. For anything hitting a database, you still get cold start pain plus network latency to your DB region.

You don't own your logs. Vercel's log retention is 1 hour on free, 1 day on Pro. If something broke overnight, you might not even know why. Debugging production issues becomes guesswork.

Deploy locking and team permissions cost seats. Another developer joining the project? That's another $20/month. Three founders building together = $60/month just for deployment collaboration.

What I Deploy On Instead

After moving off Vercel, I've settled on a stack that costs a fraction of the price and gives full control:

# Deploying a Bun + TanStack Start app to Fly.io
fly launch --name my-saas --region iad
fly deploy

Fly.io is my default for full-stack SaaS. Free for tiny apps, scales predictably, and you get persistent VMs — no cold starts. A standard shared-2x VM runs $5–$10/month.

Railway is even simpler if you want Heroku-style deploys without Heroku pricing. Starts at $5/month and includes built-in Postgres.

Hetzner VPS via Coolify is what I use for higher-traffic projects. €4.50/month for a 2-core/4GB machine. Coolify gives you a Heroku-like UI on your own hardware. Full control over your stack, logs, and data.

Here's what the architecture looks like for a self-hosted SaaS:

graph TD
    A[Cloudflare DNS + CDN] --> B[Fly.io App Server - Bun]
    B --> C[Neon Serverless Postgres]
    B --> D[Plunk Email - Self-hosted]
    B --> E[Stripe Webhooks]
    F[GitHub Actions CI/CD] --> B
    G[Better Stack Uptime] --> B

Is the Tradeoff Worth It?

Yes — for indie hackers especially. Honest breakdown:

Vercel wins on: Zero-config deploys, global edge network for static assets, preview deployments per PR (genuinely excellent), deep Next.js integration.

Self-hosting wins on: Cost (often 70–80% less), logs you actually own, no cold starts on persistent VMs, freedom to run any framework or runtime, and your customer data doesn't leave your own infrastructure.

If you're on the free tier building a prototype, stay on Vercel. The moment you're charging real customers and running production traffic, move. The billing model is designed for high-traffic consumer apps with enterprise contracts — not bootstrapped SaaS.

Most ShipFast alternatives and indie-focused boilerplates are still tightly coupled to Vercel and Next.js. That's fine until your bill arrives. I built BetterStarter on Bun + TanStack Start specifically because it deploys anywhere — Fly.io, Railway, a plain VPS — with zero platform lock-in baked into the framework. If this resonates, there's more on why avoiding vendor lock-in matters for SaaS boilerplates.

Making the Switch

If you're currently on Vercel and want out:

  1. Audit your current usage — Check Vercel dashboard for function invocations, bandwidth, and seat count.
  2. Pick a target platform — Fly.io for full-stack apps, Railway for simple services, Hetzner/Coolify for budget deployments.
  3. Containerize — If you're not using Next.js-specific features (ISR, Edge runtime), containerizing is straightforward. Bun apps are trivial to Dockerize.
  4. Set up CI/CD — GitHub Actions with a fly deploy step takes about 20 minutes.
  5. Point DNS to Cloudflare — Free CDN, DDoS protection, and better analytics than Vercel provides.

If you want to skip the migration entirely and start clean, BetterStarter ships with a TanStack Start + Bun setup that's deployment-agnostic from day one — $99 one-time, and you own the code forever. No monthly platform bills built into the architecture.

FAQ

Is self-hosting harder to maintain than Vercel? For basic SaaS, not really. Fly.io and Railway abstract away most infra complexity. You need to manage database backups and monitor uptime, but tools like Better Stack and Coolify make this easy. Budget 1–2 hours/month for maintenance at indie scale.

Does self-hosting affect my site's performance? A CDN in front of your app (Cloudflare is free) handles static assets fast globally. For API routes and SSR, a Fly.io machine in the right region beats Vercel's cold-start latency for most real users.

Can I still get preview deployments without Vercel? Yes. Railway auto-creates preview environments per PR. Render and Fly also support branch-based deployments. More configuration upfront, but it works.

What about Next.js features like ISR and App Router caching? Those are tightly coupled to Vercel's infrastructure. If you rely on them heavily, switching is harder — which is one reason I moved to TanStack Start. No proprietary runtime magic that only works on one platform.

Will I lose Vercel's analytics and monitoring? Vercel Analytics is convenient but basic. Cloudflare gives you free traffic analytics. For application monitoring, Better Stack or Sentry (free tier) cover everything Vercel doesn't — and then some.