How AirROI Calculates a Nightly Price

Jun Zhou, Founder at AirROI
by Jun ZhouFounder at AirROI
Published: September 4, 2026
Updated: September 5, 2026

A nightly recommendation starts with your base price, applies date-specific model effects, and then applies your rules and limits. The response explains the final price with signed currency amounts that add up exactly.

See the full calculation as a price breakdown

Follow the money, one stage at a time

The model compounds. Automatic rule percentages share one basis. Price limits apply after rule and custom adjustments.

  1. Base price
    $200.00
  2. Seasonality +20%
    $240.00
  3. Demand +10%
    $264.00
  4. Automatic rules −45%
    $145.20
  5. Custom weekday +10%
    $159.72
  6. Minimum $210
    $210.00
Synthetic USD example. Model: +20% seasonality and +10% demand. Automatic rules total −45%; then custom weekday +10% and a $210 minimum.

A segment's width is the size of that contribution; the right-hand number is the running price after the stage. Automatic rule percentages add together. A later minimum price can raise the result; that is a price boundary, not a demand premium.

In this illustration, the five automatic-rule percentages share a $264 basis. A combined −45% produces $145.20. The custom weekday +10% then produces $159.72, before the $210 minimum applies.

The owner minimum is applied near the end. A fixed price override, if supplied, would follow it and could set a price outside the owner limits.

Follow the calculation

  1. Apply seasonality, modeled weekday, holiday/event, and demand effects in sequence.
  2. Round each automatic-rule percentage to two decimal places, then add the percentages from last-minute, far-future, gap-day, adjacent-day, and occupancy-pacing rules, all against the same post-model price. There is no combined percentage cap.
  3. Apply the custom weekday percentage, then any percentage price override.
  4. Apply minimum and maximum prices: each missing bound defaults to 70% and 1000% of base price, respectively.
  5. Apply a fixed price override, if present, then round the result. Fixed prices bypass both default and explicit limits.

For example, −20% last-minute, −15% gap-night, and −10% occupancy pacing sum to −45%. A $200 post-model price becomes $110. A subsequent custom +10% makes it $121; an explicit $150 minimum then raises it to $150.

Combined rule adjustmentPrice from a $200 post-model basisAfter default $140–$2,000 limits
−45%$110$140
−60%$80$140
+25%$250$250
+50%$300$300
+1000%$2,200$2,000

This table assumes a $200 base and no other adjustments. Each individual rule accepts a percentage greater than −100 with at most two decimal places; there is no fixed upper percentage limit. Multiple discounts can add to −100% or less, in which case the minimum price protects the returned rate. No automatic-rule correction line is added. Review the applied minimum/maximum lines instead.

The engine does not silently substitute a token price. A positive final calculation that rounds to zero fails with PRICE_BELOW_CURRENCY_MINIMUM; a nonpositive calculation fails with PRICING_DATA_UNAVAILABLE. Neither returns a partial calendar.

Try combining pricing rules

Illustrative USD prices, not a live recommendation. Hold gap discount at −15%, occupancy pacing at −10%, and custom weekday at +10%. Assume each rule qualifies.

Combined automatic adjustment: -45%. Price limits apply after these adjustments.

StageUSD per night
After model effects$200.00
Automatic rules -45%$110.00
Custom weekday +10%$121.00
After $150 minimum$150.00

Automatic rules share the same $200 basis. The custom weekday adjustment comes afterward. A fixed price override, if supplied, would bypass this minimum.

Read an explanation line

FieldWhat it tells youExample
codeStable identifier for your applicationminimum_price_limit
labelShort, readable name for your interfaceMinimum price limit
amountSigned contribution in the response currency+20 means the line added $20 in USD
adjustment_percent (optional)Percentage used by the adjustment−20 for a last-minute discount
details (optional)Useful context beyond the labelA named holiday or the default minimum used

Use code for application logic; display label and any details to readers. details is limited to holiday/event names and default price-limit notices. Market-demand lines omit it; unavailable demand within the coverage window is reported in response-level warnings. Not every code appears on every date. Minimum and maximum limits have distinct codes: minimum_price_limit and maximum_price_limit. A limit line appears only when it changes the price.

Do not rebuild the total from percentages

Model effects multiply sequentially, while automatic rules share one post-model basis. Market-demand percentages are rounded to one decimal place for display; other model percentages use up to two. Prices use the full model factors, including changes that round to 0.0% in the display. Automatic-rule percentages are rounded before they are applied. Receipt amounts are differences between rounded running totals, so independently multiplying a displayed percentage can differ by a cent. Sum the returned amount values with decimal-safe arithmetic to reconcile the rate; use the returned price for the recommendation.

For example, a $200 base with only +20% seasonality and +10% demand produces $264. The contributions are $200 + $40 + $24—not $200 + $40 + $20.

A price is not permission to sell the night

The response includes reserved and blocked dates as well as available ones. Stay restrictions appear only when their corresponding custom stay rules are enabled; calendar-row restrictions are not automatically echoed. Use current availability and your publishing policy before changing any channel rates.

Work through a complete response

The three-day World Cup example shows model effects and pricing rules alongside a minimum limit and fixed override. Its model factors are invented for explanation, not historical market observations.