Storage Costs as You Scale
How storage costs grow as your SaaS scales from 0 to 10,000 users. What catches founders off guard, and how to plan ahead.
The founder’s storage journey
Phase 1: Building (0-100 users)
Costs: Near zero
| Component | Typical cost | Notes |
|---|---|---|
| Database | $0-25/month | Supabase free tier, then Pro |
| Object storage | $0-5/month | A few GB of uploads |
| Git hosting | $0 | GitHub free |
| Logs | $0 | Console output, platform logs |
| Backups | Included | Platform handles it |
| Total | $0-30/month |
Reality: Storage is not your concern. Focus on building.
What to get right now:
- Don’t store files in your database
- Don’t commit secrets to Git
- Use object storage (S3/R2) for user uploads from day one
- Pick a provider with good free tier (Supabase, R2, PlanetScale)
Phase 2: Traction (100-1,000 users)
Costs: Noticeable but manageable
| Component | Typical cost | What’s happening |
|---|---|---|
| Database | $25-100/month | More data, need performance |
| Object storage | $5-50/month | Real user uploads accumulating |
| Logs | $20-50/month | Need to search them now |
| Backups | $10-30/month | More data to back up |
| CDN | $0-20/month | Speeding up file delivery |
| Total | $60-250/month |
What changes:
- You need to actually look at logs (pay for a log service)
- Backup size grows, consider retention policies
- Database queries slow down, indexes matter
- Users notice if files load slowly (CDN helps)
What to do:
- Set up proper log aggregation (Logtail, Axiom)
- Review database query performance
- Add CDN in front of object storage
- Set backup retention policies (don’t keep everything forever)
Phase 3: Growth (1,000-10,000 users)
Costs: A real line item
| Component | Typical cost | What’s happening |
|---|---|---|
| Database | $100-500/month | Read replicas, more IOPS |
| Object storage | $50-200/month | Terabytes of user data |
| Logs | $100-300/month | Volume explodes |
| Backups | $50-150/month | Larger, more frequent |
| CDN/egress | $50-300/month | High traffic |
| Error tracking | $30-100/month | Sentry, etc. |
| Total | $400-1,500/month |
What changes:
- Storage costs become a meaningful expense
- Need to think about data lifecycle (archiving, deletion)
- Log costs can surprise you
- Backup restore time matters (tested it lately?)
What to do:
- Implement data retention policies
- Move old data to cheaper storage tiers
- Consider R2 to eliminate egress costs
- Audit what you’re storing—do you need all of it?
- Set up alerts for unexpected cost spikes
Phase 4: Scale (10,000+ users)
Costs: Significant infrastructure line item
| Component | Typical cost | What’s happening |
|---|---|---|
| Database | $500-5,000/month | Sharding, replicas, high IOPS |
| Object storage | $200-2,000/month | Petabytes possible |
| Logs/observability | $500-2,000/month | Full stack observability |
| Backups | $200-500/month | Cross-region, tested restores |
| CDN/egress | $200-1,000/month | Global traffic |
| Analytics | $100-500/month | Understanding user behavior |
| Total | $1,500-10,000/month |
What changes:
- Need dedicated infrastructure engineering
- Cost optimization becomes a real discipline
- Multi-region considerations
- Compliance and data governance matter
The hidden costs that catch founders
1. Egress (data transfer out)
The trap: Storing 1TB on S3 costs $23/month. Serving that 1TB to users costs $90. If your app serves lots of images/files, egress dominates costs.
Real example: A startup stored user-generated images on S3. Went viral. Served 10TB in a week. $900 surprise bill.
Solution: Use Cloudflare R2 (free egress) or put CloudFront CDN in front of S3 (caches reduce origin egress).
2. Log accumulation
The trap: Logs grow silently. You configure logging once and forget about it. Six months later, you’re storing (and paying for) terabytes of logs nobody reads.
Real example: Debug logging left on in production. Logging every API request with full payloads. $300/month in log storage, most of it useless.
Solution:
- Set log levels appropriately (INFO in prod, not DEBUG)
- Implement retention policies (30 days for most logs)
- Sample high-volume logs (keep 10% of health checks)
- Archive to Glacier if you must keep them
3. Database growth
The trap: Every feature adds tables. Every table grows. Soft deletes mean data never actually goes away. Analytics queries scan more data, cost more time.
Real example: “Deleted” users still in database with soft delete flag. 60% of database is “deleted” data. Backups, queries, and storage all inflated.
Solution:
- Actually delete data after retention period
- Archive old data to cheaper storage
- Partition large tables by date
- Purge orphaned records regularly
4. Backup retention
The trap: Daily backups kept forever = 365 backups per year × years. Backup storage grows 365x faster than you expect.
Real example: 5GB database. Daily backups kept for 3 years. 5GB × 365 × 3 = 5.4TB of backups. $125/month just for backup storage.
Solution:
- Keep daily backups for 7-30 days
- Weekly backups for 3 months
- Monthly backups for 1 year
- Annual backups for compliance period
- Automate with lifecycle policies
5. Feature-driven data explosion
The trap: Features generate data. Activity feeds, notifications, analytics events, AI conversations—each creates records. Volume grows faster than user count.
Real example: Chat feature. 100 active users × 50 messages/day × 30 days = 150,000 records/month. × 12 months = 1.8M records/year. Times all attachments, read receipts, typing indicators…
Solution:
- Design for data volume upfront
- Implement archiving from day one
- Consider event sourcing patterns
- Set retention expectations with users
Cost optimization strategies
Quick wins
- Switch to R2 for object storage - Eliminates egress costs
- Add CDN in front of static assets - Reduces origin requests
- Set log retention to 30 days - Unless compliance requires more
- Compress backups - Reduces storage 50-70%
- Review database storage engine - PostgreSQL TOAST, etc.
Medium effort
- Implement lifecycle policies - Auto-move old data to cheaper tiers
- Audit what you’re storing - Delete what you don’t need
- Sample high-volume logs - Keep 10% of repetitive entries
- Use spot instances for batch jobs - 70% savings on compute
- Implement data retention policies - With user communication
Larger projects
- Migrate to reserved instances - 30-50% savings with commitment
- Implement data archiving - Move cold data to Glacier
- Add read replicas strategically - Reduce primary database load
- Consider multi-region with care - Don’t replicate everything everywhere
- Build cost alerting - Know before the bill arrives
Monthly cost benchmarks by stage
| Stage | Users | Monthly infra | Storage portion |
|---|---|---|---|
| Pre-launch | 0 | $0-50 | $0-20 |
| Early | 100 | $50-150 | $20-50 |
| Growing | 1,000 | $200-500 | $60-200 |
| Scaling | 10,000 | $1,000-3,000 | $400-1,500 |
| Established | 100,000 | $5,000-20,000 | $1,500-8,000 |
Storage is typically 20-40% of total infrastructure costs, with compute being the other major portion.
When to optimize vs when to ignore
Ignore when:
- You have <1,000 users
- Storage costs are <$100/month
- You’re still figuring out product-market fit
- Engineering time is your scarcest resource
Optimize when:
- Storage costs >$500/month
- Costs growing faster than revenue
- You have ops/infra capacity
- You’re preparing for funding due diligence
- Compliance requires data governance
Get help when:
- Storage costs >$5,000/month
- Complex multi-region requirements
- Compliance mandates (HIPAA, SOC2, GDPR)
- Performance issues despite scaling
The cost conversation with investors
Investors will ask about your infrastructure costs. Good answers show you understand unit economics:
Weak: “We spend about $500 on AWS”
Strong: “We spend $500/month on infrastructure: $200 database, $150 compute, $100 storage, $50 observability. That’s $0.50 per active user per month, declining as we scale due to fixed costs.”
Even stronger: “…and we’ve modeled this to $0.35/user at 10K users because egress costs are fixed with R2, and we’ve built data archiving into the product.”
Planning ahead: the data policy
Even at early stage, document:
- What data you collect and why
- How long you keep it (retention periods)
- Where it’s stored (which services)
- How it’s backed up (frequency, retention)
- How it’s deleted (when users leave, when data ages out)
This becomes your data policy. It helps with:
- GDPR/CCPA compliance
- Cost planning
- User trust
- Investor due diligence
Further reading
- Types of storage explained : What each storage type is for
- What are backups? : Protecting your data
- When do you need analytics? : Making sense of all this data
- Where to store files : Practical storage decisions
- What is scaling? : The bigger picture of growth
Frequently asked questions