Specialty Advisors

CAM audit methodology: how CAMAudit's rule-based checks detect overcharges

How CAMAudit's rules-based engine catches CAM overcharges for partner workflows: deterministic math for fee and share errors, AI classification for lease language, and branded findings delivery.

By Angel Campa, FounderUpdated March 10, 2026

I work as a principal engineer. I built the engine behind these audits. Each finding points to the lease clause and the bill line. Your team reviews and signs first.

CAM audit methodology: how CAMAudit's rule-based checks detect overcharges

Most CAM billing errors go undiscovered because tenants have no practical way to check the math. A landlord's reconciliation statement shows totals. Catching an overcharge means working backward through the specific lease provisions that limit those totals.

I built CAMAudit to do that work systematically, on every reconciliation, without requiring a law degree or a forensic accountant. The methodology rests on two non-negotiable design decisions: deterministic code for all numeric rules, and AI-assisted classification only for language-based rules. This article explains both, including the exact formulas each rule uses.

Here's the thing: those two tasks, reading lease language and checking arithmetic, are fundamentally different problems. Conflating them is how you end up with audit tools that are confident but wrong.

CAMAudit uses AI to read and classify lease language. It uses deterministic code to check the math. Those two tasks are never combined, because an AI that guesses at formulas is not an audit tool. It is a liability.


What makes this methodology different from manual review

