Hotel Intelligence Accuracy: Full Audit and Fix Plan

Generated 2026-07-15 (v2, supersedes the morning audit on this URL) · Ground truth: all 655 STR report files in the Hotel Research shared drive, parsed read-only (str-sweep parsed.jsonl: 592 files with data, 10,543 report-months, 100 hotels, 641 registered comp set rosters) · Compared against the tax-receipt database (hotel_tax_receipts, current through 2026-05).
51 of 100
Hotels fully clean: tax data matches their STR report cards within 8 percent, every month, for up to 106 straight months (wide-audit.json)
$1,337,228,079
Double-counted: the same tax filing stored twice for 199 hotels, 148 of them wrong on the site right now (dedupe scan of hotel_tax_receipts, 2026-07-15)
494
Wrong entries in the hotel identity map (of 4,403 checked against the census, chain-validate scan) causing money to land in the wrong hotel's bucket
EXECUTED
All repairs applied to production 2026-07-15 evening and verified: cleanup converged to zero pending changes, and every proof case below landed on its corrected number (commit series through migration 251)

1. What we did

Every STR report in the Hotel Research drive (655 files across 121 deal folders) was downloaded and read. That gives 10,543 hotel-months of trusted numbers covering 100 Texas hotels, 2015 through May 2026. Each hotel-month was compared against what the tax database says the hotel earned. Where the two agree, the tool is right. Where they diverge, we chased the reason until we had a mechanism, not a guess. Every divergence traced to one of six specific defects listed below. The comparison method itself is sound: for the 51 hotels free of all six defects, the two sources agree within 0.92 to 1.04, month after month.

2. Why yesterday's Beaumont fix did not hold (and what does)

The tool has a nightly "self-healing" routine, and it was healing in the wrong direction This morning at 5:51 the bad Beaumont data was scrubbed and verified clean. At 6:00 the nightly sync ran, and a database routine (enrich_receipts_str_number, added in migrations 106/109) re-applied the bad data within minutes. That routine matches money to hotels by OWNER ONLY. The owner who ran HGI Beaumont until 2022 now runs a different Hilton Garden Inn near Clear Lake, so every night the routine pours the Clear Lake hotel's money back into Beaumont's bucket. Any cleanup is undone by the next sunrise. The staged fix (migration 245) makes the routine check the street address and the ownership dates, not just the owner. Verified safe: simulated against all 551,322 unassigned rows, it changes nothing today and only behaves differently after the cleanup, where it re-applies the RIGHT stamps.

3. The six defects, with counts

A. Double-counted filings: $1,337,228,079 across 199 hotels (148 live) The same monthly filing exists twice, once under the plain owner ID and once under an outlet-numbered copy of the same ID, identical to the cent. Residence Inn Arlington reads exactly 2.00x its STR report card because of this. Counted by exact-match scan 2026-07-15 (6,073 duplicate rows). Fix staged: migration 248 deletes the copies and adds a watch view.
B. Wrong identity-map entries: 494 of 4,403 The map that ties a tax filer to a hotel (taxpayer_chain) has 494 entries pointing at the wrong hotel, verified by checking each entry's own name and address against the STR census (chain-validate scan). This is the Beaumont class: it also explains Days Inn Abilene showing $306 per room and the Westin Woodlands carrying an Embassy Suites' money. Fix staged: migration 246 re-points 165 entries whose correct hotel is provable by address, disconnects 329 that have no safe answer (blank beats wrong), and adds the missing Clear Lake entry.
C. Cross-stamped money: $164,289,881 since Jan 2024 (contamination2 scan 2026-07-15) 119 hotels have another hotel's money in their bucket in the same months (contamination2 scan; the count includes some address-spelling twins, the strictly-verified core is 84). The cleanup run plus the identity repair addresses these; the nightly report-card check (below) burns down the remainder.
D. Garbage rows from a mis-read download: 742 rows Some lines in the state's file have extra columns; the reader shifted them and stored a DATE as a dollar amount (20251231 became $20,251,231). 16 sit in live windows. Fixes staged: migration 247 nulls them; the download reader now skips and counts malformed lines (sift-sync.mjs guard).
E. Missing history: 7 hotels with zero tax data, 10 more with 18 to 56 month holes Seven hotels we researched (with years of STR reports on file) were never identity-matched, so the tool shows nothing for them. Ten more have multi-year holes, mostly earlier owners' filings never linked. The identity repair plus a match pass claims these (wide-audit.json missing-months flags).
F. Wrong room counts and wrong comp set lists 542 hotels have room counts more than 10 percent apart between our census figure and what the hotel reports to the state; rooms are the divisor in every per-room number. And 4 of our 12 tracked comp set lists do not match the officially registered comp set on the hotel's own STR report (SpringHill Northwest's list mixes in six Medical Center hotels; the aloft College Station list contains El Paso, Odessa, Waco and Corpus Christi hotels). We extracted the registered rosters from 641 report files to fix the lists against.

