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:

  1. Pause services immediately: Delete unused resources, pause deployments
  2. Check bandwidth logs: Is a bot hitting your API 1 million times?
  3. Add rate limiting: Stop the bleeding before investigating
  4. Contact support: AWS, Vercel, and others often waive first-time overages
  5. 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.