Case studies/Commercial real estate
A US REIT holding a commercial office portfolio, pulling monthly rent rolls from 11 third-party property managers, each with its own schema. We built a pipeline that normalises every roll to the portfolio schema and reconciles each field back to the source file.
| Suite | Tenant | Lease end | Base rent (PSF) | Source ref | Status |
|---|---|---|---|---|---|
| 1402 | Acme Law LLP | 2029-06-30 | $48.25 | mgrA.D14 | reconciled |
| 1808 | Northbridge Capital | 2027-11-30 | $52.10 | mgrC.E22 | reconciled |
| 2204 | Cedar Park Dental | 2026-09-30 | $41.00 | mgrB.D31 | escalation |
| 2310 | Whitepine Advisory | 2028-03-31 | $46.75 | mgrA.D45 | reconciled |
| 2502 | Harbor & Finch CPAs | 2030-01-31 | $44.90 | mgrD.F18 | reconciled |
| 2807 | Ridgeline Architects | 2027-08-31 | $50.40 | mgrC.E54 | CAM stop variance |
| 3104 | Sunset Wealth Partners | 2029-12-31 | $54.20 | mgrE.D27 | reconciled |
| 3209 | Pacific Pier Studio | 2026-04-30 | $39.75 | mgrB.D62 | escalation |
| 3411 | Alpine Freight Co. | 2028-10-31 | $47.50 | mgrA.D71 | reconciled |
At a glance
Every third-party manager runs their own system. Every manager's rent roll looks different. The portfolio team needed one schema, reconciled back to each source, every month.
The engagement
The stack
ISO 27001 · ISO 9001 · DPA and NDA signed at kickoff.
Before, the portfolio close
The portfolio team closed the month on a Monday that moved every quarter. The work was the same every time: pull 11 rolls, force them into one schema, hope every tenant reconciled.
Some managers sent XLS with the tenant on column C. Others sent PDFs with the tenant on column A and a merged header cell. A few still sent rolls as scanned printouts. The portfolio team held a mapping spreadsheet that one senior analyst maintained by hand.
Pre-build baseline: average 3 days of analyst time per cycle to normalise all 11 rolls.
The monthly close checked that the sum of tenant rent matched the manager's total. It did not check every field. When the auditor requested a source-to-schema reconciliation, the portfolio team rebuilt the cycle by hand to produce it.
Pre-build baseline: approximately 1.4% of tenant fields diverged from source when audited, caught mid-cycle or later.
Managers changed templates every few months. When a column moved, the analyst caught it on the third mismatch of the cycle. By then, three earlier files had been normalised against the old mapping and posted forward.
Pre-build baseline: 4 to 6 mid-cycle mapping corrections per year, each requiring a reload.
What we built
The pipeline runs the same five stages we implement on every CRE engagement. The details below are the ones we wrote for this REIT's portfolio schema and its third-party manager mix, not a generic template.
One secure inbox per manager. New rolls picked up on a polling cadence, checksum-logged, and held in a staging store before extraction. Every file linked to the manager and the cycle before parsing.
Each roll tagged by manager and by layout version. Layout versioned on a signature of columns and headers, which catches template drift at ingest rather than at reconciliation.
Tenant, suite, lease dates, base rent, recoveries, stepped escalations, concessions. LlamaParse primary across the XLS and PDF mix; Azure AI Document Intelligence fallback on scanned rolls.
Every field reconciled to a cell, row, and file offset in the source. Tenant totals reconciled to the manager's declared total. Below 0.95 on either, the roll holds for analyst review with the flagged field surfaced.
Normalised rolls posted to Yardi Voyager and to the custom data warehouse. Source file and offset map attached to the cycle record. Auditor can trace any tenant field back to its line in the original roll.
After, the numbers the portfolio team signs off
Same managers, same portfolio, same schema, same Yardi instance. The pipeline absorbed the layout work, reconciled every field to its source, and moved the close from a three-day normalisation into an analyst review on the flagged rolls only.
Analysts still review every roll flagged for layout drift. They still own the mapping when a manager changes their template. The difference is that on a clean roll, Yardi and the warehouse both carry the cycle within the hour. On a drift, the analyst sees the changed column before three rolls have posted against the old mapping.
From portfolio analytics
The close used to carry three days of column mapping. Now it carries the exceptions only, with every field traceable back to the source cell.
Head of portfolio analyticsREIT, New York
Handover
The engagement ends at a clean handover. The portfolio analytics team runs the pipeline; Hexaa stays on call for a fixed retention period, then steps back.
Related cases
Each links to a named client, a named document, and the system the clean data lands in. We publish only what the client signed off to publish.
Abstractions pre-populating Yardi for analyst review across 220 assets. 3.1x abstractor throughput on the same team.
→Real estate · 2024REIT · estoppel variance flaggingEstoppels read, variances flagged before they reach closing. Built on LlamaParse against the lease as the authority.
→Banking · 2025Regional bank · commercial loan intakeCommercial loan files extracted against the signed term sheet and posted into nCino with a full audit trail.
→Free 30-minute call
You'll leave with a clear next step.
Each manager sends a different column order and a different header. The pipeline reads each layout, maps the fields into the portfolio schema, and records the source cell so the normalised row can be traced back to the original file at audit.