Vercel vs Hetzner with Coolify: what the bandwidth line really costs

A PaaS bill is two numbers wearing one coat: seats, and everything you ship out of the edge. At one terabyte of egress a month the seat line still dominates. At ten terabytes it does not, and the overage rate - about $150 per terabyte on the mainstream PaaS plans - is roughly seventy-five times what the same gigabyte costs on a VPS. This calculator finds the crossover for your traffic.

Price 36 months of hosting

Net saving over 3 years —USD
Share of the PaaS bill avoided —%
PaaS bill, 3 years —USD
Coolify stack, 3 years —USD
Bandwidth overage, 3 years —USD
Self-host run rate —USD/mo
Terabytes past the included 1 —TB/mo
Self-host cost per developer —USD/mo
Recommended vCPU —cores
Recommended RAM —GB
Local NVMe —GB

What to enter. Developer seats are the people who need Git push and preview deployments, not the people who read the site. Bandwidth is monthly outbound traffic in terabytes - check the usage dashboard rather than guessing, because the first terabyte is included and everything after it is billed. Service count is every deployable thing: web apps, API workers, cron jobs, managed Postgres. Coolify runs them as containers on one host, so each service adds about 1.2 GB of RAM to the requirement. The Coolify side assumes a mainstream KVM instance whose list price includes 4 to 20 TB of egress; above 10 TB the calculator starts charging $2 per extra terabyte, which is deliberately conservative.

Migration and sizing sheet

3-Year FinOps Migration & Sizing Sheet

—

Migration and sizing sheet, built from the inputs above
LineValueUnitBasis

The hosting line is a mainstream KVM instance at 2 vCPU / 4 GB, stepping through 4/8, 4/16, 8/32 and 16/64 as services are added; past 64 GB the calculator buys a second host. VPS plans in this class typically include 4 to 20 TB of egress a month, and the traffic line above 10 TB is billed at $2 per extra terabyte, which is the conservative end of that range. Off-site backup is priced as a real line because a database dump that lives on the same provider as the host is one account compromise away from being gone. Platform engineering time is your own rate.

Two meters, one invoice

A PaaS bill looks like a per-seat product and behaves like a metered utility. The seat line is the one on the pricing page; the usage line is the one that arrives at the end of the month with no ceiling on it unless somebody remembered to configure a spend limit.

The seat line is honest and small. Twenty dollars per developer per month is roughly what a hosted CI runner plus a staging environment costs, so the seat line is rarely the complaint. It is also the line that makes the platform feel cheap when you sign up: six developers, $120 a month, done.

The egress line is the one that scales with success. The plan includes 1 TB of fast data transfer a month and then meters on-demand bandwidth at about $0.15 per GB - $150 per terabyte. For an API or a dashboard that is nothing. For anything serving images, video segments, large JSON payloads or a public dataset, traffic is proportional to popularity, which means the invoice grows fastest in the month your marketing works. There is no volume discount at the bottom of the curve and no way to pre-buy your way out of it on the self-serve plans.

Everything else is metered too. Function invocations and duration sit on their own meter, image optimisation bills per source image transformed rather than per byte served, and preview deployments multiply the whole surface - every branch push builds and serves something. A team that opens fifteen pull requests a week is running fifteen throwaway environments, and those count even though nobody looks at them after review.

The structural problem is not the price of any one meter. It is that the meters are denominated in units that grow with traffic and with team activity, while the alternative - one host you rent by the month - is denominated in a unit that does not move at all.

The crossover, across team sizes

The table holds egress at 3 TB a month - a mid-size marketing site plus an API - and scales the service count the way real teams do, at roughly 0.6 services per developer with a floor of four. Watch the fourth column: it is flat for the first five rows, because four to nine containers all fit comfortably on the same instance.

Eight team sizes at 3 TB of monthly egress, with the service count scaling the way it does in practice (about 0.6 services per developer, floor of four). Read the two cost columns against each other: the PaaS column climbs $20 at a time with every seat, while the self-hosted column stays flat until the container count crosses a memory tier. The bandwidth charge in the last column is identical in every row, because it depends on traffic and not on headcount.
Dev seatsServicesPaaS/moCoolify/moCoolify, 3 yrNet savingEgress tax, 3 yr
243401465,2387,00210,800
443801465,2388,44210,800
644201465,2389,88210,800
1065001465,23812,76210,800
1596001465,23816,36210,800
25158001746,24622,55410,800
40241,1002308,26231,33810,800
60361,5002308,26245,73810,800

The egress tax column is the one to argue about. It is identical in every row because it depends only on traffic, which is precisely the point: a traffic spike does not care how many developers you employ. The calculator above also ignores the small per-seat usage credit the Pro plan bundles, which makes the PaaS side of this model very slightly pessimistic at low traffic - and does not change the answer once egress is measured in terabytes.

What Coolify actually is

Coolify is a self-hostable control plane for Docker: you point it at a Git repository, it builds the image on the host, runs it as a container, and puts a reverse proxy in front of it with a Let's Encrypt certificate. In practice a deployment looks like this:

That is the whole architecture. It is not a distributed system, it has no edge, and it does not pretend to. What it does have is a per-branch preview feature that behaves the way developers expect: push, wait for a build, get a URL.

Sizing the host without guessing

The arithmetic is in the calculator, so this section is about the three numbers people get wrong.

Builds, not requests, set the memory floor. A running Next.js container might idle at 200 MB. The build that produced it will spike to 1.5-2.5 GB, and Coolify builds on the same host by default. An instance sized for steady state will OOM during a deploy, which is the most confusing failure mode in self-hosting because the site was fine until you shipped something. Size for the build, then add the running containers.

