Estimating hosting cost per customer for a SaaS.
Split each line of the hosting bill by the thing that drives it: request time for app servers, database size for Postgres, bytes served for bandwidth, sends for email. Add the shares up per customer. Dividing the bill by your customer count is quicker, but it hides the few accounts that cost ten times the rest.
Facts checked
Why a per-customer number matters
You need a cost per customer to set plan prices, to decide whether a free tier is affordable, and to notice when one account is quietly losing you money. Investors call the result gross margin; for a two-person company it is simpler than that: does each plan pay for what it uses, with room left over?
Hosting is not the only cost of serving a customer. Payment fees and support time count too, and the pricing guide puts them together. This page does the hosting part.
Start from one month’s bill, line by line
The example is a small SaaS on Render with 120 paying customers and 600 free accounts: two 2 CPU / 4 GB web services, a 2 CPU / 8 GB Postgres, 50 GB of database storage, 500 GB of bandwidth and 40,000 transactional emails through Postmark. Prices are the vendors’ own, in US dollars, converted at the Bank of Canada rate for 2026-10-29 (1.3985).
| Line | Vendor price | CAD a month | What drives it | How to measure it per customer |
|---|---|---|---|---|
| App servers + workspace † † | 2 × $85 + $25 Pro workspace | $272.71 | CPU and RAM while handling requests | Sum request duration per account from your access logs or APM |
| Postgres + storage † † | $100 instance + 50 GB at $0.30 | $160.83 | Data size and query load | pg_total_relation_size per tenant schema, or row counts per account_id |
| Bandwidth † † | 475 GB past 25 GB, at $0.15 | $99.64 | Bytes sent to browsers and API clients | Bytes per response in the access log, grouped by account |
| Email † † † | Postmark $15 for 10,000, then $1.80 per 1,000 | $96.50 | Sends | Tag each message with the account; count by tag |
| Total | $629.68 |
† Competitor details come from each vendor’s own published pages on the dates shown; prices and plans change, so check the vendor before you decide. App servers + workspace (2026-10-30) · App servers + workspace (2026-10-30) · Postgres + storage (2026-10-30) · Postgres + storage (2026-10-30) · Bandwidth (2026-10-30) · Bandwidth (2026-10-30) · Email (2026-10-30) · Email (2026-10-30) · Email (2026-10-30)
Three ways to allocate it
- Flat. Divide the bill by paying customers: $629.68 ÷ 120 = $5.25 each. Fine for a first price and for products where customers really are alike. It treats the free accounts as if paying customers caused them.
- By RAM share. Use one driver, usually request time on the app servers, as a proxy for everything. Cheap to measure and roughly right when the app server dominates the bill. It misses a customer who stores a lot but rarely logs in.
- By usage, line by line. Give each line its own driver, as in the table above. More work to set up, once; after that it is a monthly query. This is the method that finds the expensive accounts.
The worked example
The shares below are a hypothetical month’s measurements, chosen to look like a typical B2B tool: many small accounts, a middle group, and three agencies that run the product for their own clients.
| Group | Accounts | App time | Database | Bandwidth | Monthly cost | Per account | |
|---|---|---|---|---|---|---|---|
| Free | 600 | 15% | 10% | 10% | 20% | $86.25 | $0.14 |
| Solo | 90 | 30% | 25% | 30% | 25% | $176.04 | $1.96 |
| Team | 27 | 30% | 35% | 30% | 35% | $201.77 | $7.47 |
| Agency | 3 | 25% | 30% | 30% | 20% | $165.62 | $55.21 |
What the example tells you
The flat method said every customer costs $5.25. By usage, a Solo account costs $1.96 and an Agency account $55.21, more than 28 times as much. If Agency is priced at $49 because flat costs looked like $5, three customers are losing you money every month and nothing on the dashboard says so.
The RAM-share method lands close here (Solo $2.10, Team $7.00, Agency $52.47) because the app servers are the biggest line. It drifts when storage or email grows faster than traffic, which is common for products that keep documents or send notifications.
What to do with free users’ cost
Free accounts cost $86.25 a month in the example, 14 cents each. Spreading that over paying customers raises their cost from $4.53 to $5.25 under the flat method, which makes every plan look less profitable than it is.
Treat it as acquisition instead. If 6 free accounts upgrade in a month, each new paying customer cost $14.38 of free-tier hosting to acquire. Compare that with what you would pay for a customer through ads, and the free tier is either a cheap channel or an expensive one. Free tiers: who pays for them covers how to keep that number down.
When the estimate lies
- One heavy customer. An average across 120 accounts hides the one that imports a million rows. Look at the top five accounts by each driver every month, not only at the averages.
- Idle capacity. The two web services run whether you have 120 customers or 60. The average cost is $5.25, but the next Solo customer adds almost nothing until you need a third instance, which costs about $119 in one step. Use the average to set prices and the step to plan capacity.
- Shared overhead. Build minutes, staging, logs and monitoring don’t map to customers. Allocate them in proportion to the rest, or keep them as a separate line; don’t leave them out.
- Annual plans. A customer paying yearly costs you hosting every month. Compare monthly cost with monthly revenue, not with the day the invoice was paid.
On a flat-priced platform
Fewer lines are metered when the platform charges a flat price, so the allocation is mostly about whether a customer pushes you into the next step: more memory, more storage, or a dedicated database. On Canner those steps are App RAM at $4 per GB a month, storage in 50 GB blocks at $5, and a dedicated Postgres instance at $9 a month per project; the plans and limits page lists the rest. The method above still applies. You are just measuring how close each customer brings you to the next step rather than to the next invoice line. More guides are on the hub page.
Questions
How much does hosting cost per SaaS customer?
It depends on the product, but for a small B2B tool it is often between $1 and $10 a month for most accounts, with a few heavy accounts costing far more. Measure it from your own bill: the spread between accounts matters more than the average.
Should free users’ hosting cost be counted in cost of goods sold?
Most founders treat it as a marketing cost, because free users don’t generate revenue. Keep it as its own number and divide it by the free accounts that upgrade each month to get a hosting cost per acquired customer.
What is the easiest way to measure usage per customer?
Log the account ID with every request, then sum request duration and response bytes per account from your access logs. Add database size per tenant and email counts per tag. One monthly query covers most of the bill.
Fewer lines to allocate.
Live is $9 a month in Canadian dollars, with 1 TB of traffic and no per-GB charge. Start free on Starter.