Skip to main content

Your PaaS Bill Lied to You: The Hidden Line Items on Render, Railway, and Fly.io — and the Ones Self-Hosting Doesn't Tell You About Either

9 min readDora NodaDora Noda
Share
On this page

A developer budgeted $20 a month for a side-project SaaS on Vercel's Pro plan. A single 8 AM bot-traffic spike pushed their serverless invocations past the 100K/month cap baked into that $20 credit, and the bill that landed was $286 — a 14x overshoot from one bad morning, not one bad month. That's the anecdote anchoring a widely shared mid-2026 teardown, "Your PaaS Bill Lied to You", and it's the cleanest illustration of the thing every PaaS pricing page hides: the sticker price and the real bill are only the same number until traffic does something unusual.

The Rate Card Nobody Puts on the Homepage

Here's the concrete part, up front. A typical indie SaaS — one web service, one background worker, one small Postgres instance, modest day-to-day traffic — really does run $7–15/month on Render or Railway, $10–20/month on Fly.io once IPv4 and volume snapshots are counted, and anywhere from $20 to $200/month on Vercel depending on usage. Those are the sticker prices. What turns them into a different number is a small set of metered knobs that don't show up until a bad month:

PlatformIncluded egressEgress overageDedicated IPv4Snapshot / volume storageBilling granularity
Render5GB (Hobby) / 25GB (Pro)$0.15/GB$2/moMonthly
RailwayNone (usage-metered from byte one)$0.05/GBIncluded$0.15/GB-monthPer second
Fly.ioNone (metered from byte one)$0.02/GB (NA/EU)$2/mo$0.08/GB-month (after 10GB free, since Jan 2026)Per second
Vercel1TB Fast Data Transfer (Pro)Usage-based, absorbed by $20 credit then billedN/A (edge network)N/APer-invocation caps, not bytes

Every one of those numbers is a real, current rate — not a hypothetical. The question that actually matters is what they do to a bill once a month stops being modest.

The Bad Month: What a 300GB Spike Actually Adds

Take the same one-web/one-worker/one-Postgres stack and run it through a bad month — a launch that gets traction, a scraper that finds your API, the kind of spike that turned $20 into $286 in the anecdote above. Say egress jumps from a light 10GB/month to 300GB in a single billing cycle. Here's what each platform's own published rate does to the bill, holding the base subscription fixed and only recomputing the metered line:

PlatformIncludedOverage on 300GBAdded cost
Render (Pro)25GB275GB × $0.15+$41.25
Railway0GB300GB × $0.05+$15.00
Fly.io0GB300GB × $0.02+$6.00
Vercel1TB (bandwidth)request-count caps hit firstup to +$266 (the real anecdote)

Fly.io's per-GB rate is the cheapest of the four on paper, which is exactly why its 2026 changelog is worth reading closely. As of February 2026, inter-region private networking traffic bills at the same per-second Machine rate as compute, and volume snapshots started metering separately back in January 2026 — two new line items added to a model that already had none of Render's "here's your free allowance" comfort.

Railway's rate looks moderate until you notice it has no included tier at all. Every byte, every GB of RAM-month, every vCPU-month is billed from the first unit, just smoothed into per-second granularity that makes the invoice harder to eyeball in advance than a monthly cap you can watch approach.

Render's own case is the sharpest of the four, because the cap itself just moved. Its August 1, 2026 repricing deadline — the date every legacy workspace still on a per-seat plan gets auto-migrated to flat fees — cuts Hobby's included egress from a flat 100GB down to 5GB and Pro's from 500GB to 25GB, a 20x reduction. That turns what used to be comfortably-inside-the-cap traffic into an overage line for teams that changed nothing about their app.

None of that is a scam. It's metering doing exactly what metering does: charging for the thing that varies, which is traffic, not the thing that's fixed, which is the sticker price on the pricing page.

What "Just Self-Host It" Glosses Over

The honest rebuttal in every one of these threads is some version of "so self-host it and none of this applies." That's directionally right and specifically overstated. A Hetzner CX22 — 2 vCPU, 4GB RAM, roughly €4.35–4.59/month after the June 2026 price adjustment — ships with 20TB of included outbound traffic in EU/US regions, so the 300GB bad-month scenario above doesn't even register: zero added cost, because 300GB is 1.5% of the included allowance. That's the number every self-hosting comparison likes to lead with, and it's real. But it's not the whole bill, and treating it as such is the same sleight of hand as a PaaS pricing page that only shows the base tier.

