Cloud Cost

How to cut your Vercel bill by 40% without touching your code

Vercel is genuinely great — until you get your monthly invoice and realize you've been paying for things you didn't know existed. Zombie serverless functions. Caching misconfigurations. Bandwidth to regions nobody visits. These don't show up as obvious line items, but they compound fast.

This guide covers the specific things that inflate Vercel bills, how to find them without touching a single line of application code, and what to fix first based on impact.

Quick wins

If you just want the short version: check your function invocation counts, disable unused regions, and set proper cache headers on static assets. That alone covers 80% of unnecessary spend for most projects.

1. Zombie serverless functions

Vercel charges per function invocation and per GB-second of execution. Functions that were created for a feature that no longer exists — but never deleted — keep running when triggered by bots, crawlers or legacy integrations.

How to find them: go to your Vercel dashboard → Analytics → Functions. Sort by invocations. Any function with significant invocations but zero traffic from real users is a zombie. Common culprits:

The fix is simple: delete the files. But before you do, check your logs for the last 30 days to make sure nothing critical depends on them. Then move any necessary redirects to your vercel.json as static rules — they're free and faster.

{
 "redirects": [
 {
 "source": "/old-path",
 "destination": "/new-path",
 "permanent": true
 }
 ]
}

2. Bandwidth: the silent killer

Vercel's free tier includes 100GB of bandwidth. Pro gives you 1TB. Sounds like a lot — until you realize that bandwidth counts every byte served, including assets that could be cached on the edge but aren't.

The most common cause: missing or incorrect Cache-Control headers on static assets. By default, Vercel applies some caching, but if your framework overrides it or you have custom headers configured wrong, assets get re-fetched on every request instead of served from cache.

{
 "headers": [
 {
 "source": "/static/(.*)",
 "headers": [
 {
 "key": "Cache-Control",
 "value": "public, max-age=31536000, immutable"
 }
 ]
 },
 {
 "source": "/(.*).js",
 "headers": [
 {
 "key": "Cache-Control",
 "value": "public, max-age=31536000, immutable"
 }
 ]
 }
 ]
}
Don't do this to HTML files

Only apply long-cache headers to assets with content hashes in their filename (JS, CSS, images). Never to HTML files — they'll get stuck in cache and users won't see updates.

3. Oversized function regions

Every region you enable for edge functions adds cost. Vercel lets you deploy to 18+ regions globally — which sounds appealing until you realize you're paying to maintain cold starts in São Paulo for an app whose entire user base is in Western Europe.

Check your Analytics to see where your actual traffic comes from. Then in vercel.json, restrict your functions to the regions that matter:

{
 "regions": ["cdg1", "lhr1", "ams1"]
}

That's Paris, London and Amsterdam. For a European user base, those three cover 95%+ of traffic with minimal latency.

4. Build minutes you're not using

Every push to every branch triggers a build. On active repos with many contributors, this adds up. Common fixes:

// vercel.json
{
 "ignoreCommand": "git diff HEAD~1 --name-only | grep -qv 'docs/'"
}

What the typical savings look like

Issue Avg. cost/month Fix time Savings
Zombie functions (3–5 avg.) €8–25 High
Missing asset caching €15–60 High
Excess regions €5–20 Medium
Unnecessary preview builds €3–15 Medium

How to find all of this automatically

Going through Vercel's dashboard manually is tedious. You have to cross-reference invocation counts with traffic data, check function durations, and calculate costs from raw numbers that aren't presented in a helpful way.

Driftn connects to your Vercel account with a read-only token and does this analysis automatically. It identifies zombie functions, checks your caching configuration, flags regions you're paying for but not using, and gives you a prioritized list of fixes sorted by potential savings. The whole scan takes about 30 seconds.

Read-only access

Driftn only reads data from your Vercel account. It cannot modify deployments, delete functions, or make any changes without your explicit approval on each action.

Summary

Cutting your Vercel bill doesn't require code changes or architectural refactors. The biggest wins come from cleaning up unused functions, fixing cache headers, and restricting to the regions your users actually live in. Done properly, most projects can reduce their bill by 30–50% in an afternoon.

Start with functions — that's where the biggest surprises usually are.

Find your Vercel waste in 30 seconds

Connect your Vercel account and Driftn gives you a full breakdown — zombie functions, caching issues, region waste and more.

Run a free audit →