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.

Featured on FoundrListFeatured & Verified on TrustMRRPropETL on PeerPushLaunchpadly Startup DirectoryPropETL — Featured on LaunchBuck