
- Most small SaaS bills come from things that run all the time: servers, databases, NAT gateways, public IP addresses and logs that are never deleted.
- AWS has no automatic spending cap on a paid account; budgets and anomaly alerts warn you, and budget actions can block new resources.
- Set log retention, delete unused volumes and snapshots, and remember that a stopped RDS database restarts on its own after seven days.
- Tag resources by environment and product, and activate the tags in billing, or you cannot see where the money goes.
- Commit to Savings Plans only after usage has been steady for a few months.
How do you keep AWS costs under control for a small SaaS?
Find the resources that charge by the hour whether or not anyone uses them, set alerts that warn you before the invoice does, tag everything so you can see what each part of the product costs, and only commit to long-term discounts once usage is steady. On a paid AWS account there is no automatic spending cap, so the controls have to be set up deliberately.
Most surprise bills we see come from a short list of items, not from the main servers. Finding them is part of every cost review our cloud and DevOps team runs.
Where does a small SaaS bill usually come from?
| Item | Why it grows | What to do |
|---|---|---|
| Servers and databases | Sized for a launch-day peak, then left running all month | Right-size using real usage; stop or delete idle ones |
| NAT gateways | Charged for each hour they exist and each gigabyte they process | Keep resources in the same Availability Zone as the gateway; use VPC endpoints for AWS services |
| Public IPv4 addresses | AWS charges for all public IPv4 addresses, including those on running instances and Elastic IPs | Give public addresses only to what needs them; release unused Elastic IPs |
| Logs | CloudWatch Logs keeps log data indefinitely by default | Set a retention period on every log group |
| Leftover storage | EBS volumes that are not deleted when an instance is terminated continue to incur charges | Check volumes and old snapshots monthly |
To find your own top items, open Cost Explorer, group last month's costs by service, then by usage type, and work down the list from the largest line. The names are cryptic at first, but they point straight at the resource that is charging.
Stopped databases need a note of their own. A stopped RDS instance does not charge for instance hours, but you still pay for its storage and backups, and if you do not start it yourself, RDS starts it automatically after seven days. Teams that stop a staging database to save money are often surprised to find it running again.
What does the AWS Free Tier cover now?
The Free Tier changed for new accounts. New customers now receive USD 100 in credits, can earn up to another USD 100 by completing activities, and choose between two plans:
- Free account plan. No charges until you upgrade, for up to six months or until the credits run out, whichever comes first. Some services are not available on it.
- Paid account plan. Credits still apply, but once they are used, or for services where credits do not apply, you pay standard pay-as-you-go prices.
Over 30 services also have always-free monthly limits. The free plan suits a proof of concept; a SaaS with paying customers belongs on a paid plan, with the alerts below in place from day one.
How do you get warned before the bill arrives?
- AWS Budgets. Set a monthly cost budget with alerts on actual and forecasted spend, for example at 80 percent. Budget data is updated up to three times a day. A budget action can automatically apply an IAM policy that stops anyone provisioning new resources.
- Cost Anomaly Detection. It uses machine learning to spot unusual spend and runs about three times a day, but because it relies on Cost Explorer data it can take up to 24 hours to detect an anomaly. A new service needs some usage history before anomalies can be detected.
- Cost Explorer. Shows up to 13 months of history and forecasts the next 18 months; the current month's data appears after about a day.
Send these alerts to a shared channel, not one inbox, and pair them with the technical alerts in our guide to monitoring a production web app. A sudden cost spike is often the first sign of a runaway job or a misconfigured service.
How do you see what each part of the product costs?
Use cost allocation tags. Tag every resource with at least the environment (production, staging), the application or service and an owner. Tags do not appear in billing until you activate them: user-defined and AWS-generated tags must be activated separately, and new tags can take up to 24 hours to show in the console.
With tags in place, Cost Explorer can answer the questions that matter for pricing: what staging costs, what the AI feature costs to run, and how cost grows with customers. In a multi-tenant SaaS, cost per customer is usually an estimate built from these numbers and usage data, which is still enough to check that each plan in your billing setup covers what it costs to serve.
When should you commit to Savings Plans?
Savings Plans lower compute prices in exchange for committing to a set amount of usage per hour for one or three years, with savings of up to 72% on compute. Compute Savings Plans also cover AWS Fargate and Lambda. Cost Explorer recommends a commitment level based on your past usage.
For a young SaaS, the risk is committing before the architecture settles. Clean up waste first, wait until usage has been steady for a few months, and commit to the part of your usage you are confident will still be there. Planning infrastructure that grows with revenue is part of how our SaaS and MVP team scopes a product. If your site is still on shared hosting and you are weighing a move, our guide to moving from shared hosting to AWS covers whether it is worth it.
Frequently asked questions
Can AWS stop charging us automatically at a set amount?
Not on a paid account. A budget sends alerts, and a budget action can apply a policy that stops people creating new resources, but resources that are already running keep running and keep costing money until someone stops or deletes them. The free account plan is different: it simply ends when its credits or time run out.
Is serverless always cheaper for a small SaaS?
Not always. Services such as Lambda cost nothing while idle, which suits uneven or low traffic, but steady high traffic can cost more than a right-sized server. Compare both with your real request volumes using the AWS pricing calculator, and include the engineering time each option needs to run well.
Do staging and test environments need to run all the time?
Usually not. Shut them down outside working hours, or rebuild them from infrastructure code when needed. Remember that a stopped RDS database still charges for storage and starts again on its own after seven days, so a schedule or a teardown script works better than stopping it by hand.
Who on a small team should own the AWS bill?
One named person, usually the technical lead, with a deputy. They receive the budget and anomaly alerts, review Cost Explorer each month, and approve anything that commits money for a year or more. Finance should see the same monthly summary, so a jump never arrives as a surprise on the invoice.
Would moving off AWS be cheaper?
Sometimes, for simple apps with steady traffic, a managed host or a single virtual server costs less and needs less care. You give up managed databases, scaling and the wider AWS toolset. Cleaning up the current account first usually shows how much of the bill was waste rather than AWS itself.
Last updated