浏览全部文档

Cost of capital methodology

Beta, cost of equity, cost of debt and WACC: formulas, inputs, refusals and limits.

The cost of capital is the return a company has to earn to pay its owners and its lenders. This page explains how GET /v1/equities/{id}/cost-of-capital works it out for one listed stock: the formulas, every input and where it comes from, the defaults, what makes the endpoint refuse or warn, and what the numbers cannot do.

The inputs are market prices, government bond yields, company filings and a public table of corporate tax rates. Nothing is filled in or carried forward silently, and where a number comes from a model or a table the answer says so (the default equity risk premium can be modelled, a cost of debt can be table). Every input is in the answer with its value, its basis and the date it is as of, so each step can be redone by hand. The basis says whose number it is: ours (our own data or an official series we publish), table (a public table, named in the answer with its update and address) or caller (the value you sent). We use our own value wherever we compute one, and a public table only for what we cannot get.

What is published

All rates are in percent (4.25 means 4.25%), except beta and the R squared.

FieldMeaning
betaRaw and adjusted beta, with the benchmark, the window, the number of returns, r_squared and std_error
risk_freeThe risk-free rate, from the 10-year government bond yield or from you
equity_risk_premiumThe premium you send in erp, or by default our own published total premium of the stock's country
cost_of_equityrisk_free + beta x erp
cost_of_debtInterest expense over average total debt, or where that cannot be used the risk-free rate plus a public table's default spread; before and after tax
tax_rateThe corporate tax rate of the stock's country from a public table, or yours
weightsMarket value of equity and book value of debt, as shares of the total
waccWeighted average cost of capital
warningsThings to check before relying on the numbers

Formulas

Beta. The slope of the stock's returns on the benchmark's returns, found by least squares:

beta = covariance(stock return, benchmark return) / variance(benchmark return)

Returns are simple price changes between two closes, taken from prices adjusted for splits and dividends on both sides, so a split or a dividend is never counted as a loss. The benchmark is an ETF, fund or stock priced in the same currency as the stock. We use only dates on which both have a close. Weekly returns use the last common trading day of each ISO week and monthly returns the last of each calendar month. A week or month that has not ended yet is left out.

Defaults are weekly returns over two years. window=5y and frequency=monthly are the other choices. std_error is the standard error of the slope and r_squared is the share of the stock's variance the benchmark explains. A low r_squared means beta says little about this stock.

The adjusted beta shrinks the raw beta towards 1: adjusted = 0.67 x raw + 0.33. Both are always in the answer. The beta parameter (raw by default, or adjusted) picks the one that feeds the cost of equity. We compute the cost of equity from the beta as it is printed (4 places), so you can reproduce it.

Risk-free rate. The 10-year point of the latest government yield curve of the stock's country. The answer names the country, the curve type and the date. Curve types differ a little: the United States curve is a par yield, Germany's a Svensson spot curve, Japan's a constant-maturity yield to maturity, and Canada's and the United Kingdom's are zero-coupon. Where we have no curve (Korea today) you must send risk_free; we do not borrow another country's rate for a stock priced in a different currency, and the public tables we use hold no government bond rate by currency.

Cost of equity (CAPM).

cost of equity = risk-free rate + beta x equity risk premium

The equity risk premium is the one input you may set. Left out, it is our own published total equity risk premium of the stock's country (GET /v1/economics/equity-risk-premium: our mature-market premium plus the country premium, whether that is ours, modelled or from a public table). The answer names the country, the date it is as of and how it was built (basis: observed, modelled or table). An erp you send replaces it. Where we publish no premium for the country, or the dataset is not published yet, erp is required and without it the answer is 400 erp_required.

Cost of debt.

pre-tax cost of debt = interest expense / average total debt
average total debt  = (total debt a year before the period end + total debt at the period end) / 2
after-tax cost of debt = pre-tax cost of debt x (1 - tax rate)

