The Property Data Problem Every CRE Platform Eventually Hits

By Rizwan Yousuf, Vice President of Data and AI
The Property Data Problem Every CRE Platform Eventually Hits

Every commercial real estate platform hits the same ceiling eventually. You build solid integrations for the first few data sources. Lease abstracts, rent rolls, market comps flow cleanly into your analytics layer. Then someone asks for building sensor data from a new IoT vendor, or the team wants to pull in a third-party brokerage feed, or a large tenant requests integration with their own facilities management system. The answer, more often than not, is: that is a three-month project.

That timeline is not a technology problem. It is a structural one, and most platforms do not discover this until they are already stuck.

The reason matters. The traditional approach to data integration builds pipelines per source: map the incoming schema to whatever the application already expects, handle edge cases in code, ship it. This works for source one and source two. By source three or four, the accumulated assumptions embedded in each pipeline start to conflict. Changing one source breaks downstream consumers that depended on its specific schema. Cross-source queries require manual reconciliation because no one agreed on what "tenant" or "vacancy" means across systems. Data engineering time stops going toward new capability and starts going toward maintenance.

The gap is measurable. The dbt Labs 2025 State of Analytics Engineering report, which surveyed 459 data practitioners, found that even among teams already using AI to answer natural-language questions about data, two-thirds generate SQL directly against raw tables rather than querying through a semantic layer. Most platforms are operating without a formal definition of what their data actually means in business terms. Every analyst query, every AI model, every dashboard interprets raw data through whatever assumptions the person who wrote it brought to the table. In most domains, this is a governance problem. In commercial real estate, where a misaligned definition of "vacancy" between two source systems can produce materially different portfolio metrics, it is a decision-quality problem.

Why Property Data Is Structurally Harder Than It Looks

The heterogeneity problem in CRE is not incidental. It runs down to the foundations of how the industry generates and stores data.

Consider something as basic as square footage. A property appears in four different systems. In Yardi, the leasable area is rentable square footage per the lease agreement. In CoStar, the same property is measured in BOMA gross area. In the IoT platform that monitors the building's HVAC, space is represented as a collection of sensor zones. In the tenant's own facilities system, they track usable square footage. These are four legitimate, defensible measurements of the same physical space. They will never match. And unless the platform has explicitly defined which measurement is authoritative for which purpose, every cross-system join that involves square footage is silently wrong.

The same problem surfaces at every entity in the domain. Tenants appear as lease reference numbers in property management software, DUNS numbers in credit databases, company names in brokerage CRMs, and contact records in deal tracking tools. Submarkets are defined by CoStar using one set of geographic boundaries, by CBRE using different ones, and by local market participants using informal conventions that exist in no database at all. Lease types, gross, net, modified gross, absolute net, have definitions that vary by market, vintage, and counterparty.

None of this is anyone's fault. CRE data was never designed to be interoperable. It accumulated across systems built to solve specific operational problems, not to federate with each other. The result is a landscape where every new integration is a negotiation between two different worldviews of the same underlying reality.

The ETL-per-Source Trap

When a team first encounters this problem, the instinct is to solve it in the integration layer: write code that translates source system A's concept of a tenant into the representation the application expects, then do the same for source system B. This works. For a while.

The trap is that every mapping rule encodes an assumption in application code. When source system A changes its schema, which vendor systems do regularly and without warning, someone has to find every place that assumption lives and update it. If the mapping rules for four sources are distributed across four separate pipelines, a schema change in one source potentially breaks three other pipelines that referenced the same entity. The blast radius grows with every integration added.

The maintenance math compounds fast. An integration that costs eight weeks to build initially might cost two or three weeks to maintain every time the upstream source changes. Four sources, two changes per year each: that is 16 to 24 weeks per year on integration maintenance alone, before a single new capability is added. As the source count grows, more of the engineering roadmap disappears into keeping existing pipes running.

