The five PMS data fields nobody trusts (and how to fix it)

Peter Hough · · 6 min read

It was 10:47pm the night before a board meeting when we noticed the comp room count for the quarter was off by 312 nights. Not in the warehouse, not in the BI layer, in the PMS itself. The director of revenue had been reconciling against Lighthouse for weeks and the variance had been hiding inside a single overused code.

Here is the thing nobody likes to say out loud. Your PMS data is dirtier than your dashboard pretends. The pipeline from Opera or OnQ or Maestro into ProfitSage, then into whatever Snowflake or warehouse model your analyst built, is only as honest as the worst-trained user on the night audit shift. You can buy the prettiest subscription BI tool on the market and it will still lie to you, confidently, because the source fields underneath were never governed. Until the property fixes the source, segment-level reporting is theater. These are the five fields we see fail most often, and what we do about each.

1. Comp room codes

The most common failure we find on a new engagement is a single comp code, usually something like STAFF or HOUSE, being used for fourteen distinct reasons. The GM is comping a trial stay for a recruit, the DORM is comping a service recovery for a guest whose room flooded, the sales team is comping a site inspection, and the food and beverage director is comping a vendor review night. All of it lands under one code. By the time it reaches the owner monthly, comp ADR is meaningless, occupancy is overstated against paid demand, and the asset manager is asking why STR penetration looks soft.

The fix is not more codes for the sake of it. The fix is a small, mandatory taxonomy: TRIAL, REVIEW, SERVICE-RECOVERY, INTERNAL-MEETING, VENDOR, MEDIA, GROUP-CONTRACTED, and one EXCEPTION code that requires a written note. Then enforce it. No code, no folio close.

2. Group block release dates

The cutoff date in the PMS, the actual release date, and the attrition window are three different things, and on most properties at least two of them are wrong. We have seen blocks where the cutoff is recorded as the contracted cutoff (sixty days out) but the actual release was negotiated to thirty days by the sales manager, with the change living only in the contract PDF in Tripleseat. The revenue analyst forecasts off the PMS cutoff. The DORM yields based on the PMS cutoff. The block stays open for an extra month, holds inventory, and nobody flags it until the Monday morning ops call when transient pickup is soft and the group rooms never materialize.

The damage compounds. Attrition billing gets missed because the window the PMS thinks applies is not the window in the signed contract. The CFO writes off receivables that should have been invoiced. The director of revenue argues with the director of sales over who owns the miss.

The fix is to tie the PMS group block fields directly to the sales system of record. Cutoff, release, and attrition all flow from the contract, with a weekly reconciliation that flags any block where PMS and Tripleseat disagree.

3. Lost-business reason codes

Open up the lost-business log on almost any property and you will find a field called Reason that contains entries like “price”, “Price”, “PRICE”, “too expensive”, “rate”, “competitor better”, and “see notes”. Sometimes you will find a thoughtful paragraph. Sometimes you will find the word “no”. This is the field your regional VP wants to use to justify a rate strategy shift and your DORM wants to use to argue for a refurb. Both of them are stuck.

The root cause is almost always two things: no enforced taxonomy at entry, and no validation when sales managers close out a lead. The PMS or the sales platform happily accepts free text. People type whatever gets them to the next screen.

The fix is a closed-list taxonomy with maybe twelve entries, no more. RATE, AVAILABILITY, DATE-FLEX, COMPETITOR-LOCATION, COMPETITOR-PRODUCT, MEETING-SPACE, F-AND-B-MINIMUM, BRAND-LOYALTY, INTERNAL-DECISION, NO-RESPONSE, BOOKED-DIRECT-ELSEWHERE, and OTHER, with OTHER requiring a freeform note that is then triaged weekly. Then enforce it at the form level. No reason, no close.

4. Segment misalignment

This one is quiet and expensive. The market segments tracked in the PMS, the segments your revenue management platform yields against (whether that is Duetto or IDeaS or an in-house model), and the segments your CFO sees in the owner monthly are often three different taxonomies. Transient might be split into Retail, Discount, Negotiated, and Package in the PMS, but rolled up into one bucket called Transient in the warehouse. Group might include Contracted, Tentative, and Wholesale Allotments in the PMS, but the wholesale piece quietly gets booked as Transient because that is how the GDS feed comes in.

The on-property revenue analyst knows. They build a workaround in a spreadsheet. The reconciliation lives in their head and on their laptop. When they leave the property, the institutional memory of which PMS code maps to which strategy segment leaves with them.

The fix is a documented segment map, owned by corporate revenue management, applied consistently across every property, version controlled, and validated weekly. Every PMS market code rolls to exactly one strategy segment. No code without a mapping. New codes require approval before they go live.

5. ADR vs net rate

The last one is the one that breaks owner reporting most cleanly. The PMS exports a rate. That rate might be gross of commissions (OTA pickup), gross of package components (the breakfast buffet bundled with the room), gross of tax in some markets, and net in others depending on how the rate plan was configured. Then ProfitSage reads one column. The dashboard reads another. The STR submission uses a third definition. The asset manager compares your ADR to a comp set ADR that may itself be net of different things.

We have seen a 9% ADR variance between two reports of the same month, same property, both technically correct, because one read gross rate and the other read net of OTA commission and package allocation. The board pack used one, the owner update used the other, and the CFO spent a day reconciling instead of doing her job.

The fix is to define one canonical rate concept (we usually use net of commission, net of package allocation, gross of tax) and make every report state which one it uses in the footer. Then build the warehouse with both versions available, clearly labeled, and never let a dashboard publish without specifying.

What we would actually do

We start with a one-week dirty-data audit, property by property. We pull the last twelve months of PMS extracts, profile every code in every one of these five fields, and produce a single report that ranks the failure modes by dollar impact. Then we propose a taxonomy and a validation layer that lives between the PMS and the warehouse, so that bad data either gets cleaned at ingest or gets flagged loudly before it pollutes downstream models.

The governance piece matters more than the tools. Every property gets a named owner for each taxonomy (usually the on-property revenue analyst), corporate owns the master list, and the weekly dirty-data report goes to the DORMs and the regional VPs every Monday. Codes drift. People leave. Nobody fixes data hygiene once. You build the muscle, or it rots.

If your dashboard tells a different story than your night auditor, your night auditor is right. Reply to this and we will pull a sample of your last quarter and tell you which of these five is bleeding the most.

Peter Hough is co-founder of Hospitality Data Solutions. Twenty years in hotel and restaurant operations, now building the systems we wished we had.

pms data-hygiene revenue-management