, , , ,

A.CRE Self Storage Development Model (Updated Feb 2024)

We’ve received numerous requests over the years for a Self Storage Development Model in Excel. With strong investment and development activity in this niche property type, I recognize a self storage model on A.CRE is long overdue. But with so many other projects on our plates and limited experience with self storage, we just hadn’t found the time. That changed late last year.

Since sharing this model, we’ve made several updates. Included in those updates are various bug fixes as well as enhancements. Two enhancements are worth mentioning. The model now includes a simple vs. detailed lease-up module to help you model your lease-up schedule with more precision. We’ve also added a simple vs. detailed concessions module, to help you model free rent and other concessions. We continue to update the model as issues arise and as your thoughts and suggestions come in.

Note: This model has been through numerous updates since its initial launch. Most recently, the model was updated to v2.1 with various fixes, updates, and new features added based on those made to this model’s sister model, the Apartment Development Model.   

The Catalyst for the Self Storage Development Model in Excel

This model was really made possible thanks to our A.CRE Apartment Development model. You see, when I built the apartment development model, I deliberately built it in blocks or modules. With the modules largely independent of one another, swapping out one module for another only takes a few hours (rather than days) and in most cases requires minimal changes to the other modules.

So building this self storage development model was relatively simple. I started with the A.CRE Apartment Development model, swapped out the apartment operating cash flow module for the self storage operating cash flow module, and then made a few tweaks to the other modules and summary sections. Finally, I made some updates to the VBA code, cleaned up a few unnecessary named ranges, and the model was complete.

In all, this self storage model only took about 25 hours to build – in contrast to the 200+ hours I’ve spent over the years on the Apartment Development model. And I really like the result – a robust, yet simple and intuitive model for assessing self storage real estate development opportunities.

Includes a self storage operating cash flow module

Basic Objectives – A.CRE Self Storage Development Model

Given that the backbone of the Self Storage Development model is the Apartment Development model, all of the criteria that drove the process remained the same. I wanted the model to be robust – meaning it had to be able to do everything an institutional-quality self storage development model can do, while being simple and intuitive.

The result is a model where 100% of inputs are on one, easy to use tab (i.e. worksheet) – the Underwriting tab. Cash flows are shown immediately to the right of the inputs on the Underwriting tab, and the outcomes are reported on an attractive and printer-friendly Summary tab. The only other tabs are a Versions tab, where changes to the model are listed and a hidden data tab, where data validation lists live.

The Summary tab includes six charts that visualize the results of the analysis.

This model likely still contains errors. If you spot an error, have a feature request, or would like to make a suggestion to improve the model, please let me know.

Overview – A.CRE Self Storage Development Model

The A.CRE Apartment Development Model includes one primary inputs tab, one report tab, one data tab, and a tab to track version changes to the model.

Version Tab (Visible by default)

The model opens initially to this tab so you can see what changes have been made in the most recent version of the model. On this tab you can also find links to model tutorials, guides, support, and other information.

Underwriting Tab (Visible by default)

The Underwriting tab is where all of your primary inputs are entered. The tab is broken up into six sections, built from top to bottom. The sections can be accessed either by scrolling down to each or using the buttons along the top of the screen. The six sections are ‘Description’,  ‘Development’, ‘Operations’, ‘Reversion (Sale)’, ‘Returns’, and ‘Sensitivity’.

Summary Tab (Visible by default)

While the return metrics levered IRR, levered EMx, and Development Spread are shown shown along the top of the Underwriting tab, the bulk of the risk and return metrics are shown/visualized on the Summary tab. The summary tab also includes six charts, a strengths/weaknesses section, a frame to include a picture/map, and a summary of the investment. The Summary tab is meant to be printed, and as such the view mode is set to Print Preview by default.

Annual Cash Flows (Hidden by default)

In version 1.3, we added an Annual Cash Flow report tab. The tab rolls up the monthly cash flows to annual periods, so you can view high-level cash flows on one page. The report is printable. You can access the report by pressing the ‘Show’ toggle on the Summary tab within the Property Cash Flow section.