Cross-source analytics, the analyses that actually drive decisions, are the most expensive victim. An investor wants to know which assets in the Austin submarket have leases expiring in the next 24 months, where the tenant's parent company has a declining credit score. That question spans four entities: Asset (location in submarket), Lease (expiration date), Tenant (parent-child structure), and Credit data (score trend). Without a shared model that defines how those entities relate to each other, answering it requires a data engineering sprint to manually join four tables and reconcile the definitions. That sprint takes two to three weeks. Multiply by the frequency of LP reporting, asset management reviews, and tenant risk assessments, and the queue becomes a competitive bottleneck.

The Four Approaches: Why Three of Them Fail Under Load

The most natural first move when you need data from a new source is to build a dedicated connector. You write a Yardi connector, then a CoStar connector, then an MRI connector. Each one transforms source data into the format your application expects. This pattern ships fast and carries no architectural overhead at source one or two. The failure mode surfaces around source three or four, and it is architectural rather than incidental. Each connector encodes assumptions about what business concepts mean in terms of that specific source system. When you need a cross-source query, you discover those assumptions conflict: Yardi's effective rent calculation is gross rent less landlord-controlled expenses, MRI's base rent field is NNN, and the calculations for a portfolio with both structures now require a custom reconciliation function that lives in neither connector and must be maintained separately. Schema changes in any source do not stay contained to one connector; they break any downstream consumer that relied on that source's concept of "tenant" matching another source's. The blast radius for a vendor schema release grows proportionally with the number of sources that share that concept.

The logical fix is to define a canonical schema. You pick column names that represent your domain concepts, write ETL pipelines from each source to that schema, and land everything in a warehouse. Cross-source queries now run against a single schema. There are two failure modes, and they tend to appear on different timescales. The first is schema rigidity: the canonical schema is inevitably designed around the sources that were already connected when it was built. Source six arrives with entity types you did not anticipate, say HVAC zone data with a Siemens-specific automation object hierarchy, and adding those entity types requires warehouse schema migrations that cascade to every consumer who assumes the current schema. The second failure mode is logic displacement: business rules about what counts as in-place rent, which square footage measurement is authoritative, or how to handle a lease spanning multiple suites end up embedded in ETL transformation code rather than in a single governing definition. When the definition needs to change, it exists in twelve places across four pipelines.

Event-driven architecture solves operational problems well. Source systems publish events when records change, consumers subscribe to what they need, and the platform reacts in near-real-time to individual record changes. For workflows that execute in response to a specific trigger, this is the right pattern. For analytical queries that need portfolio-level aggregations or point-in-time state reconstruction, it breaks. "What were the tenants with leases expiring in the next 18 months as of the last day of Q2, where the parent company credit score had declined in the prior 90 days?" requires either a snapshot store or replaying the full event history to reconstruct state at a past moment. For a CRE platform running quarterly LP reporting, building LP-ready data from event replay is operationally fragile and computationally expensive. Events and semantic layers are not mutually exclusive in practice, but events do not substitute for a model that defines what entities and their relationships mean.

The semantic layer is the fourth option, and it addresses the failure modes of the other three. Entity definitions live separately from ingestion, storage, and query. Each source system maps to canonical entities rather than to each other. Business logic lives in the mapping layer, not in individual connectors or ETL transformation code. Consumer queries target stable canonical schemas that do not change when source systems release schema updates. The upfront cost is real: defining the ontology before adding sources requires governance work and cross-functional alignment that feels slow compared to shipping a connector. The payoff compounds: each new source addition becomes a mapping exercise against a stable target rather than an architectural negotiation that may require changes to existing consumers.

The Semantic Layer: What It Actually Is

The semantic layer is the shared model that should have been defined before any of the integrations were built. It is a formal definition of what entities exist in the domain, what attributes they carry, and how they relate to each other, independent of where the data comes from.

In a CRE platform, the entity ontology looks roughly like this. It is not a proprietary framework. It is the standard vocabulary that any CRE analyst uses daily, made explicit and machine-readable so that source systems can map to it rather than having application code silently inherit whatever definition a particular source happened to use.

