Calculate average order value from revenue and orders
See what each order brings in on average: 1,250.50 in revenue from 25 orders gives an average order value of 50.02, in the same currency as the revenue. Use figures from one period and one set of rules. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total revenue
- 1,250.5
- Orders
- 25
- Average order value
- 50.02
Average order value shows how much revenue a business earns from each order on average. Enter the total revenue for a reporting period and the number of orders completed during that same period, and the calculator divides revenue by orders. The result keeps the currency unit used for revenue, so dollars produce dollars per order and euros produce euros per order. It also rejects a zero order count because no meaningful average can be calculated without at least one order.
Use matching revenue and order data
Start with total revenue and completed order count from exactly the same reporting scope. If revenue covers a calendar month, the order count must cover that month too. Apply the same rules for refunds, cancellations, taxes, shipping, discounts, and test transactions to both the metric and any comparison period.
For example, do not use net revenue after refunds alongside an order count that still includes fully refunded orders unless that is an intentional reporting policy. The calculator does not assume a currency or convert money; it treats the revenue figure as an amount in the unit you already use. A result based on 12,000 dollars is therefore dollars per order, while a result based on 12,000 euros is euros per order.
Keeping the inputs aligned matters more than adding decimal precision. When teams disagree about average order value, the division is rarely the problem. Different source filters, time zones, order statuses, or revenue definitions are usually responsible, so record those choices with the result.
Understand the calculation and validation
The formula is total revenue divided by the number of orders. If a store records 1,250.50 in revenue from 25 orders, its average order value is 50.02 in the same currency as the revenue input. Revenue may be zero, which correctly produces an average of zero when one or more orders exist.
Revenue cannot be negative because this calculator models ordinary ecommerce revenue rather than accounting balances or net loss analysis. Orders must be a whole number greater than zero. A fractional order has no sensible meaning, and dividing by zero would produce an undefined business metric, so those inputs return a clear validation error instead of a misleading value.
Inputs must also be finite numbers: numeric-looking text, infinity, missing values, and non-numeric data are rejected. The calculation is deterministic and performs no rounding or currency formatting. This preserves the mathematical quotient so a caller can apply the decimal places and rounding policy required by its own finance or analytics system.
Interpret average order value in context
Average order value is useful for tracking purchasing behavior, but it should not be read as the value of a typical customer or as profit per order. A small number of unusually large purchases can lift the average, while discounts, bundles, shipping thresholds, product mix, seasonality, acquisition channels, and customer segments can all change it. Compare periods using the same definition and investigate the drivers behind a movement rather than treating a higher number as automatically better.
An increase caused by expensive shipping charges may not improve customer value, and a decrease caused by many profitable first-time orders may still be healthy. Pair the metric with order volume, conversion rate, gross margin, refund rate, median order value, and repeat purchase behavior for a fuller picture. For experiments such as bundles or free-shipping thresholds, calculate the metric separately for comparable control and treatment windows.
What you can do with it
Track store performance
Calculate average order value for each reporting period using revenue and completed orders from the same dashboard filters.
Compare sales channels
Measure marketplaces, direct storefronts, regions, or acquisition channels with a consistent revenue definition.
Evaluate merchandising tests
Compare average order value before and after bundles, upsells, discounts, or free-shipping threshold changes.
FAQ
What is the average order value formula?
Divide total revenue by the number of orders from the same reporting period and scope.
What happens if the number of orders is zero?
The calculation returns an invalid input error because average order value is undefined when there are no orders.
Can total revenue be zero?
Yes. Zero revenue with one or more orders produces an average order value of zero.
Does the calculator convert currencies?
No. Use one consistent currency for total revenue; the resulting average is expressed in that same currency per order.
Does the result include tax, shipping, discounts, or refunds?
It reflects whatever your total revenue input includes. Use a documented, consistent revenue definition when comparing results.
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/ecom/average-order-value \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_revenue":1250.5,"orders":25}'const res = await fetch("https://api.kit.forhosting.com/ecom/average-order-value", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_revenue": 1250.5,
"orders": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ecom/average-order-value",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_revenue": 1250.5,
"orders": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ecom/average-order-value", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_revenue":1250.5,"orders":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_revenue":1250.5,"orders":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ecom/average-order-value", 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_revenue": 1250.5,
"orders": 25
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ecom.average_order_value",
"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
Interpret average order value in context
The API price is $0.002 per request, and the browser calculation can be used for quick checks before automating a recurring report.
Technical questions
How much does the API calculation cost?
Each API request costs $0.002. The calculation is also available in the browser for quick manual checks.