The Real Cost of Running a SaaS: AWS Bills Explained Simply
Orkosi Team · · 9 min read

The cost of running a SaaS is one of the most misunderstood numbers in bootstrapping. Founders either assume AWS will bankrupt them (it will not, at small scale) or assume it is free (it is not, and the surprises arrive in month three). The truth for a small product is boring: a well-configured stack on AWS costs somewhere between $60 and $150 a month until you have thousands of users, and most of the horror stories come from four or five specific mistakes. This article explains the line items in plain language, gives a realistic monthly bill, and shows what changes as you grow.

Why AWS bills confuse founders
AWS has over 200 services and bills each one by a different unit: hours, GB-months, requests, GB transferred, provisioned capacity. The invoice arrives as a flat list of those units with no indication of which ones matter. A first-time founder opening the Billing console sees 30 lines, 25 of which are cents, and cannot tell whether the $34 charge under "EC2-Other" is a mistake or a NAT gateway.
The mental model that helps: a small SaaS has five cost centres. Compute, database, storage and delivery, operational glue (secrets, logs, monitoring), and data transfer. Everything else is either zero or an error.
The five line items that matter
Compute: where your app runs
For a small SaaS in 2026 the sensible default is a managed container service. AWS App Runner is the clearest example: you give it a container image or a repository, it builds, deploys, adds HTTPS and scales instances up and down. According to the App Runner pricing page, you pay roughly $0.064 per vCPU-hour and $0.007 per GB-hour while the service is actively handling requests, and only the memory fee while it is idle but provisioned.
Worked example: a service with 1 vCPU and 2 GB memory that is active about 30 percent of the month costs around $10 in idle memory plus $14 in active compute, so roughly $25. A service that is busy all month, 24 hours a day, costs around $57. That is the $25 to $60 range you will see quoted; the difference is simply traffic. Platforms that deploy apps on your behalf, Orkosi among them, default to App Runner for exactly this reason: the floor is low and nobody patches a server.
Database: RDS
Almost every SaaS needs Postgres or MySQL. RDS gives you a managed instance with backups, patching and point-in-time restore. The smallest sensible production instance is db.t4g.micro (2 burstable vCPUs, 1 GB RAM). Per the RDS pricing page it runs around $0.016 an hour in us-east-1, which is about $12 a month, plus storage at roughly $0.115 per GB-month for gp3. With 20 GB of storage you land at about $14 to $15.
The AWS Free Tier has historically covered a micro RDS instance for the first 12 months, which is why year one often looks cheaper than year two. Plan for the real number.
Storage and delivery: S3 and CloudFront
User uploads, generated files and static assets live in S3 at about $0.023 per GB-month. A small SaaS with 10 GB of files pays 23 cents.
CloudFront, the CDN, sits in front of S3 and your app. Its always-free tier includes 1 TB of data transfer out and 10 million requests a month, so for most small products it costs nothing and absorbs what would otherwise be origin data transfer charges. Use it.
Operational glue: Secrets Manager and CloudWatch
Secrets Manager stores database passwords, API keys and signing keys at $0.40 per secret per month plus $0.05 per 10,000 API calls. Eight secrets is $3.20. Hard-coding secrets in environment variables to save that $3 is a false economy.
CloudWatch collects logs and metrics. Log ingestion is $0.50 per GB and storage $0.03 per GB-month; a chatty small app produces 2 to 5 GB a month, so $2 to $5. Add a couple of alarms at $0.10 each.
Data transfer
Data going into AWS is free. Data leaving AWS to the internet costs about $0.09 per GB after the first 100 GB per month. A small SaaS serving HTML, JSON and a few images rarely exceeds that. Where founders get burned is transfer between availability zones ($0.01 per GB each direction) and traffic that bypasses CloudFront.
A realistic monthly bill for a small SaaS
Here is what a single-region, single-environment SaaS with a few hundred users and modest traffic actually costs in 2026, without free tier discounts.
| Line item | Configuration | Monthly cost (USD) |
|---|---|---|
| App Runner | 1 vCPU / 2 GB, 30 to 100 percent active | $25 to $60 |
| RDS Postgres | db.t4g.micro, 20 GB gp3, single AZ, 7-day backups | $12 to $15 |
| S3 | 10 to 50 GB uploads and assets | $0.25 to $1.50 |
| CloudFront | Under 1 TB out (always-free tier) | $0 to $2 |
| Secrets Manager | 6 to 10 secrets | $2.40 to $4.00 |
| CloudWatch | 2 to 5 GB logs, a few alarms | $2 to $6 |
| Route 53 | 1 hosted zone | $0.50 to $1.00 |
| Data transfer out | Under 100 GB free, then $0.09 per GB | $0 to $9 |
| ECR (container images) | 2 to 5 GB stored | $0.20 to $0.50 |
| Total | $42 to $99 |
Add a second environment for staging and roughly double it. Add Stripe fees (2.9 percent plus 30 cents per transaction), a transactional email service ($0 to $20), and a domain, and the true cost of running a SaaS with a few hundred users is $80 to $200 a month all-in.