Interest expense is the last four quarters (period=ttm, the default) or the latest full fiscal year (period=annual), from the company's filings. Korean and Japanese companies have annual figures only here, so they get annual with an annual_only warning. Total debt is short-term plus long-term borrowings; lease liabilities are not included. Interest expense and total debt older than 15 months are not used; with nothing newer on file the answer is refused with inputs_unavailable. If the balance a year earlier is not on file, interest is divided by the end balance alone and the answer says so (opening_debt_missing).

When interest over debt cannot be used. It is not used when interest expense is zero or negative (net-interest reporters show that) or when the result is below 0.1% or above 30%, which usually means debt changed a lot during the period. If EBIT for the same period is on file, the pre-tax cost of debt is then taken from Aswath Damodaran's public table of default spreads by interest coverage ratio, for large non-financial firms (pages.stern.nyu.edu/~adamodar, January 2026 update):

interest coverage = EBIT / interest expense
pre-tax cost of debt = risk-free rate + default spread of that coverage ratio

The answer then has basis: table, the coverage ratio, the spread, and the table's name, update and address; the table's rating letters are not shown. With no interest expense, a company with positive EBIT is in the table's best bracket and no ratio is shown; EBIT that is not positive with no interest gives no table cost. Banks and insurers are refused, so the table for financial firms is not used. Where EBIT is not on file, the company's own figure is shown with the warnings below and, for non-positive interest, there is no after-tax cost of debt. Where its own rate works, it stays the default (basis: ours).

Tax rate. The corporate tax rate of the stock's country, in percent, taken from the table of corporate marginal tax rates by country that Aswath Damodaran (NYU Stern) publishes at pages.stern.nyu.edu/~adamodar; the rates in it are PwC's. We use the column headed "Corporate Tax Rate", not the one that accounts for the global minimum tax. The answer's tax_rate names the country, the table, the update it is from (for example January 2026) and the table's address, and the rate is the same for every company of a country. It is a statutory marginal rate, the rate at which an extra unit of interest is deducted; it is not the tax a company actually paid. A rate you send in tax_rate replaces it, and the answer then says caller. A rate of zero is a rate: the debt has no tax shield. Where the table has no rate for the country (a few countries are left out because the table gives none, or two different ones) the answer has no tax_rate and no after_tax, and WACC is left out until you send tax_rate.

Weights and WACC.

equity weight = market cap / (market cap + total debt)
debt weight   = total debt / (market cap + total debt)
WACC = equity weight x cost of equity + debt weight x after-tax cost of debt

Market cap is the latest price times shares outstanding, by the same rules as GET /v1/equities/{id}/valuation: it is left out after a split since the share count, for several share classes without a count for each, and for a depositary receipt or foreign filer. Total debt is the newest balance sheet on file. Debt is at book value because market values of loans are not published. A company with no debt has WACC equal to its cost of equity, with no cost_of_debt. When the company's balance sheet for that period is on file but holds no debt line, we treat total debt as zero and say so with a no_debt_reported warning. When no balance sheet is on file at all, the answer is refused (inputs_unavailable), because we cannot tell a debt-free company from a missing filing. The same rule applies when a balance sheet is dated more than 7 days after the newest total debt on file and has no debt line: the debt was repaid, so total debt is zero and the old figure is not used.

Where each input comes from

InputSource typeDate shown
Prices of the stock and the benchmarkExchange prices, adjusted for splits and dividendsbeta.start, beta.end
Risk-free rateOfficial government bond yields, or yoursrisk_free.as_of
Equity risk premiumOur published total premium of the country (narwhal), or yoursequity_risk_premium.as_of
Default spread by interest coverageDamodaran's public table (large non-financial firms), only where interest over debt cannot be usedcost_of_debt.table_update
Interest expense, total debtCompany filings (SEC for the United States, the Korean regulator for Korea)cost_of_debt.period_end, weights.total_debt_as_of
Tax rateDamodaran's public table of corporate marginal tax rates by country (PwC), or yourstax_rate.table_update
Market capLatest price times shares outstanding from filingsweights.market_cap_as_of