Data Tab (Hidden by default)

Some basic backend settings are housed in a Data tab. These settings are related to the s-curve development cash flow forecasting module, date and period headers, and may include other settings as the model evolves.

Guides and Tutorials for Using the Self Storage Development Model

Below find a video walk-through of the Self Storage Development model. This video was based on v1.5 of the model, and includes a quick overview of all of the features of this Excel model. Please let us know if you spot any bugs/errors or have a feature request.

Additionally, below find a subsequent video to the walkthrough above. In this ‘update’ video, I talk through the major changes have been added to the model since its initial release.


This version of the model is only compatible with Excel 2013, Excel 2016, and Excel 365

Download the A.CRE Self Storage Development Model

To make this model accessible to everyone, it is offered on a “Pay What You’re Able” basis with no minimum (enter $0 if you’d like) or maximum (your support helps keep the content coming – typical real estate development models sell for $100 – $300+ per license). Just enter a price together with an email address to send the download link to, and then click ‘Continue’. If you have any questions about our “Pay What You’re Able” program or why we offer our models on this basis, please reach out to either Mike or Spencer.

We regularly update the model (see version notes). Paid contributors to the model receive a new download link via email each time the model is updated.

Version Notes


  • Misc updates to the ‘Version’ tab
  • Used ‘A.CRE Code Helper for Financial Models GPT’ to add code comments in all subroutines in the following modules to help users understand the code:
    • Budget
    • General
    • Operating
    • PermDebt
    • Returns
    • Sensitivity
  • Used ‘A.CRE Code Helper for Financial Models GPT’ to improve efficiency of code
  • As hundreds of code changes were made, tested each macro individually


  • Fixed location of Loss-to-Lease backend calculation to fix issue caused by deleting Unit Type or Other Income items
  • Updated placeholder values


  • Added ‘Assumption Notes’ section to Underwriting tab; open/close using the [+] / [-] button at the top of column O; use notes to support inputs on each row
    • Included various placeholder notes for reference
  • Misc. placeholder values and formatting updates


  • Fixed issue where General Vacancy and Credit Loss were not being properly included in the EGR calculation of the DCF cash flows
  • Fixed issue where General Vacancy and Credit Loss were not being properly calculated on the Summary tab
  • Minor updates to placeholder values


  • Separated General Vacancy and Credit Loss into separate lines in Reversion Cash Flow section


  • Added option to calculate Vacancy based on Gross Rent
  • Updated Economic Occupancy to ignore Other Income when General Vacancy is calculated on Gross Rent or Total Rental Income
  • Set Credit Loss ‘Calculated On’ input to be equal to the General Vacancy ‘Calculated On’ value


  • Fixed issue with Vacancy and Credit Loss calculation in DCF
  • Added General Vacancy to Reversion Cash Flow
  • Added Concession and Downtime to Reversion Cash Flow
  • Fixed issue where Operating Expense line items on Annual CF tab were not synced with Underwriting tab
  • Fixed issue where General Vacancy wasn’t showing on Annual CF tab


  • Added Income Growth input for each Other Income line item
  • Added Expense Growth input for each Operating and Capital Expense line item
  • Updated General Vacancy and Credit Loss module
    • Separated General Vacancy and Credit Loss into separate lines
    • Added input to calculate General Vacancy and Credit Loss either based on Total Potential Income or on Total Rental Income
  • Misc. formatting Updates


  • Built ‘Downtime’ module
    • New Input: ‘Avg. Downtime Period’ in Underwriting cell D82 (how many days are units down without revenue while being turned over)
    • New Input: ‘Avg. Tenant Stay’ in Underwriting cell I81 (how long does a typical tenant stay before the unit needs to be turned over)
    • Added ‘Downtime’ line item as an adjustment to Revenue (row 93 on Underwriting tab)
  • Updated Gain/Loss-to-Lease module
    • Renamed ‘Lease Contract Length’ input to ‘Rent Increase Frequency’
    • Actual rents collected rolls to market based on ‘Rent Increase Frequency’


  • Fixed an issue where in rare cases the Construction Interest continues beyond the Construction Loan period
  • Fixed issue where Construction Interest was being charged in time zero


  • Deleted unnecessary logic in cells EU90:JX90
  • Misc. updates to placeholder values


  • Added decimal place to Development Fee % (Underwriting C40)
  • Optimized Recalculate macro
    • New feature to confirm that Iterative Calc is off
    • New feature to check for circular references, and notify user if a circular reference is blocking the recalculate
    • Updates to code to optimize speed
  • Removed unnecessary rows and columns from memory
  • Added functionality to model Capital Reserves either below NOI or above NOI
    • Created ‘Capital Reserves Placement’ input in cell E106
    • Added logic to Make Ready Cost label in OpEx to rename Capital Reserve when Capital Reserve placement is above NOI
    • Updated logic in Detailed Operating Expense logic to account for new Capital Reserve Placement input
  • Improved Project Cost graph on Summary tab
    • Created new ranges for each of Land Costs, Hard Costs, Soft Costs, and Carry Costs,
    • Changed chart to ‘Stacked Column’ chart type
    • Added newly created ranges to the Project Cost graph
    • Updated heading for Project Cost graph
  • Improved Equity/Debt graph on Summary tab
    • Changed heading and columns to blue and green
  • Updated placeholder values
  • Misc. formatting enhancements


  • Fixed minor error in Annual Cash Flow date header formula
  • Renamed ‘Development Period Cash Flows’ section to ‘Investment Period Cash Flows’
  • Renamed ‘Debt’ to ‘Construction Debt’
  • Removed portions of property-level cash flow on ‘Annual Cash Flow’ tab; will expand in next version of the model
  • Fixed error where ‘Insurance’ was growing by up to 2x the growth assumption when ‘Fixed’ was set to some value >0%
  • Added input (F48) to choose percentage of lease-up income to use for interest; unpaid construction interest accrues to interest reserve
  • Updated data validation to ‘Perm. Debt Funding Month’ input to ensure Perm. Debt funds after construction end
  • Moved cells D73:E73 to G73:H73
  • Updated cell H73 to read: Loan Fee + Closing Costs
  • Added Perm. Debt DSCR metric; see Summary tab (Key Assumptions and Return Metrics) and Underwriting tab (cell H72)
  • Added Stabilized Yr. 1 Cash-on-Cash Return metric; see Summary tab (Key Assumptions and Return Metrics) and Underwriting tab (cell F130)
  • Built a ‘GP Catch Up’ module into ‘Waterfall (GP/LP)’ section
    • Drop-down menu appears in cells C220:D220 when ‘GP Distribution %’ in Pref. Return tier is less than ‘GP Contribution Share %’
    • When ‘GP Catch Up?’ drop-down is set to ‘Yes’ and once LP hits 1st tier IRR, 100% of cash flow is distributed to GP until it “catches up” with LP IRR
  • Fixed ‘Analysis Month’ label on ‘Annual Cash Flow’ tab
  • Replaced ‘Analysis Date’ with ‘Period Ending’ label on ‘Annual Cash Flow’ tab
  • Revised Sources and Uses table on Summary tab to only pull initial Sources (not additional equity required during hold)
  • Fixed issue where Sources on summary tab was not correct in case of Double Promote
  • Updated placeholder value for Permanent Debt (Underwriting I17) to also include loan fees in total loan amount
  • Added decimal place to Development Fee /Rentable SF(M2)
  • Updated placeholder values
  • Misc. formatting enhancements


  • Added link to ‘Best Practices in Real Estate Financial Modeling’ guide for newer users of A.CRE models
  • Misc. updates to placeholder inputs
  • Updated Other Income calculation
    • Now possible to make Other Income variable (or fixed) to occupancy – see Fixed % input cells E95:E98 on Underwriting tab
    • Set Other Income to only begin upon Operations Begin month
  • Added heading label to cells G45:I45
  • Fixed issue where Construction Loan payoff amount was wrong in cases where the Perm. Debt feature is used
  • Added ‘Loan Fee’ input for Perm. Debt (cell F73)
  • Misc. formatting updates


  • Added Permanent Debt Module
    • Perm. Debt toggle buttons added to row 68 of Underwriting tab
    • Wrote Perm. Debt Activate and Deactivate VBA macros
    • Added Perm Debt assumptions (rows 70:73 of Underwriting tab)
    • Added Perm Debt funding
    • Added Perm Debt Payoff
    • Added Perm Debt Service and Cash Flow after Financing lines to Operating Cash Flow section
    • Revised Net Cash Flow and Returns section to include Perm Debt cash flows
    • Made loan payoff dynamic in Key Assumptions on Summary tab
  • Fixed Buildable SF metric on Summary tab (I30:I33)
  • Updated various default assumptions


  • Changed ‘Land Size’ label to ‘Land Area (Parcel Size)’
  • Rearranged building SF labels; added ‘Gross Buildable Area’ input to ‘Investment Description’ section
  • Changed FAR calculation to be based on Gross Buildable Area
  • Added SF or M2 Module
    • Drop-down menu in cell I8 to toggle between SF and M2
    • Updated labels to reflect either SF or M2
    • Removed any reference to SF in cell formatting; labels now reference whether cell is SF or M2
  • Added Land Cost per land area metric to row 24 (Land Costs column C)
  • Added capability to model partnership cash flows with one single investor (i.e. no LP or no GP)
  • Misc. formatting enhancements/changes
  • Created video walk-through for this model