If your bill for a small product is $400, something in the hidden costs section below is happening.
What changes at 1,000 users
At 1,000 users the infrastructure barely notices, but a few things shift.
Compute stays on one App Runner instance most of the time. You may see the auto-scaler add a second instance during peaks, which appears as extra active hours. Budget $60 to $100.
Database is where the first real decision arrives. db.t4g.micro has 1 GB of RAM and a burst credit model; sustained load can exhaust credits and slow everything down. Moving to db.t4g.small ($24 a month) or medium ($48) is usually the fix. Storage grows too; 50 GB is $5.75.
Logs grow faster than users because every request logs. 10 to 20 GB a month is $5 to $10. Set a retention policy of 30 days so storage does not compound.
Realistic total at 1,000 active users: $110 to $200 a month for infrastructure, before Stripe fees and email.
What changes at 10,000 users
At 10,000 users you are running a real business and the bill reflects it, but it is still far from frightening.
| Line item | Typical configuration | Monthly cost (USD) |
|---|---|---|
| App Runner | 2 to 4 instances, mostly active | $150 to $300 |
| RDS Postgres | db.t4g.large or m6g.large, Multi-AZ, 200 GB | $250 to $400 |
| S3 + CloudFront | 500 GB stored, 2 to 5 TB delivered | $30 to $80 |
| CloudWatch | 50 to 100 GB logs, dashboards, alarms | $30 to $60 |
| Secrets, Route 53, ECR, misc | $10 to $20 | |
| Data transfer | 500 GB to 1 TB out beyond the CDN | $40 to $90 |
| Total | $510 to $950 |
If 10,000 users pay you even $10 a month on average, infrastructure is well under 1 percent of revenue. The bill should worry you only if it grows faster than revenue.
Hidden costs that show up in month three
These are the items behind most "AWS surprise bill" stories. None of them is exotic.
NAT gateway
If your app runs inside a private subnet and needs to reach the internet (to call Stripe, send email, pull packages), it needs a NAT gateway. Per the VPC pricing page, a NAT gateway costs about $0.045 an hour, which is $32.85 a month before a single byte moves, plus $0.045 per GB processed. Two of them for high availability is $66 a month doing nothing. App Runner's default public networking avoids this; the cost appears only when you connect the service to a VPC to reach RDS, and even then VPC endpoints can keep the gateway small or absent.
Idle environments
A staging environment configured like production costs like production. A "quick test" RDS instance someone forgot to delete costs $12 to $50 a month forever. Tag resources by environment and review the list monthly.
Over-provisioned RDS
The RDS console defaults nudge you toward larger instances, provisioned IOPS and 100 GB of storage. A db.m6g.large with io2 storage can run $250 a month for a product with 50 users. Start with t4g.micro and gp3, watch CPU credits and freeable memory, and scale when the metrics tell you to, not before.
Egress
Serving files, video or large API responses directly from your app or from S3 without CloudFront turns a free line item into a paid one. At $0.09 per GB, 2 TB of direct egress is $180. Behind CloudFront the same traffic is mostly inside the free tier. This is the single most common fix that cuts a mid-size bill in half.

Beyond AWS: the costs that actually dominate
For a bootstrapped SaaS, the AWS bill is rarely the largest cost. The honest cost of running a SaaS at small scale looks like this:
- Payments: Stripe at 2.9 percent plus $0.30 per charge. On $5,000 of monthly revenue that is about $175, more than your entire AWS bill.
- Email: transactional and marketing sending, $0 to $50.
- Tooling: error tracking, analytics, support inbox, $0 to $100.
- Building and changing the product: by far the largest line, whether it is your evenings, a freelancer at $100 an hour, or an AI agent platform. Orkosi, for example, charges $29 a month for 290 credits on its Launch plan (each credit is $0.10) and deploys the app onto App Runner, so the infrastructure costs above still apply; see the pricing page and the feature list. Whatever you use, engineering time is the real cost centre and the AWS bill is a rounding error next to it.
How to keep the bill boring
- Set an AWS Budget with an alert at $100 and another at 150 percent of last month.
- Put CloudFront in front of everything public.
- Start RDS at t4g.micro, single AZ, gp3. Scale on metrics.
- Avoid NAT gateways until you have a specific reason.
- Delete staging when you are not using it, or schedule it to stop overnight.
- Set log retention to 30 days.
- Review Cost Explorer once a month, grouped by service. Anything you do not recognise is a question to answer that day.
Founders who do these seven things run small SaaS products for $50 to $100 a month and scale to thousands of users without the bill becoming a topic.
FAQ
What is the realistic cost of running a SaaS on AWS with under 500 users?
Between $40 and $100 a month for infrastructure with a managed container service, a micro RDS instance, S3, CloudFront and basic monitoring. Add Stripe fees, email and tooling and the all-in figure is typically $80 to $200. The free tier can lower year one further.
Is App Runner more expensive than a plain EC2 instance?
Per hour, yes: a busy 1 vCPU App Runner service costs around $57 a month versus $12 for a t4g.small EC2 instance. The premium buys automatic HTTPS, deployments, scaling and no server administration. For a solo founder that trade is almost always worth it until the compute bill reaches several hundred dollars.
When should I move RDS to Multi-AZ?
When an hour of downtime would cost you more than the extra $12 to $200 a month, which for most products means once you have paying customers who rely on the product during working hours. Before that, single AZ with automated daily backups and point-in-time restore is sufficient.
Do AI-built apps cost more to host than hand-built ones?
Not inherently. The infrastructure is the same App Runner, RDS and S3 whether a human or an agent wrote the code. What matters is whether the deployment defaults are sensible: a CDN in front, a small RDS instance, no stray NAT gateway. Orkosi deploys apps to App Runner on AWS; ask any platform the same question, and read its documentation, before committing.
If you want to see what a small SaaS stack looks like without configuring it yourself, you can create a free Trial account and deploy a first version, then check the plans on the pricing page once you know how often you will ship changes.