4. Before and after: the proof cases (EXECUTED and verified live)

"After the fix" values below are what str_hotel_summary serves in production as of 2026-07-15 evening, verified after the final refresh. The cleanup is convergence-proven: a re-run reports zero pending changes, and the heal-stamp and alignment routines both return zero on second run.

HotelSite shows nowAfter the fixWhat gets removed
Hilton Garden Inn Beaumont $222.25 $118.57 Clear Lake Hilton Garden Inn's money removed (same owner sold Beaumont in 2022 and kept filing for its other hotel)
Days Inn Abilene $306.27 $99.65 Whitten at the Mall event venue removed
Westin Woodlands $296.35 $235.80 Embassy Suites Hughes Landing removed (now its own hotel at $199.16)
Residence Inn Arlington 2.00x its report card $86.24, matches report card the same filing was stored twice and counted twice
Staybridge Suites Med Center (comp set member) $112.92 $104.23 Diamond Inn Hobby Airport removed
DoubleTree Med Center (comp set member) $122.10 $115.60 Palace Inn removed
HGI Clear Lake NASA + Embassy Hughes Landing invisible $94.60 and $199.16 two hotels that showed nothing now carry their own filing history
Source: str_hotel_summary production values read 2026-07-15 after migrations 245 through 251, the receipt cleanup run, and the full refresh chain. During execution three more re-stamping layers surfaced and were fixed the same way: the nightly summary rebuild re-deriving hotel assignments (251 makes it inherit from the repaired identity map every night), wrong owner links on the hotels records themselves (250), and the fallback rule for single-location owners (245 v3 sources it from current filers so owners who MOVED hotels stop dragging their old hotel's stamp onto the new one).

5. The fix plan

  1. DONE 2026-07-15: the repair package ran. Seven database migrations (245 through 251), the receipt cleanup, and the ingest guard are live. All proof cases verified on their corrected numbers; the cleanup, heal-stamp, and alignment routines all report zero pending changes on re-run, and the nightly jobs now re-apply the CORRECT map instead of the broken one.
  2. This week: load all 10,543 report-months from the sweep into the tool as permanent ground truth (parser already exists), fix the 4 comp set lists from the registered rosters, run the match pass for the 7 invisible hotels and the big history holes, and start the room-count triage with the state's figure and the report cards as tie-breakers.
  3. Standing guard (what makes this permanent): a nightly reconciliation that compares every hotel with report-card data against its tax numbers and flags any month that drifts more than 15 percent; a post-refresh check that the six proof hotels still show their correct numbers (any regression pages the morning brief, same channel as the pipeline watchdog); and DataHealth cards for duplicates, orphans, and room conflicts so drift is visible the day it starts.

6. Every flagged hotel (49 of 100)

The full flag list from the widened audit. "Ratio" is the hotel's typical tax-data-to-report-card agreement (1.00 is perfect). MISSING means published months with no tax rows; SPIKES are single months deviating over 30 percent from the hotel's own norm; ROOMS shows our census figure vs what the hotel reports to the state.

HotelMonthsRatioFlags
TownePlace Suites by Marriott Dallas McKinneyMcKinney · STR 63134 3/55 0 SYSTEMATIC_LOW_0.00 MISSING_24mo ROOMS_88v1
Residence Inn ArlingtonArlington · STR 9468 56/58 2.005 SYSTEMATIC_HIGH_2.00 SPIKES_21 MISSING_2mo
(no summary row) · STR 59640 0/18 none NO_SUMMARY_ROW MISSING_18mo
(no summary row) · STR 66199 0/55 none NO_SUMMARY_ROW MISSING_55mo
(no summary row) · STR 68597 0/59 none NO_SUMMARY_ROW MISSING_59mo
(no summary row) · STR 23074 0/58 none NO_SUMMARY_ROW MISSING_58mo
(no summary row) · STR 65094 0/54 none NO_SUMMARY_ROW MISSING_54mo
(no summary row) · STR 52934 0/54 none NO_SUMMARY_ROW MISSING_24mo
(no summary row) · STR 13037 0/47 none NO_SUMMARY_ROW MISSING_17mo
Hyatt House Dallas/AddisonAddison · STR 32581 42/77 1.001 MISSING_29mo ROOMS_132v100
SpringHill Suites Houston WestchaseHouston · STR 64071 56/60 1.003 SPIKES_2 ROOMS_112v200
Courtyard Houston Medical Center/NRG ParkHouston · STR 60005 47/70 1.11 SPIKES_20 MISSING_18mo
Extended Stay America Suites – Houston – GalleriaHouston · STR 30592 61/61 1.005 SPIKES_1 ROOMS_146v92
Hilton Garden Inn Dallas DuncanvilleDuncanville · STR 53276 69/77 1.039 SPIKES_3 MISSING_2mo
Hampton Inn Houston/StaffordStafford · STR 35278 40/42 1 SPIKES_1 MISSING_2mo
Sheraton North Houston at George Bush IntercontinentalHouston · STR 3109 46/46 1.039 ROOMS_419v491
Staybridge Suites Houston Medical CenterHouston · STR 65646 57/57 1.109 ROOMS_120v75
Homewood Suites by Hilton Houston-WestchaseHouston · STR 36001 0/56 none MISSING_56mo
Residence Inn by Marriott Houston Sugar Land/StaffordStafford · STR 34952 27/53 1 MISSING_26mo
Fairfield by Marriott Inn & Suites Dallas Medical/Market CenterDallas · STR 15659 21/58 0.995 MISSING_31mo
Hampton Inn & Suites Houston Medical Center NRG ParkHouston · STR 35276 18/73 1.002 MISSING_49mo
Courtyard by Marriott Dallas Medical/Market CenterDallas · STR 27535 21/76 0.99 MISSING_49mo
SpringHill Suites San Antonio SeaWorld/LacklandSan Antonio · STR 60214 30/61 1.019 MISSING_31mo
Wyndham Midland DowntownMidland · STR 9923 0/18 none MISSING_18mo
Hampton by Hilton Inn & Suites Dallas-Arlington-SouthArlington · STR 56464 71/71 1.036 SPIKES_31
Courtyard Houston Sugar Land/StaffordStafford · STR 35398 54/54 1.007 SPIKES_25
DoubleTree by Hilton Hotel & Suites Houston By The GalleriaHouston · STR 10057 46/46 1.01 SPIKES_1
Hilton Garden Inn North Dallas Central ExpyDallas · STR 68812 47/47 1.059 SPIKES_1
Element Houston Vintage ParkHouston · STR 58088 70/70 1.011 SPIKES_2
Courtyard Houston Sugar Land Lake PointeSugar Land · STR 66432 87/87 1.009 SPIKES_1
Lorenzo Hotel Dallas, Tapestry Collection by HiltonDallas · STR 16291 73/73 1.009 SPIKES_1
Courtyard Dallas DFW Airport North/IrvingIrving · STR 33493 82/82 1.014 SPIKES_1
SpringHill Suites Houston Hwy 290/NW CypressJersey Village · STR 64597 37/37 1.034 SPIKES_1
Hyatt Place Austin / Cedar ParkCedar Park · STR 67635 75/75 1.029 SPIKES_2
Homewood Suites by Hilton Houston West Energy CorridorHouston · STR 56262 61/61 1 SPIKES_5
Las Colinas Inn Irving, SureStay Collection by Best WesternIrving · STR 34621 62/62 1.017 SPIKES_1
The Moran Hotel CITYCENTREHouston · STR 59902 95/101 1.127 SPIKES_1
Hyatt House Dallas/Lincoln ParkDallas · STR 35488 68/68 1.02 SPIKES_5
TownePlace Suites Fort Worth Northwest Lake WorthFort Worth · STR 67719 34/34 1.007 SPIKES_1
TownePlace Suites Houston Northwest/Beltway 8Houston · STR 70644 52/52 1 SPIKES_1
Four Points by Sheraton Houston Energy CorridorHouston · STR 64206 87/87 1.016 SPIKES_4
Four Points by Sheraton MidlandMidland · STR 63746 90/90 1.004 SPIKES_2
Hyatt Place Dallas / Las ColinasIrving · STR 36931 30/30 0.997 SPIKES_1
Hyatt Regency Houston WestHouston · STR 5819 78/106 1.025 SPIKES_2
Hyatt House Houston/GalleriaHouston · STR 30982 70/70 1.005 SPIKES_1
Renaissance Dallas North HotelDallas · STR 26966 75/100 1.038 SPIKES_1
Holiday Inn & Suites Houston West - Westway ParkHouston · STR 60598 62/62 1.012 SPIKES_2
Home2 Suites by Hilton Lewisville DallasLewisville · STR 67831 46/46 1.003 SPIKES_3
La Quinta Inn & Suites by Wyndham Houston Spring SouthSpring · STR 67738 54/54 1 SPIKES_1
Source: wide-audit.json 2026-07-15 (str-sweep parsed.jsonl x hotel_tax_receipts). The 51 clean hotels are omitted here; full data in the audit artifacts.