A self-hosted stack has three line items of its own, just billed differently or not billed in dollars at all:

  • Bandwidth overage, rarely hit but not impossible. Past 20TB, Hetzner charges roughly €1/TB — trivially cheap, but it exists, and a platform that genuinely goes viral can still hit it. The honest comparison isn't "self-hosted bandwidth is free," it's "self-hosted bandwidth's overage threshold is 800x higher and its overage rate is roughly 150x cheaper," which is a real advantage, not a zero.
  • Backup and snapshot storage. Hetzner's automated backups add 20% to the instance price; standalone snapshots run about €0.011/GB-month and persist even after you delete the server they came from. A tenant's database backup strategy on a self-hosted box is a genuine, non-zero recurring cost — it just tends to be a few euros, not a per-GB meter that scales with traffic.
  • The operator's own time. This is the line item every "self-host and save" post skips entirely, and it's the biggest one. Patching the OS, rotating a compromised credential, restoring from a bad deploy at 2 AM, upgrading Postgres before its version goes EOL — call it 1–2 hours a month of real attention for a single-box stack, priced at even a modest $75/hour contractor rate. That's $75–150/month of cost that never appears on an invoice because nobody sends you one, but it's still a cost. A PaaS's whole value proposition is that its fee is buying that time back — pretending self-hosting makes it disappear, rather than relocates it, is the same trick the "$20/month, no hidden fees" marketing page plays in reverse.

Itemized honestly, a single self-hosted box for this workload lands somewhere around €5 in hardware + a few euros in backup storage + $75–150 in the operator's own time — cheaper than every metered platform above at bad-month traffic, but not the "basically free" number a Hacker News comment thread implies when it says just buy a Hetzner box.

The Itemize-Both-Sides Checklist

The teardown gets the PaaS side right: egress, IPv4, snapshot storage, and billing granularity are the four knobs that turn a sticker price into a real bill, and every platform above has published, checkable rates for all four. Where "just self-host it" goes wrong isn't the conclusion — self-hosting usually is cheaper at real traffic — it's skipping the same itemization exercise on its own side of the ledger. A fair comparison runs the same four questions against both columns:

  1. What's actually included, and at what threshold does the free allowance end? (5GB vs 25GB vs 20TB — write down the real number, not the marketing headline.)
  2. What's the overage rate on the thing most likely to spike — bytes, requests, or invocations — and has it changed in the last twelve months? (Fly.io added two new metered lines in early 2026 alone.)
  3. What does durability cost — backups, snapshots, replication — separate from compute?
  4. Who is doing the operational work the fee is paying for, and what is an hour of that work actually worth, whether it's billed in dollars or spent at 2 AM?

Skip any one of those four on either side and the comparison isn't dishonest on purpose — it's just missing a line item, the same way a pricing page is.

Where This Goes Next

None of the four metered platforms above are done adding lines to their invoices. Fly.io picked up two new billable dimensions in the first two months of 2026 alone; Render's egress cap just fell 20x; Railway's per-second granularity means every future rate change lands the same day it's announced, with no monthly-cycle lag to notice it in. The direction of travel across the whole category is the same: as AI-assisted development makes it cheaper to ship more services faster, PaaS vendors are finding more surfaces — invocations, snapshot bytes, inter-region packets — worth metering separately, because a platform that used to bundle costs into a flat seat fee is now competing on usage-based pricing that scales with exactly the kind of unpredictable, agent-driven traffic spikes this list opened with.

That trend doesn't make metering wrong — it makes it worth pricing out before the invoice does it for you. The rate card and the bad-month table above are reusable for that: pull your own egress, IPv4, and snapshot numbers, run them against whichever platform you're on, and you have the real bill before the next repricing announcement forces the question. The same exercise, run honestly against a self-hosted box's own bandwidth, backup, and operator-time line items, is what turns "just self-host it" from a comment-thread reflex into an actual number worth comparing.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with a Render-compatible API and no per-request or per-GB meter running underneath it. It doesn't make the operator-time line item disappear — nothing does — but it collapses the deploy and ops tooling that usually eats that time into something an AI agent can drive as easily as a human can. Star the repo on GitHub or deploy your first app today.

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