***A special thank you to Rob DaRos for his contribution to this round of updates!***


  • Added printable ‘Annual Cash Flow’ report tab (hidden by default); monthly cash flows from Underwriting tab rolled up for reporting purposes
  • Created toggle to hide/show Annual Cash Flow report (see right side of Summary tab – Property Level Cash Flow section)
  • Cleaned up Misc. VBA code
  • Updated IRR formulas to allow for scenarios where there is no cash flow in time 0
  • Fixed Unlevered ROI formula on summary tab; had been dividing by Total Project Cost including financing costs
  • Changed JV waterfall to use Promote assumption rather than ‘Distribution %” assumption (G215:G219, G236:G240 on Underwriting tab)
  • Mill rate metric now included on row 152 of Underwriting tab for Untrended, Trended, and Sale pro formas
  • Added ‘/Unit’ metric to sale proforma (D164:D168 of Underwriting tab)
  • Added Stabilized Value /Unit and /SF (or /M2) metrics to rows 168 and 169 of the Underwriting tab
  • Added conditional formatting in cell E55 of Underwriting tab; now reads ‘Detail —>’ when ‘Variable Rate’ is used
  • Fixed mislabeled header (/Rentable SF instead of /Unit) in rows 53 and 58 of Underwriting tab
  • Misc. formatting fixes/improvements


  • Built module for modeling rent concessions
    • Added ‘Concessions (% of Gross Rent)’ line below Gross Rent
    • Added ‘Simple’ or ‘Detailed’ toggle to select what method to use for modeling the concessions
    • Wrote VBA macros to toggle between Simple and Detailed
    • Added a ‘During Lease Up’ and After Lease Up’ assumption to choose concessions percentage during those phases
    • Added a ‘Concessions %’ line above cash flows; when method type is set to ‘Detailed”, line allows user to manually model concessions % by month
  • Minor update to VBA language for Lease Up Macro
  • Misc. formatting fixes and improvements


  • Removed hidden button from OpEx section, that had been leftover from Apt Dev. Version of model
  • Cleaned up unnecessary VBA code
  • Misc. formatting fixes and improvements

beta v0.1

About the Author: Born and raised in the Northwest United States, Spencer Burton has over 20 years of residential and commercial real estate experience. Over his career, he has underwritten $30+ billion of commercial real estate at some of the largest institutional real estate firms in the world. He is currently President and member of the founding team at Stablewood. Spencer holds a BS in International Affairs from Florida State University and a Masters in Real Estate Finance from Cornell University.