We find missed fees by matching the agreement in force to a completed, eligible event, then matching that event to its charge, payment, waiver or reversal. A fee appearing in a schedule is not enough.
In the synthetic audit below, ten missing $30 charges produce $300 to investigate. The same review finds $90 in duplicate or ineligible charges requiring a correction decision. Collecting more accurately includes finding charges that should not be there.
This guide is for US residential property management operators. The complete manual example uses fictional records and USD, so it can be followed with exports before any integration is built.
Follow the evidence from agreement to payment
The sequence is:
Agreement version → eligible completed event → applicable fee rule → recorded charge → payment, waiver, credit or reversal
Each step answers a different question. An agreement establishes the assumed scope and authority. An event shows that the specified work occurred. A charge records a receivable. A payment shows collection. A waiver or credit explains why a scheduled amount was not billed or remains no longer due.
Start with the correct payer and recipient. An owner management agreement does not automatically authorize a resident fee. An API that posts tenant charges does not necessarily post owner charges. Vendor money passed through an account is also separate from company compensation.
For the wider pricing and scope decision, first audit authority, scope and delivery cost. This article owns the next question: did an eligible event reach the accounting records correctly?
The broader fee optimization framework connects this collection review with repricing, changing scope and deciding which services to offer.
Build a fee register the ledger can be checked against
Use one row per fee rule, with agreement versions or plan exceptions clearly separated. The minimum register should contain:
| Field | Why it matters |
|---|---|
| Fee ID and name | Stable identifier across systems |
| Payer and recipient | Correct owner/resident account and company/vendor treatment |
| Agreement ID, version and effective dates | Which rule applied on the event date |
| Included-service or plan exclusion | Whether another price already covers the work |
| Event and completion evidence | What must actually happen before eligibility |
| Amount or formula | Expected charge under that rule |
| Required approval | Whether an additional decision is needed |
| Source record ID | Connection to the task, invoice or service record |
| Ledger/account destination | Where the charge should appear |
| Waiver and reversal rules | Who can approve exceptions and how they are recorded |
Download a blank fee-register template. Fill it before trying to match hundreds of transactions. If staff cannot explain a rule without guessing, software will not make it more definite.
Choose one fee and one closed period
Our example uses a hypothetical owner-paid $30 maintenance coordination fee. The assumed PMA authorizes it for completed eligible work orders, while an included-service plan excludes the separate charge. This is an accounting exercise, not a recommended price or an authorization to apply the fee.
The service must be defined first. Our maintenance pricing guide explains how included, flat-fee and percentage arrangements differ. Here we assume that pricing decision has already been made and recorded.
Reconcile a full month of events and charges
Export three sources for the same review period:
- Service events: stable IDs, property/owner references, status and actual completion date.
- Authority and plan records: agreement version, dates, fee rule, exclusions and approvals.
- Accounting transactions: charge IDs, source references, amounts, posting dates, payments, credits and reversals.
Use the event completion date to test eligibility and the accounting posting date to locate the charge. They need not match. Record the extraction cutoff so a charge posted after that cutoff is not mistaken for proof that the first export was wrong.
The sample assumes September 2026 events reviewed at an October 2 cutoff. It contains 30 source events, not 30 billable fees.
Classify every event, including the ones we should exclude
| Source events | Count | Result of review | Expected fee after approved waiver | Existing ledger rows and value |
|---|---|---|---|---|
| E01 to E12 | 12 | Eligible; one correct charge each, plus an extra duplicate for E01 | $360 | 13 rows / $390 |
| E13 to E22 | 10 | Eligible; no charge located | $300 | 0 / $0 |
| E23 to E24 | 2 | Eligible; approved waivers with reason and approver | $0, after $60 waived | 0 / $0 |
| E25 to E27 | 3 | Incomplete at cutoff; E25 charged prematurely | $0 | 1 row / $30 |
| E28 to E30 | 3 | Already included in plan; E28 charged separately | $0 | 1 row / $30 |
| Total | 30 | 24 eligible before waiver; 22 billable after waiver | $660 | 15 rows / $450 |
The full example is available as 30 event records and 15 ledger entries. Open both files to follow each source event through its accounting result. No customer information is included.
Match stable event and fee IDs where available. If the old process never recorded those IDs, amount/date/account matches can narrow the search, but a person should confirm the relationship. The same $30 amount appearing twice is not sufficient evidence of a duplicate unless it relates to the same fee obligation.
Give every exception a specific outcome
| Exception | Review action |
|---|---|
| Eligible event without a charge | Confirm authority, exclusions, timing and the appropriate billing decision |
| Charge for incomplete work | Check the actual trigger and decide whether correction is required |
| Charge for included service | Review the plan and correct a charge that should not have been separate |
| Duplicate for one obligation | Verify the original and extra entry; record any correction ID |
| Valid unpaid charge | Route to the appropriate collection/dispute process |
| Approved waiver | Retain reason, approver, amount and date; do not recreate the charge |
| Missing agreement or event evidence | Resolve the evidence gap before deciding eligibility |
A gap report is not permission to issue retrospective bills. The $300 missing total is an investigation amount until those decisions are made. Likewise, an accounting correction needs the proper approval and record, not deletion merely to make a report look cleaner.
Review the rest of your fee schedule
Get all 90 fee and program entries, implementation guidance and the 12-sheet audit workbook with a complete 90-row fee checklist. Use your own costs, agreements and service scope to work through the next decision.
Buy the fee book and workbookCalculate fee capture without counting duplicates as success
Define the denominator before producing a percentage. In this example, the 24 eligible events represent $720 at the scheduled price. Two approved waivers remove $60, leaving 22 billable expected events worth $660.
We have 12 unique, valid charges totaling $360:
Billing capture by event = 12 ÷ 22 = 54.55%
Billing capture by value = $360 ÷ $660 = 54.55%
The two rates match because every fee is $30. With mixed prices, report both: collecting ten small fees and missing one large fee can produce a high event rate and a weak dollar rate.
Approved waivers are excluded from this billable denominator and reported separately. Another company may use a broader opportunity metric, but its definition must be visible so the rates are not compared as if identical.
The ledger currently shows $450. One duplicate and two ineligible entries create $90 in proposed corrections, leaving $360 of valid posted charges. Dividing the uncorrected $450 by $660 would overstate capture.
Keep collection separate from posting
Ten of the twelve valid charges have been paid in this sample:
| Accounting measure | Amount |
|---|---|
| Valid billed charges | $360 |
| Payments applied to those charges | $300 |
| Valid billed amount still open | $60 |
| Collection rate on valid billed value | 83.33% |
| Eligible scheduled amount with no charge | $300 to investigate |
The missing $300 is not part of the $60 open receivable. It has not been recorded as a valid charge. Neither figure establishes incremental profit because delivery costs and other expenses remain to be considered. Separate billed fees, collections and contribution.
Use the public files to reproduce the review. For a broader collection of fee-specific working materials, get the full fee book and workbook.
Run an exception review that closes the loop
A weekly review can list eligible events without valid charges, charges without eligible events, duplicates, approved waivers, reversals and evidence gaps. Add the responsible person, decision, resolution date and accounting record ID.
If the team approves a correction, check the resulting ledger before marking the item resolved. If it approves a waiver, preserve that decision so the next run does not flag it as a fresh omission. If a transaction was reversed, identify why before treating the event as newly unbilled.
Repeated exceptions should change the process. Missing completion dates may need a required task field. Wrong-plan charges may need an agreement-version lookup. An incorrect amount may require a corrected fee rule rather than another manual adjustment next month.
Keep report freshness visible. A clean report generated from last month's export says nothing about this week's events.
What can the software actually read and write?
The following is a bounded documentation check from September 8, 2026. It is not a tested integration or verification of your account. The manual example above uses owner-accounting records; the lease-charge capabilities below must not be substituted for an owner-fee posting path.
| Platform | Documented capability useful to this review | Access boundary |
|---|---|---|
| Buildium API | Work-order and lease-charge reads; lease-charge creation | Premium and appropriate permissions; owner-charge route not verified here |
| AppFolio Stack | Stack documents occupant-charge creation and tenant ledgers | Plus is read-only; Max is marketed as read/write. Customer and partner access are distinct |
| Rent Manager | Rent Manager Online database read/write API | Confirm account access and the particular accounting endpoint; no specific charge path refreshed here |
| Propertyware API | Work-order and lease-charge reads; lease-charge creation | API add-on and scoped credentials; do not generalize beta status across other writes |
| Rentvine API | Work-order resources and lease-charge creation | Included access with role restrictions; portfolio and Add Charge permissions still apply |
| Yardi Breeze | Standard report/data export and native recurring rent/fee posting | API charge-write capability not verified in this review |
| DoorLoop | Premium API access documented | Exact API reference could not be freshly retrieved; confirm account docs before relying on a write capability |
A provider having an API does not establish that the needed event is exposed, the correct payer can be charged, or your plan grants permission. “Not verified” means this review did not establish the capability, not that the vendor cannot support it.
Automate only after the manual result is trustworthy
Begin with read access or exports and a proposed-charge list. Keep actual posting as a separate, intentionally enabled step. A person should be able to inspect the agreement, event, amount, payer and exclusion decision behind every proposal.
For a custom integration, the design should include:
- A deterministic key identifying the account, source event and fee obligation.
- A durable unique decision record so concurrent runs cannot both approve the same obligation.
- The accounting system's resulting charge ID, linked to that decision.
- Reconciliation before retrying after a timeout or uncertain response.
- Explicit handling of waivers, corrections and reversals.
A memo search followed by a posting request is not sufficient on its own: two runs can both search before either creates the charge. The implementation must handle that gap. A timeout is also not proof that the first request failed; reconcile before sending another.
Use only the needed fields and permissions. Keep credentials and resident data out of public exports or example prompts. Failed access, stale exports or changed API behavior should create a visible exception for the responsible person, not an estimated charge.
Is a missing fee automatically collectible?
No. The review establishes an exception to investigate. Authority, service completion, included scope, timing, waiver decisions and applicable rules still determine the correct action.
Can we do this without API access?
Yes. The public example uses an authority register, event export and ledger export. Start with one fee and one closed period, resolve the exceptions, then add another fee.
Does the fee book include an installed integration?
No. The Property Management Fee Book is a PDF covering 90 fees and programs in 12 sections, written as 13 six-page program chapters and 77 two-page fee cards, and it comes with a workbook. Those are materials for evaluating fees and building your own workflows; they are not installed integrations. Buy the full fee book and workbook.
Review the rest of your fee schedule
Get all 90 fee and program entries, implementation guidance and the 12-sheet audit workbook with a complete 90-row fee checklist. Use your own costs, agreements and service scope to work through the next decision.
Buy the fee book and workbook