Every ZIP is calculated on its own stock and its own measured job size, then summed. Change any assumption and everything below re-runs.
1 · Which homes are we talking about
These filters belong to this tab only and do not touch the map. Nothing here is inherited from the Substrate map, so the number below always matches what you see on this page.
Built before 1940—
Building value at least any—
Living area at least any—
Siding
Wood/frame
Stucco
Asbestos
Fiber cement
Brick
Alum/vinyl
Not recorded
Keep unknown size
How that number is built
Step
Homes
Removed
Every row is a real filter, not an estimate. The starting number is every parcel the three counties classify as a single-family, owner-occupied home — duplexes, condos, townhomes, apartments, rentals and commercial are already excluded before this table begins.
2 · What is out there
Homes in scopemeasured—
Repaint each year — wood, asbestos & fiber cementassumption10%
Repaint each year — stucco, brick & masonryassumption10%
Repaint each year — siding not recordedassumption10%
Of those, hire a pro rather than DIYassumption100%
= exterior jobs available per year—
Ramsey and Washington record siding; Hennepin does not, so most Minneapolis homes fall in “not recorded”. Stucco and masonry hold paint far longer than wood in this climate — these are separate dials because one number for the whole metro is not defensible.
Average job sizemeasured per ZIP—
Total exterior market on this stock—
3 · What we take of it today
Paris exterior revenue on this same stock, 2026measured—
Homes we painted, as a share of the stockmeasured—
= our share of the exterior market—
Both lines count only jobs on homes that pass the same filters, so the numerator and denominator always describe the same houses. Jobs on duplexes, rentals, new builds and out-of-county addresses are excluded from both.
4 · What we could take
Target penetration of the stock, per yearassumption2.4%
Interior + carpentry that rides along, per $1 exteriormeasured 0.16817%
Job size growth per yearassumption3%
Revenue at target, this year’s prices—
Multiple of what we do on this stock today—
5 · Projected forward
Penetration ramps in a straight line from today’s measured rate to your target by the final year. Job size grows at the rate above. This is revenue from this filtered stock only — it is not the whole company.
Year
Penetration
Jobs
Avg job
Exterior
+ attached
Total
Every ZIP, calculated independently
Stock and Paris both respect your map filters. Market = that ZIP’s stock × repaint share × pro share × that ZIP’s own average job size. Share = Paris exterior on this stock ÷ market. Min cycle is the slowest repaint cycle that ZIP can possibly have: it is the share of the stock we alone repaint each year, so the true cycle cannot be below it. At target = revenue if that ZIP hit your target penetration, minus what it already does.
ZIP
City
Stock
Untouched
Avg job
Min cycle
Market
Paris now
Share
Upside at target
Avg job in italics is modelled from building value because that ZIP has fewer than 25 exterior jobs since 2024. Rows with no measured Paris revenue on the filtered stock show — rather than 0%.
Is there anything outside Minneapolis and St Paul?
Short answer: not much volume, a few real pockets. Of — paintable pre-1940 single-family owner-occupied homes in Hennepin and Ramsey, — sit in Minneapolis and St Paul. Robbinsdale and Mound are nearly untouched; Edina proves a small wealthy pocket can be worked hard.
City
Paintable pre-1940
Untouched
Median value
Our jobs 24–26
Penetration/yr
Our $/job
Hennepin and Ramsey only — Washington, Dakota, Anoka, Carver, Scott and St Croix are not loaded yet.
Revenue & the path to $30M
Sold jobs only, by sold date, from the 17 August 2026 export. 12,552 sold jobs, $80.9M lifetime.
2025 actual
$15.90M
2,307 jobs · $6,892 avg
2026 projected
$18.96M
2,584 jobs · $7,338 avg
vs 2025
+19.3%
jobs +12.0%
Booked to 17 Aug
$12.82M
1,709 jobs
Yes — 2026 is tracking meaningfully better than 2025. $12.82M is booked through 17 August. Over 2021–25 the first 7.5 months carried 67.6% of full-year sold revenue (weighted toward the last two years). That puts 2026 at $18.96M, with a range of $18.2M to $20.1M depending on which year's seasonality you believe. Job count lands near 2,584, up 277 on 2025.
Where the revenue comes from
Segment
2024
2025
2026 proj
2026 jobs
2026 avg job
% of 2026
Res Ext lead paint is 57% of revenue and it is where the growth is. Interior splits almost evenly between lead and non-lead and runs at roughly half the job size. Commercial and multi-family is under 2% and shrinking. There is no siding-replacement line below because the CRM does not track one — see the note at the bottom.
Revenue by year, and how much is res ext lead paint
Where the growth came from
Year
Revenue
Growth
Biggest contributors to the change
Two-thirds of the last three years of growth is one segment. Res Ext lead paint added $3.18M in 2024, $0.94M in 2025 and a projected $2.12M in 2026. Interior lead was the surprise second engine in 2025 at +$0.91M. Commercial has gone backwards two of the last three years.
What one lead-paint customer is actually worth
First job was
Households
First job $
Follow-on $
Lifetime multiple
Come back
The measured waterfall is real but smaller than it feels — so far.
Households first won on a res-ext lead-paint job have spent 1.11× their first job to date, with 13.6% buying again. Of that follow-on money, 50% is more exterior and 42% is interior, so the interior pull-through is genuine.
But this number is censored. Our records start in 2018 and a repaint cycle is longer than that, so almost nobody has come due for a second exterior yet. The 2018 cohort, now 8.6 years old, is at 1.22× and 24% repeat — the highest of any cohort, and still climbing. Follow-on accrues at roughly 2–3% of first-job value per year with no second-cycle wave visible yet. Treat 1.11× as a floor, not the answer.
What $30M by 2029 requires
Year
Revenue
Growth
Jobs at flat AJS
Jobs if AJS +5%/yr
16.6%/yr gets there from $18.96M. We have run 21.7%/yr since 2022, so $30M by 2029 sits below our own trend line. The lever that matters most is average job size: at +5%/yr we need about 3,300 jobs in 2029 instead of 4,088.
Things this data cannot tell you
Siding replacement is not tracked. There is no siding job type in the CRM. Across all 33,849 rows the words siding / Hardie / LP Smart appear 107 times, almost all of them customer surnames or lost-reason notes, totalling $286k of sold work that is already counted inside Res Ext. If siding replacement is going to be part of the $30M, it needs its own job type before it can be measured.
Carpentry is mostly invisible for the same reason. Only 149 projected 2026 jobs carry a carpentry job type, worth $0.57M. Carpentry sold as part of a painting project is inside the Res Ext line and cannot be separated from this export.
The CRM lead-paint checkbox is wrong 35% of the time. Of 7,695 sold jobs matched to a county parcel, the checkbox says “not lead” on 2,688 homes that were actually built before 1978. It almost never errs the other way (6 cases). Every lead figure on this page uses the county build year, not the checkbox.
Coverage. 69.4% of sold jobs match a Hennepin or Ramsey parcel. Dakota, Washington, Anoka, Carver, Scott and St Croix have no parcel data loaded, so jobs there fall back to the checkbox and are under-counted as lead.
Keep homes with no recorded size
Square footage is recorded by Ramsey County only. Hennepin records none, so switching this off removes every Hennepin home.
Wood/frame
Stucco
Asbestos
Fiber cement
Brick
Alum/vinyl
Not recorded
Ramsey County records siding. Hennepin does not — those homes are “not recorded”.
Everything
Only untouched
Homes
Our jobs
UntouchedReachedSold job
Scroll or pinch to zoom, drag to pan, double-click to zoom in, arrow keys to nudge.
Single-family owner-occupied only — condos, duplexes, apartments, townhomes, commercial and rentals are out.
Aluminum/vinyl is off by default because those homes do not get repainted — switch it on to see them.