Dropshipping profit per order calculator
A dropshipping sale can look profitable until every order-level charge is included.
Run — free
This calculator takes the customer selling price, the supplier cost, the platform fee, and the payment processing fee, then returns the net profit for one order and its percentage of revenue. It gives store owners a consistent way to evaluate products, compare channels, and check whether a proposed price leaves enough room for the costs that occur every time an order is completed.
Enter a complete per-order cost picture
Start with the amount the customer pays for one unit as the selling price. Then enter the supplier cost for that same unit. If the supplier bills shipping directly to you for every order, include that shipping charge in the supplier cost so it is not overlooked. Enter the marketplace or commerce platform charge as a monetary amount in the platform fee field, and enter the processor charge in the payment fee field. Use amounts from the same currency and the same tax basis throughout the calculation. For example, do not mix a tax-inclusive selling price with costs recorded before tax unless that treatment matches the way your business reports profit. This capability treats every fee as an amount for one completed order; it does not convert percentage fee schedules automatically. If a provider quotes a percentage plus a fixed charge, calculate the resulting charge for the selling price first and enter the combined monetary amount. Careful input preparation makes the result useful for real product comparisons rather than a rough revenue-minus-product-cost guess.
Understand the net profit and margin
The calculation adds the platform and payment charges to obtain total fees. It then subtracts both total fees and supplier cost from selling price. The result is net profit per order: selling price minus supplier cost minus platform fee minus payment fee. A positive value means the listed order-level revenue exceeds those listed order-level costs. A negative value means each order loses money before any additional business expenses are considered. The profit margin percentage divides the unrounded net profit by the selling price and multiplies by one hundred, making products with different price points easier to compare. Monetary outputs and the percentage are rounded to two decimal places for a practical display, while the underlying calculation uses the supplied numeric values. The selling price must be positive because a zero or negative price cannot provide a meaningful revenue margin denominator. Zero is accepted for any cost or fee when that charge genuinely does not apply. The output also repeats the normalized selling price, supplier cost, and combined fees so the result can be audited without reconstructing the input.
Use the result in pricing decisions
Treat net profit per order as a focused contribution figure, not as the store's final accounting profit. It answers whether one completed order covers the supplier and transaction charges you entered. Advertising spend, refunds, chargebacks, taxes, subscriptions, customer support, apps, currency conversion, and return shipping are outside this calculation unless you deliberately allocate them into one of the entered per-order amounts. For product research, run the same method across every candidate and compare both net profit and margin rather than relying on revenue alone. For pricing, test several selling prices while updating percentage-based platform and payment charges each time, because those charges may rise with revenue. For channel comparisons, keep supplier cost constant and replace the fees with the amounts charged by each marketplace or storefront. A product with a strong headline markup can still produce a weak result when transaction fees are large. Conversely, a modest markup may be workable when order-level fees are low and demand is reliable. The API price is $0.002 per request, while the browser version supports quick manual checks during catalog review.
What you can do with it
Screen a supplier product
Check whether a proposed retail price covers the supplier invoice and transaction charges before adding the product to a store.
Compare sales channels
Enter the fees for different marketplaces or storefronts to see how channel costs change profit on the same item.
Review a pricing change
Recalculate profit and margin after changing the selling price or receiving a new supplier cost.
FAQ
What formula does the calculator use?
Net profit equals selling price minus supplier cost minus platform fee minus payment fee. Margin is net profit divided by selling price, multiplied by one hundred.
Can I enter percentage fees?
The fee fields accept monetary amounts per order. Convert each percentage or percentage-plus-fixed schedule into its charge for the order before entering it.
Does supplier shipping belong in supplier cost?
Yes, when the supplier charges shipping for each order, include it in supplier cost so the order-level expense is represented.
Does this include advertising and refunds?
No. The result includes only the four supplied values. Allocate other costs separately if you need a broader contribution or accounting profit figure.
Why must selling price be positive?
The calculation uses selling price as revenue and as the denominator for margin. Zero or negative revenue cannot produce the intended per-order margin.
What does it cost to use?
The API costs $0.002 per request. The browser calculator can be used for quick manual calculations.
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/dropship-profit-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"selling_price":49.99,"supplier_cost":18.5,"platform_fee":5,"payment_fee":1.75}'const res = await fetch("https://api.kit.forhosting.com/ecom/dropship-profit-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"selling_price": 49.99,
"supplier_cost": 18.5,
"platform_fee": 5,
"payment_fee": 1.75
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ecom/dropship-profit-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"selling_price": 49.99,
"supplier_cost": 18.5,
"platform_fee": 5,
"payment_fee": 1.75
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ecom/dropship-profit-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"selling_price":49.99,"supplier_cost":18.5,"platform_fee":5,"payment_fee":1.75}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"selling_price":49.99,"supplier_cost":18.5,"platform_fee":5,"payment_fee":1.75}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ecom/dropship-profit-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"selling_price": 49.99,
"supplier_cost": 18.5,
"platform_fee": 5,
"payment_fee": 1.75
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ecom.dropship_profit_calc",
"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. |