How to Reduce Your Vercel Costs: The Complete Guide
Vercel bills come from a handful of usage meters, and most overspend traces back to bot traffic, pages rendered on every request, and image transformations. This guide covers where each meter comes from and the setting that reduces it.
How Vercel Billing Works
Vercel combines a fixed plan fee with metered usage, and the meters are what move your bill.
Pro and Enterprise Plans and Included Credit
Vercel's pricing model includes a free "Hobby" tier for personal, non-commercial projects. The Pro Plan is a $20/month platform fee that includes one deploying seat and $20 of usage credit. Additional developer seats are $20/month each, viewer seats are free, and usage beyond the credit is billed on demand. Enterprise is custom-priced.
Enterprise plans, which start at about $3500/month, add SCIM and Directory Sync, managed WAF rulesets, multi-region compute and failover, a 99.99% SLA, and advanced support, and its Flexible Commitment option is a prepaid balance that draws down across Vercel products at $1 per unit. Several security features don't require it: on Pro, SAML SSO is $300 per month, a HIPAA BAA is $350 per month, and static IPs are $100 per project per month, so compare those add-ons against an Enterprise quote before upgrading.
The Meters Behind Your Bill
Each meter has its own included allowance and unit price. The starting prices below come from the pricing page and vary by region.
Meter | What it counts | Starting price |
|---|---|---|
CDN requests (labeled Edge Requests in the dashboard) and Fast Data Transfer | Requests served and data sent to users | Covered by Flat Rate CDN, or billed on usage |
Fast Origin Transfer | Data moving between the CDN and your functions or ISR | $0.06 per GB |
Function invocations | Each function execution | $0.60 per 1M |
Fluid Active CPU | CPU time while your code is executing | $0.128 per hour |
Provisioned memory | Memory allocated during execution | $0.0106 per GB-hour |
Image transformations | New image variants generated | $0.05 per 1K |
ISR reads and writes | Cached page reads and regenerations | $0.40 per 1M reads, $4 per 1M writes |
Build minutes | Build machine time | $0.007 per minute (Basic); Elastic from $0.0035 per CPU minute |
Where to See What's Driving Your Costs
Open Usage in your Vercel dashboard, set the range to the last 30 days, and break each meter down by project and region. The ratio view shows cached versus uncached requests, which is the quickest way to find routes that hit your functions with unexpected costs.
Block Bot and Abusive Traffic
Automated traffic hitting uncached routes inflates requests, compute, and data transfer at once, so rule it out first. Turn on the Firewall's AI bot and bot protection rulesets in log-only mode to see what's hitting you, then switch to blocking. Add rate limits on expensive routes, which are billed from $0.50 per 1M allowed requests. Don't count on robots.txt: it's a request that well-behaved crawlers honor, not access control, and abusive bots ignore it. For a fuller walkthrough of the rules, see this post on protecting your app and wallet.
AI crawlers are now a common cause. One Vercel user traced an Edge Requests spike to GPTBot and stopped it with a Web Application Firewall rule, though a Vercel staffer noted that blocking it also removes you from ChatGPT search results. Metacast saw Amazonbot, ClaudeBot, and Meta's crawler scrape thousands of images through its image optimizer on a site with 1.4 million crawlable pages. The bot name shows under Observability, then Edge Requests, then Bot name, and a Firewall deny rule on that user agent keeps those requests away from your functions. Denied requests still count as Edge Requests unless the rule uses persistent actions, which Vercel doesn't charge for.
Protect preview and staging URLs too. One team reported $1,900 in charges from a scraper hitting a staging deployment on a .vercel.app address, and Deployment Protection covers preview URLs on all plans.
Reduce Function and Compute Costs
Function costs come from how often functions run, how much CPU they use, and how much memory they hold.
Cache or Statically Generate Instead of Rendering Every Request
A cached response never runs your function, so it incurs no invocation or duration charges. Serve pages that don't change per user as static or ISR, and set the revalidate interval to match how often the data actually changes, since regenerations count toward Vercel's ISR read and write meters. Check your build output to confirm that routes you expect to be static or ISR are generated that way.
Avoid ISR Write Traps
ISR charges a write whenever a regeneration produces new output, so the usual causes are short revalidate intervals, on-demand revalidation fired on every content update, and large URL counts that bots can crawl. Output that changes on every render writes every time: Vercel's guide to reducing ISR writes names new Date() and Math.random() in rendered output as common culprits, since identical output doesn't incur a second write. One community thread shows 106M writes against 30M reads, and the usual fixes are longer revalidate intervals (an hour instead of a minute), revalidating on demand only when content changes, and revalidate = false for pages that never change.
Cut Redundant Fetches and Function Invocations
Database and CMS calls made in server components, such as both generateMetadata and the page, run twice unless you wrap them in React's cache, which dedupes them for the length of a request. Batch queries where you can. Middleware also runs on every matching request, so add a matcher to keep it off public pages.
Tune Active CPU and Memory
On Fluid compute, Active CPU is billed only while your code is executing, not while it waits on I/O, and provisioned memory is billed alongside it. Cutting per-request CPU work lowers the first, and this guide to tracing Active CPU by route shows how to find the routes responsible.
Keep each function's region the same as its data source, and set a reasonable maxDuration so a stalled upstream call can't hold an instance open. New projects run on Fluid compute by default, so confirm that older projects have it turned on.
Reduce CDN, Data Transfer and Other Additional Costs
CDN charges track how many requests Vercel serves and how many bytes it sends.
Cut Fast Data Transfer and Fast Origin Transfer
Two CDN meters cover data. Fast Data Transfer is what you send to users: JavaScript bundles, images, fonts, and HTML. Remove unused dependencies and lazy-load offscreen images to send less; responses are already compressed with Gzip and Brotli. Fast Origin Transfer is data moving between the CDN and your functions or ISR, so caching responses and returning only the fields a client needs both reduce it.
Tune Link Prefetching
Next.js prefetches linked routes by default, so a page with a long list of links makes a request for every one whether or not the visitor clicks. Setting prefetch={false} on high-volume lists, such as product grids and archives, removes those speculative requests while the links still work on click, and Vercel's Academy lesson walks through the change. Keep prefetching on for primary navigation. Defaults changed in Next.js 16, and teams reported cost jumps after upgrading: Edge Requests spiked for one, and another team saw cost per page view roughly triple before rolling back to 15. Compare cost per page view before and after a framework upgrade.
Consider Flat Rate CDN
Flat Rate CDN replaces usage-based CDN billing with a fixed monthly tier covering CDN requests, Fast Data Transfer, Blob data transfer, and the observability events CDN requests generate. Traffic above your tier is served normally and not billed, subject to fair use, and if sustained usage outgrows the tier you move up at the start of the next billing cycle. Pro includes 1M requests and 1 TB of transfer, and paid tiers start at $20/month for 10M requests. New Pro teams have it on by default, existing teams switch it on in Billing settings, and individual projects can be excluded.
Whether it pays off depends mostly on bandwidth. On usage-based billing, Pro includes 10M requests and 1 TB of transfer, then charges from $2 per 1M requests and $0.15 per GB at the published on-demand rates, while the flat tiers cover up to 50 TB. These estimates use those starting rates, and regional pricing can change them:
| Monthly requests | Monthly transfer | Usage-based | Flat Rate CDN |
| 10M | 5 TB | about $600 | $20 |
| 30M | 1 TB | about $40 | $100 |
| 50M | 5 TB | about $680 | $100 |
| 150M | 1 TB | about $280 | $300 |
More than about 1 TB of monthly transfer favors a flat tier, while a request-heavy site with modest transfer is often cheaper on usage-based billing. Flat Rate CDN also isn't meant for bulk file or media-heavy delivery, and Vercel may move projects like that onto its Flex CDN tier.
Reduce Image Optimization Costs
Every new image variant (size, format, quality) is a billed transformation plus cache writes, so aim for fewer variants cached for longer. In next.config, set images.minimumCacheTTL to 31 days (2678400) if your images rarely change, and allowlist only the formats, qualities, and sizes you use. Adding AVIF alongside WebP means each format is cached separately, which doubles your variants. Restrict sources with remotePatterns, and use the unoptimized prop for images under 10 KB, SVGs, and GIFs. There's a longer walkthrough on how to optimize images if you need to trace transformations back to specific routes.
If image volume outgrows Vercel's pricing, the optimization can move elsewhere. Cloudflare Images charges per unique transformation, and some teams have self-hosted the Next.js optimizer on AWS behind CloudFront and routed requests to it with a custom image loader, as HowdyGo documented.
Reduce Build and Seat Costs
Builds are billed per minute by machine type, from $0.007 per minute on Basic machines. Use the smallest machine your builds finish on acceptably, and set an Ignored Build Step so changes that don't affect what ships, like docs-only commits, skip the build. Seats are the other fixed cost: developer seats are $20/month each while viewer seats are free, so move anyone who only needs read-only access to a viewer role and remove people who have left.
New Pro teams default to Elastic build machines, which assign each project the machine that fits its builds and bill per CPU minute. On-demand concurrent builds are also on by default, so projects that rarely queue can limit them to one active build per branch in Build and Deployment settings.
Set Spend Limits and Alerts
New teams get a default on-demand usage budget of $200, adjustable, with email, web, and SMS notifications as spend approaches it, per the pricing FAQ. You can also pause all projects automatically at 100%. Pausing stops your projects from serving traffic, so set the limit above your normal peaks and rely on notification thresholds for earlier warning. Pro teams are also notified automatically at 75% of the monthly credit.
Understand & Optimize Vercel with nOps
nOps was built to help with the principles in this article. It gives you one view of your AI, multicloud, SaaS, and Kubernetes costs, plus the automation to act on them:
- AI Cost Visibility and Optimization: brings AI, multicloud, SaaS, and Kubernetes spend into one view, allocated to the teams, products, and customers behind it. That includes Vercel, where nOps imports platform billing and AI Gateway usage per project and per day.
- Anomaly Detection, Forecasting, and Budgets: flags cost spikes in real time, forecasts future spend from your historical usage, and tracks budgets by team, product, or customer. Clara, the FinOps agent, answers cost questions in plain language and automates tasks like anomaly investigation and budget tracking.
- Commitment Management: automates Reserved Instance and Savings Plan coverage for the AWS, Azure, and GCP infrastructure your applications ultimately run on.
nOps manages $5B+ in cloud spend and was recently rated #1 in G2's Cloud Cost Management category. Get a free savings analysis to see where your cloud and AI infrastructure costs can be optimized.
Demo
AI-Powered Cost Management Platform
Discover how much you can save in just 10 minutes!
Book a Demo
FAQ
Short answers to the most common Vercel cost questions.
How much does Vercel Pro cost?
Pro is a $20/month platform fee that includes one deploying seat and $20 of usage credit. Additional developer seats are $20/month each, viewer seats are free, and usage beyond the credit is billed on demand.
Why is my Vercel bill so high?
As on most usage-based hosting platforms, most cost drivers trace to a few sources: bot traffic hitting uncached routes, pages rendered on every request instead of cached, and image transformations. Break your usage down by project and meter in the Usage dashboard to see which one it is, then use the matching section above.
What are some tips for Vercel spend management?
Using static images avoids runtime transformations and costs when you serve files that are already the right size with the unoptimized prop. Images imported statically still get transformed once per variant, but they are cached for a year. Switching from SSR to SSG can reduce server costs because static assets are served from the CDN without running a function, and Pagepro reported a 35% lower bill for one client after doing that alongside caching and bundle fixes. Bot traffic can also drive most of a bill: one developer traced about 80% of their daily Vercel spend to automated requests, so check for it first.
What are the Hobby Plan's limits, and what does Pro add?
The Hobby plan limits include strict usage limits and no team collaboration: 100 GB of Fast Data Transfer and 6,000 build minutes a month, one developer seat, and non-commercial use only. Projects are paused when they exceed the included usage, and Hobby accounts can't buy more. The Pro plan includes 1 TB of Fast Data Transfer, and on usage-based billing, bandwidth beyond that costs from $0.15 per GB, or $15 per 100 GB at the starting rate, depending on region. Build minutes on Pro are billed by machine type, for example $0.014 per minute on Standard machines.











