Product Bundle Discount Calculator
A product bundle discount can look simple until several item prices, decimals, and promotional percentages have to agree across a storefront, quotation, and checkout.
Run — free
This calculator adds every product's individual price, applies one percentage discount to the combined subtotal, and reports both the final bundle price and the savings amount. It gives merchandising teams, sellers, and developers a quick, repeatable result without relying on a spreadsheet formula or mental arithmetic. The same inputs always produce the same output, making the calculation suitable for manual planning and automated commerce workflows.
Enter the prices that belong to the bundle
Start by listing the individual selling price of every item included in the proposed bundle. Use the prices customers would pay if they bought those products separately, before the bundle promotion is applied. The calculator adds those values to produce the subtotal, which serves as the comparison point for both the discounted price and the displayed savings. Include each bundled unit as its own entry when multiple units of a product are offered, because the number of entries also determines the returned item count. Prices may include decimals and may be zero for a genuinely free component, but they cannot be negative, missing, or written as formatted currency text. Keep all entries in the same currency. The calculator deliberately does not convert currencies or infer tax treatment, so mixing dollars, euros, tax-inclusive prices, and tax-exclusive prices would create a mathematically valid but commercially misleading result. A clean list of comparable prices makes the result useful for catalog planning, promotion review, and checkout verification.
Apply the discount and understand the result
Enter the percentage discount offered on the complete bundle, using a value from zero through one hundred. The calculation first totals the individual prices, then multiplies that subtotal by the discount percentage to find the savings amount. It subtracts those savings from the subtotal to produce the bundle price. For example, a twenty percent discount means the customer pays eighty percent of the combined individual price; it does not mean that twenty currency units are removed. The result returns the subtotal, the submitted discount percentage, the savings amount, the bundle price, and the number of item-price entries. Monetary results are rounded to two decimal places for a stable, readable commerce result. A zero percent discount leaves the bundle price equal to the subtotal, while a one hundred percent discount makes the bundle free. Values above one hundred are rejected because they would produce a negative selling price, and negative discounts are rejected because they represent a markup rather than the promotion this calculator is designed to model.
Use the calculation in pricing decisions and automation
Compare the calculated bundle price with your cost, margin target, and existing promotions before publishing an offer. The savings amount is especially useful for customer-facing messages such as “save 15.00,” while the subtotal provides a transparent reference or strike-through price. Merchandising teams can test several discount percentages to find an appealing offer, and developers can use the API output to check that product pages and checkout systems apply the same arithmetic. Each request costs $0.002 through the API, while the browser version is available for quick interactive checks. The calculator focuses only on the percentage reduction from the sum of individual prices. It does not add sales tax, shipping, fixed coupons, tiered discounts, buy-one-get-one rules, or currency conversion. Apply those business rules separately and in the correct order for your store. Because rounding policies can differ between commerce platforms, also confirm whether your checkout rounds the discount once at bundle level or separately on each line; this calculator rounds the final bundle-level monetary results.
What you can do with it
Plan a seasonal bundle
Test a percentage promotion against the combined catalog prices and see the final offer price and advertised savings immediately.
Verify storefront pricing
Compare the expected bundle-level calculation with the subtotal, savings, and final price shown on a product page or at checkout.
Automate merchandising workflows
Generate consistent bundle prices from product-price lists before sending approved offers to catalogs, feeds, or internal review tools.
FAQ
How is the bundle price calculated?
The individual prices are added, the discount percentage is applied to that subtotal, and the resulting savings are subtracted from the subtotal.
What happens if the discount is more than 100%?
The request is rejected as invalid because a discount above 100% would make the calculated bundle price negative.
Can I use prices in any currency?
Yes, provided every item price uses the same currency. The output uses plain amounts and performs no currency conversion.
Are tax and shipping included?
No. Supply the item prices appropriate to your workflow, then calculate tax, shipping, coupons, or other adjustments separately.
How much does an API calculation cost?
Each API request costs $0.002. You can also run the calculation free in your browser on this page.
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/product-bundle-discount \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"item_prices":[19.99,12.5,7.51],"discount_percentage":20}'const res = await fetch("https://api.kit.forhosting.com/ecom/product-bundle-discount", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"item_prices": [
19.99,
12.5,
7.51
],
"discount_percentage": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ecom/product-bundle-discount",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"item_prices": [
19.99,
12.5,
7.51
],
"discount_percentage": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ecom/product-bundle-discount", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"item_prices":[19.99,12.5,7.51],"discount_percentage":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"item_prices":[19.99,12.5,7.51],"discount_percentage":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ecom/product-bundle-discount", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"item_prices": [
19.99,
12.5,
7.51
],
"discount_percentage": 20
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ecom.product_bundle_discount",
"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. |