Per person, per unit, and per night
Understand how variant pricing works across Experience and Accommodation products.
See also: Variant object, Price object
Product variants can be priced in different ways depending on the product type and how the creator wants to sell the product.
Use variant.type to check the variant type:
{% if variant.type == "experience_variant" %}
Experience pricing
{% elsif variant.type == "accommodation_variant" %}
Accommodation pricing
{% endif %}Experience variants
Experience variants can be priced either per person or per unit.
Use pricing_strategy_per_person and pricing_strategy_per_item to determine the pricing strategy:
{% if variant.pricing_strategy_per_person %}
Per person pricing
{% elsif variant.pricing_strategy_per_item %}
Per unit pricing
{% endif %}Per person pricing
With per person pricing, each quantity purchased represents one guest.
For example, if a ticket costs £50 per person:
- Quantity 1 = 1 guest = £50
- Quantity 2 = 2 guests = £100
You can access the price using:
{{ variant.price.fractional | money }}Per unit pricing
With per unit pricing, the customer buys one unit rather than one ticket per person.
For example:
- One cabin
- One tent pitch
- One private table
- One vehicle hire
The creator defines a minimum and maximum occupancy for the unit. The customer pays for the full unit, regardless of the number of guests selected.
{{ variant.price.fractional | money }}You may also choose to display the equivalent per-person price:
{{ variant.price.per_person_fractional | money }}Per unit pricing with tiers
Per unit variants can also use price tiers and occupancy.
With tiered pricing, the price of the unit changes depending on the number of guests selected.
For example:
| Guests | Unit price |
|---|---|
| 1–2 guests | £250 |
| 3–4 guests | £350 |
| 5–6 guests | £450 |
Use variant.prices to display all available tiers:
{% for tier in variant.prices %}
{{ tier.occupancy }} guests: {{ tier.fractional | money }}
{% endfor %}This is useful for products where the same unit can support different occupancy levels, such as a cabin, room, or group package.
Per unit with per-person pricing
Some per unit variants are sold as a unit but priced per person within that unit.
For example, a tent pitch might allow 1–4 guests and charge £35 per guest.
In this case:
- The customer selects one unit.
- The customer also selects the number of guests.
- The final price is calculated from the guest count.
Both variant.price.fractional (total at max occupancy) and variant.price.per_person_fractional (per-guest rate) are available.
These variants have pricing_strategy_per_person set to true, but are per-unit in terms of what the customer
purchases. The pricing strategy determines how the total is calculated, not what is being sold.
Accommodation variants
Accommodation variants are always priced per night.
The creator sets:
- A nightly price.
- A minimum and maximum occupancy.
- An optional minimum number of nights (
variant.minimum_nights). - An optional minimum stay price (
variant.min_price_of_stay_fractional).
Standard nightly price
Access the base nightly price using:
{{ variant.price.fractional | money }} per nightvariant.prices for accommodation variants returns a single entry with the base nightly rate. It does not contain
per-occupancy tiers like experience variants. Use the accommodation availability tag for occupancy-based pricing.
Guest discounts
Creators can configure a discount per unused guest slot. For example, a room with max occupancy of 4 at £300/night with a £25 guest discount:
- 4 guests: £300/night
- 3 guests: £275/night
- 2 guests: £250/night
These discounts are reflected in the day-level prices returned by the accommodation availability tag, not on variant.price.
Per night price overrides
Creators can override the standard nightly price for specific dates.
To access accommodation prices with date-specific overrides and guest discounts, use the accommodation availability tag:
{% accommodation_availability variant %}
{% for day in result.days %}
<p>{{ day.date | date: "%d %b %Y" }}</p>
{% for price in day.prices %}
<p>
{{ price.occupancy }} guests:
{{ price.fractional | money }} per night
</p>
{% endfor %}
{% endfor %}
{% endaccommodation_availability %}Each day's prices array contains one entry per possible guest count, reflecting both date overrides and guest discounts.
Dynamic pricing
For booking UIs where prices change based on customer selections (dates, guest count, quantity), use the variant_pricing tag:
{% variant_pricing variant: variant, class: "js-price", adult_count: 2, start_on: start_date, end_on: end_date %}This renders a <span> that dynamically fetches and displays the correct price. Use this instead of manual price calculation when prices depend on user input.
Developer considerations
When displaying variant pricing:
- Use
variant.pricing_strategy_per_personandvariant.pricing_strategy_per_itemfor experience variant pricing logic. - Use
variant.pricesfor experience occupancy tiers and theaccommodation_availabilitytag for accommodation occupancy pricing. - Use the
variant_pricingtag for dynamic pricing in booking flows. - Always use the
moneyfilter with.fractionalvalues when displaying prices. - Avoid hard-coded prices, currency symbols, or manual currency conversion.