vercel · pricing · tutorial

Vercel's 100GB Limit Dies on Day 13 (Do This)

Pro includes ~1TB, Hobby ~100GB — past that it's ~$0.15/GB. The overage math, the cap settings, and the flat alternative. Inside.

Aerial view of a town and lumber yards surrounded by floodwater during the Mississippi flood, Greenville, 1927
Aerial view of a town and lumber yards surrounded by floodwater during the Mississippi flood, Greenville, 1927 · Photo: Steve Nicklas (NOS, NGS), public domain, via Wikimedia Commons

"100GB included" meets a 4MB homepage

Your homepage ships a hero video, three responsive image sets, and a 900KB JS bundle — 4MB per visit, totally normal in 2026. At 2,000 daily visitors that is 240GB a month. On Hobby's ~100GB bundle the limit falls on day 13.

Nothing warns you meaningfully. The overage meter runs silently at ~$0.15/GB, and the month closes with a bandwidth line bigger than the seat — for traffic a $5 VPS serves while idle.

Vercel bandwidth overage is the meter most founders model last and pay first. This post models it first.

Bandwidth math at real page weights

Page weight 2k visits/day Monthly transfer Overage past 1TB
1MB (lean) 60GB ~60GB $0 (inside bundle)
4MB (normal) 240GB ~240GB $0 Pro / ~$21 Hobby
4MB + bot 3x 720GB ~720GB $0 Pro / ~$93 Hobby
10MB (video hero) 600GB ~600GB $0 Pro / ~$75 Hobby
Viral 50k/day × 4MB 6TB ~6TB ~$750 Pro overage

Three details make the meter worse than the table:

  1. Bots count as visitors. Scrapers, preview renderers, and AI crawlers fetch full pages including images — the $450-scrape story was bandwidth billed to a bot audience. Robots that never buy cost the same per byte as customers.
  2. APIs and bundles weigh in. JSON responses, JS chunks, font files — every byte leaving the edge meters, not just images. A chatty polling dashboard can outweigh its own page weight 10-to-1 in transfer while looking lightweight in Lighthouse.
  3. Pro's 1TB is a cliff, not a cushion. Under it: silence. Past it: $150 per extra terabyte, linear and merciless. Growth from 0.9TB to 1.5TB feels identical in the dashboard and differs by $75 on the invoice. Cliffs punish exactly the growth you celebrate.

The $900 post itemized all four meters. Bandwidth is the one that scales with popularity itself.

Vercel bandwidth overage playbook

In Vercel order first (you may stay), flat order second (when the math says walk).

Step 1 — Measure your bytes per visitor today.

# Vercel dashboard → Usage → Fast Data Transfer (daily graph)
# divide by daily visitors = bytes per visit. Or locally:
curl -s -o /dev/null -w "page: %{size_download}\n" https://yourapp.com/
# add images + JS + fonts + API polling per session = true weight

Most founders discover 3–8MB true weight against 1MB assumptions. You cannot cap what you never measured.

Step 2 — Cap spend and cache hard if you stay.

Vercel dashboard → Settings → Billing → Spend Management:
  enable spend cap + alerts at 50% / 80% of budget
next.config.js: images.remotePatterns + minimumCacheTTL 31536000
Cloudflare in front: cache static + images at edge (origin transfer drops 80%+)

Spend caps convert surprise invoices into throttled sites (still bad, but bounded and visible). Staying on Vercel is legitimate when the capped number fits; the sin was never the platform, it was the unmodeled meter.

BoringPush keeps the capped topology documented for small shapes and the flat playbook ready for growth.

Step 3 — Go flat when capped costs exceed $100/mo.

# same app, $5 VPS: Nginx serves images from disk, Cloudflare caches globally
# 6TB viral month: Vercel ~$750 overage vs VPS $0 extra (box at 30% CPU)
# exit weekend: Hetzner build → Tunnel → mesh → DNS flip (ditch guide)

Flat hardware prices the spike at zero because bytes have no marginal cost on your own disk and Cloudflare's cache absorbs the viral shape. The $1,800-exit post walked this exact weekend. Threshold honesty applies: under ~$100/mo capped, stay and optimize; past it, the box pays for itself in weeks.

That's the entire idea — bytes without meters.

The vercel bandwidth overage decision card

Monthly shape Capped Vercel $5 VPS flat
200GB, lean pages ~$20 seat, fits $5 (overkill, fine)
1TB, normal + bots ~$20, near cliff $5, bored
3TB, image-heavy ~$20 + ~$300 overage $5, awake
6TB viral + scrape ~$770 + incident review $5 + Cloudflare report
Cost of next 2x growth +$150–300/mo $0

Stated plainly: Vercel's edge network is genuinely excellent (fast, global, zero-maintenance), and Cloudflare-in-front-of-VPS approximates it rather than equaling it out of the box. What flat buys is cost certainty at popularity scale — the exact moment metered pricing punishes most. The BoringPush rule of thumb: pay for edge excellence while small; buy the flat box when popularity becomes the bill.

FAQ

How does vercel bandwidth overage interact with the other meters?

Additively and independently: transfer, edge requests, function duration, and image optimization each meter their own dimension and sum on the invoice. A viral month spikes all four at once (more bytes, more requests, more compute, more transforms) — which is why viral invoices shock: four quiet meters screaming in chorus. Model all four; this post covers the loudest.

Do bots really cost that much, or is that edge-case lore?

Really: unattended scraping at page weight adds up exactly like users (bytes are bytes), and AI-crawler traffic grew sharply across 2024–2026 for content sites. The $450 receipt was a scrape, not a launch. Mitigate with robots.txt (polite bots), bot management rules (impolite ones), and edge caching (both cost you once, serve free forever after).

Can image optimization alone fix an overage problem?

Partially: modern formats (AVIF/WebP), responsive sizes, and long cache TTLs cut image bytes 50–80% — often enough to duck back under the bundle. But API polling, video, and JS weight don't optimize the same way, and growth re-eats the savings. Optimize first (weeks of runway), then decide flat-vs-capped on the optimized number, not the original.

What spend-cap setting actually prevents surprises?

Cap at the number you'd unhappily-but-knowingly pay (not your dream number — the real one), alerts at 50% and 80%, and a named human receiving them (not a mailing list). Review the cap quarterly against growth. Caps convert infinite risk into a throttle-or-pause decision you make awake — which is the entire point. Uncapped meters are optimism with billing access.

Does Cloudflare in front of Vercel double-bill anything?

No — Cloudflare's free tier caches static content (cutting origin transfer up to 80%+) without metering your bytes the same way, and Vercel bills only what reaches its edge. Cached-at-Cloudflare bytes never touch Vercel meters. The pair is the standard cost-optimized Vercel topology: Cloudflare absorbs, Vercel computes, invoice shrinks. Configure cache rules deliberately; defaults under-cache APIs correctly and images incorrectly.

When is bandwidth the wrong meter to obsess over?

When function duration or image transforms dominate your invoice (heavy SSR, transform-heavy catalogs) — read all four lines before optimizing one. And under ~100GB/mo total, where every option costs pocket change: optimize page weight for users (speed converts), not for meters. Measure first, obsess second, and only over the biggest line.

Keep reading

+ all the boring stuff (analytics, auth, SQLite ↔ Supabase, full marketplace, webhooks)

The Agent-First Shipping Kit

Command from your phone.

Built so autonomous AI agents build what you want without breaking what's already paying you.

$199

Get BoringPush

One-time payment · Lifetime updates · Unlimited projects.

Keep reading