Asset (property): canonical identifier, property type (office, industrial, retail, multifamily, mixed-use), address, gross leasable area in rentable square feet using the lease measurement standard as the authority, year built, market, submarket reference.

Space: canonical identifier, parent asset identifier, floor, wing, suite designation, usable square footage, rentable square footage, BOMA gross area, current occupancy status.

Lease: canonical identifier, space reference, tenant reference, commencement date, expiration date, base rent per square foot annualized, escalation schedule (fixed percentage, CPI-indexed, or step-up at defined dates), lease type (gross, NNN, modified gross), tenant improvement allowance, renewal options with strike prices.

Tenant: canonical identifier, legal entity name, DUNS number, NAICS code, credit rating, guarantor entity if any, parent company reference enabling parent-child traversal for enterprise tenants with multiple subsidiary leases.

Market Transaction (comp): canonical identifier, asset reference, sale price, cap rate, price per square foot, close date, buyer entity, seller entity, financing type, broker references.

Submarket: canonical identifier, metro reference, current vacancy rate, trailing 12-month net absorption in square feet, average asking rent per square foot, total inventory, net new supply delivered in the trailing four quarters.

These definitions are what the semantic layer enforces. Every source system maps to these definitions. Every consumer queries through them. The mapping layer is the only place that knows about source-specific schemas. When a source changes, the fix is confined to one place.

The Knowledge Graph: Relationships as First-Class Data

A semantic layer defines the entities and their attributes. A knowledge graph makes the relationships between entities explicit and queryable, which is where the analytical leverage actually comes from.

In the CRE domain, the graph edges that matter most are:

Asset HAS_MANY Spaces. One property contains multiple leasable units. This edge enables queries that aggregate or filter at the asset level from space-level data.

Space HAS_MANY Leases over time. A suite may have successive tenants across its history. This edge preserves historical occupancy without overwriting current state.

Lease HAS_ONE current Tenant. Point-in-time attribution. Historical leases reference former tenants, which matters for portfolio performance analysis across ownership periods.

Tenant IS_SUBSIDIARY_OF Tenant. Recursive. This edge enables enterprise parent-child traversal: when a subsidiary tenant with 30,000 square feet has a parent company in financial distress, the graph surfaces that relationship without a custom join.

Asset IS_IN Submarket and Submarket IS_IN Metro. The geographic hierarchy makes it possible to aggregate from asset to submarket to metro without hardcoding the rollup in every query.

Transaction REFERENCES Asset. Comp sale data linked to the asset transacted, enabling market cap rate analysis filtered to the submarket and property type of a specific asset.

Lease HAS_MANY RentReview Events. Scheduled escalations with effective dates, enabling cash flow modeling from the graph rather than from spreadsheet exports.

When these relationships are modeled as graph edges rather than foreign keys in a relational schema, traversals that span multiple entity types run against a structure designed for relationship queries rather than requiring the query engine to reconstruct relationships from JOIN conditions at runtime. The graph structure is also explicit about which relationships exist: if a Lease does not have a Tenant edge, that is a data quality signal that can be caught before it reaches an analyst query.

At the scale VTS operates, this graph is not theoretical. VTS connects data across thousands of client integrations, each with its own naming conventions, source system quirks, and data quality gaps. The entity disambiguation problem, resolving that "Acme Corporation," "ACME CORP LLC," and "Acme Corp" represent the same tenant across three source systems, is solved through machine learning models trained on the full corpus of cross-system entity records, rather than through handcrafted matching rules applied case by case. The VTS Demand Model, which aggregates real-time supply and demand data, marketing analytics, and pricing signals into a unified analytical layer, is the product expression of this semantic foundation. The graph's ability to surface that a specific tenant category is consistently contracting in a specific submarket before that trend appears in lagging market statistics depends on the underlying entity resolution being reliable enough to trust at scale. VTS Asset Intelligence, the AI-driven lease abstraction capability, works because the extracted data goes into a canonical structure that already knows what a Lease entity is and how it relates to Space, Tenant, and Asset. Without the semantic foundation, abstraction is extraction without a home.