Benchmarks default to the broad-market ETF of the stock's country. You can send any listing id priced in the same currency.

When we refuse, and when we warn

An answer is refused when a figure cannot be worked out correctly. The error names the missing input.

CodeStatusWhen
erp_required400erp was not sent and we publish no premium for the country (or the dataset is not published yet)
plan_upgrade_required403Free plan
not_covered404No clean company match, a market we do not value, or another share class than the main common one
not_applicable422Banks and insurers: interest is an operating cost for them, so WACC is the wrong tool
insufficient_history422Fewer than 80% of the returns a full window holds (for example 84 of 104 weekly returns over two years)
risk_free_unavailable422No yield curve for the country and no risk_free sent
currency_mismatch422The benchmark or the filings are in a different currency than the stock's price
inputs_unavailable422Market cap, total debt or interest expense is not available; the detail lists which
area_unavailable503The filings side is unavailable, or our stored premium for the country is outside the range we accept (a fault on our side, logged; send erp meanwhile)

A number that is correct but needs care is shown with an entry in warnings:

CodeMeaning
annual_onlyInterest is for the latest fiscal year, not the last 12 months
opening_debt_missingDebt a year earlier is not on file
cost_of_debt_from_tableInterest over debt could not be used, so the pre-tax cost of debt is the risk-free rate plus the table's default spread for the interest coverage ratio
interest_not_positiveInterest expense is zero or negative and EBIT is not on file or not above zero, so no table cost exists; the pre-tax cost of debt is shown but is not a market rate, so there is no after_tax and no wacc
interest_zero_with_debtInterest expense is exactly zero while total debt is above zero (interest may be capitalised or reported elsewhere); the table cost puts the company in the lowest-spread bracket
tax_shield_on_lossEBIT for the period is zero or negative but the after-tax cost of debt uses the country's full corporate rate from the table; send tax_rate=0 to take no shield
stale_erpOur default equity risk premium is more than 45 days old
cost_of_debt_out_of_rangeThe pre-tax cost of debt is under 0.1% or over 30%, often because debt changed a lot during the period, and EBIT is not on file to use the table
tax_rate_unavailableThe country tax table has no rate for the stock's country; send tax_rate
wacc_needs_tax_rateWACC is left out because the after-tax cost of debt is unknown
wacc_withheldWACC is left out because interest expense is not positive, or because the cost of equity is not above zero
beta_negativeThe beta used is below zero: the stock moved against its benchmark over the window
cost_of_equity_not_positiveThe cost of equity is zero or negative, which is not a required return; WACC is left out
stale_pricesThe newest return ends more than 14 days (weekly) or 45 days (monthly) before today, so the stock or the benchmark has no newer prices
interest_without_debtInterest is reported but total debt is zero; the interest is not used
no_debt_reportedThe balance sheet is on file but has no debt line; total debt is taken as zero and WACC equals the cost of equity

Coverage

United States stocks work in full. Korean stocks work with annual filings and a risk-free rate you send, while Korea has no yield curve here. Japanese stocks are not served until Japanese prices and valuation exist. Other markets are not covered.

Limits

  • Beta is measured from past prices. It is a statistic of the last window, not a forecast.
  • The benchmark is an ETF or fund, not an index. It can differ from the index by a fraction of a percent.
  • The equity risk premium is the input that matters most. Our default is a published country figure, not a view on one stock; send erp to use your own.
  • Debt is at book value, leases are excluded, and the cost of debt is an average over the period, not today's borrowing rate.
  • The table of default spreads is the one for large non-financial firms and is used for every non-financial company, whatever its size. Its spreads are US-market numbers in dollar terms, added to whatever risk-free rate applies; for a Korean stock that is the risk-free rate you send, which may be in won.
  • The tax rate is the country's statutory rate from a table that is updated about once a year; the answer names the update it uses. A company that pays less tax than the statutory rate, or has losses, gets the same rate.
  • Filings are restated and filed late. Figures are the latest filed, not what was known on a past date.