Sunlands Technology Group

STGdata completeness 100%8 fiscal years on file
The thesis, from the filings

Sunlands Technology Group earns about 109% on equity, far above its ~9% cost of capital, with a roughly flat share count — a real edge showing up in the numbers. The estimate methods put fair value between $67.45 and $80.43 a share.Whether it’s worth owning at today’s price is the last question — and yours to answer, below.

i. The business — what you’d actually own
FigureFY 2021FY 2022FY 2023FY 2024FY 2025
Revenue$393.5M1$336.8M2$304.2M3$272.7M4$288.8M5
Net income$34.4M6$93.4M7$90.3M8$46.9M9$52.3M10
Operating cash flow−$58.6M11$1.33M12$19.8M13$26.8M14$21M15
Capital expenditure$2.15M16$470,00017$812,00018$35,00019$30,00020
Free cash flow (derived)−$60.7M11$859,00012$19M13$26.8M14$21M15
Total debt$34.6M21$26.4M22$20.2M23$5.69M24$025
Cash & equivalents$98.3M26$109.3M27$107.6M28$69.5M29$82.3M30
Diluted shares6.7M6.8M6.9M6.8M6.7M

Superscripts are receipts. Each links to the SEC filing the number came from (full list at the bottom).

ii. Your slice — ownership made literal
If you owned
shares
Net assets behind them
$200.72
your share of equity
Profit it earned you last year
$77.61
Free cash flow it threw off
$31.12
Debt you’d be carrying
$0

10 shares is a claim on $200.72 of net worth that earned you $77.61 and generated $31.12 of cash last year, against $0 of debt.

iii. Is this a good business?
Moat signal · return on equity
109% avg · 5y
FY21 FY22 FY23 231%FY24 57%FY25 39%

It earned about 109% on equity, year after year, against a ~9% cost of capital — the footprint of real pricing power. Competition usually drags returns like this back down; here it hasn't.

seeing a moat in the numbers →
Management signal · capital allocation
+0% shares · 5y

Share count is roughly flat over 5 years — little dilution, little buyback. Total debt has fallen 100% — deleveraging.

reading capital allocation →

Signals, not verdicts — read from the filings above. Numbers don’t prove a moat; they show its footprint. You decide.

iv. What it’s worth — engine v0.1.0

The 3 estimate methods that apply put fair value between $67.45 and $80.43 a share. They rest on different assumptions, so where they diverge is the story; the Graham Number is a stricter floor, not a target.

DCF · Growth Exit 10Y
$72.13
assumptions (10)
  • riskFreeRate4.7%
  • equityRiskPremium5.0%
  • beta100.0%
  • equityWeight85.0%
  • costOfDebtSpread1.5%
  • taxRate21.0%
  • terminalGrowth2.5%
  • projectionYears10
  • fcfGrowth5.0%
  • fcfBase$21M
DCF · Growth Exit 5Y
$67.45
assumptions (10)
  • riskFreeRate4.7%
  • equityRiskPremium5.0%
  • beta100.0%
  • equityWeight85.0%
  • costOfDebtSpread1.5%
  • taxRate21.0%
  • terminalGrowth2.5%
  • projectionYears5
  • fcfGrowth5.0%
  • fcfBase$21M
Earnings Power Value
$80.43
assumptions (8)
  • riskFreeRate4.7%
  • equityRiskPremium5.0%
  • beta100.0%
  • equityWeight85.0%
  • costOfDebtSpread1.5%
  • taxRate21.0%
  • normalizedEarnings$52.3M
  • growthAssumed0.0%
Graham Number
$59.2
assumptions (1)
  • grahamMultiplier2250.0%

Different models answer different questions — which to trust when →

v. The price question — last, on purpose
Is today’s price fair?
See live price ↗
Type a price. The ledger answers.
Or set your own belief
FCF growth, next 5 years5.0%
Discount rate (WACC)8.93%
Terminal growth2.5%
At your growth, a share is worth $67.45
The three cases
Bear0.0%$56.69
Base5.0%$67.45
Bull10.0%$80.33

Bear/base/bull growth = 0% / filed history / history + 5pp. Type a price to see the return each case implies.

Default growth 5.0%= this company’s own filed history (median-to-median FCF CAGR, clamped 0–20%). Your adjustments are recorded anonymously. They become the “what do owners actually believe” dataset.

Sources — the receipts
  1. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (RevenueFromContractWithCustomerExcludingAssessedTax)
  2. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (RevenueFromContractWithCustomerExcludingAssessedTax)
  3. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (RevenueFromContractWithCustomerExcludingAssessedTax)
  4. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (RevenueFromContractWithCustomerExcludingAssessedTax)
  5. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (RevenueFromContractWithCustomerExcludingAssessedTax)
  6. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (NetIncomeLoss)
  7. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (NetIncomeLoss)
  8. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (NetIncomeLoss)
  9. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (NetIncomeLoss)
  10. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (NetIncomeLoss)
  11. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (NetCashProvidedByUsedInOperatingActivities)
  12. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (NetCashProvidedByUsedInOperatingActivities)
  13. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (NetCashProvidedByUsedInOperatingActivities)
  14. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (NetCashProvidedByUsedInOperatingActivities)
  15. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (NetCashProvidedByUsedInOperatingActivities)
  16. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (PaymentsToAcquirePropertyPlantAndEquipment)
  17. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (PaymentsToAcquirePropertyPlantAndEquipment)
  18. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (PaymentsToAcquirePropertyPlantAndEquipment)
  19. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (PaymentsToAcquirePropertyPlantAndEquipment)
  20. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (PaymentsToAcquirePropertyPlantAndEquipment)
  21. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (LongTermDebtNoncurrent)
  22. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (LongTermDebtNoncurrent)
  23. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (LongTermDebtNoncurrent)
  24. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (LongTermDebtNoncurrent)
  25. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (LongTermDebtNoncurrent)
  26. 20-F · period ending 2021-12-31 · accession 0001564590-22-016148 (CashAndCashEquivalentsAtCarryingValue)
  27. 20-F · period ending 2022-12-31 · accession 0000950170-23-014218 (CashAndCashEquivalentsAtCarryingValue)
  28. 20-F · period ending 2023-12-31 · accession 0000950170-24-047906 (CashAndCashEquivalentsAtCarryingValue)
  29. 20-F · period ending 2024-12-31 · accession 0000950170-25-058319 (CashAndCashEquivalentsAtCarryingValue)
  30. 20-F · period ending 2025-12-31 · accession 0001193125-26-175368 (CashAndCashEquivalentsAtCarryingValue)