Skip to main content

Netlify's Credit Cap Doesn't Just Cost You More — It Can Stop Your Deploys Cold

9 min readDora NodaDora Noda
Share
On this page

Since July 7, 2026, a wave of Netlify users have hit the same wall: production deploys rejected with "Account credit usage exceeded — new deploys are blocked until credits are added." Nothing unusual about a platform enforcing a spend limit — except several of the accounts hitting it had credits to spare. One report showed 0 of 300 credits used. Another showed 29.9 of 30 still available. Preview deploys kept working; only production was locked out.

That's not a story about a team blowing through its budget. It's a stale internal flag misfiring on accounts that never came close to their limit — and it's the clearest illustration yet of a structural change Netlify made to its billing model back in September 2025: replacing open-ended overage billing with a hard credit ceiling. Overage billing has one failure mode — a bigger invoice. A hard ceiling has two: a bigger invoice, or your site stops shipping. This week, several teams found out which one without ever touching the first.

How the Credit Ceiling Actually Works

Every Netlify account on the credit-based plans (the default for any account created since September 4, 2025) draws from one pooled credit balance instead of the old system's fifteen-plus separately tracked metrics. Three meters drive the balance down:

ResourceCost
Bandwidth20 credits/GB (~$0.13/GB equivalent)
Compute (Functions, Background Functions, Preview servers, Agent runners)10 credits/GB-hour
Web requests2 credits per 10,000 requests

A Personal plan starts with 1,000 monthly credits; Pro teams get more, scaled to the plan. When the balance hits zero, Netlify's docs are explicit about what happens next: production deploys stop, Functions and Background Functions stop serving, Preview servers stop, and Agent runners currently mid-run halt outright. You wait for the next billing cycle to refresh the balance, or you upgrade, or — the one lever that actually prevents this — you turn on auto-recharge, which tops up the balance in $5/500-credit (Personal) or $10/1,500-credit (Pro) increments the moment it runs dry.

The catch: auto-recharge is off by default. Netlify built the exact mechanism that would turn "credits ran out" back into "bigger invoice" — and shipped it opt-in. A team that never explicitly enables it is one traffic spike or one runaway Function loop away from a production outage that costs nothing to prevent except finding the toggle.

The Bug That Proved the Point

The July 2026 incident wave is what makes this concrete rather than theoretical. Across at least half a dozen threads on Netlify's support forum between July 7 and July 10, users reported the identical symptom: a banner reading "run out of credits," production deploys rejected with a 403 and "Account credit usage exceeded," while the account's own billing page showed credits very much intact — 0/300 used, 30/30 available, 29.9/30 available. Preview deploys kept working throughout, which points at a stale suspension flag getting set on the production-deploy path specifically, independent of the actual credit ledger. As of this writing, the threads show affected users asking Netlify support to manually clear the flag; no public status-page postmortem had been published.

The bug itself will presumably get fixed. What it demonstrates doesn't go away when it does: a fail-closed billing check sits directly in the production deploy path, and when that check is wrong — misconfigured, stale, or just buggy — the failure mode isn't a delayed invoice, it's a rejected deploy. Under the old overage-billing model, a billing-system glitch could produce an incorrect charge. Under the credit-ceiling model, the identical class of glitch can take production down. That's a new category of outage risk introduced by the billing architecture itself, not by anything a customer did.

How Vercel's "Hard Cap" Compares

It's tempting to read this as a Netlify-specific problem, but the comparison is more nuanced than that. Vercel's Hobby plan has no overage option at all — hit the included usage and the deployment pauses until the next billing cycle, the same hard-stop-on-limit behavior Netlify's credit model applies by default. On Vercel Pro, overage is billed against the $20 monthly credit and then metered per unit past that, so the default failure mode is a bigger bill, not a stall — unless a team opts into Spend Management, which can be configured to automatically pause production deployments once a set spend amount is reached. Vercel's own docs note that check runs every few minutes rather than continuously, so a fast enough spike can overshoot the cap before the pause fires.

Line up the three postures side by side:

Platform / tierDefault behavior at the limitOpt-in escape hatch
Netlify (credit-based, default)Hard stop: deploys blocked, Functions stopAuto-recharge (off by default)
Vercel HobbyHard stop: deployment pausedNone — no overage tier exists
Vercel Pro (no Spend Management)Metered overage billed to the accountN/A — never hard-stops by default
Vercel Pro (Spend Management enabled)Hard stop once spend threshold hits, checked every few minutesRaise or remove the threshold

The honest takeaway isn't "Netlify bad, Vercel good" — it's that fail-closed-at-a-limit is the default posture on the free/entry tier of both platforms, and becomes optional, reversible behavior only once a team is paying enough to have Pro-tier billing controls to configure. Netlify's difference is that its hard stop is the default even on paid credit-based plans unless a team finds and flips auto-recharge; Vercel's Pro default leans the other way, toward an uncapped bill, unless a team opts into the pause.

What "The Platform Stops Working" Costs That "The Bill Gets Bigger" Doesn't

A bigger invoice is a budget problem: unpleasant, but it doesn't take your app offline, and it can be argued about after the fact. A blocked deploy is an incident. If it happens mid-launch, mid-marketing-push, or — as several of the July reports describe — silently on a weekday afternoon with no warning banner anyone happened to check, the cost isn't the missed credits, it's the missed traffic, the support tickets, and the time spent figuring out that a billing subsystem, not application code, is the reason nothing is shipping.

That asymmetry is the actual argument for treating "does this platform's cost-control mechanism ever stop my app from serving traffic" as a reliability question during vendor evaluation, not just a pricing one. A team reading Netlify's or Vercel's uptime SLA is evaluating the wrong number if a billing-service outage — or a stale flag inside one — can produce the identical customer-facing symptom as a genuine platform outage, without showing up in either vendor's incident statistics.

A Checklist for Teams Staying on Credit-Based Netlify

Not every team can or should migrate off a platform over one bug wave. For teams staying put, the mitigations are concrete and mostly free:

  • Turn on auto-recharge deliberately, don't leave the default. If uptime matters more than a hard budget ceiling, flip it on now rather than discovering it was off the day traffic spikes.
  • Watch the credit balance via the dashboard or API, not just the low-balance email. The July incidents show the in-app "credits remaining" number can disagree with the flag actually gating deploys — a discrepancy worth screenshotting and escalating immediately if you see it, not assuming is a display bug that will resolve itself.
  • Know the support escalation path before you need it. Every affected account in the July threads needed a human at Netlify to manually clear the stuck flag — self-service didn't resolve it. Finding that path during an outage costs more time than finding it now.
  • Separate "the credits ran out because we grew" from "the credits ran out because of a Function loop or a bot-traffic spike." Auto-recharge protects against the first case fine; it also means an unbounded runaway process now costs money on top of the outage rather than just failing quietly, so pairing auto-recharge with a spend-amount alert (however coarse) matters more than turning it on alone.

None of that requires leaving Netlify. It does require treating a credit-based platform's billing layer as an operational dependency with its own failure modes to monitor, not a background detail that only matters at invoice time.

Where the Failure Mode Doesn't Exist At All

A self-hosted platform running on owned capacity — Bex.co included — has no equivalent mechanism to design around, because there's no metering layer standing between a deploy and the machine it runs on. There's no credit balance to run dry, no auto-recharge toggle to remember to flip, and no internal billing flag that can go stale and block a production push, because "is this account within its spend limit" was never a check the deploy pipeline had to pass in the first place. That's not the same claim as "self-hosting is more reliable" in general — a misconfigured node, a full disk, or a bad rollout can still take an app down, and those are real operational risks a team takes on by owning the hardware. It's a narrower, more honest claim: the specific failure mode of a billing enforcement bug stopping a healthy, paid-for deploy has no analogue when there's no billing enforcement in the deploy path to begin with.

For a team that has already been burned once by a credit flag it didn't set and couldn't clear, that's a meaningfully different risk profile — not because owned hardware never fails, but because the thing that failed this week specifically can't.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with no credit ledger or spend-cap check sitting between your commit and production. Star the repo on GitHub or deploy your first app today.

Sources

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex