What it is. On-the-fly resizing, format conversion and compression. Billed per unique transformation — the combination of source image, width, quality and output format.
Why it is the most common cause of a bill that looks impossible.
Unique is doing a lot of work in that sentence. One source image requested at 40 widths, 3 qualities and 2 formats is 240 billable transformations.
An AI crawler or scraper walking query-string variants generates new combinations on every request. A widely-discussed Hacker News thread reported two crawlers sending 66,500 requests in a single day, with the author objecting that "$5 to resize 1,000 images is ridiculously expensive" — when the images were being resized for bots.
You can be billed thousands of transformations from a site with essentially no human visitors.
How to reduce it.
- Bound the variants. Set
images.qualities,images.formatsand a restricteddeviceSizes/imageSizeslist innext.config.js. This turns an open-ended space into a small finite one, and it is the fix that actually works. - Rate-limit or firewall image routes. Most bot traffic is unsophisticated.
- Pre-optimise static images at build time where you do not genuinely need on-the-fly transformation.
- Block known crawlers you do not want in
robots.txtand at the WAF — GPTBot, ClaudeBot, Bytespider and similar are the ones repeatedly named in these reports.
Watch it before it bites
MONII tracks Vercel and Netlify usage and alerts at a threshold you choose, with a kill switch to pause a runaway project.
Get MONII for iOS ›