FinMoonAI's GCP spend from 100 users to 1 million
A 24-month infrastructure budget split into fixed, variable, and engineering costs — built on today's measured beta usage, live GCP pricing, and a self-hosted ELK + Qdrant + LangWatch stack on GKE.
Cost calculator — any user count
Every fixed, variable, and engineering line item below, recalculated live for the user count you enter — independent of the growth timeline. Scaling items are a smooth power-law fit through this model's four known milestones (100 · 10,000 · 100,000 · 1,065,890 users); flat items (fixed floors, dev, staging Cloud SQL/networking) stay constant. Real GCP costs step in discrete tier jumps rather than continuously, so treat this as a planning approximation, not a quote.
| Line item | Monthly cost | Per user · month |
|---|
Growth & spend over time
Projected user growth
Three growth scenarios, log scale. Base case: logistic S-curve fit to 100 (M0) → 10K (M6) → ~1M (M24).
Total monthly GCP spend
All environments combined. Dashed lines mark infrastructure-tier upgrades. Log scale.
Infrastructure cost per user, per month
Fixed costs and the self-hosted stack's floor get amortized across a growing base — the clearest signal of whether the architecture is scaling efficiently. Log scale.
Fixed, variable & engineering — the framework
Three buckets, three different budget conversations: fixed costs are what you owe regardless of traffic, variable costs are what growth actually taxes, and engineering costs are the always-on price of being able to build and test safely before either one hits production. The self-hosted ELK/Qdrant/LangWatch stack isn't a fourth bucket — it splits across the first two, because it has both a flat floor (the GKE cluster fee and minimum pod footprint, owed whether or not anyone queries it) and a genuinely usage-driven part (pod and storage scaling that tracks log/vector/trace volume, not request traffic).
| Bucket | Definition | What's in it (production) |
|---|---|---|
| Fixed | Provisioned capacity that doesn't move with request volume day-to-day — it steps up in discrete jumps when you deliberately re-tier it, not automatically. | Cloud SQL instance + storage, self-hosted/Memorystore Redis, Load Balancer forwarding rules, Cloud NAT, Artifact Registry, Secret Manager, GKE cluster fee + minimum ELK/Qdrant/LangWatch footprint ($347/mo) |
| Variable | Scales automatically with usage — the meter that actually moves when a growth number moves. | Cloud Run (request-based billing), network egress / data processing, growing GCS storage (user documents), GKE pod/storage scaling above the minimum footprint |
| Engineering | The always-on cost of dev + staging — not "pre-production," a permanent line item for as long as the product ships changes. | Dev environment, staging (right-sized + quarterly load-test bursts), shared lower-environment GKE cluster |
Composition at each milestone
Same three buckets, stacked, at each of the four growth stages — note how the mix shifts as scale increases.
Line-item detail by milestone
Production environment only (excludes dev + staging, itemized separately below).
| Line item | 100 users M0 |
10,000 users M6 |
100,000 users M9.1 |
1,065,890 users M24 |
|---|---|---|---|---|
| Fixed | ||||
Cloud SQL db-g1-small zonal, 10GB SSD |
$29 | $235 | $823 | $4,996 |
Redis / cache self-hosted → Memorystore HA as scale demands it |
$21 | $67 | $423 | $1,241 |
LB + NAT (fixed portion) forwarding rules, gateway uptime, IP |
$30 | $30 | $30 | $30 |
Artifact Registry + Secret Manager |
$12.30 | $12.30 | $12.30 | $12.30 |
GKE cluster fee + baseline footprint ELK + Qdrant + LangWatch minimum viable sizing, flat |
$347 | $347 | $347 | $347 |
| Fixed subtotal | $439 | $690 | $1,636 | $6,626 |
| Variable | ||||
Cloud Run scales with CPU/mem/request volume, net of free tier |
$11 | $1,454 | $14,127 | $149,518 |
Egress / data processing LB + NAT variable portion |
$0 | $20 | $196 | $2,091 |
GCS (growing user/document storage) |
$0.01 | $1.12 | $11.23 | $120 |
GKE scaling above baseline ELK/Qdrant/LangWatch pod + storage growth, driven by data volume |
$0.00 | $353 | $2,150 | $6,970 |
| Variable subtotal | $11 | $1,827 | $16,485 | $158,699 |
| Production total | $451 | $2,517 | $18,121 | $165,325 |
Self-hosted stack: ELK, Qdrant, LangWatch
None of these are running today — sizing is estimated from published capacity-planning guidance, not a live deployment. Validate against real data volume once staging's load tests are running.
| Service | Sizing basis | 100 users | 10K users | 100K users | 1,065,890 users |
|---|---|---|---|---|---|
Elasticsearch + Kibana log/observability store |
Memory:hot-data ratio 1:30; 14-day hot retention, 1 replica | 2 vCPU / 4 GiB 20 GB |
4 vCPU / 8 GiB 150 GB |
16 vCPU / 48 GiB 1.2 TB |
48 vCPU / 256 GiB 7 TB |
Qdrant vector search (RAG) |
mem = vectors × dims × 4B × 1.5; ~500 vectors/user, 768-dim; scalar quantization applied at 100K+ | 1 vCPU / 2 GiB 5 GB |
4 vCPU / 16 GiB 30 GB |
16 vCPU / 96 GiB 400 GB |
32 vCPU / 384 GiB 2 TB |
LangWatch LLM trace/eval observability |
Vendor-published small-cluster baseline (2.6 vCPU/6.7 GiB) scaled with trace volume; ClickHouse backend at 100K+ | 2.6 vCPU / 6.7 GiB 20 GB |
4 vCPU / 12 GiB 50 GB |
10 vCPU / 32 GiB 300 GB |
24 vCPU / 64 GiB 1.5 TB |
| GKE Autopilot cost, total = Fixed floor ($347, incl. $73/mo cluster fee) + Variable scaling |
$347 | $699 | $2,497 | $7,317 |
Engineering: dev + staging
Chosen strategy: staging runs small day-to-day and bursts to production scale only during scheduled load-test windows; dev and staging share one lower-environment GKE cluster, kept separate from the production cluster.
| Item | Detail | M0 | M6 | M9.1 | M24 |
|---|---|---|---|---|---|
| Dev environment | Flat — Cloud Run + small Cloud SQL, no dedicated LB | $42 | $42 | $42 | $42 |
| Staging Cloud SQL | Fixed small tier — QA doesn't need prod-scale data | $29 | $29 | $29 | $29 |
| Staging Cloud Run | ~15% of prod's gross usage — steady QA/CI/smoke-test traffic | $2 | $210 | $2,103 | $22,411 |
| Staging networking | NAT only, no dedicated domain/LB | $10 | $10 | $10 | $10 |
| Load-test bursts | ~3 days/quarter at ~100% of prod scale, amortized monthly | $1 | $54 | $490 | $5,095 |
| Lower-env GKE (dev+staging, shared) | Flat — small ELK+Qdrant+LangWatch install for integration testing | $347 | $347 | $347 | $347 |
| Engineering total | $432 | $692 | $3,021 | $27,935 | |
Methodology & key assumptions
Growth curve
Base case: logistic S-curve solved to pass through (month 0, 100 users), (month 6, 10,000 users), and approach ~1.07M by month 24 — slow start, steep middle, tapering as it nears the ceiling. Crosses 100K around month 9.1. The downside/upside band uses the same logistic form re-solved for a slower/weaker adoption path (ceiling ~279K, 100K crossing ~M12.9) and a faster Bass-diffusion-style path (ceiling ~1.45M, 100K crossing ~M7.9), holding month-0 at 100 users for all three. Re-fit against real signups quarterly; a growth model is a planning input, not a forecast.
Cloud Run & egress scaling
Scaled linearly from today's actual measured 30-day CPU/memory/request usage (not assumed). As flagged above, this likely overestimates cost at high scale because it doesn't credit per-instance concurrency gains.
Cloud SQL & Redis tiers
Steps through 4 discrete tiers at the milestone thresholds (db-g1-small → 2vCPU HA → 4vCPU HA+replica → 16vCPU HA+2 replicas; self-hosted Redis → Memorystore Standard HA). Real capacity planning should validate each jump against staging load-test results before committing spend.
Self-hosted GKE sizing
ELK sized off Elastic's published memory:data ratios; Qdrant off Qdrant's own RAM formula; LangWatch off its published small-cluster baseline, scaled by assumed trace volume. All three are estimates pending real load-test data — the single biggest source of uncertainty in this model after Cloud Run scaling.
Pricing source
Live SKUs from the Cloud Billing Catalog API (asia-south1 / asia-southeast3), same source as the current-state cost audit. On-demand list price — no committed-use or sustained-use discounts applied. Those become a real lever once usage is predictable, likely around the 100K-user tier.
What's excluded
- Committed-use / sustained-use discounts
- Support plan fees, taxes
- LLM API spend (Gemini/Sarvam) — a separate, usage-driven cost outside GCP infra
- Cloud Run min-instances beyond a modest floor added at the 100K+ tiers