Reverse sales tax calculator
A receipt total of 108 at an 8% rate splits into 100 before tax and 8 of tax. Enter any tax-inclusive total and the rate in percent to back out the net amount for your books, a marketplace sale or homework. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Tax-inclusive total amount
- 108
- Interest rate
- 8
- Pre tax
- 100
- Tax
- 8
- Precision
- 10
This reverse sales tax calculator takes a tax-inclusive total and a sales tax rate in percent points and returns the pre-tax price plus the tax portion embedded in that total. The identities are fully deterministic: pre-tax equals total divided by one plus rate over one hundred, and tax equals total minus pre-tax. Common checks include one hundred eight at eight percent yielding a pre-tax of one hundred and tax of eight, and one hundred fifteen at fifteen percent yielding the same pre-tax of one hundred with tax of fifteen. Enter rate as percent points, not as a decimal fraction — eight means eight percent, not zero point zero eight. The engine uses only finite arithmetic with no network calls, no sampling, and no date-dependent shortcuts.
What reverse sales tax means and what you get
Reverse sales tax (also called tax-inclusive or gross-to-net breakdown) answers a practical question: if the customer paid a single total that already includes sales tax, how much of that amount was the pre-tax price and how much was tax? Forward tax multiplies a net price by one plus the rate; reverse tax divides the gross total by that same factor.
Algebraically, when the tax rate is r percent points, the multiplier is one plus r over one hundred, the pre-tax price is total over that multiplier, and the tax portion is total minus the pre-tax price — equivalently total times r over one hundred, divided by one plus r over one hundred. Zero rate is allowed and simply returns pre-tax equal to total with tax zero.
Where reverse tax splits fit in commerce, study, and software
Merchants and bookkeepers meet reverse sales tax when a receipt shows only a tax-inclusive total and they need the net amount for ledgers, when a marketplace states a final checkout figure and the seller must report pre-tax revenue, or when a student problem asks to back out tax from a sticker price that already includes it. Teachers can pre-generate answer keys for modest totals and rates without trusting opaque calculator apps that silently switch between percent and decimal forms.
Product and education tools use the split when a learner types a tax-inclusive total and a percent rate and the UI must show both components next to a simple invoice sketch. Pair it with rule-of-72, cost-per-use, or other life helpers when you are building a small lab of free, deterministic personal-finance and commerce tools.
What you can do with it
Receipt and invoice net amounts
Back out pre-tax price and tax from a tax-inclusive receipt total when the document only shows the final paid amount and a stated rate.
Classroom reverse-tax drills
Produce stable homework keys for reverse percentage problems without confusing percent points with decimal fractions.
FAQ
What does the reverse sales tax calculator cost?
It is free in your browser on this page.
Is rate a percent or a decimal fraction?
Percent points. Enter 8 for 8% tax, not 0.08.
What happens if the tax rate is negative?
Negative tax rates are not valid for this reverse sales tax model.
Why can't I just subtract the tax rate from the total?
Because the tax was calculated on the pre-tax price, not on the total. Taking the percentage off the total removes too much; dividing the total by one plus the rate gives the exact pre-tax price.
Does it know the sales tax rate for my state or country?
No. There is no table of rates by place or product, so you enter the rate that applies to your purchase. The split is then worked out from that rate and the total.
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/life/reverse-sales-tax \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total":108,"rate":8}'const res = await fetch("https://api.kit.forhosting.com/life/reverse-sales-tax", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total": 108,
"rate": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/reverse-sales-tax",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total": 108,
"rate": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/reverse-sales-tax", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total":108,"rate":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total":108,"rate":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/reverse-sales-tax", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total": 108,
"rate": 8
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.reverse_sales_tax",
"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.
Limits
max_abs_amount | 1000000000000000 |
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
What reverse sales tax means and what the response contains
This calculator returns the normalized total and rate you supplied, the computed pre_tax and tax values rounded to the requested precision, a method tag reverse_sales_tax, a short formula string reminding the identities, and the precision used. There is no jurisdiction database, no product-category tax table, and no market-data fetch: the engine either applies the closed-form split on finite numbers or rejects the input with invalid_input. Rejected cases include a missing total or rate, non-finite values, magnitudes above the documented ceiling, a negative total, and any negative tax rate, because a negative rate is not a valid ad-valorem sales tax in this model.
How total and rate are read and how results stay reproducible
Optional leading plus signs and scientific notation on numeric strings are allowed when they parse as finite decimals; embedded spaces, hex prefixes, and non-numeric tokens are rejected with a clear message so a bad cell does not become a wrong pre-tax figure. The preferred fields are total for the tax-inclusive amount and rate for the sales tax in percent points, but aliases amount, gross, inclusive, tax_inclusive, price_inclusive, and total_inclusive for total, and tax_rate, percent, pct, r, and sales_tax for rate, are accepted so spreadsheets, query strings, and typed forms can reuse the same contract. Total must be non-negative: a negative price is rejected with invalid_input. Rate must be non-negative: if it is negative, the request fails with invalid_input because reverse sales tax does not model negative tax rates. An optional precision field, with aliases decimals and dp, chooses how many decimal places to expose for total, rate, pre_tax, and tax, defaulting to ten and capped at fifteen so JSON goldens stay stable. Pair the free browser run on this page with the priced API when you need the identical mathematical result inside an automated pipeline without re-implementing the division yourself.
Where reverse tax splits fit in commerce, study, and software
Developers call the same contract from scripts to seed deterministic test vectors for checkout UIs, to normalize user-entered gross prices before storing net and tax columns, or to satisfy programming-challenge statements that demand pre_tax and tax rather than a hand-waved estimate. On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the KIT tier-A catalog and lets you move from a desk calculator habit to an automated pipeline without changing the mathematical result.
Integration use cases
Checkout and bookkeeping fixtures
Generate reproducible pre_tax and tax pairs for unit tests, ledger demos, and CI assertions in commerce software.
Technical questions
What if the rate is zero?
Zero rate is allowed. pre_tax equals the total and tax is zero, because no tax is embedded in the amount.
Does this tool apply tax to a pre-tax price?
No. It only reverses a tax-inclusive total into pre_tax and tax. Forward tax is the opposite direction.