Vercel and Netlify Cost: When the Free Tier Bites Back
Vercel and Netlify bills can jump from $20 to $4,000/month without obvious warning. Here's what triggers the spikes and when it's time to migrate elsewhere.
By Andrii Votiakov on
Vercel and Netlify are the easiest way to deploy a frontend. They're also the easiest way to end up with a $3,000 bill that was $200 last month, with no obvious explanation in your dashboard. I've helped several teams diagnose and escape these bills. The triggers are consistent, and the decision of whether to stay or migrate is more nuanced than the "just move to AWS" crowd admits.
Quick answer
Vercel's cost spikes come from bandwidth overage ($0.15/GB beyond plan), serverless function duration (on Pro: $0.18/GB-hour beyond included hours), and Edge Function invocations at scale. Netlify's come from build minutes, bandwidth, and serverless function invocations beyond the free tier. Both platforms are well-priced for small to medium traffic. At >500 GB/month bandwidth or >5M serverless invocations/month, you need to do the maths — staying may still be right, but it shouldn't be accidental.
How Vercel's pricing actually works
Vercel has three relevant tiers for teams:
- Hobby (free): 100 GB bandwidth, 100 GB-hours serverless, personal projects only
- Pro ($20/user/month): 1 TB bandwidth included, 1,000 GB-hours serverless, Edge Functions included
- Enterprise: custom pricing, typically $400+/month
Beyond included limits on Pro:
| Overage | Rate |
|---|---|
| Bandwidth | $0.15/GB |
| Serverless function duration | $0.18/GB-hour |
| Edge Function invocations | Not metered separately on Pro (bundled with bandwidth) |
| Image Optimisation | $5/1,000 source images beyond included 5,000 |
The bandwidth charge is where most teams get caught. 1 TB sounds like a lot — until you have a viral launch, a traffic spike from a Reddit thread, or you start serving assets that should be in a CDN rather than hitting Vercel's network.
The serverless function duration trap
Vercel's serverless functions (Next.js API routes, Edge Runtime, serverless functions) bill on duration. On Pro, you get 1,000 GB-hours/month. A function using 512 MB of memory for 1 second = 0.5 GB-hour per invocation.
1,000 GB-hours ÷ 0.5 = 2,000 invocations before you start paying on a 512 MB function running for 1 second each. That's nothing for a real application. At 1M invocations/month at 512MB/1s: that's 500,000 GB-hours — 499x the included limit = ~$89,820/month in duration alone.
That extreme scenario isn't realistic for most API routes (they complete in <100ms, not 1s), but the maths illustrates the risk. Long-running operations — PDF generation, AI calls, image processing — are expensive on serverless platforms.
How Netlify's pricing works
Netlify's model is different. The key metered items:
| Resource | Free tier | Pro ($19/month) | Beyond |
|---|---|---|---|
| Bandwidth | 100 GB | 1 TB | $0.20/GB |
| Build minutes | 300 min/month | 3,000 min/month | $7/500 min |
| Serverless function invocations | 125k/month | 125k/month (shared) | $25/2M invocations |
| Serverless function runtime | 100 GB-hours | 100 GB-hours | $0.25/GB-hour |
Netlify's serverless tier is notably less generous than Vercel Pro — 100 GB-hours on Pro vs 1,000 on Vercel Pro. For function-heavy applications, Vercel is significantly cheaper at equivalent traffic levels.
Build minutes are the Netlify-specific gotcha. Monorepo setups with multiple sites, or CI pipelines triggering frequent Netlify builds, can exhaust 3,000 minutes in the first week of the month. At $7 per 500 additional minutes, a team triggering 100 builds/day at 10 minutes each uses 30,000 minutes/month — $378 in build overages alone.
Netlify's add-ons
Netlify's paid add-ons include:
- Netlify DB (Postgres, powered by Neon): starts at $19/month, scales by compute and storage
- Netlify Blobs (key-value/object storage): $0.021/GB/month storage + operations
- Analytics: $9/month per site for server-side analytics
- Identity: $99/month for >5 users with SSO
The full-stack Netlify experience (site + DB + forms + identity + analytics) can reach $300-500/month for a small team before traffic-based overages.
Real bill scenarios I've seen
Scenario 1: Startup launch spike
A B2C product launched on ProductHunt. Traffic spiked to 200k pageviews in 24 hours. The marketing site was on Vercel Pro, serving ~2 MB per page load (unoptimised images, heavy JS bundles). That's 200k × 2 MB = 400 GB from a single spike. At $0.15/GB beyond the 1 TB plan, that one event added $60. Fine, but the team had no idea it was happening.
The underlying issue: unoptimised assets served from Vercel's network when they should have been in a CDN or object storage. Moving static assets to Cloudflare R2 (zero egress) or S3 + CloudFront reduced their ongoing bandwidth usage by 70%.
Scenario 2: API-heavy Next.js app
A SaaS product using Next.js API routes as their backend (no separate API service). 50 endpoints, ~100k API calls/day, average function duration 800ms at 512 MB. That's 100k × 0.8s × 0.5 GB = 40,000 GB-hours/month vs Vercel Pro's 1,000 included. Cost: ~$7,000/month in function duration on Pro.
The fix: they moved the API to a small EC2 instance (t4g.small, ~$12/month) with a proper server framework, kept Vercel only for the Next.js frontend (static pages + light dynamic routes). Bill dropped from ~$7,200/month to ~$140/month. The migration took one engineer 3 weeks.
Scenario 3: Netlify build runaway
An agency managing 15 client sites on a single Netlify Pro account. Each site had its own build pipeline connected to a monorepo. A dependency update triggered rebuilds across all 15 sites simultaneously. Average build time: 12 minutes per site. 15 × 12 = 180 minutes per deploy event. CI triggering 4 deployments per working day: 180 × 4 × 22 working days = 15,840 minutes/month. At $7/500 minutes beyond the 3,000 included: (15,840 - 3,000) ÷ 500 × $7 = $179.76 in build overages monthly, every month.
Fix: cache dependencies aggressively in the build pipeline, limit which sites rebuild on unrelated changes, and consider Netlify's per-site build minutes (separate accounts per site to get 3,000 minutes each, though this has management overhead).
When to stay on Vercel or Netlify
They're genuinely good platforms. Staying makes sense when:
- Traffic is under ~500 GB/month: included bandwidth absorbs most real workloads at this level
- Build workflow is the core value: Vercel's preview deployments and Netlify's branch deploys are genuinely useful for teams with frequent deploys
- No heavy serverless functions: if your API calls are short (<100ms, <128MB), included function allowances are sufficient
- Small team: the zero-ops overhead is worth paying for if your engineers' time is the binding constraint
- Next.js and Nuxt optimisations: Vercel builds in optimisations for their own framework that you'd have to configure manually elsewhere
When to migrate
Migrate when:
- Bandwidth overage is recurring: if you hit overages more than once every 3 months, the long-term cost is better managed on Cloudflare (zero egress) or a static host with a proper CDN
- Serverless functions are doing heavy lifting: move the API to a container or VM. Vercel and Netlify are not cost-effective compute platforms at scale
- Build minutes are a budget line item: switch to GitHub Actions or your own CI with Cloudflare Pages or S3 + CloudFront for deployment
- Bill exceeds $1,000/month: at this level, AWS, GCP, or Cloudflare will almost always be cheaper, even factoring in engineering time to migrate
The migration path
For most teams, the migration isn't all-or-nothing. The pattern that works:
- Move static assets (images, fonts, videos) to Cloudflare R2 or S3 + CloudFront — eliminates most bandwidth overages
- Extract heavy API endpoints to a separate service (Railway, Fly.io, EC2) — eliminates function duration overages
- Keep Vercel or Netlify for what they're good at: frontend deployment, preview environments, edge routing
This hybrid approach typically cuts bills by 60-80% without giving up the developer workflow you paid for.
For full migrations, see the comparison of Cloudflare Pages + R2 as an alternative in the Cloudflare Workers and R2 cost post.
Realistic numbers
Mid-size SaaS on Vercel Pro (~$4,100/month before fixes):
| Line item | Before | After |
|---|---|---|
| Vercel Pro plan (4 seats) | $80 | $80 |
| Bandwidth overage (~2.5 TB over 1 TB) | $375 | $30 (static assets moved to R2) |
| Serverless function duration | $3,640 | $0 (API moved to Fly.io, $42/month) |
Vercel bill: $4,095 → $110/month. Fly.io added: $42/month. Net saving: ~$3,900/month.
Migration took 2 engineers 4 weeks. Payback on engineering time in the first month.
If your Vercel or Netlify bill has started growing faster than your traffic, I'm happy to help you work out whether to stay or migrate. Book a call.