In our work with a major commercial real estate services firm, we built this graph using AWS Neptune. The data included property assets, tenant entities, market transaction comps, credit card spend data as a proxy for tenant health, and human mobility data as a proxy for building utilization. Neptune handled relationship traversals across those five entity types that would have required complex nested SQL in a traditional warehouse, and the traversal performance was measurably better for the multi-hop queries that characterized asset management decisions. That performance gap widens as the portfolio scales.

Where the Semantic Layer Sits in the Stack

A common misconception is that the semantic layer replaces the data warehouse. It does not. The warehouse or lake or lakehouse remains the storage and compute layer. The semantic layer is the interpretation layer that sits on top of it.

Source Systems sit at the bottom: property management software like Yardi, MRI, and RealPage, lease abstraction tools, market data feeds from CoStar or MSCI, IoT and sensor platforms, tenant credit databases from D&B or Experian Commercial, and deal tracking CRMs.

The Ingestion Layer pulls source data and lands it in raw form. Airflow, Fivetran, or custom API connectors depending on source system type. At this layer, data is stored as-received with no transformation and no normalization.

Raw Storage sits in Snowflake, BigQuery, or Redshift using source-native schemas with no business logic applied.

The Semantic and Transformation Layer is where entity definitions, mapping rules from source schemas to canonical schemas, and the relationship graph live. In practice this is implemented through some combination of dbt models for SQL-based transformation, a semantic framework like Cube or dbt MetricFlow for metric definitions and API exposure, and a graph database like Neptune or Neo4j when relationship traversal is the primary query pattern.

The Query Interface is the API surface that consumers use: REST or GraphQL endpoints if the semantic layer is implemented through Cube, SQL over semantic models if MetricFlow, or a graph query language like Gremlin or SPARQL over Neptune. This layer enforces the data contract. Consumers do not query raw source schemas. They query canonical entities through the defined interface.

Consumers at the top include BI tools like Power BI, Tableau, and Looker, application front-ends, AI and ML models, ad hoc analyst queries, and LP reporting pipelines.

The critical design decision is that the mapping layer, the logic that connects source system A's representation of a tenant to the canonical Tenant entity, lives exclusively in the semantic layer. This is intentional. When source system A changes its schema, the fix is contained to the mapping layer. The query interface for consumers does not change. Downstream consumers do not break. That containment is the core value proposition.

Tooling Tradeoffs

There is no single right tool for implementing a CRE semantic layer. The choice depends on which query patterns matter most and what the team already knows.

Cube is a commercial semantic layer that exposes REST and GraphQL APIs on top of any warehouse. It is the right choice when the platform needs to serve data to multiple application consumers through a stable API contract, when multi-tenant access control via RBAC and row-level security is a requirement, and when the team wants to define metrics in YAML rather than SQL. We used Cube in a semantic layer engagement for a fast-growing media platform managing 15 disparate sources, and the API-first delivery pattern worked well for their embedded analytics product. The limitation in CRE: Cube handles aggregate metrics well but is not designed for multi-hop graph traversal.

dbt Semantic Layer, built on MetricFlow, is the lowest-friction path for teams already using dbt. Metric definitions live in YAML alongside the transformation models, and the query API is exposed through the dbt Semantic Layer proxy. It is the right choice when the primary consumers are BI tools, since Tableau, Looker, and Metabase have native MetricFlow integrations, and when the team does not need a public-facing REST API. The limitation: MetricFlow is less mature than Cube, and complex relationship definitions that go beyond standard dimensional models can be awkward to express in YAML.

Neptune (or Neo4j) is the right choice when the primary queries are relationship traversals: multi-hop walks through a graph, shortest-path queries, or pattern-matching across entity networks. For CRE platforms where tenant risk assessment, portfolio concentration analysis, and market linkage queries drive the most important decisions, a graph database handles the query patterns that relational models struggle with. The limitation: graph databases require a new query language (Gremlin for Neptune, Cypher for Neo4j), and operational BI users accustomed to SQL need a translation layer.

