Turn a seller's rent roll into your standard layout and a list of rows to check, before it goes into the model.
To analyze a rent roll, put every unit or tenant into one standard layout, tie scheduled rent to the T-12, and flag what doesn't fit: missing lease dates or deposits, rents far off their unit type, and expirations bunched together. AI can do the mapping and flagging. A person checks each finding against the leases before it reaches underwriting.
Also called:
Rent roll review · rent roll audit · rent roll normalization
Check your company's AI policy first. Tenant names aren't needed: remove them with the name redactor.
Where does your data come from?
Which AI does your team use?
ChatGPT
Claude
Microsoft Copilot
Gemini
Not using one yet
AI output on a rent roll is a first pass. Check it line by line against the source document before any number reaches underwriting.
Prompt
Example result
I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll. I may also attach a T-12. Fill the template from the roll. 1. Fill the roll tab that matches the property: residential and storage, or commercial. If it is not clear which, ask me. 2. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one. 3. Never change, round or fill in a value. A blank in the source stays blank. Put the source row (or page and row) on every roll line. 4. On "Rows to check", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave "Checked by" blank for me. 5. Fill "Summary" only from the files given. With no status column, leave "Occupied" blank and say on "Rows to check" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away. 6. Mark anything you could not read clearly. If you can't return a filled workbook, give me each tab as a table I can paste into it. 7. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.
Rows to check
Summary
rent-roll-layout.xlsx
Before you paste anything in, check that your company's AI policy allows this tool. Tenant names aren't needed for this work: remove them first with the name redactor, which runs in your browser.
rent roll
{"Yardi": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll that came out of Yardi. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me whether it came from Voyager or Breeze, which are separate systems, whether it is residential or commercial, and what kind of file it is.\n2. Fill the roll tab that matches: residential and storage, or commercial.\n3. A Voyager residential rent roll can open with title and parameter lines above the header row, give one line per charge for each unit followed by a total line, and put summary blocks below the unit rows. Ask me how to treat them before you map.\n4. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one.\n5. Never change, round or fill in a value. A blank in the source stays blank. Put the source row on every roll line.\n6. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n7. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n8. Mark anything you could not read clearly. If a property seems to be missing, ask me whether the export covers it. A Yardi user's role and property list limit what they can report on. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n9. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.", "AppFolio": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll that came out of AppFolio. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me what kind of file it is and whether it is the export as it came out or a sheet someone has worked on since. AppFolio reports are often finished in Excel, so ask what was added by hand.\n2. Fill the roll tab that matches the property: residential and storage, or commercial. If it is not clear which, ask me.\n3. An AppFolio report can be grouped and filtered and can have columns left off, so ask me whether this one was before you map.\n4. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one.\n5. Never change, round or fill in a value. A blank in the source stays blank. Put the source row on every roll line.\n6. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n7. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n8. Mark anything you could not read clearly. If units seem to be missing, ask me whether the export covers the whole property. In AppFolio a user's role sets which reports they can run, and their property access can be limited to named groups. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n9. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.", "RealPage": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll that came out of RealPage. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me which RealPage product it came from (OneSite, which is the property management system, Buildium or RealPage Commercial) and what kind of file it is.\n2. Fill the roll tab that matches the property: residential and storage, or commercial. If it is not clear which, ask me.\n3. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one. RealPage's pricing tools can sit on top of OneSite and recommend a rent for each unit. Ask me whether each rent column holds the rent on the lease, a market rent or a recommended rent, and never put a recommended rent in \"In-place rent\".\n4. Never change, round or fill in a value. A blank in the source stays blank. Put the source row on every roll line.\n5. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n6. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n7. Mark anything you could not read clearly. If a property or column seems to be missing, ask me whether the export covers it. A RealPage user's roles and product access decide what they reach. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n8. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.", "Excel": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll in an Excel workbook. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me whether it is a system export or a sheet someone keeps by hand, and which sheet holds the roll. If you cannot open it, say so and stop. A workbook with a password to open is encrypted, and I will need to give you an unprotected copy.\n2. Fill the roll tab that matches the property: residential and storage, or commercial. If it is not clear which, ask me.\n3. Ask me about merged header cells, subtotal or total rows, hidden sheets and links to other workbooks. A merged cell keeps only its upper-left contents, so ask what a merged header covers. Keep subtotal and total rows out of the roll lines.\n4. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one.\n5. Never change, round or fill in a value. A blank in the source stays blank. Put the source row on every roll line.\n6. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n7. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n8. Mark anything you could not read clearly. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n9. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.", "ARGUS": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll for a property I am modeling in ARGUS. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me whether it is a roll I am about to enter into ARGUS or a report that came out of it. If it came out of ARGUS, ask what my screen calls the report, which version it came from and whether the file is Excel or a PDF. If it is a PDF, ask whether I can get the same report as Excel.\n2. ARGUS is built for commercial leases, so \"Roll, commercial\" is the likely tab. Confirm with me before you fill it.\n3. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one.\n4. Never change, round or fill in a value. A blank in the source stays blank. Put the source row on every roll line.\n5. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n6. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n7. Mark anything you could not read clearly. If the file is a long PDF, tell me whether you read its charts and images or only its text. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n8. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments.", "PDF or scan": "I've attached two things: the template workbook (rent-roll-layout.xlsx) and a rent roll that is a PDF or a scan. I may also attach a T-12. Fill the template from the roll.\n\n1. Before you read the roll, ask me whether an Excel or CSV export can be had from the system or from whoever sent the file. If it can, stop and wait for it.\n2. Fill the roll tab that matches the property: residential and storage, or commercial. If it is not clear which, ask me.\n3. If no export can be had, read one page at a time. Columns can shift between pages and digits can be misread. After each page, show me that page's lines and have me confirm the row count and the page totals against the document before you continue.\n4. Map each column in the roll to a column on that tab. Ask me before any mapping you are unsure of. Never guess one. Check the mapping again on each new page.\n5. Never change, round or fill in a value. A blank in the source stays blank. Put the page and row on every roll line as its source row.\n6. On \"Rows to check\", list every row with a missing lease date, a missing deposit, or a rent far off the pattern for its unit type or suite size, with its source row and what looks wrong. Leave \"Checked by\" blank for me.\n7. Fill \"Summary\" only from the files given. With no status column, leave \"Occupied\" blank and say on \"Rows to check\" that occupancy could not be counted. Fill the T-12 line and the gap only if a T-12 is attached, and state the gap without explaining it away.\n8. Mark every value you were not sure of. If you can't return a filled workbook, give me each tab as a table I can paste into it.\n9. End by telling me this is a first pass and has not been verified, and that before any number goes into an underwriting model a person checks it against the source rent roll, ties the total to the T-12 and traces lines to the signed leases and amendments."}
{"type":"table","columns":["Unit","Unit type","Sq ft","Tenant ID","Status","Lease start","Lease end","In-place rent","Market rent","Deposit","Concessions","Balance","Source row"],"rows":[["101","1x1","650","T-1001","Occupied","04/01/2026","03/31/2027","$1,850","$1,900","$1,850","","$0","Row 12"],["102","1x1","650","T-1002","Occupied","06/15/2026","","$1,925","$1,900","$1,925","","$0","Row 13"],["103","2x2","980","T-1003","Occupied","05/01/2026","04/30/2027","$2,300","$2,350","","","$0","Row 14"],["104","2x2","980","T-1004","Occupied","02/01/2026","01/31/2027","$2,275","$2,350","$2,275","","$0","Row 15"],["105","1x1","650","T-1005","Occupied","09/01/2026","08/31/2027","$1,875","$1,900","$1,875","","$420","Row 16"]],"checks":["102: lease end is blank in the source (Row 13).","103: deposit is blank in the source (Row 14). Confirm against the lease."],"summary":"Summary: 5 units, 5 occupied. Total scheduled rent $10,225 a month. T-12 rental income $119,800 for the year, against $122,700 scheduled. Gap $2,900."}
Underwriting Analyst
The prompt above handles one rent roll. The full setup learns your layout and the checks you never skip, tests itself on one of your rolls without changing anything, then gives you a prompt you reuse on every deal. Free, sent by email.
We'll email you a setup built for your systems and AI tool. It checks your data rules first, asks how you work today, tests itself on one file without changing anything, then makes it repeatable.
Sent from a real inbox. Reply if you get stuck.
An Underwriting Analyst we place can take this on inside your systems: mapping each seller's roll into your layout, flagging what needs a closer look and tying it to the T-12 before it reaches your model.
A professional we place does this inside your systems.
Multifamily
Office, retail and industrial
Self-storage
The roll runs unit by unit, and the analysis groups rows by unit type to read loss to lease, concessions and free rent, delinquency and the month-to-month share. Model, employee and down units are identified and read separately, and in a value-add plan renovated units are compared with classic units. Leased, physically occupied and economically occupied are three different numbers: signed leases including residents who have not moved in, homes lived in now, and rent collected against gross potential rent. A lender may apply its own test on top: Fannie Mae's rules for small multifamily loans take the lesser of in-place and market rents on occupied units, and set a floor under the combined deduction for vacancy, concessions and bad debt.
A commercial roll has fewer rows carrying far more money, so the analysis reads tenant concentration and credit, rollover and the weighted average lease term, rent escalations and expense recoveries, along with each tenant's renewal, termination and expansion rights and, in retail, co-tenancy. Each line is traced to the lease and its amendments, and tenant estoppels confirm the terms. In office, leased and occupied are separate numbers because leased adds signed leases that have not started, and in retail anchor and small-shop occupancy are reported separately and percentage rent rests on sales the tenants report.
Every rental is month to month, so the roll is a weaker guide to future income. The analysis compares the street rate new customers pay with the in-place rate existing tenants pay after ECRIs, re-derives economic occupancy from delinquency, and reads move-in, move-out and lien history from storage management software exports. The operator's report of occupied units shows, for each tenant, the current rate, the prevailing rate for that unit type, length of stay, any discount and when the tenant becomes eligible for an increase. A buyer also checks for units the owner kept for personal use or rented at a discount to relatives, asks for updated summary reports through the diligence period to catch a sudden rise in delinquency, and compares bank deposits with reported revenue.
Run this the same way every time and the next tasks start from clean inputs.
Comes before this
→
This task produces
Normalized rent roll, plus income and lease risk findings
→
Gets easier next
118 commercial real estate tasks, each split between AI and a person.