Disk is not storage, it is a build artefact problem. Every deploy leaves an image behind, and image layers are shared but not free. A modest application with fifteen deploys a week will accumulate tens of gigabytes of dangling layers within a couple of months. Coolify can prune on a schedule and you should turn that on before the disk fills, because a full disk takes down the database and the proxy at the same time.

Egress on the host is generous until it is not. Mainstream VPS plans include 4 to 20 TB a month depending on provider and tier, which is between four and twenty times what the PaaS plan includes for a fraction of the price. Above that, providers charge a small per-terabyte rate - the calculator uses $2 per terabyte over a conservative 10 TB floor. The gap between that and $150 per terabyte is the entire economic argument for this page.

Feature parity, honestly

What a Coolify stack matches, what it approximates, and what it genuinely does not have.
CapabilityStatusWhat you get instead
Git push deploy, build logsFullWebhook or polling, build output streamed in the UI.
Per-branch preview environmentsFullOne container and one subdomain per branch, torn down on merge.
Custom domains and TLSFullTraefik plus Let's Encrypt, automatic renewal, wildcard with DNS challenge.
Instant rollbackFullRedeploy the previous image. Slower than a platform rollback, same result.
Cron and background workersFullScheduled tasks and worker containers, defined per service.
Managed Postgres with point-in-time recoveryPartialA container with a volume. Backups are a cron job you own, not a console toggle.
Global edge networkNoneOne region. Put a CDN in front if latency matters, and price that separately.
Serverless functions with per-request isolationNoneLong-running containers instead. Cheaper per hour, not cold-start isolated.
Image optimisation at the edgePartialDo it at build time or behind a CDN. This is the most common migration surprise.
DDoS absorption and WAFNoneAdd Cloudflare in front, on the free tier or above.
Team roles and audit logPartialBasic users and tokens. Fine for a small team, thin for a regulated one.

The operational bill nobody puts in the spreadsheet

Self-hosting moves cost from a line item to a person's attention. One and a half hours a month is a realistic steady state for a stable stack: patching the host, bumping image tags, confirming that last night's dump actually landed, renewing a certificate that failed because a DNS record moved. It is not realistic during the first month, when you will spend a day wiring TLS, environment variables, backups and a health check that pages somebody.

Two things make the difference between a smooth migration and a slow-motion outage. First, a restore drill: put the dump back into a scratch container and confirm the application boots against it, at least once, before you trust the backup. Second, an alert on disk and on certificate expiry, because both fail silently and both take the whole stack down when they do.

Independent estimate. SelfHostTCO is an independent third-party cost tool with no commercial relationship to Vercel Inc., Hetzner, Coolify or any other vendor named on this page. Plan terms, included allowances and metered rates change; confirm them on the vendor's own pricing page and in your contract. Hosting prices are representative list prices for a mainstream KVM instance and vary by region, commitment and included egress. Engineering-time estimates are yours to set. Nothing here is a recommendation to migrate a production system without a rollback plan.

Related cost pages

If the subscription under audit is software rather than hosting, the Docusign alternative TCO page prices a self-hosted e-signature stack with the same 36-month method, and the Acrobat alternative TCO page applies it to a hybrid desktop-and-browser PDF stack. The method page documents the pricing sources, the hardware ladder and how every table is recomputed before publication.

Frequently asked questions

How much does Vercel charge for bandwidth beyond the included terabyte?
On the Pro plan the included allowance is 1 TB of fast data transfer per month, and on-demand bandwidth is metered at $0.15 per GB - which is $150 per terabyte. That single number is why traffic-heavy sites leave the platform: a 5 TB month adds $600 to a bill whose seat line may be only $120. Check your own usage dashboard before modelling, because static asset delivery, image optimisation and function responses can land in different meters depending on how the project is configured.
Does Coolify really replace the whole PaaS?
It replaces the deployment and runtime half: Git integration, build pipelines, per-branch preview environments, TLS, container orchestration and a UI to manage it all. It does not replace the global edge. If your latency depends on serving from 30 regions, a single VPS in one region is a downgrade and no amount of cost modelling fixes that. Coolify plus one host is the right answer for internal tools, dashboards, APIs with regional users and anything whose traffic is mostly origin-bound.
What does the single host actually have to hold?
Coolify's control plane, its own PostgreSQL and Redis, and one container per service you deploy. Budget 2 GB for the control plane and roughly 1.2 GB per application container, then add 25% headroom for builds - a Next.js build on the same host will happily consume 2 GB on its own, and that spike is what kills undersized instances. The calculator applies exactly that arithmetic and picks the smallest tier that satisfies both the memory and the core count.
At what traffic level does self-hosting stop winning?
It almost never stops winning on raw cost - VPS egress is roughly seventy-five times cheaper per gigabyte, and the gap widens with traffic. What changes the answer is engineering time and blast radius. At two developers and 0.2 TB a month, the PaaS is often cheaper once you price an hour of their attention honestly. Above about five developers, or above 2 TB of egress, the self-hosted side wins on this model by a margin that survives most assumptions you can throw at it.
Where does the Hetzner comparison come in?
Hetzner is used here as the neutral price reference for a European KVM host, because its published list prices are among the cheapest for the RAM and traffic on offer and include a generous egress allowance. The model is deliberately provider-agnostic: any host in the same class - Hetzner, Vultr, DigitalOcean, Hostinger - lands within a few dollars of the same tier price, and the calculator's hosting line is a generic list price for that class rather than a quote from any one vendor.