In practice, the most capable CRE data platforms use a hybrid: a warehouse-based semantic layer for standard operational analytics (occupancy dashboards, rent roll reports, portfolio summaries), and a graph layer for the relationship-intensive queries that drive investment and leasing decisions. The two layers reference the same canonical entities but serve different query patterns. This is not over-engineering. It is matching the tool to the query class rather than forcing one tool to handle both.

A Worked Scenario: 87 Properties, 12 Markets, One Source of Truth

Consider a PE-backed CRE operator managing 87 properties across 12 markets. The profile is common: a platform company that has grown through acquisition, inheriting different source systems from each portfolio company added to the stack.

Their current sources are: Yardi for lease data, rent rolls, and accounts receivable for 60 of the properties; MRI for property management data for the remaining 27 properties from an acquired portfolio; CoStar for market comp transactions and submarket vacancy and absorption statistics; a Siemens building management system for HVAC, occupancy sensors, and energy consumption by floor; and a Dun and Bradstreet API for tenant credit scores, parent-child company structures, and NAICS codes.

The problem without a semantic layer: "Tenant" is a different concept in every system. Yardi uses a numeric lease reference. MRI uses a text entity name entered by hand and inconsistently formatted during data entry. CoStar knows about tenants as parties to market transactions, identified by company name and address. D&B identifies tenants by DUNS number. The Siemens BMS does not know what a tenant is. It knows about sensor zones.

A question like this one becomes the test: which office assets have tenants with parent companies showing negative D&B trend scores, in-place rents more than 12% below current CoStar market asking rents, and leases expiring in the next 18 months?

To answer it without a semantic layer requires: entity resolution to map Yardi and MRI tenant records to D&B DUNS numbers (a multi-week data project on its own), schema reconciliation to define what "in-place rent" means when Yardi stores gross rent and MRI stores NNN base rent, market benchmarking to pull CoStar submarket asking rents and join to the right asset-submarket mapping (which CoStar boundary does each of the 87 assets fall in?), and credit analysis to query D&B trend scores for resolved tenant entities and join them to their lease records. This is 2 to 3 weeks of engineering every time the question is asked with fresh data.

After the semantic layer, the picture is different.

The Tenant entity has been resolved. Every Yardi lease reference and MRI tenant record is cross-referenced to a DUNS number. The mapping was built once and is maintained as new tenants are added. Adding a new tenant to Yardi triggers the matching process against D&B rather than creating an orphaned record.

The Lease entity carries both gross and NNN base rent, with a canonical "effective rent per square foot" computed from the lease type stored in the semantic model rather than re-derived in every query. This computation lives in one place and is tested. There is no version of this metric that differs by analyst.

The Asset-to-Submarket mapping is a persistent graph edge. CoStar's submarket taxonomy is the authority for market data, and every asset is mapped to the correct CoStar submarket node. Submarket data from CoStar flows to assets through that edge without a join.

The Tenant-to-ParentCompany relationship is a graph edge from D&B's parent-child structure, allowing traversal from subsidiary lease records up to parent company credit data in a single step.

With all four resolved, the original question runs in under a minute. It runs on demand, not on a quarterly sprint schedule. An LP can ask for it at the start of the portfolio review meeting. The asset manager can run it before a tenant renewal negotiation. The investment team can run it when evaluating an add-on acquisition.

That question is not hypothetical. It is the question that drives asset management decisions in every PE-backed CRE portfolio. The platforms that can answer it fast, on demand, without an engineering sprint, are the ones that operators and their LPs prefer. At scale, the latency between business question and answer is a competitive variable.

Adding Source Six: A Before-and-After

The integration problem becomes most concrete at the moment a new source is added. Consider a platform with Yardi, MRI, CoStar, D&B, and an existing IoT vendor already connected. The data team has delivered against most of the integration roadmap. Then the asset management team acquires 14 industrial properties whose previous owner ran a Siemens Desigo building management system. The BMS captures floor-level occupancy sensor readings, HVAC zone controls mapped to specific suites, and energy consumption metered by tenant. The team needs that data connected within the quarter.

