Taxable equivalent yield calculator
At a 32% marginal rate, a 3% tax-exempt yield matches a taxable yield of about 4.4118%. Convert in either direction to compare a municipal bond with a taxable bond on equal terms. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Tax-free yield (%)
- 3
- Marginal tax rate (%)
- 32
- Calculation direction
- to_taxable
- Taxable equivalent yield (%)
- 4.4118
- Yield difference (percentage points)
- 1.4118
Convert tax-free investment yield to the taxable yield that matches after-tax income, or the reverse, with your marginal rate only.
Putting tax-exempt and taxable yields side by side
A municipal bond or another tax-exempt investment often quotes a lower yield than a corporate bond of similar length, yet it may still leave you with more after tax, especially in high brackets. Taxable equivalent yield puts both on the same footing. Starting from a tax-exempt yield, divide it by one minus your marginal rate; starting from a taxable yield, multiply it by one minus that rate to get its tax-exempt equivalent. With a 3% tax-exempt yield and a 32% marginal rate, the taxable equivalent is about 4.4118%, a spread of 1.4118 points.
Getting the comparison right
Enter your marginal rate as a percent, such as 32, and provide exactly one of the two yields: the tool converts in whichever direction you start from. Rates of 100% or more are rejected, and so are negative yields. Results are rounded once, to four decimals by default or anywhere from 0 to 6, so a rounded figure is never fed back into the formula. Because the formula adjusts only for tax, compare investments of similar length.
When TEY decisions matter
Investors use taxable equivalent yield when a tax-exempt municipal bond quote looks lower than a corporate bond of similar duration: after tax, the muni may still win for high brackets. Advisors and RIAs compare ladders across accounts with different effective rates. Treasury and cash desks sanity-check relative value between tax-free money-market funds and taxable T-bills.
Educators and journalists illustrate bracket effects without proprietary pricing terminals. Because the formula is deterministic and tier A, you can embed it in CMS landings, n8n flows, or internal calculators without calling a market data vendor.
What you can do with it
Muni vs corporate
Compare a municipal bond yield to a taxable bond at your bracket.
FAQ
What is the formula for taxable equivalent yield?
Divide the tax-exempt yield by one minus your marginal rate. The result is the pre-tax yield a taxable investment must pay to leave you with the same income after tax.
Can I convert a taxable yield into its tax-exempt equivalent?
Yes. Enter the taxable yield instead of the tax-exempt one, and it is multiplied by one minus your marginal rate. Enter only one of the two yields; giving both, or neither, is rejected.
Which tax rate should I enter?
Your marginal rate, written as a percent: 32 for a 32% bracket, not a decimal. It must be below 100%, because at 100% or more the division has no meaningful answer.
What does the spread show?
The gap in percentage points between the taxable equivalent and the tax-exempt yield. With 3% tax-exempt at a 32% rate, the spread is 1.4118 points: the extra pre-tax yield a taxable bond needs just to break even.
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/finance/taxable-equivalent-yield \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"tax_rate":32,"tax_free":3}'const res = await fetch("https://api.kit.forhosting.com/finance/taxable-equivalent-yield", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"tax_rate": 32,
"tax_free": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/taxable-equivalent-yield",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"tax_rate": 32,
"tax_free": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/taxable-equivalent-yield", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"tax_rate":32,"tax_free":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"tax_rate":32,"tax_free":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/taxable-equivalent-yield", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"tax_rate": 32,
"tax_free": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.taxable_equivalent_yield",
"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 it works
This free browser tool converts a tax-free investment yield into the taxable yield you would need to match it after tax, or the reverse, using only your marginal tax rate. The core identity is taxable_equivalent = tax_free / (1 − tax_rate/100) when you start from a municipal or other tax-exempt instrument, and tax_free_equivalent = taxable × (1 − tax_rate/100) when you start from a taxable bond or fund. Exactly one of tax_free or taxable must be present with tax_rate; optional decimals (default 4) apply half-up once on already computed IEEE values, never cascading through intermediate rounded fields. Non-finite outputs raise invalid_input so automation never silently stores infinity or NaN.
Inputs, rounding and limits
Decimals may be 0..6. Tax_rate at 100 or above is rejected because the denominator would be zero or negative. Provide tax_rate as a percent in [0, 100) — for example 32 means a 32 percent marginal bracket — and exactly one of tax_free or taxable as a non-negative yield percent. If both yield fields appear or both are missing, the call fails with invalid_input; the params schema expresses this with $requireOneOf and experience.json mirrors it with x-kit-rules exactly_n_present. Half-up means each published figure is rounded once from the raw formula result; never re-inject a rounded taxable_equivalent into another formula step. Negative yields and non-numeric payloads are also rejected. These guards keep TEY comparisons honest when you stack municipal, corporate, and treasury quotes in the same model.
Widget, API and SEO landings
Landings exist in eight languages with translated keywords so organic traffic lands on native copy. Failed jobs are not charged. Output includes mode (to_taxable or to_tax_free), the inputs echoed, the equivalent yield, and spread_pp so you can show both the absolute equivalent and the percentage-point gap in a single response payload.
Integration use cases
Automation
Same JSON contract as the free widget in pipelines.
Teaching
Show TEY = tax_free / (1 − t) with deterministic goldens.
Edge cases
Exactly one of tax_free or taxable; typed invalid_input otherwise.
Technical questions
Is it free?
Yes in the browser. API at $0.002.
Tax tables embedded?
No. You supply the marginal rate.
Deterministic?
Yes. Same input, same output.
Invalid input?
invalid_input if tax_rate missing or both/neither yields.
Languages?
Eight landing languages.
Offline?
On-device widget.