The CAM audit industry runs on two approaches: manual review (expensive, slow, dependent on the reviewer's lease familiarity) and rules-of-thumb pattern matching (imprecise, inconsistent). Both share one weakness: they depend on someone knowing which provisions to look for.

CAMAudit's approach differs in three ways.

Lease-specific, not generic. Every rule evaluates against the client's uploaded lease, not industry averages or standard NNN terms. If the client's lease caps management fees at 4%, the overcharge calculation uses 4%. Full stop.

Deterministic math, not estimates. For the six numeric detection rules, every calculation produces an exact dollar amount with a complete audit trail. Run the same documents twice and you get the same number. There is no probabilistic component in the math.

AI for extraction, not calculation. CAMAudit uses AI to extract lease terms and classify expense line items. It does not compute management fee overcharges or pro-rata share errors. Those are arithmetic operations with one correct answer.

"I built CAMAudit because the math in these audits is not hard. The hard part is reliably extracting the right numbers from the lease language. Once you have the numbers, deterministic code gives you the exact answer every time." - Angel Campa, Founder of CAMAudit

40% of commercial CAM reconciliations contain material billing errors (PredictAP, 2026)


Two-phase detection architecture

Every CAMAudit run processes documents through two sequential phases before generating any finding.

Phase 1: AI extraction

Document extraction converts uploaded PDF documents to structured text and extracts the 13 provision categories the detection rules require:

Extracted field What it captures Rules that use it
management_fee_cap_pct Percentage cap on management fees, defined base Rule 3
tenant_sf and denominator_definition Tenant square footage, denominator formula Rule 4
gross_up_threshold Target occupancy %, variable/fixed expense split Rule 5
cam_cap_pct and cam_cap_type Annual cap %, cumulative vs. compounded Rule 6
base_year and base_year_expenses Base year, documented costs, occupancy that year Rule 7
excluded_categories Explicit exclusion list from the lease Rule 2
lease_type Gross, modified gross, NNN Rule 1
controllable_cap_pct Cap on controllable expense growth Rule 13
permitted_insurance_types Coverage types and dollar limits authorized Rule 9
tax_provisions Tax allocation methodology, appeal credit language Rule 10
utility_provisions Sub-metering language, allocation basis Rule 11
common_area_definition Scope of "common area" under the lease Rule 12
monthly_estimates Monthly CAM estimates paid throughout the year Rule 18

The extraction output is a structured JSON object. Every downstream calculation references that object by field name. If a provision does not exist in the lease, the associated rule is flagged as not applicable rather than running against a default assumption.

Phase 2: twenty deterministic and classification rules

The CAM detection engine runs each rule against the extraction output and reconciliation data. Math rules run as deterministic functions with no probabilistic component. Classification rules combine extracted lease language with AI-assisted expense line item categorization.

Each rule returns either a finding with a calculated dollar amount, or a clean result. No gray zone, no confidence interval.


Math-based detection rules

Math-based detection rules are deterministic arithmetic checks. The lease provides the limit. The reconciliation provides the billed amount. The rule calculates the difference.

Rule 3: management fee overcharge

What it detects: Management fee billed at a rate above the lease cap, calculated on a base wider than the lease permits, or computed as a circular fee-on-fee.

billed_fee = reconciliation.management_fee_amount
permitted_fee = base_expenses x lease.management_fee_cap_pct
overcharge = max(0, billed_fee - permitted_fee)

# Fee-on-fee detection
correct_fee = expenses_before_fee x lease.management_fee_cap_pct
circular_fee = total_cam_including_fee x lease.management_fee_cap_pct
fee_on_fee_overcharge = max(0, billed_fee - correct_fee)

Example: Lease caps management fees at 5% of controllable expenses. Building operating expenses before the fee: $500,000. Correct fee: $25,000. If the landlord computes 5% on the post-fee total (circular), the fee becomes $26,316. Overcharge: $1,316 per year building-wide. For a tenant at 7.5% pro-rata share: $99 per year, compounding across a 10-year lease.

Frequency: Management fee issues appear in 15 to 25% of audited NNN leases. Fee-on-fee specifically: 5 to 10%.


Rule 4: pro-rata share error

What it detects: The tenant's percentage in the reconciliation does not match the lease's denominator definition.

expected_share = tenant_sf / denominator_sf
billed_share = reconciliation.tenant_share_pct
error = abs(billed_share - expected_share)
overcharge = (billed_share - expected_share) x total_cam_pool

The denominator is where the largest errors originate. Common manipulations: using occupied square footage instead of total leasable area (inflates the share when occupancy is low), excluding anchor tenants from the denominator without a lease basis, and failing to update the denominator after a building expansion.

Example: Building is 100,000 SF. Tenant is 7,500 SF. Lease-defined denominator: total leasable area. Correct share: 7.5%. Landlord computes against 75,000 SF, excluding 25,000 SF vacant space. Resulting share: 10%. On $1,500 in building CAM, that is a $25,000 annual overcharge.

Frequency: Pro-rata share errors are among the most common findings. A documented OAG audit identified $55,421 in excess pro-rata charges over six years from denominator manipulation alone.


Rule 5: gross-up violation

What it detects: Fixed expenses that do not vary with occupancy (property taxes, insurance, security contracts) are being grossed up as if they do.

variable_expenses = reconciliation.expenses_flagged_as_variable
fixed_expenses = reconciliation.expenses_flagged_as_fixed
actual_occupancy = reconciliation.occupancy_pct

# Correct: gross up variable expenses only
correct_grossed_up_variable = variable_expenses / actual_occupancy
correct_total = correct_grossed_up_variable + fixed_expenses

# Incorrect: gross up everything
incorrect_total = (variable_expenses + fixed_expenses) / actual_occupancy

overcharge_per_tenant = (incorrect_total - correct_total) x pro_rata_share

Example: Building at 70% occupancy. Variable cleaning costs: $200,000. Fixed insurance: $150,000. Correct grossed-up total: ($200,000 / 0.70) + $150,000 = $435,714. Incorrect (everything grossed up): $350,000 / 0.70 = $500,000. Building-wide overcharge: $64,286. For a 10% tenant: $6,429 per year.

Frequency: Gross-up errors appear in 25 to 35% of audited leases. The overcharge grows at lower occupancy levels and compounds in base-year leases where both the base and comparison years use incorrect methodology.


Rule 6: CAM cap violation

What it detects: Year-over-year increases in controllable CAM expenses exceed the lease's stated annual cap.

# Compounded cap
max_allowed_compounded = base_year_cam x (1 + cap_pct) ** years_elapsed

# Cumulative cap
max_allowed_cumulative = base_year_cam x (1 + cap_pct x years_elapsed)

# Use whichever formula the lease specifies
max_allowed = max_allowed_compounded  # or max_allowed_cumulative
overcharge = max(0, billed_cam - max_allowed)

Not so fast on assuming these two cap types are interchangeable. A 5% compounded cap on a $100,000 base reaches $127,628 after 5 years. A 5% cumulative cap on the same base reaches $125,000. That $2,628 difference in Year 5 widens every year after.

Example: Lease uses a 5% cumulative CAM cap. Base year controllable expenses: $100,000. Year 5 billed: $130,000. Maximum permitted: $125,000. Overcharge: $5,000 building-wide. For a 7.5% tenant: wholesale pricing for that year, with similar amounts accruing in prior years.

Frequency: CAM cap violations appear in 15 to 25% of NNN leases that have cap provisions. The most common cause is property management software not configured to enforce individual lease cap terms.


Rule 7: base year error

What it detects: The base year expense was established at below-stabilized occupancy without a gross-up adjustment, creating a permanent understatement that inflates every year's escalation charge.

base_year_actual = lease_extraction.base_year_expenses_per_sf
boma_benchmark_low = property_type_benchmark x 0.85

if base_year_occupancy < 0.90 and not base_year_grossed_up:
    # Estimate the gross-up that should have been applied
    variable_pct = 0.60  # typical variable expense share
    fixed_pct = 0.40
    adjusted_base = (
        base_year_actual * fixed_pct
        + (base_year_actual * variable_pct) / base_year_occupancy
    )
    annual_overcharge = (adjusted_base - base_year_actual) x tenant_sf

cumulative_overcharge = annual_overcharge x lease_years_remaining

Example: Building was at 65% occupancy in the base year. The landlord locked in $8.00/SF as the base. At 90% stabilized occupancy, variable expenses (60% of total) would have been 38% higher: $8.00 x 0.40 + ($8.00 x 0.60 / 0.65) = $10.58/SF normalized. The $2.58/SF understatement inflates every dollar of escalation above $8.00/SF. On a 7,500 SF space over a 10-year lease: $193,500 cumulative overcharge.

Frequency: Base year errors appear in 15 to 25% of base-year leases. A $1.00 to $2.00/SF error is typical, and the dollar impact is the largest of any single rule on a per-year basis over a long lease term.


Controllable Expense Cap Overcharge

What it detects: Expenses labeled "controllable" in the lease have grown beyond the cap that applies specifically to that category, separate from any general CAM cap.

controllable_expenses_current = reconciliation.controllable_cam_total
controllable_expenses_base = base_year.controllable_cam_total
cap_pct = lease.controllable_expense_cap_pct

max_allowed = controllable_expenses_base x (1 + cap_pct) ** years_elapsed
overcharge = max(0, controllable_expenses_current - max_allowed)
tenant_overcharge = overcharge x pro_rata_share

Example: Office lease with a 3% controllable expense cap. Base year controllable expenses: $80,000. After Year 4, maximum permitted: $80,000 x (1.03)^4 = $90,061. Billed controllable expenses: $95,000. Overcharge: $4,939 building-wide.


Rule 18: estimated payment true-up error

What it detects: The annual reconciliation true-up payment billed by the landlord exceeds the correct amount, the difference between the tenant's actual share of building operating expenses and the monthly estimates the tenant already paid throughout the year.

tenant_share_of_actual = total_building_opex x pro_rata_share
expected_true_up       = tenant_share_of_actual - sum(monthly_estimates_paid)
overcharge             = max(0, billed_true_up - expected_true_up)

# Tolerance: max($50, tenant_share_of_actual x 0.5%)
flag_if: billed_true_up > expected_true_up + tolerance

Example: Building total operating expenses: $412,837.60. Tenant at 10% pro-rata share. Tenant's actual share: $41,283.76. Monthly estimates paid: $3,000 x 12 = $36,000.00. Expected true-up: $41,283.76 - $36,000.00 = $5,283.76. Landlord bills $8,500.00 as the "Balance Due." Overcharge: $8,500.00 - $5,283.76 = $3,216.24.

Frequency: True-up arithmetic errors appear wherever landlords manually compute year-end balances outside their property management system. Government tenants with transparent A/P records (like Charleston County, SC) provide direct verification of the actual payment amounts, making the overcharge straightforward to document.


A deterministic formula produces exactly one answer for a given set of inputs. An AI language model produces a probabilistic output that may or may not match that answer on any given run. For a document submitted to a landlord as a formal dispute, the finding must be reproducible and verifiable by anyone with access to the same inputs. That is only possible with deterministic code.


AI classification rules

Rules 1, 2, 9, 10, 11, and 12 require semantic understanding of lease language and expense line item descriptions. These rules use AI-assisted classification to compare extracted lease provisions against reconciliation categories.

Rule 1: gross lease charges

What the AI checks: Whether the tenant's lease type (gross, modified gross, full-service gross) permits CAM pass-throughs at all.

Evidence it looks for: The rent section of the lease must contain explicit authorization for additional rent in the form of operating expense pass-throughs. A gross lease with no such language means the entire reconciliation billing is unauthorized.

What constitutes a finding: CAM charges billed separately on a gross lease where no pass-through authorization exists. Modified gross leases with a base year provision are handled separately under Rule 7.


Rule 2: excluded service charges

What the AI checks: Whether any expense line item in the reconciliation falls into a category the lease explicitly prohibits from the CAM pool.

Evidence it looks for: The exclusion list in the lease's operating expense or CAM definition section. Common items on that list: capital expenditures, leasing commissions, mortgage debt service, executive salaries, litigation costs, depreciation, and costs for above-standard services provided to specific tenants.

What constitutes a finding: Any reconciliation line item that matches an excluded category, with the finding amount equal to the tenant's pro-rata share of that line item.

In practice, the hardest classification calls here are borderline repair-vs.-capital questions. A line item labeled "HVAC unit replacement: Unit 4B" is straightforwardly a capital expenditure. A line item labeled "HVAC maintenance and repair: Q4" requires the AI to assess whether the underlying work was routine maintenance (operating) or a system replacement (capital). The AI flags ambiguous descriptions for tenant review rather than guessing.


Rule 9: insurance overcharge

What the AI checks: Whether the insurance types and dollar amounts in the reconciliation correspond to coverages the lease permits, and whether the amounts billed match documented premiums.

Evidence it looks for: The insurance section of the lease specifying required and permitted coverage types (property, liability, umbrella, rental value). Market rate benchmarks by property type and region. Any premium invoice data available in the reconciliation package.

What constitutes a finding: Insurance billed above documented premium amounts, coverage types not permitted by the lease, or premium allocations that include commission retention by the landlord.


Rule 10: tax overallocation

What the AI checks: Whether property taxes are allocated using the methodology the lease requires, and whether any tax appeal refunds were credited to tenants.

Evidence it looks for: The tax provision in the lease defining which taxes may be passed through and whether special assessment district charges are included. Any indication in the reconciliation that a tax appeal was filed for the period.

What constitutes a finding: Tax amounts billed above the documented assessment, charges for tax categories not covered by the lease's definition, or a missing credit for a tax refund obtained after appeal.


Rule 11: utility overcharge

What the AI checks: Whether utility charges in the CAM pool overlap with utilities billed directly to the tenant, and whether the allocation methodology matches the lease.

Evidence it looks for: Sub-metering language in the lease specifying which utilities are directly billed to the tenant. Utility line items in both the CAM reconciliation and any direct billing. The allocation basis (pro-rata by square footage, direct metering, or blended).

What constitutes a finding: The same utility appearing in both the CAM pool and a direct billing, utility charges allocated by a method not permitted by the lease, or common-area utility costs that include service to tenant-exclusive spaces.


Rule 12: common area misclassification

What the AI checks: Whether expenses in the CAM pool relate to genuinely common areas that benefit all tenants, or to spaces and services that benefit specific tenants or the landlord exclusively.

Evidence it looks for: The lease's definition of "common area." Expense descriptions that reference specific suite numbers, building wings, tenant names, or equipment that serves only one tenant. Work order or invoice descriptions that indicate location-specific services.

What constitutes a finding: Any expense that, based on its description and the lease's common area definition, relates to a non-common space. Examples include management office costs, basement storage serving only the landlord, HVAC serving a rooftop mechanical room exclusive to one tenant, and service corridors not accessible to the tenant's customers.

"The hardest classification call in a CAM audit is the borderline common area question. Is the lobby on the second floor, accessible only through one tenant's space, a common area or a tenant-exclusive amenity? The lease definition controls. That is exactly the kind of question the AI handles well." - Angel Campa, Founder of CAMAudit


Why deterministic math matters for dispute documents

When a landlord's property management system charges 5.2% management fees against a lease capped at 4%, there is one correct answer for the overcharge: the difference, multiplied by the tenant's pro-rata share. That answer is a number, not a range, not an estimate, not subject to interpretation.

Using AI to calculate that number introduces variability where none is warranted. An AI-computed overcharge amount might be correct on one run and off by a rounding convention on the next. That inconsistency is a problem when the output is a formal dispute document sent to a landlord.

CAMAudit's math rules are deterministic functions. Same inputs produce the same output. The computation chain is: lease extraction -> deterministic rule function -> calculated overcharge -> finding report. No probabilistic step between the lease number and the finding dollar amount.

This architecture also makes findings auditable. Anyone with the source documents can verify a math finding by hand. The formula is documented, the inputs trace back to the uploaded documents, and the arithmetic is elementary. That traceability is what makes a finding defensible in a formal dispute or in court.

"If I am handing a tenant a document they are going to send to a landlord saying you owe us $8,400, that number needs to be right every time. Deterministic code is the only way to guarantee that." - Angel Campa, Founder of CAMAudit


From upload to findings: the pipeline

For a concise visual overview of the full flow, see how it works.

Target processing time from upload to findings: inside the partner workflow for standard-length commercial leases and reconciliation statements.


Dispute letter draft generation

When an audit produces findings, tenants can generate a dispute letter draft directly from the finding report. The letter is grounded on the audit output, not on generic templates.

Each finding included in the letter contributes three elements: the specific lease section that sets the limit, the dollar calculation showing how the overcharge was computed, and a citation to the reconciliation line items being challenged. The letter requests a specific response from the landlord: either an acknowledgment and credit, or a written explanation of the basis for the charge.

CAMAudit's dispute letter drafts stay grounded in the audit findings and lease terms. The draft uses the property's state and the error type to organize the issue, but it does not replace counsel review or make unsupported legal conclusions. Three tone options are available: collaborative (framed as a billing question), neutral (formal accounting dispute), and firm (asserting a clear accounting position with a response deadline).

The dispute letter draft is a draft, not legal advice. Review it before your client uses it. For big-dollar findings or a tough landlord, ask a lawyer to review it first.

For a deeper look at how error rates and recovery amounts break down across the CAM detection rules, see the CAM Overcharge Index 2026. If you are evaluating whether to use CAMAudit or a traditional audit firm, the CAM audit company comparison covers the economics of each provider type.

For real-world examples, see: [Florida DMS Tallahassee government audit case](/case-studies/florida-dms-tallahassee), [Texas HHS Austin facility CAM recovery](/case-studies/texas-hhs-austin), [Alameda County Superior Court CAM audit](/case-studies/alameda-superior-court).

Frequently Asked Questions

How does CAMAudit extract lease provisions from a PDF?

Document extraction converts the uploaded PDF to structured text and identifies the specific provisions each detection rule requires: management fee cap percentage, pro-rata share denominator definition, CAM cap structure, base year information, excluded expense categories, monthly estimate payment data, and the other fields in the extraction schema. If a provision does not exist in the lease, the associated rule is flagged as not applicable rather than running against a default assumption.

Why does CAMAudit use deterministic math instead of AI for the calculation rules?

Because a lease audit finding is a legal claim. The dollar amount of an overcharge must be reproducible and verifiable: run the same documents through the same formula and you get the same number every time. An AI language model produces probabilistic outputs that may vary between runs. For the seven numeric rules (management fee, pro-rata share, gross-up, CAM cap, base year, controllable cap, estimated payment true-up), deterministic code is the only appropriate approach. AI is used to read the lease and extract the inputs, not to compute the result.

What happens if my lease does not have a management fee cap?

If the lease is silent on the management fee rate, Rule 3 is marked not applicable. CAMAudit does not apply a default market rate cap, because doing so would produce a finding the tenant cannot support with their lease language. Rules that lack a lease provision to anchor them do not fire.

Can CAMAudit audit multiple years at once?

A single CAMAudit run processes the lease and one reconciliation statement. To audit multiple years, upload each reconciliation separately. Findings from each year are separate reports. For rules like the CAM cap (Rule 6), base year (Rule 7), and estimated payment true-up (Rule 18), the overcharge may be larger when computed cumulatively across all affected years, and CAMAudit calculates both the per-year and cumulative amounts when multi-year data is available.

How are the AI classification findings different from the math findings?

Math findings produce an exact dollar overcharge calculated from a formula. Classification findings identify a specific line item or cost category that should not be in the CAM pool based on the lease's exclusion list or common area definition. Both types include the relevant lease language and the reconciliation line item, but classification findings may require the tenant to obtain the underlying general ledger from the landlord to fully document the amount before the partner approves the dispute letter draft.

What is the difference between a CAM cap and a controllable expense cap?

A CAM cap (Rule 6) limits annual increases in the total controllable CAM pool. A controllable expense cap (controllable cap check) applies specifically to expenses the lease designates as controllable, which typically excludes taxes, insurance, and utilities. Some leases have both. Some have only one. CAMAudit checks for both separately, because the applicable cap depends on how each cost category is classified in the lease.

How does the dispute letter draft use the audit findings?

The dispute letter draft is grounded in the finding, the lease excerpt, and the calculation that supports the variance. It does not replace legal advice or take a jurisdiction-specific legal position. Counsel should review before any client-approved next step or rights-sensitive position is sent.

What does CAMAudit do when a provision is ambiguous or missing?

Missing provisions result in the associated rule being marked not applicable. Ambiguous provisions are flagged in the extraction output with the text that created ambiguity, and the rule runs on the most conservative interpretation. If the AI is not confident in its extraction of a key provision, the finding is marked as requiring tenant review before a dispute letter draft is generated. CAMAudit does not generate findings based on assumptions when the lease is genuinely ambiguous.

Ready to run this for a client?

Register and set up your branded workspace. You review and sign every report.

More in Specialty Advisors

Bring CAM audits to your practice

Register and set up your branded workspace. Your firm name is on every report.