Seasonality and Demand Controls Explained

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

Model controls change the strength of AirROI's date-specific effects. They do not enable custom pricing rules, change your base price, or establish price limits.

Compare sensitivity choices side by side

Change the strength of the model—not the base price

Same synthetic +20% seasonality and +10% demand, four sensitivity choices.

Nightly price: $220.00 to $264.00.USD per night$0$70$140$210$280100 / 100: $264.00$26450 / 150: $253.00$2530 / 100: $220.00$220100 / 0: $240.00$240100 / 10050 / 1500 / 100100 / 0Scenario
Hover, tap, or use arrow keys to explore.
Labels = seasonal / demand sensitivity. $200 base, no other model effects or custom rules. USD per night.

Sensitivity scales the distance from a neutral multiplier of 1, not the entire price. For a +20% model effect, 50% sensitivity gives a +10% effect. It does not halve the nightly rate.

What each switch does—and does not do

SettingChangesLeaves untouched
seasonality_sensitivity_percentSeasonal, modeled weekday, and holiday/event factorsBase price and your custom weekday policy
demand_sensitivity_percentMarket-demand effect, within its effective boundsYour occupancy-pacing matrix
apply_negative_demand_adjustments: falseSuppresses negative model-demand adjustmentsNegative seasonality and custom discounts

At zero demand sensitivity, you remove that model effect. You do not create missing market evidence or turn off your own occupancy rule. Keep model-demand evidence warnings separate from calendar-evidence warnings in your integration.

Start with defaults

Both sensitivity controls default to 100%, meaning the model effect is used as supplied. Change a control only when you can explain which behavior you want to change; compare the resulting explanation lines before publishing.

The JSON below is an addition to this complete Calendar Prices request. Merge fields into one request; do not send a rule fragment by itself.

{
  "location": {
    "latitude": 25.7907,
    "longitude": -80.13
  },
  "currency": "USD",
  "base_price": 200
}

All worked prices use USD and start from a $200 base price before model effects, with no custom rules unless stated. They demonstrate arithmetic, not live forecasts.

Scale model effects

{
  "advanced": {
    "seasonality_sensitivity_percent": 50,
    "demand_sensitivity_percent": 150,
    "apply_negative_demand_adjustments": false
  }
}

seasonality_sensitivity_percent scales seasonality, modeled weekday, and holiday/event effects: at 50, a model +20% becomes +10%. demand_sensitivity_percent scales demand: at 150, a model +10% becomes +15%. Both accept 0–200 and default to 100; zero removes the corresponding effect.

For example, with only a +20% seasonal effect and +10% demand effect, these settings give 200 × 1.10 × 1.15 = 253. The effective demand adjustment is bounded to −15% / +400%. Setting apply_negative_demand_adjustments to false suppresses negative demand effects and omits their explanation line; the default is true. Increasing seasonal sensitivity above 100 can return 503 if a scaled model factor becomes zero or negative.

Compare the same synthetic model inputs

Assume a $200 base price, only a +20% seasonal effect and +10% demand effect, with no custom rules and default limits that do not affect these outcomes:

Seasonal sensitivityDemand sensitivityCalculationUSD
100100200 × 1.20 × 1.10264
50150200 × 1.10 × 1.15253
0100200 × 1.00 × 1.10220
1000200 × 1.20 × 1.00240

Negative demand is a separate choice

With a $200 running price and a −10% demand effect, the default behavior produces $180. Turning off negative demand adjustments keeps it at $200 and omits that demand contribution. It does not suppress negative seasonality or your custom discounts.

Unavailable demand evidence is different from choosing to disable negative demand: inspect response warnings. See warnings and recovery.

Change one control, then compare

Keep the base price and custom rules unchanged while comparing a model control with its default. Read the seasonal and demand contributions before judging the final rate; later rules and limits may change the result again. Use the calculation guide to follow that sequence.

Read small demand adjustments

Calendar Prices displays the market-demand percentage to one decimal place, for example +1.2% or −0.3%. The nightly price and currency contribution use the full published factor, so do not recalculate them from the rounded percentage. A factor small enough to display as 0.0% can still affect the returned price.

New demand scoring retains supported adjustments below 2%; evidence checks and factor limits still apply. Previously published calendars keep their original factors until the next pricing-data release. Removing the cutoff in code cannot recover values already replaced with neutral factors in an older release.