Why Your AWS Free Tier Isn't Actually Free
By Jose Marin, founder of Cirrondly. Iarch 2026
TL;DR: The AWS free tier has three types: Always Free (Lambda, DynamoDB, never expires), 12-Month Free (EC2, RDS, S3 expires after 12 months with no warning), and Trial (fixed usage amount). The 5 most common traps are: RDS billing starting on month 13, running more than one EC2 instance simultaneously, data transfer exceeding the 100 GB/month limit, Elastic IPs charging when instances are stopped, and forgotten resources in other AWS regions. Set billing alarms immediately, audit monthly, and do a full cleanup before month 12.
The AWS free tier is one of the best deals in cloud computing. It's also one of the best-designed traps.
Don't get me wrong. It's genuinely generous. You can run a small app for months without paying a cent. But the way it's structured means most developers end up with an unexpected bill at some point. Usually between month 2 and month 13, depending on how fast you move.
Here's how it happens, and how to avoid it.
The three types of free tier (this is where the confusion starts)
AWS doesn't have one free tier. It has three, and they work completely differently:
Always Free These never expire. Lambda gives you 1 million requests per month forever. DynamoDB gives you 25 GB of storage and 200 million requests per month forever. These are genuinely free as long as you stay within the limits.
12-Month Free These expire exactly 12 months after you create your AWS account. EC2 t2.micro (750 hours/month), RDS db.t3.micro (750 hours/month), S3 (5 GB), CloudFront (50 GB). On month 13, the bill arrives. No warning email. No grace period.
Trial Free These give you a fixed amount of usage to try a service. Amazon Bedrock gives you some free model invocations. Amazon Redshift gives you a 2-month trial. Once you use it up, you're paying full price.
The problem is that the AWS console doesn't make it obvious which type of free tier a service falls under. You spin something up, see "Free tier eligible" in green, and assume you're safe. Maybe you are today. Maybe not in 6 months.
The 5 most common free tier traps
Trap 1: RDS on month 13
This is the classic. You launch an RDS db.t3.micro instance during development. It runs fine for a year within the free tier. On month 13, it starts billing. A single db.t3.micro in us-east-1 costs about $15/month. Not catastrophic, but if you forgot about it and you're running Multi-AZ (because a tutorial told you to), that's $30/month for a database your side project stopped using 6 months ago.
What to do: Set a calendar reminder for 11 months after account creation. Audit every 12-month-free resource before the cutoff. If you're not actively using the database, snapshot it and delete the instance.
Trap 2: Running more than one EC2 instance
The free tier gives you 750 hours of t2.micro per month. That's exactly one instance running 24/7. But if you spin up a second instance (even for 10 minutes of testing) those hours add up. Two instances running simultaneously means you're burning 1,500 hours/month, and 750 of those are billable.
The same applies if you accidentally use a t3.micro instead of a t2.micro. Different instance family not covered by the same free tier bucket.
What to do: Only run one EC2 instance at a time during the free tier period. Better yet, use Lambda instead the always-free tier is much more forgiving.
Trap 3: Data transfer sneaking past the limit
The free tier includes 100 GB of data transfer out per month (this was increased in 2024, it used to be much less). Sounds like plenty. But if your app serves images, API responses, or file downloads, you can hit this faster than you think.
The tricky part: data transfer charges appear as a separate line item from the service that generated them. So your EC2 bill looks fine, but there's a $9 charge under "Data Transfer" that you didn't expect.
What to do: Use CloudFront for serving static assets. It has its own free tier (1 TB/month). For APIs, keep response payloads small. Monitor your data transfer in Cost Explorer weekly.
Trap 4: Elastic IPs on stopped instances
You allocate an Elastic IP and attach it to your free tier EC2 instance. All good no charge. You stop the instance to save money over the weekend. Now the Elastic IP is unattached, and AWS charges you $0.005/hour about $3.60/month.
You thought you were saving money by stopping the instance. Instead, you introduced a new charge that didn't exist before.
What to do: If you stop an instance, release the Elastic IP. If you need a static IP, only allocate it when the instance is running.
Trap 5: Forgetting about resources in other regions
You follow a tutorial that deploys to eu-west-1. A month later, you're working in us-east-1 and you've forgotten about the European resources. The AWS billing dashboard shows totals, but you have to dig into Cost Explorer to see per-region breakdowns.
That forgotten S3 bucket in Frankfurt with 20 GB of test data? That EC2 instance in Ireland you used for one afternoon? They're still there. Still billing.
What to do: Use AWS Organizations or at minimum the Tag Editor to scan all regions. Or better stick to one region for everything until you genuinely need multi-region.
The real cost of "free"
The free tier isn't a lie. It's genuinely useful for learning and prototyping. But it creates a false sense of security. You build on AWS thinking it's free, you don't develop the habit of monitoring costs, and by the time you're paying real money, you've already accumulated waste that's hard to untangle.
The startups I see struggling with AWS bills aren't the ones spending $10K/month on production workloads. They're the ones spending $200/month on resources they don't know they have, from experiments they ran 6 months ago.
How to actually use the free tier without getting burned
Here's what I tell every founder who asks me about AWS:
Month 1: Set up billing alarms immediately. Before you deploy anything. CloudWatch alarm at $5, $10, $25. It takes 5 minutes and it's the single best investment you'll make on AWS.
Months 1-11: Build freely, but audit monthly. Spend 15 minutes at the end of each month in Cost Explorer. Look for anything you don't recognize. Kill resources from experiments you're done with.
Month 11: Big audit. Go through every service in every region. Delete or snapshot anything you're not actively using. Switch any 12-month-free resources to alternatives (EC2 → Lambda, RDS → DynamoDB or PlanetScale).
Month 13 onwards: This is when AWS gets real. You're paying for everything now. This is when cost monitoring stops being optional.
This is also exactly when Cirrondly becomes useful. It's an AI agent that connects to your AWS account and continuously monitors for the kind of waste the free tier hides from you. Idle resources, forgotten experiments, overprovisioned databases. It scans 8 service types and tells you in plain language what's wasting money and what to do about it.
Before your free period ends, run the manual checklist in How to Reduce Your AWS Bill in 30 Minutes. It is the fastest way to audit the leftovers most teams forget.
Before the free tier ends, get a clear picture of what is actually costing you money.
Check your AWS account for waste right now - two ways:
Free CSV diagnosis (10 seconds, no signup): Export your Cost Explorer CSV and upload it. You'll see exactly which services are costing you more than they should. Try the free diagnosis →
Full agent (connects to your AWS account): Cirrondly scans your actual resources, detects idle instances, unattached volumes, and overprovisioned databases - then fixes them with your approval. Start saving with Cirrondly →
Jose Marin is the founder of Cirrondly and a full-stack engineer with 9 years of experience. Previously CTO. Based in Lyon, France. He builds tools that help startups use AWS without billing anxiety.