After-tax cost of debt
Get the rate your company really bears on a loan once interest is deducted from taxable income: 6.5% at a 25% tax rate is 4.875%, with 1.625 points absorbed by the tax shield. Ready for models and audit trails. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Interest rate
- 6.5
- Tax rate
- 25
- After tax cost of debt
- 4.875
- Tax savings pct
- 1.625
Interest on business debt is usually tax deductible, which means the real cost of a loan is lower than the rate printed on the term sheet. The after-tax cost of debt takes the pre-tax interest rate and your corporate tax rate and returns the effective rate your company actually bears: rate times one minus the tax rate. It is one of the two inputs of the weighted average cost of capital, and getting it right changes every valuation, hurdle rate and capital-structure decision built on top of it.
Why the tax shield lowers the cost of borrowing
When a company pays interest on a loan, that interest is normally deducted from taxable income. A firm paying 6.5 percent on its debt while facing a 25 percent corporate tax rate does not really pay 6.5 percent: every dollar of interest saves twenty-five cents of tax, so the net cost is 4.875 percent. This is the after-tax cost of debt, and it is the number that belongs in financial models.
Using the pre-tax rate instead overstates the cost of leverage, makes debt look less attractive than it is, and inflates the weighted average cost of capital, which in turn makes profitable projects look unprofitable. The adjustment is simple multiplication, but it is one of the most commonly skipped steps in quick spreadsheet work.
This capability performs it deterministically: you send the pre-tax annual interest rate in percent and the corporate tax rate in percent, and you get back the effective after-tax rate, the echo of your inputs, and the tax savings in percentage points, so the result can be stored in an audit trail alongside the model that consumed it.
How the calculation works and what it returns
The formula is after-tax cost of debt equals the pre-tax interest rate multiplied by one minus the tax rate divided by one hundred. A 6.5 percent rate with a 25 percent tax rate yields 4.875 percent. Negative interest rates are also rejected, because the tax-shield logic does not apply to them in the same way.
Results are rounded to six decimal places so that the output is stable across machines and can be compared byte for byte in tests and regression suites.
Where it fits in your workflow
The most common consumer is a WACC calculation: the after-tax cost of debt is weighted against the cost of equity to produce the discount rate for a discounted cash flow model. But it also stands alone. Finance teams use it to compare loan offers with different coupons fairly, treasury uses it when deciding between issuing debt and using cash, and controllers use it to sanity-check the effective rate embedded in a budget.
Inputs are processed and discarded: nothing about your rates or your capital structure is kept after the response is returned.
What you can do with it
Feed a WACC model
Compute the after-tax cost of debt for each tranche of borrowing before weighting it against the cost of equity in your discount rate.
Compare loan offers fairly
Two term sheets with different coupons reduce to one effective rate each once your tax rate is applied, making the cheaper option obvious.
Audit an existing model
Check whether a spreadsheet used the pre-tax rate by mistake — a common error that overstates the cost of capital and kills good projects.
FAQ
What inputs does it need?
The pre-tax annual interest rate in percent and the corporate tax rate in percent. Both are plain numbers.
Why is the after-tax rate lower than the loan rate?
Because interest is tax deductible: each percentage point of interest reduces taxable income, refunding part of the cost through lower taxes.
Does it handle a zero tax rate?
Yes. With a tax rate of 0 there is no shield, and the after-tax cost equals the pre-tax interest rate.
Is any of my data stored?
No. The inputs are processed in memory and discarded; only the computed result is returned.
Where is the after-tax cost of debt used?
Mainly in the weighted average cost of capital, where it is weighed against the cost of equity to set the discount rate of a cash flow model. It also helps compare loan offers fairly.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/fin/after-tax-cost-of-debt \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"interest_rate":6.5,"tax_rate":25}'const res = await fetch("https://api.kit.forhosting.com/fin/after-tax-cost-of-debt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"interest_rate": 6.5,
"tax_rate": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/after-tax-cost-of-debt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"interest_rate": 6.5,
"tax_rate": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/after-tax-cost-of-debt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"interest_rate":6.5,"tax_rate":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"interest_rate":6.5,"tax_rate":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/after-tax-cost-of-debt", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"interest_rate": 6.5,
"tax_rate": 25
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.after_tax_cost_of_debt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How the calculation works and what it returns
The tax rate must sit between 0 and 100 percent: a zero tax rate means no shield at all and the after-tax cost equals the pre-tax rate, while a rate above 100 is a data error and the call is rejected with an invalid_input error that names the field at fault, without charging anything. The response also includes tax_savings_pct, the number of percentage points of interest the deduction effectively refunds, which is useful when you want to show stakeholders how much of the coupon the tax authority is absorbing.
Where it fits in your workflow
Because the endpoint is a pure function with no network access and no stored state, the same call works in an automated valuation pipeline, a nightly model refresh, or a one-off check from this page. The identical code runs free in your browser here, so you can verify a number by hand and only pay the $0.002 per call when you automate it through the API.
Technical questions
What does it cost?
$0.002 per request via the API. It is also free to run in your browser on this page.
What happens if the tax rate is above 100?
The request is rejected with an invalid_input error naming the tax_rate field. Errors are not charged.