Calculator overview
Inputs and outputs
This summary comes from the calculator's published input and output contract.
Inputs
- Table step, bundle demand (required) Conditional
-
Default 0.1 Range 0.001 to 1
About this input
The spacing of the 11 bundle demand columns of the what-if table, from 0.001 to 1. When the lowest column would fall below 0, only the table is withheld.
- Table step, bundle cost (required) Conditional
-
Default 0.05 Range 0.001 to 1
About this input
The spacing of the 11 bundle cost rows of the what-if table, from 0.001 to 1. When the lowest row would fall below 0, only the table is withheld.
- Customer groups (required)
-
Default 1 row
About this input
Up to 3 customer groups. Each has an ID, a number of customers and, for each bundle row, the most they will pay. Blank means the group will not buy that bundle at any price. Each customer buys at most one bundle: the one that leaves the most money.
Column Range or allowed values Group ID Not declared Customers 0 to 1000000 Most they pay, bundle row 1 0 to 1000000 Most they pay, bundle row 2 0 to 1000000 Most they pay, bundle row 3 0 to 1000000 - Products (required)
-
Default 2 rows
About this input
Up to 10 products. Each has an ID, a price on its own, a unit cost, a stock and how many customers would buy it on its own without any bundle. Stock is the same in every case compared.
Column Range or allowed values Product ID Not declared Price on its own 0 to 100000 Unit cost 0 to 100000 Stock 0 to 1000000 Sold on its own without bundles 0 to 1000000 - Bundle to examine (required) Conditional
-
Default AB
About this input
The bundle whose prices are shown side by side, with the other bundles held at their best. Pick a Bundle ID from your bundles table. It changes no other result.
- Bundles (required)
-
Default 1 row
About this input
Up to 3 bundles. Each has an ID, a stock priority (1 draws stock first), packaging per bundle, a launch cost paid whenever the bundle is offered, a planned price, and up to 3 other prices to try. Your plan offers every bundle at its planned price.
Column Range or allowed values Bundle ID Not declared Stock priority 1 to 3 Packaging per bundle 0 to 100000 Launch cost 0 to 1000000000 Planned price 0 to 1000000 Another price to try (2) 0 to 1000000 Another price to try (3) 0 to 1000000 Another price to try (4) 0 to 1000000 - What-if bundle cost multiplier (required) Conditional
-
Unit x cost Default 1 Range 0 to 5
About this input
Multiplies what goes into each bundle sold, its components and its packaging, from 0 to 5. Standalone costs and launch costs do not change. 1 means no change. The rows of the what-if table are centred on it.
- What-if bundle demand multiplier (required) Conditional
-
Unit x demand Default 1 Range 0 to 5
About this input
Multiplies the customers who choose each bundle, from 0 to 5. Standalone demand does not change. 1 means no change. The columns of the what-if table are centred on it.
- What each bundle contains (required)
-
Default 2 rows
About this input
One line for each product in each bundle: how many go into one bundle and, optionally, how many sales on its own each bundle sold takes away. Lines with the same bundle and product add together. At most 10 lines may have sales lost above 0.
Column Range or allowed values Bundle ID Not declared Product ID Not declared Quantity in the bundle 1 to 1000 Sales on its own lost per bundle 0 to 1000
Outputs
- Your plan: standalone contribution lost
-
No unit declared
About this output
Standalone contribution with no bundles less standalone contribution in your plan.
- Your plan against no bundles
-
No unit declared
About this output
How much more your plan earns than selling with no bundles. It can be negative.
- Your plan contribution
-
No unit declared
About this output
The total contribution with every bundle offered at its planned price. The what-if table recalculates this figure.
- Your plan margin
-
No unit declared
About this output
Contribution of your plan as a share of its revenue. Blank when revenue is zero.
- Your plan: standalone contribution
-
No unit declared
About this output
The part of your plan contribution earned by products sold on their own.
- Your plan revenue
-
No unit declared
About this output
Bundle and standalone revenue of your plan.
- Your plan, by product
-
No unit declared
About this output
One row per product in your plan: stock, units used in bundles, standalone demand before and after the bundles, units sold on their own, unused stock, standalone revenue, cost and contribution, and the contribution lost against no bundles.
- What-if table withheld because
-
No unit declared
About this output
Why the what-if table is withheld, or blank when it is shown. Nothing else changes when it is withheld.
- The prices of the bundle to examine
-
No unit declared
About this output
One row per option of the bundle to examine, with the other bundles held at their best: its price, the customers who choose it, the units sold, the total contribution and that contribution less the best. A row with no price is blank.
- PP06 Components Check
-
No unit declared
About this output
The check of each component line: blank for an unused row, OK, or the first problem found, starting with its code.
- Best against no bundles
-
No unit declared
About this output
How much more the best combination earns than selling with no bundles.
- Your plan, by bundle
-
No unit declared
About this output
One row per bundle in your plan: its planned price, the customers who choose it, the units sold, those short of stock, its revenue, costs and contribution.
- Your plan: bundle contribution
-
No unit declared
About this output
The part of your plan contribution earned by bundles, after packaging and launch costs.
- Best: standalone contribution lost
-
No unit declared
About this output
Standalone contribution with no bundles less standalone contribution in the best combination.
- PP06 Products Check
-
No unit declared
About this output
The check of each product row: blank for an unused row, OK, or the first problem found, starting with its code.
- Table1 BPM Row Input
-
No unit declared
About this output
Machinery, not an input: the cell the table substitutes each row bundle cost multiplier into. The rest of the time it repeats the bundle cost multiplier. Change the input, never this cell.
- Table1 BPM Row Axis
-
No unit declared
About this output
The bundle cost multipliers down the left of the what-if table: your own multiplier in the middle, five equal steps below and five above.
- Table1 BPM Corner
-
Unit 0.50
About this output
The figure the what-if table recalculates, your plan contribution, placed in its top-left corner as the spreadsheet requires. It is formatted away.
- Table1 BPM Values
-
Unit $0
About this output
Each cell is your plan contribution recalculated at the bundle cost multiplier of its row and the bundle demand multiplier of its column, with your planned prices fixed. Stock, the choice rule and lost standalone sales are all re-evaluated; the table never re-optimizes. The middle cell is your own plan.
- Warning messages
-
No unit declared
About this output
Every warning that applies, separated by semicolons. Blank when none applies.
- Warnings
-
No unit declared
About this output
Every warning the model can raise, whether it applies to this result (1) or not (0), and its message when it applies.
- Warnings
-
Unit count
About this output
How many warnings apply to this result. The warnings table lists them.
- Reference data version
-
No unit declared
About this output
The version of any reference data used. None: every value is your own assumption.
- PP06 Segments Check
-
No unit declared
About this output
The check of each customer group row: blank for an unused row, OK, or the first problem found, starting with its code.
- What each customer group buys
-
No unit declared
About this output
One row per customer group: its customers and the bundle it chooses in your plan and in the best combination, or None. Each group buys the bundle that leaves it the most money, with ties going to the higher stock priority.
- Workbook self-check
-
No unit declared
About this output
PASS when every internal consistency check of this result holds. FAIL means the result should not be relied on.
- Table1 BPM Column Input
-
No unit declared
About this output
Machinery, not an input: the cell the table substitutes each column bundle demand multiplier into. The rest of the time it repeats the bundle demand multiplier.
- Table1 BPM Column Axis
-
No unit declared
About this output
The bundle demand multipliers across the top of the what-if table: your own multiplier in the middle, five equal steps below and five above.
- Status code
-
No unit declared
About this output
The short code of the reason shown in the status, or OK.
- Best margin
-
No unit declared
About this output
Contribution of the best combination as a share of its revenue. Blank when revenue is zero.
- Best contribution
-
No unit declared
About this output
The total contribution of the best combination: bundle revenue less component, packaging and launch costs, plus standalone contribution, under the stated stock rule.
- The best combination, by bundle
-
No unit declared
About this output
One row per bundle in the best combination: its price (blank when not offered), the customers who choose it, the units sold, those short of stock, its revenue, costs and contribution.
- Best: bundle row 1 offer
-
No unit declared
About this output
What the best combination does with bundle row 1: do not offer it, or one of its prices. Blank for an unused row.
- Best: bundle row 1 price
-
No unit declared
About this output
The price of bundle row 1 in the best combination. Blank when it is not offered or the row is unused.
- Best: bundle row 3 offer
-
No unit declared
About this output
What the best combination does with bundle row 3: do not offer it, or one of its prices. Blank for an unused row.
- Best: bundle row 2 offer
-
No unit declared
About this output
What the best combination does with bundle row 2: do not offer it, or one of its prices. Blank for an unused row.
- Model version
-
No unit declared
About this output
The version of the model that produced these results.
- Status
-
No unit declared
About this output
OK, or the first reason the result needs attention: NOT VALID for inputs the model cannot use, and CHECK for a result to look at.
- Custom assumptions
-
No unit declared
About this output
Whether any reference value was overridden. Always FALSE here: the model uses no reference data.
- Search status
-
No unit declared
About this output
OPTIMAL means every combination of the prices entered was evaluated and the best under the stated stock rule is shown. A better price between the ones you entered, or a different split of stock, could earn more. Blank when the inputs are not valid.
- Best: bundle contribution
-
No unit declared
About this output
The part of the best contribution earned by bundles, after packaging and launch costs.
- Revenue with no bundles
-
No unit declared
About this output
Standalone revenue with no bundle offered.
- Contribution with no bundles
-
No unit declared
About this output
What the products earn on their own from the same stock, with no bundle offered.
- Best: bundle row 2 price
-
No unit declared
About this output
The price of bundle row 2 in the best combination. Blank when it is not offered or the row is unused.
- Best against your plan
-
No unit declared
About this output
How much more the best combination earns than your plan. Never negative, because your plan is one of the combinations ranked.
- Best: unused stock
-
Unit units
About this output
Units of stock left over in the best combination.
- Best: cost of unused stock
-
No unit declared
About this output
The unit cost of the stock left over in the best combination. For information only: it is not charged against contribution.
- PP06 Bundles Check
-
No unit declared
About this output
The check of each bundle row: blank for an unused row, OK, or the first problem found, starting with its code.
- The three cases side by side
-
No unit declared
About this output
No bundles, your plan and the best combination: standalone, bundle and total contribution, revenue, bundles offered and unused stock.
- Combinations evaluated
-
Unit count
About this output
How many combinations of the prices entered were evaluated, at most 125.
- Best: bundles offered
-
Unit count
About this output
How many bundles the best combination offers.
- Best revenue
-
No unit declared
About this output
Bundle and standalone revenue of the best combination.
- The best combination, by product
-
No unit declared
About this output
One row per product in the best combination: stock, units used in bundles, standalone demand before and after the bundles, units sold on their own, unused stock, standalone revenue, cost and contribution, and the contribution lost against no bundles.
- Best: bundle row 3 price
-
No unit declared
About this output
The price of bundle row 3 in the best combination. Blank when it is not offered or the row is unused.
- Best: standalone contribution
-
No unit declared
About this output
The part of the best contribution earned by products sold on their own.
- Best: bundle row 3 units sold
-
Unit units
About this output
The units of bundle row 3 sold in the best combination. Blank for an unused row.
- Best: bundle row 2 units sold
-
Unit units
About this output
The units of bundle row 2 sold in the best combination. Blank for an unused row.
- Best: bundle row 1 units sold
-
Unit units
About this output
The units of bundle row 1 sold in the best combination. Blank for an unused row.
LogicCommons is in beta. If a result, label, or reference looks wrong, tell us here; we read every message.
Methodology
Purpose and model boundary
This calculator prices up to 3 bundles of up to 10 products together. It answers two questions: does a bundle earn more than the products sold on their own, and which prices should the bundles have when customers choose between them and they share stock?
Each product has a price, a unit cost, a stock and how many it sells on its own without bundles. Each bundle has a stock priority, a packaging cost, a launch cost, a planned price and up to 3 other prices to try. A table says what each bundle contains. Up to 3 customer groups each have a size and, for each bundle, the most they will pay.
One Calculate fills every result section. It works out the no-bundle case, on the same stock; your plan, with every bundle at its planned price; and the best combination, with each bundle at one of its prices or not offered at all. At most 125 combinations are evaluated, every one of them, and ranked together. It also shows what each price of one chosen bundle would earn, and an 11 by 11 what-if table of your plan.
Every figure on this page is computed by the spreadsheet; the page adds nothing to it. Customer figures are your assumptions, not a measure of what customers will do. Nothing is fitted or inferred from them, and there is no simulation.
Inputs and units
- Products, up to 10 rows, filled from the top without a blank row between used rows: a product ID, which is a capital letter and then up to 15 capital letters or digits, each ID used once; the price on its own and the unit cost, each from 0 to 100,000; the stock and how many sell on their own without bundles, each a whole number from 0 to 1,000,000. At least one product is required.
- Bundles, up to 3 rows, filled from the top: a bundle ID in the same form; a stock priority, where the used rows must hold 1 to the number of bundles, each once, and 1 draws stock first; the packaging per bundle, from 0 to 100,000; the launch cost, from 0 to 1,000,000,000; a planned price, above 0 and at most 1,000,000; and up to 3 other prices to try, in the same range. A blank price is not tried, and the prices of one bundle must all differ. At least one bundle is required.
- What each bundle contains, up to 20 lines, typed or pasted from a spreadsheet: a bundle ID and a product ID from the tables above, the quantity in one bundle, a whole number from 1 to 1,000, and optionally the sales on its own lost per bundle sold, from 0 to 1,000 (blank means 0). At most 10 lines may have sales lost above 0. Every bundle needs at least one line, and lines with the same bundle and product add together.
- Customer groups, up to 3 rows, filled from the top: a group ID in the same form, the customers, a whole number from 0 to 1,000,000, and the most they will pay for each bundle row, from 0 to 1,000,000. "Bundle row 1" is the first row of the bundles table, and so on. Blank means this group will not buy that bundle at any price, and the column of an unused bundle row must stay blank. At least one group is required.
- Bundle to examine: chosen from the IDs typed in the bundles table.
- Optional, under "Optional: what-if table", each with a value already set: the bundle cost multiplier and the bundle demand multiplier, each from 0 to 5 (1 means no change), and the spacing of the table's rows and columns, from 0.001 to 1.
Money is in dollars. Products, customers, bundles and stock are whole units. The sales lost per bundle can be a fraction.
Governing relationships
What a group chooses. For each bundle offered, a group's money left is the most it will pay less the price. A price equal to the most it will pay is a sale, with 0 left. Above it, the group will not buy that bundle. Each group buys at most one bundle: the one that leaves it the most money, and equal money left goes to the higher stock priority. The whole group follows its choice; customers are not split. The bundle demand multiplier scales the customers choosing each bundle, rounded down to whole customers.
Stock. Each combination sells bundles first, in your stock priority order, then sells each product on its own from the stock left. This is a fixed rule: a different split of stock could earn more. A bundle sells the smaller of the customers who chose it and what its scarcest component allows, in whole bundles only. Customers who chose a bundle that runs out do not switch to another bundle.
Sales on their own. Each bundle sold takes away the sales you entered from that product's demand on its own, and demand stops at 0. Each product then sells the smaller of that demand and its remaining stock, in whole units. Sales on their own never change bundle demand. The no-bundle case is the same calculation with nothing offered, so it uses the same stock.
Contribution. Bundle revenue is units sold times the price. Component cost and packaging are units sold times the cost, and the bundle cost multiplier applies to both. The launch cost is paid whenever a bundle is offered, even if none sells, and no multiplier applies to it. Standalone contribution is units sold on their own times the price less the unit cost. Each line is rounded once to the cent, half away from zero, and every total is a sum of those lines. Margin is contribution divided by revenue, blank when revenue is 0.
The best combination. Every bundle has up to 5 options: do not offer, the planned price, and up to 3 other prices. The spreadsheet evaluates every combination of those options, so choices, shared stock and lost sales are all inside each one, and ranks them by posted contribution. Equal contribution goes to fewer bundles offered, then to the earlier combination, with the planned price before the other prices. Offering nothing is always one of the combinations, so a best always exists. The search limit is that it is the best of the combinations tried under the stock rule: a better price between the ones you entered, or a different split of stock, could earn more.
The bundle to examine. Each price of that bundle, and not offering it, is compared with the other bundles held at their prices in the best combination. It changes no other result.
What-if table. Rows are 11 bundle cost multipliers centred on yours, one row step apart; columns are 11 bundle demand multipliers centred on yours, one column step apart. Each cell is your plan's contribution recalculated through the spreadsheet's own two-variable data table, with your plan's prices fixed: it never searches for a new best. Stock, choices and lost sales are worked out again in every cell. The middle cell is your own plan. When a step would take the lowest row or column below 0, the table is withheld with that reason and nothing else changes. A multiplier of 0 always withholds it.
Calculation sequence
The spreadsheet first checks every product, bundle, component line and customer group and every setting, and stops with NOT VALID at the first problem it finds, with every figure at 0. It then adds up each bundle's contents, lays the bundles out in stock priority order, and evaluates your plan once at the two multipliers for the what-if table. It evaluates all 125 possible combinations, leaving out those with a price you did not enter, ranks them, reads the best, your plan and the no-bundle case from those rows, builds the prices of the bundle to examine, and fills the what-if table. Its consistency checks then confirm that posted lines add up, stock is conserved and the two evaluations of your plan agree.
Outputs and interpretation
The headline gives the best contribution, how much it beats no bundles by, and your plan's contribution. The result sections follow.
- Best of the combinations tried: how many combinations were evaluated and how many bundles the best offers, how much it beats your plan by, its revenue and margin, what comes from sales on their own and from bundles, the standalone contribution lost to bundles, and the stock left unused and what it cost. Unused stock is information only: it is not charged against contribution. The tables show the best by bundle, where a blank price means not offered, and by product.
- Your plan: the same figures with every bundle at its planned price. Your plan offers every bundle, so a bundle no group buys still pays its launch cost; to compare a plan without a bundle, remove its row.
- No bundles, your plan and the best: the three cases side by side, and what each customer group buys in your plan and in the best.
- Prices of the bundle to examine: each price, the customers who choose it, units sold, total contribution and its difference from the best.
The charts show standalone against bundle contribution, stock use by product in the best combination, and the prices of the bundle to examine. The what-if table follows them.
For nearby questions, the Price Volume Profit Scenario Simulator projects profit over months when demand responds to price, and the Quote Pricing & Deal Margin Optimizer prices one deal.
Validation and status logic
The workbook returns one status, chosen in this order: NOT VALID, then CHECK, then OK. There is no infeasible or no-solution status, because not offering any bundle is always a valid combination.
- NOT VALID names the first problem: a product (a blank row above a used row, a missing, malformed or repeated ID, or a value outside its limits); no product; a bundle (a gap, a missing, malformed or repeated ID, a priority, cost or price outside its limits, or two prices the same); no bundle; stock priorities that are not 1 to the number of bundles, each once; a component line (a gap, a missing value, a bundle or product not in its table, or a value outside its limits); a bundle with no lines; more than 10 lines with sales lost above 0; a customer group (a gap, a missing, malformed or repeated ID, a value outside its limits, or a figure under an empty bundle row); no group; or a setting outside its limits.
- CHECK accompanies a result that needs a look because a workbook consistency check failed.
- OK otherwise.
Warnings say when stock runs out before every customer who chose a bundle is served in the best combination, when a bundle sells nothing in your plan and still pays its launch cost, when the best price is the highest or lowest tried and a group would buy beyond it, when the sales lost to bundles are above a product's demand on its own, when two lines name the same bundle and product, when a product sells below its unit cost, when the what-if table is withheld, when no group would pay a price tried, and when offering no bundle earns the most.
Assumptions and limitations
- Capacities are 10 products, 3 bundles, 20 component lines and 3 customer groups, with up to 4 prices per bundle, so at most 125 combinations.
- The best is only among the prices you enter. Demand changes only at the figures the groups enter, and a price between them can still matter, because it changes which bundle leaves a group more money.
- Stock goes to bundles first, in your priority order. This is a fixed rule, not a search over how to split stock.
- A group moves as a whole, so demand moves in steps. Customers who chose a sold-out bundle do not switch, and they remain in the standalone demand.
- A sale lost to a bundle counts only for bundles actually sold. Sales on their own have no effect back on bundle demand.
- The bundle cost multiplier covers components and packaging. It does not change standalone costs or launch costs. The bundle demand multiplier does not change standalone demand. Both apply to every result at their input values, not only in the what-if table.
Restrictions and non-computing states
The calculator enforces its numeric and choice limits before it accepts a result, so a missing bundle to examine, a setting outside its range or a table with no rows is refused with the page's own message. A blank row between used rows, a repeated ID, a component line naming a bundle or product not in its table, and priorities that are not 1 to the number of bundles are refused by the workbook. When a table step would take the lowest row or column below 0, only the what-if table is withheld. With a blank price, that combination is not tried, and the row for it under the bundle to examine shows no figures.
Errors and warnings
A request rejected by the page's input limits is not a computed result. A transport or service failure, a timeout or a cancelled run cannot establish a fresh workbook answer, and the last result stays on the page marked as out of date. Review the workbook's References and Disclaimer, and check a result against your own costs and terms, before using it to set a price.
References
Sources and further reading
Your prices, costs, stock, bundles, customer groups and the most each group will pay come from the inputs; the calculator holds no market, industry or customer data, and every value is your own assumption. The sources below explain the ideas the model uses. They do not endorse this calculator.
- Wikipedia, Product bundling describes offering several products as one package, and mixed bundling, where a customer can buy the package or the separate parts; the calculator models the mixed form, with each product still able to sell on its own (retrieved 2026-11-04).
- OpenStax, Principles of Accounting, Volume 2: Managerial Accounting, 3.1 Explain Contribution Margin defines contribution margin as the amount by which a selling price exceeds variable cost; the calculator's contribution is revenue less component, packaging and unit costs, and less a launch cost for each bundle offered (retrieved 2026-11-03).
- OpenStax, Principles of Economics 3e, 3.1 Demand, Supply, and Equilibrium in Markets for Goods and Services defines demand as the amount consumers are willing and able to buy at each price; here that is a plain lookup of the groups you enter, not a fitted curve (retrieved 2026-11-04).
- Microsoft Support, Calculate multiple results by using a data table describes the two-variable data table the spreadsheet uses for the 11 by 11 what-if table (retrieved 2026-11-02).
This is an educational model of the bundles and customer groups you enter, not financial, accounting, pricing or legal advice. Customer figures are your assumptions, not a measure of what customers will do, and the calculator does not guarantee a profit; check a result against your own costs and terms before using it.
Found a problem, or have an idea?
Tell us if a result looks wrong, a label is unclear, or something is missing. We read every message.