Without a semantic layer, the sequence unfolds roughly like this. The engineer assigned to the Desigo integration opens the API documentation and encounters Siemens' automation object hierarchy, a numbering scheme tied to the building's physical control infrastructure. The hierarchy does not use property identifiers, floor designations, or suite numbers. It uses prefix codes derived from the installation standard used when the building's automation equipment was commissioned. Cross-referencing automation object codes to leasable suite identifiers requires pulling as-built drawings for each of the 14 buildings. In three cases, the automation numbering was changed after the original installation and the drawings do not match what the BMS currently reports. An additional two to three weeks goes to field verification and manual reconciliation. The connector ships in ten to twelve weeks. But connecting sensor data to tenant records requires joining Desigo's automation hierarchy to Yardi's suite identifiers to MRI's tenant names to D&B's DUNS numbers. Each join requires a custom reconciliation table maintained manually. Two months after the connector ships, the asset management team reports that occupancy utilization reports do not match manual counts for six of the 14 buildings; the automation numbering discrepancies were not fully resolved before go-live. Remediation adds another four to six weeks.

With a semantic layer, the Space entity is already defined: parent asset identifier, floor designation, suite designation, usable and rentable square footage, occupancy status. The Space entity is the mapping target. Integration work begins by resolving how Desigo automation objects map to canonical Space identifiers. The cross-reference is built once, stored as a persistent mapping table within the semantic layer, and reviewed against the as-built discrepancies before any connector code is written. The mapping review catches the three buildings with changed automation numbering before they create incorrect data in production. The Desigo connector is then written against Space canonical identifiers rather than against the Desigo-native hierarchy. New sensor attributes (occupancy utilization percentage by hour, HVAC zone assignment, and energy consumption in kWh per rentable square foot) are added to the Space entity definition. Existing consumers querying Space entities see these new attributes without changing their query patterns. The Tenant-to-Space traversal through the Lease entity means that tenant-level energy consumption is immediately queryable through existing graph relationships without a new join. The integration ships in three to four weeks. No existing reports break. The sensor data is immediately traversable through the same Tenant and Asset relationships used for lease and market analytics.

The semantic layer makes a difference because it changes what the engineers have to do. In the first scenario, the engineer is negotiating between two different representations of the same physical space and writing custom code to maintain that negotiation in perpetuity. In the second scenario, the engineer is mapping one representation to a canonical definition that already exists. That canonical definition is maintained in one place, visible to all consumers, and does not require re-negotiation when the next source is added.

Implementation: A Practical Sequence

Building a semantic layer is not a single project. It is a sequence of decisions that teams typically stretch over three to five months, with value delivered at each phase.

Phase 1: Define the ontology (four to six weeks). Before touching any tooling, document what entities exist in the domain, what attributes are canonical for each, and what the authoritative source is for each attribute. This is not a technical exercise. It is a governance exercise. The hard questions surface here: which square footage measurement is the standard? How do you handle a lease that spans multiple suites? What is the canonical definition of in-place rent when the portfolio contains both gross and NNN leases? These decisions need input from finance, leasing, asset management, and engineering. Deferring them into the tooling phase guarantees rebuilds later.

Phase 2: Build the mapping layer (six to ten weeks). For each source system, write explicit mapping rules from source schema to canonical schema. This is where entity resolution happens: building the cross-reference table that maps Yardi tenant IDs, MRI tenant names, and D&B DUNS numbers to the same canonical Tenant entity. Entity resolution is typically the most time-consuming part of this phase because it requires probabilistic matching (company names are not standardized across systems) followed by human review for ambiguous cases. Plan for this explicitly in the project timeline.

Phase 3: Deploy the query interface (eight to twelve weeks). Choose tooling based on primary consumer patterns. Stand up the REST or GraphQL API, the MetricFlow proxy, or the Neptune cluster. Publish the data contract: semantic schemas are versioned, consumers can depend on them, and the deprecation process for breaking changes is documented before anyone consumes the API in production. Test with real consumer queries before cutting over.

