JD.com, Inc.
JDdata completeness 100%12 fiscal years on fileJD.com, Inc. earns about 17% on invested capital, comfortably above its ~9% cost of capital, and has bought back 4% of its shares over 5 years — the marks of a durable business run for its owners. The estimate methods put fair value between $11.4 and $40.89 a share.Whether it’s worth owning at today’s price is the last question — and yours to answer, below.
| Figure | FY 2021 | FY 2022 | FY 2023 | FY 2024 | FY 2025 |
|---|---|---|---|---|---|
| Revenue | $149.3B1 | $151.7B2 | $152.8B3 | $158.8B4 | $187.2B5 |
| Net income | −$701M6 | $1.41B7 | $3.28B8 | $6.12B9 | $3.31B10 |
| Operating cash flow | $6.64B11 | $8.38B12 | $8.38B13 | $7.96B14 | $2.72B15 |
| Capital expenditure | $873M16 | $797M17 | $567M18 | $733M19 | $1.12B20 |
| Free cash flow (derived) | $5.77B11 | $7.59B12 | $7.82B13 | $7.23B14 | $1.6B15 |
| Total debt | $685M21 | $1.76B22 | $709M23 | $1.04B24 | $1.15B25 |
| Cash & equivalents | $11.1B26 | $11.4B27 | $10.1B28 | $14.8B29 | $19.7B30 |
| Diluted shares | 3.11B | 3.18B | 3.17B | 3.08B | 2.98B |
Superscripts are receipts. Each links to the SEC filing the number came from (full list at the bottom).
10 shares is a claim on $108.06 of net worth that earned you $11.11 and generated $5.37 of cash last year, against $3.85 of debt.
It earned about 17% on invested capital against a ~9% cost of capital — comfortably above the cost of funding, a moderate advantage.
seeing a moat in the numbers →Share count is down 4% over 5 years — management has been buying back stock, quietly handing owners a bigger slice. Total debt has risen 67% over the same window.
reading capital allocation →Signals, not verdicts — read from the filings above. Numbers don’t prove a moat; they show its footprint. You decide.
The 3 estimate methods that apply put fair value between $11.4 and $40.89 a share. They rest on different assumptions, so where they diverge is the story; the Graham Number is a stricter floor, not a target.
assumptions (10)
- riskFreeRate4.7%
- equityRiskPremium5.0%
- beta100.0%
- equityWeight85.0%
- costOfDebtSpread1.5%
- taxRate21.0%
- terminalGrowth2.5%
- projectionYears10
- fcfGrowth0.0%
- fcfBase$7.23B
assumptions (10)
- riskFreeRate4.7%
- equityRiskPremium5.0%
- beta100.0%
- equityWeight85.0%
- costOfDebtSpread1.5%
- taxRate21.0%
- terminalGrowth2.5%
- projectionYears5
- fcfGrowth0.0%
- fcfBase$7.23B
assumptions (8)
- riskFreeRate4.7%
- equityRiskPremium5.0%
- beta100.0%
- equityWeight85.0%
- costOfDebtSpread1.5%
- taxRate21.0%
- normalizedEarnings$3.28B
- growthAssumed0.0%
assumptions (1)
- grahamMultiplier2250.0%
Different models answer different questions — which to trust when →
| Bear | 0.0% | $40.89 |
| Base | 0.0% | $40.89 |
| Bull | 5.0% | $49.28 |
Bear/base/bull growth = 0% / filed history / history + 5pp. Type a price to see the return each case implies.
Default growth 0.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.
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (RevenueFromContractWithCustomerExcludingAssessedTax)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (RevenueFromContractWithCustomerExcludingAssessedTax)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (RevenueFromContractWithCustomerExcludingAssessedTax)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (RevenueFromContractWithCustomerExcludingAssessedTax)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (RevenueFromContractWithCustomerExcludingAssessedTax)
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (ProfitLoss)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (ProfitLoss)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (ProfitLoss)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (ProfitLoss)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (ProfitLoss)
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (NetCashProvidedByUsedInOperatingActivities)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (NetCashProvidedByUsedInOperatingActivities)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (NetCashProvidedByUsedInOperatingActivities)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (NetCashProvidedByUsedInOperatingActivities)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (NetCashProvidedByUsedInOperatingActivities)
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (PaymentsToAcquirePropertyPlantAndEquipment)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (PaymentsToAcquirePropertyPlantAndEquipment)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (PaymentsToAcquirePropertyPlantAndEquipment)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (PaymentsToAcquireProductiveAssets)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (PaymentsToAcquireProductiveAssets)
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (ShortTermBorrowings)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (ShortTermBorrowings)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (ShortTermBorrowings)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (ShortTermBorrowings)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (ShortTermBorrowings)
- 20-F · period ending 2021-12-31 · accession 0001193125-22-125563 (CashAndCashEquivalentsAtCarryingValue)
- 20-F · period ending 2022-12-31 · accession 0001193125-23-107486 (CashAndCashEquivalentsAtCarryingValue)
- 20-F · period ending 2023-12-31 · accession 0001193125-24-099869 (CashAndCashEquivalentsAtCarryingValue)
- 20-F · period ending 2024-12-31 · accession 0001193125-25-083473 (CashAndCashEquivalentsAtCarryingValue)
- 20-F · period ending 2025-12-31 · accession 0001193125-26-157870 (CashAndCashEquivalentsAtCarryingValue)