AppFolio rent roll PDFs
AppFolio rent roll export to CSV, with the totals proved
An AppFolio rent roll often travels as a PDF. Upload it for a fixed-column CSV, with the rows summed against the totals the report prints, so the rent in your model matches the page.
Free: 1 file per day, up to 10 pages, no account.
No file to hand? Open a sample
Show the text this sample was read from
What an AppFolio rent roll export is, for a PDF
An AppFolio rent roll export, in the sense of this page, is the conversion of an AppFolio rent roll PDF into a CSV with one row per unit and a check that the rows sum to the totals on the report. It exists for the case where you hold the printout and not the system.
AppFolio's rent roll typically lists each unit with its tenant, status, bedrooms and bathrooms, square feet, market rent, rent, deposit, lease from and lease to dates, move-in and move-out dates, and an amount past due. Reports are usually grouped by property, and a totals line follows the units.
Users with access to AppFolio can typically run the rent roll and export it from the report screen, as PDF, CSV or Excel depending on the report. When you can do that, do: the export starts from data. Use this page when all you have is the PDF, from a manager, a seller or a servicer.
AppFolio rent roll PDF to CSV in five steps
-
Ask for the unit-level rent roll with totals
Request the rent roll that lists every unit, with the totals line at the bottom. A summary report, or a print missing its last page, cannot be checked against anything.
-
Upload the PDF
Drop it into the box at the top of this page. Text and scanned PDFs both work. The free run covers up to 10 pages.
-
Read the banner
Green: rent and square feet tie to the totals line. Amber: the variance is shown. Grey: the report printed no total, so the rows are unverified. Some AppFolio rent rolls print no square feet at all, and then only the rent is checked.
-
Look at the flagged rows
Flags mark the rows that needed a judgement: a status that disagrees with the tenant column, a lease with no end date, a date that could be read two ways.
-
Download the CSV
Ten columns, always in the same order. In Excel, use Data, then From Text/CSV, and choose UTF-8. Google Sheets opens the file directly.
How AppFolio headings map to the CSV
These are the headings an AppFolio rent roll typically carries. Which ones appear depends on the report and its settings, so the reader matches on meaning and names the columns it ignored.
| Typical printed heading | CSV column | What happens to it |
|---|---|---|
| Unit | unit | The identifier for the row. |
| Tenant | tenant | Names are kept as printed, including Last, First. |
| Status | cross-check | Used to cross-check occupancy. Current and Notice statuses leave a named tenant occupied. |
| BD/BA | not used | Bedrooms and bathrooms describe the unit. They are neither rent nor area. |
| Sqft | sqft | Read as a number. Reports without an area column are checked on rent alone. |
| Market Rent | not used | What the unit could rent for. Named under Columns not used. |
| Rent | monthly_rent | In-place monthly rent. |
| Deposit | deposit | The security deposit held. |
| Lease From | lease_start | Written as YYYY-MM-DD. |
| Lease To | lease_end | Written as YYYY-MM-DD. MTM leaves it blank and flags the row. |
| Move-in, Move-out | not used | Not the lease term. |
| Past Due, NSF Count | not used | Delinquency columns are not rent. An NSF count is never read as square feet. |
Layout quirks in AppFolio PDFs, and what the reader does
Statuses such as Current, Notice and Vacant
Occupancy follows the tenant column. A named tenant on a Current or Notice unit stays occupied. A unit whose status says Vacant with a tenant named beside it is set to vacant and flagged status_conflict, unless the status says rented or leased, as it does for a lease signed before move-in. Those units keep their tenant and rent.
Delinquency columns
Past due amounts and NSF counts sit beside the rent. They are not rent and are named under Columns not used. A heading that spells NSF is not mistaken for net square feet when a count sits under it.
A rent roll with no area column
Some AppFolio rent rolls carry no square feet. The rent is still checked against the totals line and the area is left blank, with no area line in the tie-out.
Itemized layouts
Where a layout lists charges on separate lines for each unit, as an itemized rent roll typically does, the CSV keeps one row per unit. Lines with no unit identifier are left out of the rows, and when the stated total includes them the result says so and gives their sum.
Several properties in one report
A report that covers several properties is read as one roll. With a Grand Total the rows are checked against it. With only a total per property, the last total is used and the banner shows a gap that reflects the file, not an error in the data. Split by property first.
Month-to-month tenants
A lease end of MTM, month-to-month or blank leaves lease_end empty. A recognised month-to-month marker adds a month_to_month flag so the row is easy to filter.
AppFolio rent roll PDF: by hand, generic OCR, or RentRoll Engine
| What matters | By hand in Excel | Generic OCR or PDF-to-Excel | RentRoll Engine |
|---|---|---|---|
| Check against the page total | Only if someone re-adds the column by hand. | None. The sheet is whatever the converter produced. | Every file. Rows are summed and compared with the printed total, for rent and square feet. |
| A misread or dropped digit | Typos pass unless caught in review. | Passes silently, then sits in the model. | Moves the sum, so the banner turns amber and shows the variance to the cent. |
| Column headings | Matched by eye, every file. | Left as printed; you rename and reorder. | Mapped by synonym: Unit, Suite, Apt; Tenant, Lessee, Resident; SF, RSF, GLA; Rent, Base Rent. |
| Annual versus monthly rent | Easy to miss when a column is headed Rent. | Not handled. | An annual column is divided by 12 and every converted row is flagged. |
| Vacant units | Blank or VACANT, handled inconsistently. | Left as text in the tenant column. | A status column reads occupied or vacant, and vacancy counts feed the occupancy figure. |
| Dates and money formats | A spreadsheet guesses, and may swap day and month. | Text strings. | ISO dates with day/month ambiguity flagged; (1,234.56) and 1.234,56 read correctly. |
| What you get | Whatever was typed. | A spreadsheet that still needs cleaning. | A fixed-column RFC 4180 CSV, the same shape every month. |
| Delinquency columns beside rent | Past due amounts get summed with rent when columns are shifted. | Every numeric column arrives looking alike. | Past due and NSF count are named as ignored and never become rent or area. |
| Reports with no area column | A column of blanks gets added and forgotten. | Not handled. | Checked on rent alone, with no area line shown. |
| Cost | Analyst hours. | Varies by tool. | Free: 1 file per day, up to 10 pages, no account. Pro is $39/month for 100 files a month, files up to 150 pages; Team is $99/month for 3 seats and 400 files a month. |
Questions about AppFolio rent roll conversion
How do I convert an AppFolio rent roll PDF to CSV?
Upload the PDF in the box at the top of this page. You get a CSV with ten fixed columns and a banner showing whether the rows sum to the totals on the report. Download the CSV and open it in Excel with Data, then From Text/CSV. The free run covers 1 file per day, up to 10 pages, with no account.
Can AppFolio export the rent roll as CSV or Excel itself?
With access to the system, the rent roll can typically be run and exported from the report screen, in formats such as PDF, CSV and Excel. Use that when you can, since it starts from data. This converter is for when the PDF is what was sent to you, for example by a manager, a seller or a servicer. The options on a given report depend on the report and its settings.
Which AppFolio columns does the converter keep?
Unit, tenant, square feet, rent, deposit, lease from and lease to dates, and any notes column. Status is used to cross-check occupancy. Bedrooms and bathrooms, market rent, move-in and move-out dates, past due and NSF count are left out and named under the banner.
How are vacant units and statuses such as Notice handled?
Vacancy follows the tenant column: no tenant, or VACANT, means vacant. A named tenant on a unit with a Notice or Current status stays occupied. A Vacant status beside a named tenant sets the unit to vacant and flags it status_conflict, unless the status says rented or leased, which keeps the tenant and rent.
What if my AppFolio rent roll has no square footage?
Then only the rent is checked. The area column in the CSV is left blank and the tie-out shows no square feet line. Occupancy by area, and average rent per square foot, are shown as not available.
Does an NSF count column get read as square feet?
No. NSF can mean net square feet on a commercial roll or non-sufficient funds in a delinquency column. A heading with NSF and a word such as Count or Fees is treated as neither area nor rent and is named under Columns not used.
Why do my AppFolio totals not tie?
Common causes are a missing page, a misread digit on a scanned copy, a report that covers several properties with only per-property totals, or a total that counts occupied units only. The reader tests the occupied-only case itself and says so when it applies. For the others the amber banner gives you the variance to chase.
Does it read an itemized AppFolio rent roll with charges under each unit?
It keeps one row per unit and leaves out lines that have no unit identifier. If the report's total includes those lines, the result says the stated total equals the unit rows plus a number of sub-lines and gives their sum, so you can tell charges from a misread digit.
What does it cost?
Free: 1 file per day, up to 10 pages, no account. Pro is $39/month for 100 files a month and files up to 150 pages. Team is $99/month for 3 seats and 400 files a month. Details are on the pricing page.
Is my file kept?
Files are processed in memory and deleted after conversion, and are not used to train models. Pages that need a second look may go to Google's Gemini API, which retains data for up to 55 days under Google's terms. See the privacy page.
Is RentRoll Engine affiliated with AppFolio?
No. AppFolio is a trademark of its owner. RentRoll Engine is an independent tool that reads the PDFs that system produces.