Free Hosting Sounds Great Until Your Bill Is $500/Month
That 'free tier' turned into a $500 monthly bill. Here's how cloud hosting costs spiral out of control and how to keep them under $20/month.
"Generous free tier!" "Pay only for what you use!" "No upfront costs!"
You launch on a free tier. A week later, you get an email:
"Your AWS bill is $487.32"
What happened?
Here are the 6 hidden costs that catch vibe coders off guard—and how to avoid a surprise bill.
Cost Trap #1: Bandwidth (Data Transfer)
⚠️ How You Get Charged
You serve a 2MB image. User loads it. You pay $0.09 per GB transferred.
1,000 users × 2MB = 2GB = $0.18. Not bad.
100,000 users × 2MB = 200GB = $18.
A bot scrapes your site 1 million times = 2,000GB = $180.
💰 How to Save Money
- Optimize images: Compress PNGs and JPGs. Use WebP format. That 2MB image can be 200KB.
- Use a CDN: Cloudflare is free and caches your images closer to users.
- Lazy load images: Only load images when users scroll to them.
- Block bots: Use robots.txt and rate limiting to stop scrapers.
Cost Trap #2: Serverless Function Invocations
Vercel, Netlify, and AWS Lambda charge per function call.
⚠️ The Math
Vercel Pro: First 1 million function calls free. Then $0.60 per million.
Sounds cheap, right?
But: If your API gets hit by bots or has a bug that causes infinite loops, you hit 10 million calls.
Cost: $6 × 9 extra million = $54
💰 How to Save Money
- Cache API responses: Don't hit the function every time. Cache for 60 seconds.
- Rate limit: Limit each user to 100 requests per minute.
- Monitor invocations: Set up alerts when you hit 500k calls in a day.
- Use static generation: Pre-render pages at build time instead of on each request.
Cost Trap #3: Database Storage and Queries
Supabase, PlanetScale, and Neon have generous free tiers. Until you exceed them.
| Service | Free Tier | What Happens After |
|---|---|---|
| Supabase | 500MB storage, 2GB bandwidth | $25/month for Pro (8GB storage) |
| PlanetScale | 5GB storage, 1B row reads | $39/month for Scaler (10GB) |
| Railway | $5 free credit | ~$5-20/month after |
💰 How to Save Money
- Clean up old data: Delete test accounts, expired sessions, old logs.
- Use pagination: Don't load 10,000 rows at once. Load 50 at a time.
- Add indexes: Slow queries = more compute time = higher costs.
- Archive old records: Move data older than 6 months to cheaper storage.
Cost Trap #4: API Requests (Third-Party Services)
OpenAI, SendGrid, Stripe—they all charge per API call.
⚠️ Real Example
OpenAI GPT-4: $0.03 per 1K input tokens, $0.06 per 1K output tokens.
You use GPT-4 to analyze user feedback. Each analysis uses ~2K tokens total.
Cost per request: ~$0.12
1,000 users = $120
10,000 users = $1,200
💰 How to Save Money
- Use GPT-4o mini: 15x cheaper than GPT-4. Works for most tasks.
- Cache results: Same question asked twice? Return cached answer.
- Limit usage: Free users get 3 AI requests/day. Paid users get unlimited.
- Batch requests: Process 100 items at once instead of 100 separate calls.
Cost Trap #5: Logging and Monitoring
Services like Sentry, LogRocket, and Datadog charge based on events or sessions.
⚠️ The Surprise
Sentry Free: 5,000 errors/month.
You have a bug that fires 100 errors per second. In one hour, you hit 360,000 errors.
Sentry upgrades you to Team plan: $26/month per project.
💰 How to Save Money
- Sample errors: Log 10% of errors, not 100%.
- Filter noise: Ignore errors from bots and dev environments.
- Fix bugs fast: One bug can eat your entire error budget.
- Set limits: Configure max events per month to cap costs.
Cost Trap #6: "Free" Services That Auto-Upgrade
Some services auto-upgrade you when you hit limits. No warning. Just a bigger bill.
⚠️ Watch Out For
- Vercel: Exceeding function execution time automatically bumps you to Pro ($20/month)
- Heroku: Free tier sleeps after 30 min. Want 24/7 uptime? $7/month per dyno
- MongoDB Atlas: Free tier = 512MB. Hit limit? $57/month for next tier
💰 How to Save Money
- Set billing alerts: Get notified when you hit $10, $25, $50
- Set hard limits: Some services let you cap spending (AWS Budget, Vercel spend limits)
- Review bills weekly: Catch cost spikes early
Avoid Surprise Hosting Bills
VibeCheck analyzes your app for expensive patterns like N+1 queries, missing caching, and unoptimized images that drive up costs.
Check My App Free →Budget-Friendly Hosting for Side Projects
If you want to stay under $20/month, here's a proven stack:
| Service | Cost | What You Get |
|---|---|---|
| Vercel (Hobby) | $0 | 100GB bandwidth, unlimited sites |
| Supabase (Free) | $0 | 500MB database, 2GB bandwidth |
| Cloudflare (Free) | $0 | Unlimited bandwidth via CDN |
| Total | $0/month | Good for 10k users/month |
Alternative for more traffic:
| Service | Cost | What You Get |
|---|---|---|
| Railway | $5-10 | App + database, 100k users |
| Cloudflare | $0 | CDN, DDoS protection |
| Total | $10/month | Good for 100k users/month |
Emergency: Your Bill Is Already High
If you wake up to a $500 bill:
- Pause services immediately: Delete unused resources, pause deployments
- Check bandwidth logs: Is a bot hitting your API 1 million times?
- Add rate limiting: Stop the bleeding before investigating
- Contact support: AWS, Vercel, and others often waive first-time overages
- Set spending limits: Cap costs at $25/month to prevent future surprises
Prevention Checklist
Before you launch:
- Optimize images: Compress, use WebP, lazy load
- Enable caching: API responses, database queries, static assets
- Add rate limiting: 100 requests per minute per user
- Set billing alerts: $10, $25, $50 thresholds
- Monitor usage weekly: Check dashboards every Monday
- Use cheaper tiers: GPT-4o mini instead of GPT-4, Supabase free instead of Pro
The Bottom Line
"Free tier" doesn't mean "free forever."
Cloud costs are designed to be low at first, then scale with usage. That's great for big companies. But for side projects and indie apps, you need to be smart.
Optimize images. Cache aggressively. Set spending limits. Monitor your usage.
Stay under $20/month and keep your project profitable.