Phase 4: Extend incrementally. Each new data source is a mapping exercise rather than a rebuild. The target, based on platforms that have this architecture in place, is two to three weeks per new source integration. That target depends on how clean the source data is and how many new entity types it introduces. But the days of three-month integrations should be over.

The governance work in Phase 1 frequently uncovers problems that teams did not know they had: properties tracked under different identifiers in different systems, historical lease data measured by a standard that was deprecated in 2018, tenants that exist in the property management system but have no corresponding credit record. The semantic layer does not create these problems. It makes them visible. That visibility is uncomfortable in the short term and essential for building a platform that can be trusted at scale. Teams that treat the ontology definition phase as overhead tend to rediscover the same problems later, in production, in LP reports.

What This Means for PE-Backed CRE Platforms

The relevant question for a PE-backed CRE technology company is not whether to build a semantic layer. It is at what scale the absence of one starts costing money.

The answer is usually around source integration three or four. That is the point at which cross-source analytics become a regular business requirement and the existing approach to handling them, ad hoc engineering sprints, starts creating a backlog that competes with the product roadmap. The symptom is always the same: analyst requests pile up, engineers spend more time on query maintenance than new development, and the answer to "how long does it take to add a new data source?" is measured in months.

The platforms that solve this before the backlog becomes painful are the ones that can ship new analytical capabilities faster when the market creates demand for them. In a rate-sensitive CRE environment where repositioning decisions and leasing strategy pivots happen in compressed windows, the platforms with shorter latency between business question and answer have a structural advantage. That advantage compounds as LP expectations for data transparency and reporting frequency increase.

The data model is not a back-office concern. In a platform business, it is the product foundation. The teams that treat it that way, defining it deliberately, governing it explicitly, investing in it before the integration queue is already on fire, build platforms that compound. The ones that do not spend a growing share of their engineering capacity running in place.

The pattern described here, the integration queue, the cross-source reconciliation sprints, the analytics that require engineering involvement before any analysis can begin, matches the experience of nearly every CRE platform we have worked with as they move from two data sources to five. The architecture exists to fix it. What it requires is less a technology decision than a commitment to defining the domain model before adding the next source. That decision point comes for every CRE platform eventually. The ones that make it early are the ones that look back on it as the right call.

Four diagnostics indicate whether a CRE platform is approaching the architectural inflection point.

Source count: how many independent systems is the platform currently drawing data from? Fewer than three, and point-to-point integration is still manageable. Four or more, and maintenance is likely competing with new development for engineering time.

Cross-source query latency: how long does it take to answer a question that spans four entity types? The example used earlier, tenants with declining parent credit, leases expiring within 18 months, and in-place rents more than 12% below submarket asking rates, is not exotic. It is the question that drives renewal strategy and acquisition underwriting. If answering it requires an engineering sprint rather than a query, the semantic layer is missing.

Schema change blast radius: when an upstream source releases a schema update, how many downstream systems are affected? If the answer is more than one, the coupling between source schemas and business logic is already too tight.

New source onboarding time: how long did the last integration take from decision to production? If the answer is measured in quarters, the architecture is the constraint.

The ontology definition does not require a tooling purchase to start. The first deliverable is a document that finance, leasing, asset management, and engineering can all read and challenge. What is the canonical definition of in-place rent, and which lease types does it apply to? Which square footage measurement is authoritative for LP reporting? What is the entity resolution rule when the same tenant appears in the property management system under three slightly different name variations? These questions cost nothing to ask and are expensive to resolve in production. Convening that cross-functional group around the entity definitions for a single afternoon generates the governing document that makes every subsequent integration faster. Deferring that conversation creates integration technical debt, where every new source adds a new set of implicit definitions that must eventually be reconciled under pressure.

BOD Newsletter

Stay ahead of the AI × Data × PE curve.

Practical field notes for operators and investors — join the BOD newsletter.

Ready to build?

Turn these insights into production systems.

Blue Orange builds data and AI systems that ship to production and tie back to EBITDA. Let's scope your opportunity.

Start a Conversation