TRAVEL & HOSPITALITY

Dynamic Pricing Engine for Hotel Revenue Management

Built a demand-forecasting and dynamic pricing engine for a 200-property hotel chain, increasing RevPAR by 19% in six months.

+19% RevPAR200 Properties15-Min Price Updates

The Challenge

A 200-property hotel chain was setting room rates manually using spreadsheets updated weekly by revenue managers. Rates were based on historical occupancy and competitor rack rates, with no consideration of local events, day-of-week demand patterns, or booking pace. Properties in high-demand markets were consistently underpriced during events, while properties in leisure markets were overpriced during shoulder seasons.

The revenue management team of 8 people could not effectively manage pricing across 200 properties and 15+ room types each. Rate changes took 24–48 hours to propagate through the channel manager to OTAs.

Our Approach

We built an automated dynamic pricing engine that forecasts demand and sets optimal rates for every property, room type, and date combination, with prices updating every 15 minutes.

Demand Forecasting: An XGBoost model predicts occupancy for each property and date, 90 days into the future. Features include historical booking curves (how many rooms were booked 90, 60, 30, 14, 7, 3, 1 days before arrival), local event calendars (scraped from Eventbrite, Ticketmaster, and convention centre websites), day-of-week and seasonality features, competitor pricing (scraped daily from OTA listings), and macroeconomic indicators (flight search volume to the destination, Google Trends for the city).

Price Optimisation: Given the demand forecast, a constrained optimisation model sets the rate that maximises expected revenue per available room (RevPAR). Constraints include minimum rate floors (to protect brand positioning), maximum rate ceilings, rate parity across channels, and length-of-stay pricing rules.

Integration: Optimised rates are pushed to the property management system (Oracle OPERA) and channel manager (SiteMinder) via API every 15 minutes. The system also generates rate recommendations for group and corporate bookings that revenue managers can accept or modify.

Results

MetricBeforeAfter
RevPARBaseline+19%
Rate update frequencyWeekly (manual)Every 15 minutes
Revenue manager workload25 properties/person50+ properties/person
Event-driven rate captureMissed ~40% of events95%+ event coverage
Rate parity violations12/month avg< 1/month