Hospitality RMS, revenue management for independent hotels
A system that forecasts demand and recommends prices and stay restrictions, connected to six PMSs and two channel managers.
- Industry
- Hospitality
- Engagement
- My own product
- My role
- Product design, architecture and development
- Duration
- In production since March 2026
- Stack
- NestJS, Python, FastAPI, LightGBM, PostgreSQL, TimescaleDB, Redis, Next.js, Docker, Hetzner
The problem
Independent hotels and aparthotels with 30 to 150 units usually set prices with a spreadsheet and the gut feeling of whoever handles bookings. The revenue management tools on the market are built for chains and priced accordingly.
What I decided
- The system recommends, a person decides. Every proposed price or restriction (minimum stay, closed to arrival) is approved, adjusted or rejected. While a hotel learns to trust the system, that matters more than automating everything.
- One shared data model and one adapter per PMS. Adding a new PMS doesn’t require touching the forecasting engine.
- One server per client, so each hotel’s data stays isolated.
What I built
- Adapters for Sihot (XML), Apaleo (OAuth2), Noray on Business Central (OData), Amenitiz, Cloudbeds and Mews, plus the Channex and SiteMinder channel managers. Credentials are stored encrypted.
- A Python forecasting engine with LightGBM, calibrated uncertainty and a readable explanation for every recommendation.
- Competitor price comparison, overbooking simulation and a test bench that replays past seasons to validate every engine change.
- A Next.js dashboard, a NestJS backend on PostgreSQL with TimescaleDB, and deployment through GitHub Actions.
Result
It has been running in production at an aparthotel since March 2026. Across roughly 36,000 real bookings, the forecast’s mean absolute error is 1.62 units.