# When Does Vercel Get Expensive? The Real Thresholds

> Vercel is $20 until it isn't. The exact traffic thresholds where bills jump, plus spend caps that work. BoringPush inside.

Source: https://boringpush.com/blog/when-does-vercel-get-expensive

## "for most apps it's $20" — until yours isn't

Ask [WHEN does Vercel become expensive?](https://www.reddit.com/r/nextjs/comments/1fo5etb/when_does_vercel_become_expensive) on r/nextjs and two camps collide. Camp one: "for most apps it's free or $20." Camp two posts invoices: [$35 of AWS translating to $800 on Vercel](https://www.reddit.com/r/nextjs/comments/1hurd4s/vercel_how_to_avoid_high_cost), [$450 from silent scraping with zero notification](https://www.reddit.com/r/nextjs/comments/1ijic43/vercel_billing_rant), teams [leaving at $1,800/mo](https://www.reddit.com/r/vercel/comments/1sxczcl/we_left_vercel_at_1800month_heres_what_we).

Both camps are right — they just sit on opposite sides of three thresholds. This post names the thresholds with numbers, so you know which side you're on before the invoice tells you.

## The three thresholds, with math

Vercel Pro (2026 public rates — verify current) bundles roughly: 1TB Fast Data Transfer, ~10M edge requests, ~1M function invocations. Past the bundle, each meter bills alone:

| Monthly shape | Vercel Pro math | Rough bill |
|---|---|---|
| Side project, <100GB transfer | Inside every bundle | **$20** |
| 2–5k daily visitors, cached images, ~400GB | Inside bundles | **$20** ([the exact question](https://www.reddit.com/r/nextjs/comments/1oaezip/how_fast_does_a_vercel_bill_really_add_up) — you're fine) |
| 30k visits/day, 4MB pages, ~3TB | (3,000−1,000GB) × $0.15 | **~$320** |
| Viral week + scraper bots, 6TB + 40M edge reqs | 5,000 × $0.15 + 30M × $2/M | **~$830** |
| Image-heavy + uncached API, past every bundle | All four meters firing | **$800–$1,800** (the exit threads) |

Three tripwires push you over faster than traffic alone:

1. **Fast Origin Transfer.** Cache misses bill the function-to-edge leg too — middleware in front doubles it. The [300GB FOT thread](https://www.reddit.com/r/nextjs/comments/1ckmk09/fast_origin_transfer_will_let_my_vercel_bill) is a 4MB page hit 250k times, mostly bots.
2. **Image transforms.** `next/image` bills per transform plus cache reads/writes. Thousands of product images with ever-changing query strings = thousands of transforms.
3. **Per-seat multiplication.** Enterprise starts around $20–25k/yr ([huge jump thread](https://www.reddit.com/r/nextjs/comments/1juihk4/vercel_enterprise_pricing_huge_jump)). Ten seats is $200/mo before a single byte.

## What actually keeps bills flat

Two moves, in order. First, if you stay on Vercel: set a spend cap day one, cache images on Cloudflare in front, pin `next/image` to stable URLs, and give scrapers a robots.txt + rate limit instead of hopes.

The [$237-for-6-days post](https://www.reddit.com/r/nextjs/comments/1ckmk09/fast_origin_transfer_will_let_my_vercel_bill) is what happens with none of that.

Second, if the math above already exceeds a VPS: run the same Next.js app on one $5/mo box. This is the BoringPush playbook — the Next.js stack without per-request meters:

Choose SQLite as the database, on the same box as the app. Queries hit local disk, and there is no per-query meter.

Same 3TB month: $5 flat, $0 overage. Same bot spike: Cloudflare caches it, the origin sleeps.

That is the whole BoringPush bet: ship from anywhere — even your phone — on hardware you control, and let traffic spikes be a good-news problem instead of an invoice.

## The 10-minute audit before your next deploy

Don't guess which side of the thresholds you're on — measure in this order:

1. **Rank routes by transfer.** Vercel dashboard → Usage → top routes by bandwidth. In nearly every horror thread, the top 3 routes are >70% of the bill — usually one uncached API route and one image-heavy page.
2. **Divide by 1TB.** Project the top route's monthly GB. Under 60% of the bundle with 2x headroom? Stay and set the cap. Over 80% and growing? Price the VPS move this week, not after the spike.
3. **Kill the bots first.** A `robots.txt` disallow for scrapers plus Cloudflare's free bot fight mode regularly cuts 20–40% of edge requests in the threads above — the cheapest save available, and it works on either platform.
4. **Pin image URLs.** Every unique `next/image` query string is a fresh transform. Stable widths, stable URLs, Cloudflare in front.

Run that audit quarterly. It takes ten minutes and it is the difference between the $20 camp and the invoice-post camp.

And when the audit says you're over 80% of the bundle with growth ahead, move before the spike: a quiet-week migration to a flat $5 box beats a 2am scramble after the invoice lands, every single time.

## FAQ

### I'm at 2–5k daily visitors. Should I worry?
No. With cached images and a database off-box (Neon/Supabase), you sit far inside every bundle.

Set a spend cap anyway — it takes two minutes and converts every future scare into an email instead of an invoice.

### What is the single biggest lever on Vercel bills?
Bandwidth. Pro includes ~1TB; every terabyte past it is ~$150 — fifteen times the seat.

Model transfer first, everything else second.

### Do spend caps actually stop the bleeding?
Yes — cap overage, not the seat. Vercel lets you bound usage spend; the horror threads are almost always uncapped accounts meeting their first bot swarm.

### When is leaving the right call?
When your steady-state bill passes ~$60/mo with no traffic spikes in sight. A $5 VPS plus Cloudflare free tier covers that shape with room to 10x, and BoringPush's `git push production main` keeps deploys one command.

### Does BoringPush lock me off Vercel?
No. Switch the database setting to MongoDB or Supabase and deploy the same code to Vercel.

The VPS path exists so the meter is a choice, not a trap.
