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.