Blog

Field notes on Yardi data migration and getting clean data into property management ERPs.

September 14, 2026

Yardi Voyager Duplicate Rows: the Audit-Trail Join Trap

Your Yardi Voyager query should return one row per entity and it's returning three. The usual cause isn't a bad WHERE clause — it's joining through a column that looks like a business relationship but is actually audit metadata.

September 12, 2026

Abstracting Renewal Options: The Dates That Actually Matter

A renewal option abstract that only records the option rent gets the deal half right. Notice deadlines, self-executing vs. affirmative-notice options, forfeiture consequences, and multi-period rate mechanics — the details that decide whether the option survives to be used.

September 10, 2026

Yardi GLTOTAL and the Trial Balance That Won't Foot to Zero

Sum GLTOTAL across every account for a Yardi Voyager trial balance and it will not foot to zero. Here's the retained-earnings system row that causes it, and why GLDETAIL is the table to build from instead.

September 9, 2026

Lease Abstraction for Triple-Net (NNN) Portfolios: What Changes When Tenants Pay Almost Everything

In a triple-net portfolio, the landlord's economics live almost entirely in the recovery structure, not the base rent. Here's what a lease abstract needs to get right to make that structure usable.

September 7, 2026

How to Write an Aged Receivables ySQL Query in Yardi Voyager

Aged receivables in Yardi Voyager is a computed snapshot, not a stored table. The conceptual shape of a correct query, why 'open' needs a real definition, and why today's date breaks reproducibility.

September 5, 2026

Migrating Lease Data from Excel to Yardi Voyager: Where Lease Abstraction Fits

The real pipeline from source lease data to a validated Yardi Voyager import: abstraction when you start from PDFs, structured mapping and dependency-ordered validation when you're ready to load.

September 3, 2026

How to Write a Yardi Voyager Rent Roll SQL Query

A rent roll is a point-in-time snapshot, not a table. Here's the conceptual shape of a correct Yardi Voyager rent roll query in ySQL, and the traps that make a naive version wrong.

September 2, 2026

Abstracting a Lease With Multiple Amendments: A Practical Workflow

A lease with five amendments isn't five documents to skim in order — it's a conflict-resolution problem. Here's a workflow for abstracting one without losing track of what actually controls.

August 31, 2026

Yardi Voyager's H-Prefix Naming Grammar: A Field Guide

Voyager's column names follow a consistent Hungarian-prefix grammar. Learn to read it and you can size up an unfamiliar table in seconds instead of guessing.

August 29, 2026

Common Lease Abstraction Errors That Break a Rent Roll

Most rent roll errors don't come from bad software — they come from a handful of recurring abstraction mistakes that slip past review because nothing throws an obvious error.

August 27, 2026

Polymorphic hRecord/hCode Foreign Keys in Yardi Voyager, Explained

hRecord and hCode look like ordinary foreign keys in the Yardi Voyager schema, but they aren't — the target table changes row by row. Here's what that means for your joins.

August 26, 2026

Retail vs. Office vs. Medical Office Lease Abstraction: What Changes in the Abstract

The same abstraction template doesn't fit a shopping-center lease, a corporate office lease, and a medical office building lease. Here's what actually changes across the three asset classes — and where to go for the deep dive on each.

August 24, 2026

The HMYPERSON Subtype Trap in Yardi Voyager, Explained

TENANT.HMY doesn't exist. Neither does VENDOR.HMY. In Yardi Voyager, tenants, vendors, and owners are all subtypes of PERSON, keyed by HMYPERSON — and a bare HMYPERSON value is meaningless until you know which subtype it belongs to.

August 22, 2026

How to Abstract a Ground Lease

Ground leases get one bullet point in most lease-abstraction guides. They deserve their own: fee vs. leasehold ownership, reversion, subordination, and rent-reset mechanics that don't show up in a standard space lease.

August 20, 2026

Decoding TRANS.iType in Yardi Voyager: The Complete Code Map

TRANS.iType is the single integer that decides whether a Voyager transaction is a charge, a payment, a deposit, or noise you should exclude from every financial report. Here's the verified 14-code map and the traps that come with it.

August 19, 2026

What a Lease Abstract QA Process Should Catch (and Most Don't)

Most lease abstraction QA checks spelling and formatting. A real QA pass checks whether the abstract is actually right — traced to source pages, internally consistent across amendments, and honest about what's ambiguous. Here's the bar.

August 17, 2026

Yardi Voyager Join Paths: Getting From PROPERTY to TRANS Without Guessing

In a schema with 12,900+ relationships, join paths don't self-document — and a wrong hop doesn't error out, it silently double-counts. Here's why guessing is dangerous and what actually resolves the join correctly.

August 15, 2026

Lease Abstraction for Yardi Voyager: Mapping Abstract Fields to Voyager Lease Setup

The fields a good lease abstract captures aren't arbitrary — each one maps onto something specific that has to be configured in Yardi Voyager's commercial lease setup. Here's the practical mapping, and why it's faster when the abstract already thinks in Yardi terms.

August 13, 2026

How to Find the Right Yardi Voyager Table When You Don't Know Its Name

Voyager has 9,793 standard tables and almost no documentation at the table level. Here's the actual reasoning process experienced Yardi people use to narrow down which one holds what they need.

July 6, 2026

Announcing Yardi Schema Querying: Ask Your Voyager Database Anything

PropETL now ships a queryable knowledge base of the entire Yardi Voyager schema — 9,793 tables, 137,000+ columns, join-path discovery, and ready-made ySQL patterns — right inside Claude. Your own database, custom schemas included, can be indexed alongside it.

July 5, 2026

The 5 Most Common Yardi Import Errors — and How to Fix Them in Minutes

Most Yardi Voyager ETL rejections trace back to the same five root causes. Here's how to recognise each one from the error you're seeing, and how to stop them reaching Yardi at all.

July 5, 2026

Yardi Data Migration: Why ETL Prep Eats 40% of Every Project (and How to Get That Time Back)

Data preparation quietly consumes almost half of every Yardi Voyager implementation. Here's where the hours actually go — and how AI-assisted ETL mapping compresses days of formatting into minutes.