Revenue calculator
Selling 250 units at 19.99 each brings in total revenue of 4,997.5. Turn a unit count and a selling price into one top-line figure before you open a full income statement. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Units sold
- 250
- Price per unit
- 19.99
- Total revenue
- 4,997.5
Total revenue is the top-line figure from selling a known quantity at a known unit price. Operators, merchandisers, freelancers, and product teams reach for a revenue calculator when they already know how many units sold and what each unit billed, and they need that product rather than a margin, a profit residual, or an annualized run rate. This revenue calculator takes two non-negative finite numbers in one currency — units sold and price per unit — multiplies them, and returns total revenue. Zero is accepted: a period with no units sold still has total revenue of zero.
How total revenue turns units sold and unit price into a top line
Total revenue from a single SKU or a single billed line is the product of how many units sold and the price charged for each unit in one currency. A shop that sold two hundred fifty units at nineteen dollars and ninety-nine cents prints total revenue of four thousand nine hundred ninety-seven dollars and fifty cents. A freelancer who billed forty hours at eighty-five dollars per hour prints three thousand four hundred.
Zero units sold or a zero unit price is a legitimate outcome and is not an error: a period with no sales still has total revenue of zero. Negative units sold or a negative unit price is rejected, because a going-in sales figure is not defined for a quantity or a price below zero; returns and credits belong on a different line, not as a negative sold quantity in this identity.
This calculator does not subtract cost of goods sold, does not compute profit or gross margin, does not annualize a monthly book into an exit run rate, and does not convert currencies. You supply two non-negative finite numbers that already share one period and one currency; the calculator multiplies them and rounds total revenue half-up to two decimal places so goldens compare byte-for-byte across runtimes. This is going-in sales revenue from the two-factor identity, not a profit residual, not a margin view, and not a cash-from-operations number.
Where a revenue calculator earns its keep
Operators screening a daily or monthly close use a revenue calculator to turn last period's unit count and the agreed unit price into one comparable top line before they open a full income-statement model. Merchandisers and e-commerce shops drop SKU units sold and the selling price into the same two fields to check a promotion, a wholesale quote, or a channel report without rebuilding the catalog. Freelancers convert billed hours or packaged units into invoice totals with the same identity.
Failed validation does not consume balance. Keep both fields finite and non-negative, pin the rounded total in tests, and you get a reproducible top line for teasers, close checklists, and edge workers without standing up a general ledger of your own.
What you can do with it
SKU and channel sales roll-up
Turn last period's units sold and the selling price into one top-line revenue figure before you open a full income-statement model.
Freelance hours and packaged units
Convert billed hours or packaged units and a known unit price into an invoice total without rebuilding the quote by hand.
FAQ
How is total revenue calculated?
Money amounts round half-up to two decimal places.
What if units sold or the unit price is negative?
A going-in sales figure is not defined for a sold quantity or a unit price below zero. Returns and credits belong on a different line, not as a negative factor in this product.
Is this a profit or margin calculator?
A profit tool, a gross-margin tool, and an exit-rate annualization start from different lines and answer different questions.
Can units sold be zero or a fraction?
Yes. Zero is a legitimate pre-sales period and multiplies to zero. Fractional quantities are allowed when the unit is continuous, such as hours, kilograms, or tons. Only missing, non-finite, or negative values are rejected.
Should I use the list price or the discounted price?
Use the price net of any discount you want included if you are measuring what you actually billed. Use the list price only when you want gross billings before discounts.
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/revenue \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"units_sold":250,"price_per_unit":19.99}'const res = await fetch("https://api.kit.forhosting.com/fin/revenue", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"units_sold": 250,
"price_per_unit": 19.99
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/revenue",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"units_sold": 250,
"price_per_unit": 19.99
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/revenue", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"units_sold":250,"price_per_unit":19.99}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"units_sold":250,"price_per_unit":19.99}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/revenue", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"units_sold": 250,
"price_per_unit": 19.99
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.revenue",
"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
Either input that is negative fails with invalid_input and is not billed, because a sold quantity or a unit price below zero is not a going-in sales figure.
How total revenue turns units sold and unit price into a top line
This revenue calculator uses the identity total_revenue equals units_sold times price_per_unit. units_sold is the quantity closed in the period: physical pieces, billed hours, kilograms, kilowatt-hours, or any other countable or measurable unit already expressed as one finite number. price_per_unit is the selling price of one of those units in the same currency, already net of any discount you want baked in, or the list price if you are measuring gross billings.
Input contract, response shape, and error behaviour
Zero is allowed on both fields. Fractional units are allowed: two and a half tons at one hundred twenty per ton is a legitimate quantity times price, not an integer-only count. Example: two hundred fifty units at nineteen dollars and ninety-nine cents yield total revenue of four thousand nine hundred ninety-seven dollars and fifty cents. Keep both fields finite and non-negative and pin the rounded total in tests so a worksheet and a script never disagree on the top line. POST a JSON body with two required non-negative finite numbers in one currency. units_sold is the quantity sold in the period; aliases units, quantity, qty, n, and sold map to the same field so a worksheet can keep its column names. price_per_unit is the selling price of one unit; aliases unit_price, price, and p are accepted. Each numeric field may arrive as a JSON number or a numeric string. Missing fields, empty strings, and non-finite values — NaN, Infinity, or text that does not parse as a number — fail with invalid_input naming the field. Those failures are not billed. Negative amounts are also rejected: a sold quantity or a unit price below zero is not a going-in sales figure, and the task fails with invalid_input rather than printing a signed product that would be confused with a credit. On success the body echoes units_sold and price_per_unit, then reports total_revenue as the product rounded half-up to two decimal places, together with a formula string restating the identity. Pair the JSON with your own rule for whether the unit price is list, net of discount, or inclusive of tax — this endpoint multiplies the two numbers you send; it does not look up a price list, apply tax, convert currencies, or rebuild an invoice.
Where a revenue calculator earns its keep
The browser tool is free; the API path is the same algorithm billed at $0.002 per successful call so a worksheet and a script never disagree on the product.
Integration use cases
Dashboards and CI fixtures
Pin total revenue from two finite non-negative numbers in automations that must match the free browser widget without calling an accounting engine.
Technical questions
What does the revenue calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.