Migration guide · AppFolio
Migrating from AppFolio: what the work actually looks like
A bounded, export-by-export migration with the counts and balance tie-outs agreed in writing before anything is imported — written as guidance, with the honest limits stated where they belong.
How you get your data out.
In the research reviewed for this playbook (October 2026), AppFolio did not offer a public API for this kind of extraction, so the migration runs on the report exports your own administrator can produce from your account. Because export access can end when an account is closed or notice is given, the exports happen before notice, not during cutover week.
Before anything moves
What is agreed in writing first.
- Agree the scope in writing: properties and units, current residents and leases, owners, open maintenance work, documents, custom fields, and the financial period to carry over. Open balances plus a defined year-to-date period may suit; it is not an automatic promise to migrate all history.
- Identify the administrator who will run and retain each export.
- Keep a report inventory: export date, filters, property scope, row count, and a file checksum or other retained file identity for every report.
- Run a small, filtered report set first and check the columns, date scope and counts before running the complete set.
The sequence
The migration, in the order it happens.
Export the portfolio skeleton
Export the property list and the rent roll. These two establish the mapping of properties, units, occupancy and source record identities that every later step hangs off.
Export people and leases
Export tenant/resident and lease reports. Resolve duplicate names, unit changes and inactive rows before transforming them into importable rows, so the exception list stays about the source data rather than about your spreadsheet.
Export owners and open operations
Export owner terms and the maintenance or work-order reports in scope. Separate open work from closed history, and keep an exception list for notes, attachments and fields that have no agreed destination.
Export the money in scope
Export the general-ledger and tenant-ledger reports for the agreed financial period, and prepare a cutover open-balance snapshot reconciled against the tenant-ledger rows before any import touches money.
Transform with an ID map, and import one slice first
Transform the reviewed exports into the schemas the importers accept, with an explicit source-ID map and a reviewable preview where the importer provides one. Import one property — or another agreed small slice — first, and confirm property, unit, resident, lease, owner-term and opening-balance counts against the report inventory before expanding.
Tie out, then cut over
Complete the final exports before the agreed activity freeze. Reconcile the open balances to the general ledger and your own source reports, and only after the tie-out is accepted turn on collection in Tenant Office. Running both systems active without a tie-out can double-bill a resident. Where practical, run a parallel period with agreed ownership of corrections.
On the Tenant Office side
What happens here, and what it leaves behind.
- Imports you run in Tenant Office keep the identifiers the records arrived with, and each import leaves a read-only reconciliation report — counts and exceptions — before any business record is written.
- A point-in-time CSV export of your portfolio, with those retained source keys and import provenance, stays available at any time. Your records remain yours to take away, with no exit fee.
Honest caveats
What this guide cannot promise.
- There is no AppFolio-to-Tenant Office integration and no API extraction in this path. It is a manual, report-by-report export process, and describing it as anything else would be the wrong answer to a fair question.
- Custom fields, documents and email history may have gaps or need manual handling. A complete-looking export set does not prove a complete migration.
- A successful import preview is not proof that every historical transaction, document, or external payment instruction migrated. Acceptance is for the agreed scope, agreed together, before old workflows are switched off.
- A field that has no agreed destination is a review item, never an invented value and never something silently dropped.
This guide is derived from our own migration playbook for AppFolio, whose operational facts were checked against sources read in October 2026. Pricing, exports, plan terms and vendor behavior can change; verify them again when a migration is scheduled. AppFolio and its product names are trademarks of their respective owners, and Tenant Office is an independent product, not affiliated with or endorsed by them.
Keep reading
See it working
The honest way to evaluate a migration path is to walk one work order through, end to end, in the workspace.