Skip to main content
CTO budget model · 2-year projection, S-curve growth

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.

Baseline prj-finmoon-ai-beta, Aug 2026 audit Growth 100 → 10K (M6) → ~1.07M (M24) base case; 279K–1.45M (M24) scenario band Staging right-sized + quarterly load-test bursts GKE separate cluster per environment
Today
100 users
Month 0
$882/mo
$8.82/user
Early traction
10,000 users
Month 6
$3,210/mo
$0.32/user
Scale-up
100,000 users
Month 9.1
$21,141/mo
$0.21/user
Year 2 target
1,065,890 users
Month 24
$193,260/mo
$0.18/user
2-year cumulative spend, all environments: ~$2.24M. The curve is back-loaded — roughly 70% of the two-year total lands in the final 8 months, once the S-curve clears the 400K-user mark and Cloud Run's request volume (the single largest line item) scales past it. See the Cloud Run scaling caveat below before treating the Year-2 monthly figure as precise.

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.

Total · month
—
Per user · month
—
Fixed
—
Variable
—
Engineering
—
Line itemMonthly costPer 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).

Downside · ~279K by M24 Base (S-curve) · ~1.07M by M24 Upside (Bass-style) · ~1.45M by M24
Projected user growth, month 0 to 24 100 1K 10K 100K 1.00M M0 M3 M6 M9 M12 M15 M18 M21 M24 100 usersM010K usersM6100K usersM9.11.07M usersM24

Total monthly GCP spend

All environments combined. Dashed lines mark infrastructure-tier upgrades. Log scale.

Projected total monthly spend, month 0 to 24 $1K $10K $100K M0 M3 M6 M9 M12 M15 M18 M21 M24 Tier BTier CTier D $882/mo$3.2K/mo$21.1K/mo$193.3K/mo
Reading the scenario band. Downside assumes a delayed, weaker network effect (no strong referral loop) and caps out around 279K users by M24, crossing 100K near month 12.9. Upside assumes a Bass-diffusion-style faster adoption curve (imitators kick in earlier) and reaches ~1.45M by M24, crossing 100K near month 7.9 — about 14 months earlier than downside. The cost tables, line items, and tier-upgrade dates below still reflect the base case only; they haven't been re-run against downside/upside, since infra cost doesn't scale linearly with users (self-hosted floors, tier steps, and Cloud Run concurrency all change the multiplier). Treat the band as a planning range for the growth assumption, not a range on the dollar figures.

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.

Infrastructure cost per user per month, month 0 to 24 $0.10 $1 $10 M0 M3 M6 M9 M12 M15 M18 M21 M24 $8.82/user$0.32/user$0.21/user$0.18/user

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).

BucketDefinitionWhat'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.

Cost composition by category at each growth milestone FixedVariableEngineering (dev+stg) $882100 usersMonth 0$3.2K10K usersMonth 6$21.1K100K usersMonth 9.1$193.3K1.07M usersMonth 24

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
Cloud Run scaling caveat — read before using the Year-2 number in a board deck. The model scales Cloud Run's CPU/memory/request usage linearly with user count, anchored to today's measured 30-day usage. In practice, Cloud Run bills per-instance, and one instance serves many concurrent users — so at high traffic, request concurrency typically improves and cost per user tends to fall faster than linear scaling predicts. Treat the 1,065,890-user Cloud Run figure ($149,518/mo) as a conservative upper bound, not a point estimate — the realistic number is likely 30–50% lower once concurrency and connection pooling are tuned for scale. This is exactly what the staging load-test environment below exists to calibrate.

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.

ServiceSizing basis100 users10K users100K users1,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
Self-hosting has a real fixed floor. Even at 100 users, this stack costs $347/mo — entirely inside the Fixed bucket above — because GKE Autopilot bills continuously for requested resources, not per-query. Below roughly the 10K-user mark, that floor is larger than what a managed alternative (Elastic Cloud, Qdrant Cloud, LangWatch Cloud) would likely charge for the same workload. The case for self-hosting strengthens as scale increases and the floor gets amortized — worth an explicit build-vs-buy check at the 10K-user mark rather than assuming self-hosting wins from day one.
Qdrant at 1,065,890 users needs quantization, not just more RAM. Unquantized, 500M vectors at 768 dimensions would need ~2.1 TB of RAM (Qdrant's own sizing formula: vectors × dims × 4 bytes × 1.5). The 10,500 GB / 704 GiB figures above already assume scalar quantization (~4× reduction) is in place by the 100K-user tier — treat this as a required engineering task on the roadmap, not an optional optimization.

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.

ItemDetailM0M6M9.1M24
Dev environmentFlat — Cloud Run + small Cloud SQL, no dedicated LB $42$42$42$42
Staging Cloud SQLFixed 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 networkingNAT 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
Engineering cost grows with production because staging's baseline traffic and its load-test bursts are both pegged to a percentage of prod's current tier — by month 24 that's $27,935/mo, roughly 14% of total spend. If board-level cost control matters more than testing fidelity at extreme scale, the fixed-small-staging alternative (flat cost throughout, functional QA only) is the lever to pull.

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
Model built from the Aug 2026 GCP cost audit + Cloud Billing Catalog API + Cloud Monitoring 30-day usage + published sizing guidance for Elasticsearch, Qdrant, and LangWatch · figures are a planning model, not a forecast or an invoice

Ask the model

Grounded in Base — every answer cites its inputs, never invents a number.

Try one of these