Understanding pricing
Every shopping and booking response carries several monetary fields. This page explains what each one means, how your org margin is applied, and why the price breakdown shown to a guest does not line up with your cost.
The three prices
| Price | Field | Where it comes from |
|---|---|---|
| Cost | net | The provider — what the agency pays the supplier |
| Provider retail | gross / suggested | The provider — recommended / minimum selling price |
| Your selling price | markupGross | gross + the margin your org configures per connection |
net and gross/suggested come straight from the provider. markupGross is
the only price Bundleport computes, by adding your org margin on top of the
provider gross — never on net.
markupGross = gross + orgMargin // PERCENTAGE: gross × (1 + rate); FIXED: gross + amount
marginAmount = markupGross − gross
When no margin is configured (or skipMarkup: "true"), markupGross = gross and
a NO_MARKUP_CONFIGURED warning is returned. If the provider sends only a net
price, then net = gross = suggested and there is no provider margin.
Two ways to read the total
The same total can be split two different ways. They answer different questions, so the two splits do not match each other — only the total is shared.
1. Selling split (what the guest pays)
Room portion vs taxes/fees. This is what price breakdowns show:
Total (gross / suggested) 77.52
├─ Stay amount (room, ex-tax) 69.88 = total − taxes/fees
└─ Taxes and fees 7.64 = sum of included tax/fee surcharges
Stay amount is derived (total − taxes − sales tax − margin) so the lines
always reconcile with the displayed total. It is not a field returned by the
provider.
2. Cost split (what you pay vs provider margin)
Total (gross / suggested) 77.52
├─ Net (your cost) 71.14
└─ Provider margin 6.38 = gross − net (a.k.a. marketing fee)
Why Stay amount ≠ Net
This is the most common question, so it is worth stating plainly:
- Stay amount (69.88) is on the selling side, with taxes/fees removed.
- Net (71.14) is the cost side, and still contains its own share of taxes.
They are two different subtractions from the same total
(total − taxes vs total − provider margin). Any closeness between the two
numbers is a coincidence, not a relationship. The provider does not expose a
"net excluding taxes", so the two breakdowns never reconcile beyond the total.
| Stay amount (69.88) | Net (71.14) | |
|---|---|---|
| Side | Selling (retail) | Cost (what you pay) |
| Taxes/fees | Excluded (shown on their own line) | Included inside |
| Derived from | total − taxes | total − provider margin |
Binding (minimum selling price)
When binding: true, the provider gross/suggested is a minimum selling price:
you must not sell below it. It does not change how the margin or commission is
calculated — it only sets the floor for your selling price. Because
markupGross = gross + margin, your selling price is always ≥ the binding price.
Commissions vs provider margin
- Provider margin (
gross − net) comes from the provider and is shown in the cost view automatically when the provider reports both prices. - Commissions are modelled by your organization (in Connect → Commissions) to surface agency earnings in the breakdown. Configure them when the provider does not report a margin and you still want earnings visibility.
See also: Data Models → Price and Surcharge vocabulary.