Sales commission calculator
Five percent of a 10,000 sale is 500, and a 250 contest bonus on top makes the commission 750. Enter the sale, the agreed rate and an optional flat bonus, and get one figure rounded to the cent. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Sale amount
- 10,000
- Commission rate
- 5
- Bonus
- 250
- Rate decimal
- 0.05
- Base commission
- 500
- Total commission
- 750
A sales commission is the pay a closer earns when a deal lands: a percentage of the sale amount, often topped up with a flat bonus for a contest, a SPIFF, or a new-account prize. This calculator accepts a non-negative sale amount, a commission rate as a percent, and an optional flat bonus, then returns the total commission as a deterministic money figure.
What the sales commission identity covers, and what it leaves out
Sales pay plans almost always mix a percentage of closed revenue with a flat add-on: five percent of ten thousand is five hundred, and a two-hundred-fifty SPIFF on top is the number a compensation letter, a payroll batch, and a contest tracker all need before anyone talks about tax, draws, or splits.
Searchers who type sales commission calculator want that mixed total as a single auditable figure they can paste into a worksheet, not a spreadsheet cell that silently changes the decimal separator or treats a minus sign as a clawback already taken. The sale amount is the closed or expected consideration for the deal, in one currency; the commission rate is the agreed percent of that amount, such as five for five percent; the bonus is an optional flat extra in the same unit, omitted when the plan is percentage-only.
Zero sale amount describes a bonus-only prize and yields exactly the bonus. Zero rate describes a waived percent and still produces a finite total equal to the bonus. The calculator does not withhold income tax, does not apply a draw against commission, does not split house versus seller, and does not convert currencies: those belong in payroll.
Money fields round to two decimals so they match pay statements.
Where a sales commission calculator earns its keep
Sales managers and compensation designers rank for sales commission calculator because a representative thinks in the dollars that hit a paycheck, not only in a rate card. Revenue operations can call the same identity from a CRM workflow when a deal closes so the commission line stored on the opportunity matches the number a visitor saw on a public calculator. Educators teaching sales compensation can seed classroom examples that fail loudly on a negative sale amount instead of silently printing a minus sign a student might treat as a refund.
Failed validation does not consume balance. Keep the sale amount non-negative, keep the rate and bonus non-negative, pin the rounded money fields in tests, and you get a reproducible sales commission for widgets, course modules, and edge workers without standing up a full compensation engine of your own.
FAQ
What happens if I omit the bonus?
bonus defaults to zero. The total then equals the percentage slice alone, which is how a plan without SPIFFs or contest prizes is priced.
Does this withhold tax or apply a commission draw?
No. The calculator returns the commission line only. Layer withholding, draws against commission, and splits in your own payroll or CRM workflow.
How do I calculate a sales commission with a bonus?
Multiply the sale by the commission rate over 100, then add the flat bonus. Five percent of 10,000 is 500, and a 250 bonus on top brings the total commission to 750.
Can the sale amount be zero?
Yes. A zero sale describes a bonus-only prize, so the result is exactly the bonus. A zero rate works the same way, for a plan where the percentage is waived.
Why is a negative sale amount rejected?
Because a negative sale cannot describe revenue that closed. Instead of printing a minus sign that a payroll sheet might treat as a clawback already taken, the calculator refuses it.
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/sales-commission \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"sale_amount":10000,"commission_rate":5}'const res = await fetch("https://api.kit.forhosting.com/fin/sales-commission", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"sale_amount": 10000,
"commission_rate": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/sales-commission",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"sale_amount": 10000,
"commission_rate": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/sales-commission", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"sale_amount":10000,"commission_rate":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"sale_amount":10000,"commission_rate":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/sales-commission", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"sale_amount": 10000,
"commission_rate": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.sales_commission",
"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_value | 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
The identity is total_commission equals sale_amount times commission_rate over one hundred, plus bonus. Zero sale amount is allowed and yields only the bonus; a negative sale amount cannot describe revenue, so it fails with invalid_input instead of printing a clawback that a payroll worksheet might treat as cash already paid. Use it in the browser at no charge, or call the API at $0.002 per successful request.
What the sales commission identity covers, and what it leaves out
The identity this tool uses is the one those documents already imply: total_commission equals sale_amount times commission_rate divided by one hundred, plus bonus. A negative sale amount cannot describe revenue that closed, so it fails with invalid_input instead of printing a credit a form might treat as cash.
Input contract, response shape, and error behaviour
POST a JSON body that supplies sale_amount and commission_rate, with bonus optional. sale_amount is the closed or expected sale in a single currency unit, a finite number that is not negative, with aliases amount, sale, sales, price, and revenue. Zero sale amount is allowed and yields only the bonus. commission_rate is the percent of that sale, such as five for five percent, a finite number that must not be negative, with aliases rate, percent, percentage, commission_percent, and commission_pct. bonus is an optional flat extra in the same currency, a finite number that must not be negative, defaulting to zero when omitted or empty, with aliases flat_bonus, extra, and spiff. Each numeric field may arrive as a JSON number or as a numeric string that matches a strict decimal pattern. Missing sale_amount, missing commission_rate, empty strings, non-finite values, a magnitude above the declared limit, a negative commission rate, or a negative bonus fail with invalid_input naming the field and are not billed. The distinctive error this landing exists to catch is a negative sale_amount: the message names sale_amount so a form can highlight that control instead of showing a global alert, and it states that a negative sale cannot produce a sales commission. On success the body echoes sale_amount after rounding to cents, commission_rate, bonus, rate_decimal as the percent divided by one hundred, base_commission as the percentage slice alone, total_commission as the payable total, and a formula string restating the identity. Example: sale_amount of ten thousand, commission_rate of five, and bonus of two hundred fifty yields base_commission five hundred and total_commission seven hundred fifty. Pair the total with your own tax and draw tables; this endpoint computes the commission line only.
Where a sales commission calculator earns its keep
Payroll and finance apps that estimate variable pay can store total_commission as an outflow, then layer withholding, draws, and chargebacks on top rather than reverse-engineering a blended check.
Integration use cases
Rep paycheck preview
Turn a closed sale_amount, the plan commission_rate, and any contest bonus into the single total_commission a representative can compare with last period's check.
SPIFF and contest overlay
Add a flat bonus on top of the percentage slice so a monthly SPIFF or new-account prize is visible next to base_commission instead of hidden in a spreadsheet note.
Classroom compensation examples
Seed sales-pay homework with a valid five percent plus bonus case and a rejected negative sale_amount so students see invalid_input instead of a silent clawback.
Technical questions
How is the total sales commission calculated?
Multiply the non-negative sale_amount by commission_rate divided by one hundred, then add the optional bonus. The API returns that sum as total_commission, rounded to two decimals, plus base_commission, rate_decimal, the inputs, and the formula string.
Why does a negative sale amount fail?
A negative sale cannot describe closed revenue. sale_amount below zero fails with invalid_input and is not billed, instead of returning a clawback that a payroll form might treat as cash already paid.
What does the sales commission calculator cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input, including a negative sale amount, is not billed.