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

October 31, 2026
Abstracting Sublease and Assignment Clauses Without Losing the Landlord's Consent Rights
A sublease/assignment clause abstract that only captures 'consent required, yes/no' misses the terms that actually control what happens next: the consent standard, recapture rights, profit-sharing, and response deadlines.

October 29, 2026
#token# Substitution in Yardi Custom Reports, Explained
Every prompt on a Yardi custom report becomes a #Name# token that gets substituted straight into the SQL text before it runs. Here's how the substitution actually works, and the guard idiom that keeps an unfilled token from breaking your query.

October 28, 2026
Lease Abstraction Sample: What a Finished Abstract Actually Looks Like
Not every lease abstract is built the same way. Here's the anatomy of a genuinely useful one — general info, financial terms, critical dates, key clauses — and what separates it from a thin summary.

October 26, 2026
Writing Your First YSR //Columns and //Filter Script for Yardi
A beginner walkthrough of the YSR columnar report format — what //Columns and //Filter actually contain, field by field, using only the grammar Voyager's report engine really parses.

October 24, 2026
How Co-Tenancy and Kick-Out Clauses Get Missed in a Rushed Lease Abstract
Co-tenancy and kick-out clauses read alike, often sit in the same lease article, and get conflated or skipped when an abstract is rushed. Why that happens and what a careful process does differently.

October 22, 2026
YSR vs. SSRS vs. Power BI for Yardi Custom Reports: How to Choose
YSR, SSRS, and Power BI all show up under 'Yardi reporting' — but they're different authoring models solving different problems. What each one is actually for.

October 21, 2026
Lease Abstraction Turnaround Time: What Actually Drives It
Turnaround time on a lease abstraction isn't one number — it's a function of document quality, lease complexity, QA depth, and batch size. Here's what actually moves the timeline, and why a claimed turnaround without those qualifiers is marketing noise.

October 19, 2026
Yardi Voyager's SBUDGET Sign Trap: Why Your Budget Variance Looks Backwards
GLTOTAL.SBUDGET doesn't follow the GL's credit-negative sign convention — budget signs are whatever a human typed into the budget screen, per account class. A naive SUM(SMTD) - SUM(SBUDGET) variance is meaningless for revenue until you normalize it.

October 17, 2026
Choosing a Lease Abstraction Vendor: What to Ask About Their Yardi/MRI Delivery Format
Most lease abstraction vendor comparisons stop at accuracy and QA process. The question that actually determines how much work you do after delivery is what format the data arrives in — PDF summary or ERP-ready import.

October 15, 2026
The wf_action hWorkflow Trap in Yardi Voyager Workflow Queries
wf_action carries a declared foreign key to wf_header called hWorkflow — and on a verified install it's 0 on every single row. Here's why, and how the table actually links back to a workflow.

October 14, 2026
AI Lease Abstraction Accuracy: What "Page-Cited" Actually Means
Two AI-generated abstracts can list the same rent number and mean completely different things by 'accurate.' Page citations are the difference — and the actual lever that makes accuracy checkable instead of assumed.

October 12, 2026
Yardi Voyager's Approval Workflow Engine: How the wf_ Tables Actually Fit Together
wf_tran_header, wf_tran_step, wf_header, wf_step, wf_step_next — Voyager's approval-workflow engine spans instance tables and definition tables that look similar but aren't. Here's the execution-verified map of how they connect, and the traps in between.

October 10, 2026
Industrial Lease Abstraction: What's Different About Warehouse and Distribution Leases
An industrial or warehouse lease isn't an office lease with bigger square footage. Clear height, dock doors, hazmat use restrictions, and expansion rights all need their own fields — here's what a generic abstract template misses.

October 8, 2026
The DETAIL Table Side-Decode in Yardi Voyager: Same Column, Different Meaning
DETAIL.HCHKORCHG and DETAIL.HINVORREC don't mean one fixed thing — what they decode to depends on which document class the row belongs to. Here's the side-decode and why it breaks naive joins.

