Scenario · Last verified 2026-08-25
SaaS at 100k monthly active users
Translate a 100k-MAU API product into storage, egress, and request SKUs.
| Metric | Value | Unit | Source type | Derivation | Link |
|---|---|---|---|---|---|
| Stored data | 200 | GB | Author assumption assumption | Assume 2 MB of application state per monthly active user times 100,000 users. Typical for a B2B SaaS that stores records and files, not media libraries. | — |
| Internet transfer | 80 | GB | Author assumption assumption | Assume 5 million JSON API responses a month at 16 KB average including headers. 5e6 * 16e3 / 1e9 = 80 GB. Page-weight HTML apps will be higher. | — |
| Write operations | 400000 | request | Author assumption assumption | Four mutating API calls per MAU per month (creates and updates), not counting idempotent retries. | — |
| Read operations | 5000000 | request | Author assumption assumption | Fifty reads per MAU per month for list and detail endpoints. Aligns with a 20 percent daily-active ratio if each DAU hits the API a handful of times. | — |
Adjust the assumptions
| Vendor | Monthly total at the hub usage |
|---|---|
| Cloudflare | $2.85 |
| Azure | $3.59 |
| Google Cloud | $3.90 |
| AWS | $8.47 |
Assumptions and limits
A hundred-thousand-MAU SaaS is usually an API-byte problem, not a video problem. Eighty gigabytes of internet out still sits inside the AWS and Azure monthly grants if nothing else in the account is using them, which is why the first invoice surprises people only after a marketing site or a support-export job joins the same account pool. Two hundred gigabytes stored is a rounding error on every Standard class in this snapshot; the ranking will not flip on capacity. It will flip if you start shipping build artifacts or user-uploaded video through the same bucket. Keep observability exporters and CI caches off the product grant. Re-run the object-storage and egress calculators with your own p95 payload size rather than this sixteen-kilobyte JSON assumption.