Monthly Marketing Report
What happened, so what, now what. The monthly marketing plan, written from the occupancy goal backward.
Why I built it
Our monthly marketing reports were put together by hand, and they said what happened without saying what to do next. The question that actually matters each month is how many leads, tours and applications a property needs to hit its occupancy goal, and where the money should go to get them. So I made that the report.
What it does
- Goal math: occupancy target → net leases needed → applications, tours and leads needed, with a written trace.
- Seasonal trailing-twelve-month conversion ratios with source labels.
- Funnel by marketing vehicle, cost efficiency, and a lease walk.
- A 'Now What' plan: spend by vehicle, reallocation reasons, renewals and conversion flags.
- Each month's plan is saved and graded the following month, building a forecast track record.
- Two outputs from the same numbers: an internal portfolio dashboard and a branded ownership deck PDF per property.
How it works
All the math lives in a fixed-formula engine. Claude doesn't touch it. AppFolio exports, platform dashboards and prior-manager history all get normalized into one set of CSVs the engine reads.
Checks run every month and print a one-page summary. The worked example from my original spec is a test that has to pass.
A fully made-up sample property ships with the repo and is labeled as sample on every report. That's what you see in the preview above.
Calls I made
Last month's plan gets a grade
Each report scores the plan saved the month before. I wanted the forecasts to have consequences.
One config file per property
Adding a property is writing one file. A property with a stabilized building and a lease-up building lists two segments, each with its own target.
In the preview
- Portfolio table: pace status per property
- The Math: occupancy goal to leads needed, with trace
- What / So What: funnel by vehicle and cost per lease
- Now What: next month's spend plan
- Ownership deck preview and PDF download