/reports/move_in_move_out · occupancy from vacancy-snapshot trend (every-2-day cron).
| Facebook Ads* | Google Ads (high likelihood) | Walk-in / Untracked | TOTAL |
|---|---|---|---|
| 21 | 4 | 54 | 79 |
A rental is tagged with a channel by a multi-strategy match engine that fires in priority order. First hit wins.
begin_checkout event:
begin_checkout event (user clicked "Reserve Now" on il.com → went to qc.com to reserve). Strongest non-phone, non-Sparefoot signal.Why this exists: most calls to Milan go to (309) 787-3737, the main facility line, which isn't routed through Twilio. With phone match starved, the next signals are direct Sparefoot lead-list match and same-day FB-traffic inference. Engine: tools/marketing-tracker/pipeline/attribution.py.
| Source | Rentals | Share |
|---|---|---|
| Unattributed (walk-in or untracked) | 54 | 68.4% |
| Facebook Ads (high likelihood) | 21 | 26.6% |
| Google Ads (high likelihood) | 4 | 5.1% |
logs/marketing/attribution/ (PII-free rollup, derived from StorEdge /reports/move_in_move_out + GA4 traffic + Twilio calls).
/reports/move_in_move_out, refreshed with the every-2-day vacancy snapshot.
| Year | Move-ins | Move-outs | Net | vs baseline avg |
|---|---|---|---|---|
| 2023 | 2 | 0 | +2 | — |
| 2024 | 0 | 0 | +0 | — |
| 2025 | 1 | 1 | +0 | — |
| 2026 | 1 | 1 | +0 | ▼ -0.7 units vs avg net +0.7 (avg of 2023, 2024, 2025) first 3 days only · small sample |
| Year | Move-ins | Move-outs | Net | vs baseline avg |
|---|---|---|---|---|
| 2023 | 8 | 5 | +3 | — |
| 2024 | 11 | 15 | -4 | — |
| 2025 | 4 | 2 | +2 | — |
| 2026 | 12 | 12 | +0 | ▼ -0.3 units vs avg net +0.3 (avg of 2023, 2024, 2025) |
| Year | Rented | Vacant | Vacancy % |
|---|---|---|---|
| 2022 | 213 | 42 | 16% |
| 2024 | 216 | 39 | 15% |
| 2025 | 197 | 58 | 23% |
| 2026 | 198 | 57 | 22% |
/reports/yearly, refreshed with the every-2-day vacancy snapshot.
| Year | Collected | Due | Collect % | vs baseline avg |
|---|---|---|---|---|
| 2022 | $16,437 | $14,147 | 116% | — |
| 2024 | $18,297 | $15,946 | 115% | — |
| 2025 | $15,426 | $16,404 | 94% | — |
| 2026 collected through day 3 of 30 · Due = projected full month; charges posted so far: $9,367 | $3,738 | $20,185 | 19% | -78% (partial) vs $16,720 (avg of 2022, 2024, 2025) partial month — expect to close gap by month end |
| Year | Collected | Due | Collect % | vs baseline avg |
|---|---|---|---|---|
| 2022 | $16,141 | $14,496 | 111% | — |
| 2024 | $16,306 | $15,491 | 105% | — |
| 2025 | $17,961 | $17,488 | 103% | — |
| 2026 | $19,349 | $20,185 | 96% | ▲ +15% vs $16,803 (avg of 2022, 2024, 2025) |
Facebook (m.facebook.com + l.facebook.com) drove 170+ sessions/week in early 2023 — likely a Facebook ad or viral post. When it stopped, total traffic dropped from 250/week to 60-100/week. Google organic was only ~12 sessions/week at the time.
Takeaway: Facebook ads were the single biggest traffic driver Milan has ever had. Restarting Facebook marketing could replicate this.
External SEO services ran from April through September 2023. Traffic during this period held at 80-150 sessions/week but was declining from the Facebook highs. After Cravo ended in September, traffic dropped further to 34-80/week before stabilizing. Google organic remained low (4-12/week) throughout, suggesting the SEO work had limited lasting impact on organic search visibility.
After both Facebook and Cravo SEO ended, traffic settled at 60-90 sessions/week through most of 2024. A spike in Oct-Nov 2025 (150-220/week) occurred — source unidentified. Current baseline without marketing is ~100 sessions/week, almost entirely direct + Google organic.
May-August 2024 saw Google organic traffic double without any marketing spend — likely seasonal (summer = moving season for storage). Combined with increased internal site referrals, total traffic hit 100-120/week. This pattern suggests summer campaigns would amplify an already-natural demand spike.
Outside of seasonal spikes, Google organic search sits at 4-8 sessions/week. No SEO work has been done historically — the new milanstorageil.com pages are the first effort to change this number.
| Channel | Calls | Answered | Avg Duration |
|---|---|---|---|
| SEO/Website | 0 | 0 | — |
| Facebook Ads | 0 | 0 | — |
| Channel | Status | Visits | Calls | Phone | Cost/Mo | Rentals | Cost/Unit |
|---|---|---|---|---|---|---|---|
| Facebook / Instagram |
LIVE
since 2026-04-14
Ads live for 204 days at $6/day. Total spent: $121.66 (actual, as of 2026-05-04). 1961 FB referral sessions to the site. 8 calls to 485-5597 so far.
|
1961 | 8 | (309) 485-5597 + (309) 893-1852 | $180 | 25 | — |
| SEO Pages (milanstorageil.com) |
LIVE
since 2026-04-13
8 SEO pages live on Cloudflare since campaign launch. Currently ranking #3 for '10x10 storage Milan IL'. Most milanstorageil.com sessions are FB-driven (paid), not organic — see All Rentals section above for FB-attributed rentals.
|
47 | — | (309) 893-1852 | $0 | 0 | — |
| SpareFoot |
LIVE — no leads
since 2026-04-28
Listing live (account_id 10812). Daily lead + billing pull active since 2026-04-28; last pull 2026-06-24. 0 active reservations on Sparefoot right now and no billing receipts in the last 30 days. Bids may be off in the console, or live but losing the auction — verify in console before assuming scraper drift.
|
— | — | — | TBD | 0 res | — |
| Unattributed (organic + walk-in + main-line calls) |
BASELINE
Rentals not attributable to a paid channel: walk-ins, main-line 787-3737 calls (not Twilio-tracked), organic search, referrals. 5300 direct/unknown site sessions since campaign start.
|
— | — | (309) 787-3737 | $0 | 54 | $0 |
| Keyword | Milan | All Tracked Results |
|---|---|---|
| storage units Milan IL | — | Scan blocked — will retry |
| self storage Quad Cities | — | Scan blocked — will retry |
| 10x10 storage Milan IL | — | Scan blocked — will retry |
| cheap storage Quad Cities | — | Scan blocked — will retry |
| storage near Rock Island IL | — | Scan blocked — will retry |
| climate controlled storage Quad Cities | — | Scan blocked — will retry |
(multiplier × rent) / 0.45.
Cheap units have terrible margins at the floor; expensive units can absorb bigger bids and still print money.
| Unit Type | Rent | Vacant | CAC @ 2.00× | CAC @ 2.40× | CAC @ 3.65× | 12-mo LTV | Recommendation |
|---|---|---|---|---|---|---|---|
| 10x15 CC | $149 | 2/7 (29%) | $662 | $795 | $1209 | $1788 | BID UP TO 2.40× (ZIP #1) |
| 10x20 NC | $159 | 6/38 (16%) | $707 | $848 | $1290 | $1908 | FLOOR (2.00×) |
| 5x9 CC | $75 | 5/22 (23%) | $333 | $400 | $608 | $900 | FLOOR (2.00×) |
| 5x8 CC | $65 | 5/15 (33%) | $289 | $347 | $527 | $780 | FLOOR (2.00×) |
| 10x30 NC | $155 | 1/6 (17%) | $689 | $827 | $1257 | $1860 | FLOOR (2.00×) |
| 7x5 CC | $49 | 2/3 (67%) | $218 | $261 | $397 | $588 | FLOOR (2.00×) |
| 5x5 CC | $45 | 2/12 (17%) | $200 | $240 | $365 | $540 | FLOOR (2.00×) |
| 8x9 CC | $75 | 1/1 (100%) | $333 | $400 | $608 | $900 | FLOOR (2.00×) |
| 5x10 CC | $72 | 1/2 (50%) | $320 | $384 | $584 | $864 | FLOOR (2.00×) |
| 4.5x7.0 CC | $49 | 1/1 (100%) | $218 | $261 | $397 | $588 | FLOOR (2.00×) |
| 7.0x4.5 CC | $49 | 1/1 (100%) | $218 | $261 | $397 | $588 | FLOOR (2.00×) |
| 5x10 NC | $0 | 19/48 (40%) | $0 | $0 | $0 | $0 | FLOOR (2.00×) |
| 10x10 NC | $0 | 7/51 (14%) | $0 | $0 | $0 | $0 | FLOOR (2.00×) |
| 10x12 CC | $0 | 1/7 (14%) | $0 | $0 | $0 | $0 | FLOOR (2.00×) |
| 6x9 CC | $85 | 0/1 (0%) | $378 | $453 | $689 | $1020 | SKIP |
| 6x5 CC | $49 | 0/2 (0%) | $218 | $261 | $397 | $588 | SKIP |
| 8x10 CC | $85 | 0/11 (0%) | $378 | $453 | $689 | $1020 | SKIP |
| 10x10 CC | $92 | 0/7 (0%) | $409 | $491 | $746 | $1104 | SKIP |
| 6x12 CC | $75 | 0/2 (0%) | $333 | $400 | $608 | $900 | SKIP |
| 9x12 CC | $129 | 0/1 (0%) | $573 | $688 | $1046 | $1548 | SKIP |
| 7x12 CC | $89 | 0/1 (0%) | $396 | $475 | $722 | $1068 | SKIP |
| 6x7 CC | $69 | 0/2 (0%) | $307 | $368 | $560 | $828 | SKIP |
| 8x12 CC | $95 | 0/1 (0%) | $422 | $507 | $771 | $1140 | SKIP |
| 8x15 CC | $135 | 0/1 (0%) | $600 | $720 | $1095 | $1620 | SKIP |
▲ BID UP — 1 type. High vacancy (≥25%) + premium rent (≥$90/mo) = the bid bump pays for itself in 1-2 months of rent. Estimated extra spend at full ZIP #1: $119; at City #1 across qualifying types: $492. Both assume every vacant unit fills via Sparefoot — actual will be a fraction of this.
— FLOOR — 13 types. Either price is too low to absorb a multiplier bump, or vacancy is moderate (10–25%). Stay at 2.00× and let the channel deliver passively.
⊘ SKIP — 10 types. Vacancy <10% means there's no inventory pressure to pay for. Pause Sparefoot bidding on these unit types entirely until vacancy opens up.
scripts/update-metrics-dashboard.py::_build_sparefoot_strategy_html.