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:

GuestsUnit 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 night

variant.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_person and variant.pricing_strategy_per_item for experience variant pricing logic.
  • Use variant.prices for experience occupancy tiers and the accommodation_availability tag for accommodation occupancy pricing.
  • Use the variant_pricing tag for dynamic pricing in booking flows.
  • Always use the money filter with .fractional values when displaying prices.
  • Avoid hard-coded prices, currency symbols, or manual currency conversion.

On this page