October 7, 2026
Lease Abstraction for Portfolio Acquisitions: A Due-Diligence Workflow
A 150-lease portfolio doesn't need to be abstracted in file order. Here's a due-diligence workflow for batching, prioritizing, and reconciling lease abstracts against the seller's numbers before the deal team runs out of runway.

October 5, 2026
Yardi Voyager's Charge-Billing Architecture: How CAMCHARG Pipelines to TRANS
AR charge rows in Yardi Voyager's TRANS table carry no charge-type code at all. Here's where the charge type actually lives, how CAMCHARG pipelines a recurring charge from configuration to a posted transaction, and why manual charges skip the pipeline entirely.

October 3, 2026
How Specialists QA a Lease Abstract Against the Source PDF, Page by Page
A lease abstract is only as trustworthy as its weakest uncited field. Here's how page-level citation turns abstraction QA from a spot-check into a verifiable process — and why it matters months after delivery, not just at handoff.

October 1, 2026
Yardi Voyager CommitPayments and Construction Draws, Explained
Construction and capital-project spend in Yardi Voyager doesn't post like a normal vendor invoice. Here's how COMMITPAYMENTS bridges a job-cost commitment to an actual payable, and why some payables never touch the AP invoice register at all.

September 30, 2026
Lease Abstraction on a 1031 Exchange Due-Diligence Timeline
1031 exchanges run on a strict statutory clock, and lease diligence has to fit inside it. What fields matter most when the timeline is fixed and short, and why page-cited abstracts are built for exactly this kind of pressure.

September 28, 2026
Yardi Voyager AP Payable-by-Vendor SQL Query Pattern
A vendor open-balance rollup in Yardi Voyager isn't a dedicated AP table lookup — payables live inside TRANS as one iType among fourteen, vendor identity routes through a polymorphic person table, and the wrong grain double-counts. Here's the verified pattern.

September 26, 2026
When a Lease Abstract and an Estoppel Certificate Disagree
A discrepancy between the lease abstract and a signed estoppel is a finding, not a formatting error. Here's the actual resolution process during diligence — and why a page-cited abstract turns it into minutes instead of a full re-read.

September 24, 2026
MM2 Purchasing Traps in Yardi Voyager SQL
A naive purchase-order query against Yardi Voyager's MM2 module looks fine and quietly lies. Where the real PO tables are, why there's no GRN table, and the traps that break receiving-status and invoice-matching queries.

September 23, 2026
Abstracting Operating Expense Caps and Gross-Ups Without Errors
How to correctly capture operating expense caps in a lease abstract — cumulative vs. non-cumulative, compounding vs. simple increases, controllable vs. non-controllable carve-outs — and why the exact compounding language matters over a multi-year term.

September 21, 2026
Yardi Voyager's Procure-to-Pay Architecture: The Hub-and-Spoke Model
Why Voyager's procure-to-pay chain isn't a straight line from requisition to payment — the hub-and-spoke shape around the payable, which stages are optional, and where the reliable join actually is.

September 19, 2026
Lease Abstraction for Lenders: What an Estoppel-Ready Abstract Looks Like
What makes a lease abstract estoppel-ready for a financing package — the exact fields lender's counsel cross-checks against the estoppel, and how to format an abstract so discrepancies surface fast on a closing timeline.

September 17, 2026
Building a Yardi Voyager Three-Way Match Query: PO, Invoice, Receipt
How to structure a three-way match query in Yardi Voyager ySQL — the PO-line, receipt, and invoice relationship, and the traps that break match logic if you join at the wrong grain.

September 16, 2026
What a CAM Reconciliation Audit Pulls From the Lease Abstract
A tenant's CAM audit doesn't ask whether the reconciliation math is internally consistent — it asks whether it matches the lease. Here's what a CAM auditor actually checks the abstract against, field by field.

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.