# Bundle price calculator

- Human page: https://happytails.ai/en/business-tools/bundle-price-calculator/
- Markdown: https://happytails.ai/en/business-tools/bundle-price-calculator.md
- Structured JSON: https://happytails.ai/agents/en/business-tools/bundle-price-calculator/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `bundle-price-calculator` |
| Category | business-tools |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

The bundle price comes from a discount off the separate prices, a price you set or a target margin. It is shared across the items in proportion to their separate prices, in whole minor currency units that add up exactly to the bundle price. Processing stays on your device.

### Inputs and settings

Text input: Bundle items.

Example or placeholder shown in the interface (not a validated fixture):

```text
item,price,cost,quantity
```

One item per line: name, separate price, unit cost and optional quantity. Write numbers without thousands separators. Up to 100,000 characters. Review the settings before running.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `method` | Set the bundle price by | select | "discount" | Allowed: discount, price, margin |
| `bundleDiscount` | Bundle discount (%) | text | "15" |  |
| `bundlePrice` | Bundle price | text | "89.00" |  |
| `targetMargin` | Target bundle margin (%) | text | "45" |  |
| `currency` | Currency code | text | "USD" |  |
| `precision` | Currency decimal places | select | "2" | Allowed: 0, 1, 2, 3, 4, 5, 6 |
| `rounding` | Rounding | select | "half-up" | Allowed: half-up, half-even, half-down, down, up, floor, ceiling |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Up to 50 item lines and 100,000 characters, with item names of up to 80 characters. Quantities from 1 to 1,000, separate prices from 0.01 and costs from 0, both up to 1,000,000,000. Discounts and target margins from 0 to 99.99 percent. Calculated on your device. Download a JSON report and CSV files.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "bundle-price-calculator",
  "category": "business-tools",
  "built": true,
  "requirements": "Up to 50 item lines and 100,000 characters, with item names of up to 80 characters. Quantities from 1 to 1,000, separate prices from 0.01 and costs from 0, both up to 1,000,000,000. Discounts and target margins from 0 to 99.99 percent. Calculated on your device. Download a JSON report and CSV files.",
  "implementation": {
    "fields": [
      {
        "key": "method",
        "label": "Set the bundle price by",
        "value": "discount",
        "type": "select",
        "values": [
          "discount",
          "price",
          "margin"
        ],
        "labels": {
          "discount": "Discount off the separate prices",
          "price": "A bundle price I choose",
          "margin": "Target bundle margin"
        }
      },
      {
        "key": "bundleDiscount",
        "label": "Bundle discount (%)",
        "value": "15",
        "showWhen": {
          "method": [
            "discount"
          ]
        },
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 32
      },
      {
        "key": "bundlePrice",
        "label": "Bundle price",
        "value": "89.00",
        "showWhen": {
          "method": [
            "price"
          ]
        },
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 32
      },
      {
        "key": "targetMargin",
        "label": "Target bundle margin (%)",
        "value": "45",
        "help": "Margin is profit as a share of the bundle price, not a markup on cost.",
        "showWhen": {
          "method": [
            "margin"
          ]
        },
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 32
      },
      {
        "key": "currency",
        "label": "Currency code",
        "value": "USD",
        "type": "text",
        "maxLength": 3,
        "autoCapitalize": "characters"
      },
      {
        "key": "precision",
        "label": "Currency decimal places",
        "value": "2",
        "type": "select",
        "values": [
          "0",
          "1",
          "2",
          "3",
          "4",
          "5",
          "6"
        ]
      },
      {
        "key": "rounding",
        "label": "Rounding",
        "value": "half-up",
        "type": "select",
        "values": [
          "half-up",
          "half-even",
          "half-down",
          "down",
          "up",
          "floor",
          "ceiling"
        ],
        "labels": {
          "half-up": "Half up (ties away from zero)",
          "half-even": "Half even (ties to even)",
          "half-down": "Half down (ties toward zero)",
          "down": "Toward zero (truncate)",
          "up": "Away from zero",
          "floor": "Toward negative infinity",
          "ceiling": "Toward positive infinity"
        }
      }
    ],
    "registrationFamily": "commerce-margins",
    "presentation": "metrics",
    "note": "The bundle price comes from a discount off the separate prices, a price you set or a target margin. It is shared across the items in proportion to their separate prices, in whole minor currency units that add up exactly to the bundle price. Processing stays on your device.",
    "inputMaxLength": 100000,
    "inputErrorCode": "COMMERCE_MARGINS_TOO_LONG",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 100000,
      "inputMode": "text",
      "label": "Bundle items",
      "placeholder": "item,price,cost,quantity",
      "help": "One item per line: name, separate price, unit cost and optional quantity. Write numbers without thousands separators. Up to 100,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Price a product bundle by discount, fixed price or target margin, and see how the bundle price is shared across items with different margins. Spot items that lose money inside the bundle.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Bundle price calculator

1. Paste one item per line with its separate price, unit cost and quantity.
2. Choose how to set the bundle price: a discount, a price you choose or a target margin.
3. Calculate and review the bundle margin and the share each item earns.
4. Download the report and the item CSV.

## Useful next steps

- [Discount](https://happytails.ai/en/calculators/discount/) ([Markdown](https://happytails.ai/en/calculators/discount.md))

- [Margin](https://happytails.ai/en/calculators/margin/) ([Markdown](https://happytails.ai/en/calculators/margin.md))

- [Markup](https://happytails.ai/en/calculators/markup/) ([Markdown](https://happytails.ai/en/calculators/markup.md))

## Setting the bundle price

With a discount, the bundle price is the total of the separate prices times one minus the discount: 106.00 less 15% is 90.10 in the example. With a target margin, the price is the bundle cost divided by one minus the margin, rounded up so the margin never falls below the target. Margin is profit divided by price, which is not the same as markup on cost.

### Sharing the price across items

Each item gets a share of the bundle price in proportion to its separate price times quantity. This is the relative stand-alone selling price method that IFRS 15 Revenue from Contracts with Customers (IASB, May 2014) uses to allocate a bundle price and its discount. Shares are whole minor currency units: each item first gets its share rounded down, and the units left go to the largest remainders, the Hamilton method described in Fair Representation by Balinski and Young (Yale University Press, 1982), so the shares add up exactly to the bundle price. In the example the dog bed earns 54.40 of the 90.10 price.

### Mixed margins

Because the discount is spread by price, a low-margin item can earn less than its cost inside a profitable bundle, and the report flags those lines. The extra sales needed to match separate-sale profit is the separate-sale profit divided by the bundle profit, minus one: 64.10 divided by 48.20 means 32.99% more bundles. Unit costs are treated as fully variable, and the calculator does not predict how many more units a bundle will sell.
