How much does it cost to run a SaaS app with 1,000 users?
A small B2B SaaS with 1,000 users, a managed database, a cache, and a CDN lands around 195 dollars a month on AWS. Here is the full component-by-component breakdown, the assumptions behind it, and where the money actually goes.
Quick answer
A typical single-region B2B SaaS serving 1,000 users (roughly 2 million API requests, 40 GB of database, 300 GB of egress per month) costs about 195 dollars a month on AWS on-demand pricing, or about 0.20 dollars per user per month. The largest lines are the NAT gateway (37 dollars), the database (31 dollars), the app tier (30 dollars), the CDN (29 dollars), and the load balancer (28 dollars). Nothing dominates, which is exactly what makes small SaaS bills hard to optimize: the win comes from removing whole components (replacing the NAT gateway with VPC endpoints, collapsing two load balancers into one) rather than shaving instance sizes.
The question "what will it cost to run this?" is easiest to answer badly. People quote an EC2 price and forget that a production SaaS also pays for a load balancer, a NAT gateway, a managed database, logs, DNS, secrets, and egress. Those supporting lines are often more than half the bill at small scale. So here is a complete, honest costing of a small B2B SaaS at 1,000 users, with every assumption stated.
The workload we are pricing
Assume a single-region deployment in us-east-1. There are 1,000 registered users, about 150 concurrent at peak on weekday mornings, generating roughly 2 million API requests per month. The primary database holds 40 GB and grows about 3 GB a month. Users upload documents and avatars totalling 200 GB in object storage. The front end and its assets push about 300 GB of egress a month through a CDN. The app is a containerized web service, deployed on two small instances for redundancy across availability zones, behind one application load balancer. There is a Redis-compatible cache for sessions and hot reads.
The monthly breakdown
| Component | Specification | Monthly cost |
|---|---|---|
| App tier | 2 x t3.small, on-demand, 730 hours each at 0.0208/hr | $30.37 |
| Load balancer | ALB at 0.0225/hr plus about 2 LCU at 0.008/LCU-hr | $28.11 |
| Database | RDS db.t3.small single-AZ at 0.034/hr plus 50 GB gp3 at 0.115/GB | $30.57 |
| Cache | ElastiCache cache.t4g.micro at 0.016/hr | $11.68 |
| Object storage | 200 GB S3 Standard at 0.023/GB plus about 1M requests | $5.40 |
| CDN | CloudFront 300 GB at 0.085/GB plus 5M HTTPS requests | $29.25 |
| NAT gateway | 1 gateway at 0.045/hr plus 100 GB processed at 0.045/GB | $37.35 |
| DNS | Route 53 hosted zone plus 2M queries | $1.30 |
| Logs and metrics | 20 GB ingest at 0.50/GB plus custom metrics | $19.00 |
| Secrets | 5 secrets at 0.40 each | $2.00 |
| Total | $195.03 |
Where the money actually goes
The single largest line is the NAT gateway at 37.35 dollars, which is more than the compute running the application. That is the classic small-architecture surprise: a piece of plumbing nobody designed for costs more than the thing customers actually use. The fixed hourly charge of 32.85 dollars a month applies whether one byte flows through it or a terabyte does, which is why it is the first item on everyNAT gateway optimization list and a recurring cause of the surprise bill.
The second observation is that no single component dominates. The top five lines are 37, 31, 30, 29, and 28 dollars. That flatness is the defining characteristic of small SaaS bills, and it changes the optimization strategy. Right-sizing an instance from t3.small to t3.micro saves 7.59 dollars, which is 4 percent of the bill and probably not worth the capacity risk. Removing a whole component saves 15 to 20 percent at a stroke.
Getting it cheaper
Three changes take this architecture under 130 dollars without hurting availability. First, replace the NAT gateway with VPC gateway endpoints for S3 and DynamoDB plus interface endpoints only where genuinely needed. If the private subnets only talk to AWS services, the NAT gateway can disappear entirely, saving 37.35 dollars. Second, buy a one-year Compute Savings Plan on the steady app tier and the database. Roughly 28 percent off compute and a similar discount on an RDS reserved instance takes those two lines from 60.94 dollars to about 44 dollars. Third, trim log ingestion. Twenty gigabytes of logs at 0.50 per gigabyte is 10 dollars of pure debug output in most small apps; sampling healthy request logs and keeping errors at full fidelity usually cuts that by 70 percent.
The result is roughly 128 dollars a month, or 0.128 dollars per user. Note what we did not do: we did not switch to a cheaper region, we did not move to a single availability zone, and we did not drop the cache. Structural changes beat micro-optimizations at this scale.
The Multi-AZ question
The table prices a single-AZ database because that is what most early SaaS companies actually run. Turning on Multi-AZ doubles the instance charge, taking the database line from 30.57 to 55.39 dollars and the total to about 220 dollars. Whether that 25 dollars is worth it depends entirely on your contractual uptime commitments, and it is a far better use of money than most other upgrades at this size. The economics are laid out inMulti-AZ cost explained.
Unit economics
At 195 dollars a month across 1,000 users, infrastructure costs 0.195 dollars per user per month. If the product sells for 20 dollars per seat, infrastructure is under 1 percent of revenue, which is why almost no early SaaS should be optimizing its cloud bill. The reason to build the breakdown anyway is that the shape of the bill tells you what happens at 10x. The NAT gateway stays roughly flat. The CDN and object storage scale linearly with users. The database and app tier scale in steps. Knowing which is which is what lets you forecast rather than guess, and trackingcost per customer from day one makes the trend visible before it becomes a problem.
Price the architecture from your Terraform before you deploy it, against theresource catalog, and the 195 dollar figure stops being an estimate and starts being a number you can defend in a planning meeting.
FAQ
How much does it cost to run a SaaS app with 1,000 users?
About 195 dollars a month on AWS on-demand pricing for a single-region deployment with two small app instances, an application load balancer, a managed Postgres database, a small cache, 200 GB of object storage, a CDN serving 300 GB, a NAT gateway, DNS, logs, and secrets. That works out to roughly 0.195 dollars per user per month. With a Savings Plan, VPC endpoints instead of a NAT gateway, and trimmed log ingestion, the same architecture runs closer to 128 dollars.
What is the biggest cost in a small SaaS architecture?
Usually the NAT gateway, at 37.35 dollars a month for one gateway plus 100 GB of processed traffic. That is more than the 30.37 dollars of compute actually running the application. The fixed hourly charge of 32.85 dollars applies regardless of traffic, so at small scale it is pure overhead. Replacing it with VPC gateway endpoints for S3 and DynamoDB removes the line entirely when private subnets only talk to AWS services.
Should I optimize my cloud bill at 1,000 users?
Mostly no. At 195 dollars a month against, say, 20 dollars per seat of revenue, infrastructure is under 1 percent of revenue and engineering time is worth far more elsewhere. The reason to build a detailed breakdown anyway is to understand which lines scale with users (CDN, storage, database) and which stay flat (NAT gateway, load balancer, DNS), because that shape determines what your bill looks like at 10x and 100x users.
How much does Multi-AZ add to a small SaaS bill?
Turning on Multi-AZ for the RDS database doubles the instance charge, taking the database line from 30.57 to 55.39 dollars a month and the total from 195 to about 220 dollars. That 25 dollar increment is small in absolute terms and is one of the better uses of money at this scale if you have contractual uptime commitments, since it protects against a whole class of single-instance failures.
What is a realistic cost per user for SaaS infrastructure?
At 1,000 users on the architecture priced here, about 0.195 dollars per user per month. Unit cost falls sharply with scale because the fixed components (load balancer, NAT gateway, DNS, database baseline) are amortized over more users. The same style of architecture at 100,000 users typically lands near 0.065 dollars per user, roughly a third of the small-scale figure, because only storage and egress scale truly linearly.
How does C3X help estimate SaaS infrastructure cost?
C3X reads your Terraform and prices every resource against a live catalog, so the full stack (app instances, load balancer, database, cache, NAT gateway, storage, CDN) is costed before you apply. That turns a spreadsheet estimate into a number tied to the actual infrastructure definition, and it surfaces the expensive plumbing like NAT gateways in the pull request where you can still choose a different design.
What to do next
Know what your SaaS costs before you deploy it. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.