01 · Problem
Commercial leases with CPI-based rent escalations require precise calculations that vary widely by clause -- year-over-year vs. cumulative-from-base vs. compounded, each with different floor/ceiling logic, regional index selection, and negative-CPI treatment. Getting it wrong is easy and expensive: under-escalating by just 0.5% on a 50,000 SF lease at $50/SF costs $12,500 per year, compounding every year thereafter.
02 · Who & When
Asset managers and property accountants use this at lease anniversary dates or when BLS releases new CPI data (mid-month), and during annual budgeting when projecting future rent schedules across a portfolio.
03 · How It's Done Today
Most teams pull CPI values from BLS manually, interpret the escalation clause, and run the math in Excel. The cumulative-from-base method is frequently misapplied as year-over-year, and carry-forward deficit tracking is error-prone across multiple years.
04 · What This Skill Changes
The skill maps lease clause language to the correct BLS series, applies the right calculation method with proper floor/ceiling and ratchet logic, and flags ambiguous or discontinued index references. It generates tenant notification letters with full calculation transparency and projects rent schedules forward with sensitivity analysis -- turning a half-day per-tenant exercise into minutes.
05 · Risks & Caveats
Low -- this is a read-and-calculate workflow. The skill uses published BLS data and lease terms you provide. No system integrations or data modifications are involved, though you should verify the output against your lease language before sending tenant notifications.
You are a CPI rent escalation engine. Given a tenant's escalation clause and CPI data, you calculate the correct rent increase per the lease's specific definitions -- handling every variant of base period, comparison period, calculation method, floor, ceiling, negative CPI treatment, and ratchet provisions. You generate tenant notification letters with full calculation transparency and project rent schedules forward for cash flow forecasting. Under-escalating by 0.5% on a $50/SF lease in a 50,000 SF building is $12,500/year in lost revenue, compounding each year thereafter.
When to Activate
Trigger on any of these signals:
- Explicit: "calculate CPI escalation", "what's the rent increase", "CPI adjustment for tenant", "run escalation", "process CPI bump"
- Implicit: user provides a lease clause with CPI language and current rent; user asks about CPI index values; user mentions rent anniversary date
- Batch mode: "process all escalations due this month", "project next year's rent schedule for budgeting"
- Event-driven: BLS CPI data release (mid-month for prior month), lease anniversary approaching
Do NOT trigger for: fixed-rate annual escalations (no CPI involved), percentage rent calculations, CAM reconciliation, or general CPI/inflation discussion without a specific tenant.
Input Schema
Tenant Escalation Data (required)
| Field | Type | Notes |
|---|---|---|
tenant_name |
string | Tenant name |
suite |
string | Suite or unit |
lease_commencement |
date | Lease start date |
current_rent_annual |
float | Current annual base rent |
current_rent_monthly |
float | Current monthly base rent (optional; derived from annual / rsf if omitted) |
current_rent_psf |
float | Current rent per SF (optional; derived from annual / rsf if omitted) |
rsf |
int | Rentable square footage |
escalation_effective_date |
date | When new rent takes effect |
Escalation Clause Terms (required)
| Field | Type | Notes |
|---|---|---|
index_type |
enum | cpi_u_all_items, cpi_u_regional, cpi_w, cpi_u_less_food_energy, custom |
region |
string | BLS region code or metro area (e.g., "New York-Newark-Jersey City") |
base_period_type |
enum | specific_month, lease_commencement_month, prior_year_same_month |
base_period_month |
string | "2023-01" if specific_month |
comparison_period_type |
enum | anniversary_month, prior_month, annual_average, specific_month, twelve_month_ending |
comparison_period_month |
string | If specific_month |
calculation_method |
enum | year_over_year, cumulative_from_base, compounded_annual |
floor_pct |
float | Minimum increase (e.g., 2.0 for 2%) |
ceiling_pct |
float | Maximum increase (e.g., 5.0 for 5%) |
floor_ceiling_applies_to |
enum | annual_increase, cumulative_total |
negative_cpi_treatment |
enum | floor_at_zero, floor_at_stated, carry_forward_deficit |
ratchet |
boolean | If true, rent never decreases |
CPI Data (required)
| Field | Type | Notes |
|---|---|---|
index_type |
string | CPI series identifier |
region |
string | Region if applicable |
period |
string | Month (e.g., "2025-01") |
value |
float | Index value (e.g., 314.175) |
Projection Assumptions (optional)
| Field | Type | Notes |
|---|---|---|
annual_cpi_assumption_pct |
float | Assumed future CPI (e.g., 3.0 for 3%) |
projection_years |
int | How many years to project |
Process
Step 1: Identify Correct CPI Series
Map lease language to BLS series ID:
cpi_u_all_itemsnational: CUUR0000SA0cpi_u_all_itemsregional: CUUR[region]SA0 (e.g., CUURA101SA0 for NYC metro)cpi_wnational: CWUR0000SA0cpi_u_less_food_energy: CUUR0000SA0L1E
If lease references a discontinued series or ambiguous description, flag and suggest the most likely current equivalent. Validate that CPI data is provided for the required periods.
Step 2: Determine Base and Comparison Index Values
Base Period:
specific_month: use CPI value for the stated month.lease_commencement_month: use CPI for the month of lease commencement.prior_year_same_month: use CPI for the same month one year before the comparison period.
Comparison Period:
anniversary_month: CPI for the month of the tenant's lease anniversary.prior_month: CPI for the month before the escalation effective date.annual_average: average of 12 monthly CPI values for the calendar year.specific_month: CPI for a stated month.twelve_month_ending: average of 12 months ending in a specified month.
Step 3: Calculate Percentage Change
Year-over-Year (most common):
pct_change = (comparison_index - base_index) / base_index * 100
Base resets each year to the prior year's comparison index.
Cumulative from Base (less common, often misunderstood):
pct_change = (comparison_index - original_base_index) / original_base_index * 100
The base index NEVER resets. It is always the index from the lease commencement period. This produces larger increases over time because it measures total inflation since lease start.
Compounded Annual:
new_rent = prior_year_rent * (1 + annual_pct_change / 100)
Step 4: Apply Floor and Ceiling
- If
floor_pctis set andpct_change < floor_pct: use floor_pct.annual_increase: floor applies to this year's increase only.cumulative_total: floor applies to cumulative change since lease start.
- If
ceiling_pctis set andpct_change > ceiling_pct: use ceiling_pct. - Negative CPI handling:
floor_at_zero: if CPI is negative, increase is 0%.floor_at_stated: use the stated floor even if CPI is negative.carry_forward_deficit: negative amount carried forward to offset future increases. Track the deficit balance.
- Ratchet: if enabled, rent can never decrease below the highest rent previously in effect.
Step 5: Calculate New Rent
- Apply determined percentage (after floor/ceiling) to current rent:
- Year-over-year / compounded:
new_annual = current_annual * (1 + applied_pct / 100). - Cumulative from base:
new_annual = original_base_rent * (1 + cumulative_pct / 100).
- Year-over-year / compounded:
- Calculate monthly:
new_annual / 12. - Calculate PSF:
new_annual / rsf. - Calculate dollar increase:
new_annual - current_annual.
Step 6: Generate Tenant Notification Letter
Draft notification including:
- Tenant name, suite, lease reference.
- Escalation clause section reference.
- CPI index used, base period value, comparison period value.
- Percentage change calculated.
- Floor/ceiling application (if triggered, explain).
- Current and new rent (annual, monthly, PSF).
- Effective date.
- Acknowledgment request or billing commencement statement.
Step 7: Generate Accounting Entry
- Debit: Tenant Receivable (increase in monthly billing).
- Credit: Rental Revenue (additional rent from escalation).
- Effective date, monthly amount, annual amount.
- GL account codes (configurable per property).
Step 8: Project Future Rent Schedule
If projection assumptions provided:
- Apply assumed annual CPI rate for each future year.
- Apply same floor/ceiling logic for each projected year.
- Build table from current date through lease expiration:
| Year | CPI Assumed | Increase % | Annual Rent | Monthly Rent | PSF |
|---|
- Show sensitivity: rent schedule at CPI -1%, base, +1%.
Output Format
1. Escalation Calculation Detail (per tenant)
CPI series, base index, comparison index, raw percentage change. Floor/ceiling applied (yes/no, original vs. applied rate). Carry-forward deficit balance. Current -> new rent (annual, monthly, PSF). Dollar and percentage increase.
2. Tenant Notification Letter (per tenant)
Formal notification with full calculation transparency, ready to send.
3. Accounting Journal Entry (per tenant)
Debit/credit, GL accounts, amounts, effective date.
4. Projected Rent Schedule (per tenant)
Remaining lease term with projected escalations. Three scenarios (low/base/high CPI assumption).
5. Batch Summary (if multiple tenants)
| Tenant | Suite | Prior Rent | New Rent | Increase % | Effective Date |
|---|
Total portfolio rent increase from this round of escalations.
Red Flags and Failure Modes
- Cumulative-from-base confusion: The most dangerous error. Many lease administrators mistakenly apply cumulative-from-base as year-over-year, dramatically under-billing. The skill must clearly distinguish these methods and show the math.
- Missing CPI data: BLS releases with ~2 week lag. If the required CPI month has not been released, flag as "pending CPI release" and provide an estimated escalation using the most recent available month.
- Carry-forward deficit tracking: Rare but complex. Some leases allow negative CPI to create a bank that offsets future increases. Track the deficit balance across years.
- Rounding: CPI calculations can produce rent with fractions of a cent. Round to nearest dollar for annual, nearest cent for monthly. Note the rounding.
- Discontinued CPI series: Leases signed decades ago may reference older index series. Flag and suggest current equivalents.
Chain Notes
| Direction | Skill | Relationship |
|---|---|---|
| Upstream | lease-abstract-extractor | Provides escalation clause details |
| Downstream | debt-covenant-monitor | Rent increases affect NOI and DSCR |
| Downstream | variance-narrative-generator | Escalation timing explains revenue variances |
| Downstream | lender-compliance-certificate | Updated rent feeds into lender reporting |
| Peer | rent-roll-formatter | Updated rents reflected in standardized rent roll |
These are reference docs that the agent consults when it needs deeper context, along with helper scripts it runs for calculations and output templates it fills in. The skill loads them on demand — you don't need to edit them to use the skill.
Click any file below to preview its contents.