78,335 properties
0 phones
0 emails
0 for sale
76 results ยท Page 2/2
All (78,335) Self-Storage (6,623) Mobile Home Parks (7,641) Car Washes (9,819) Laundromats (7,714) RV Parks (22,383) Marinas (5,509) Budget Motels (10,145) Dry Cleaners (8,419)
Map:
๐Ÿš— Car Washes

Bubble Bath

MT

Car Washes
Phone
๐Ÿš— Car Washes

Scrubby's Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Front Street Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Town Pump Carwash

MT

Car Washes
Phone
๐Ÿš— Car Washes

The Car Spa

MT

Car Washes
Phone Email
๐Ÿš— Car Washes

Super Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

White Rapids

MT

Car Washes
Phone
๐Ÿš— Car Washes

Osborn Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

PJ's Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Woody's Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Montana Ave Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Town Pump Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Capital City Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Don's Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Didriksen Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Happy Days Carwash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Metro Express Carwash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Power Wash

MT

Car Washes
Phone Email
๐Ÿš— Car Washes

Magic Touch Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Splash Carwash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Lisac's Tri-Stop Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Rocky Mountain Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Town Pump Express Carwash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Clean Getaway Car Wash

MT

Car Washes
Phone
๐Ÿš— Car Washes

Buggy Bath

MT

Car Washes
Phone
๐Ÿš— Car Washes

Whitefish Superwash

MT

Car Washes
Phone
โ† Prev 2 / 2
// Heat map modes // mapPoints format: [id, lat, lon, category, valuation, data_score, motivated_score] let heatLayer = null; let circleLayer = null; let currentMode = 'markers'; function clearOverlays() { if (heatLayer) { map.removeLayer(heatLayer); heatLayer = null; } if (circleLayer) { map.removeLayer(circleLayer); circleLayer = null; } } function setMapMode(mode) { currentMode = mode; clearOverlays(); // Update button states document.querySelectorAll('.map-mode-btn').forEach(b => b.classList.remove('active')); document.getElementById('btn-' + mode).classList.add('active'); if (mode === 'markers') { markers.addTo(map); return; } map.removeLayer(markers); if (mode === 'density') { // Pure density heatmap const pts = mapPoints.filter(p => p[1] && p[2]).map(p => [p[1], p[2], 1]); heatLayer = L.heatLayer(pts, {radius: 20, blur: 15, maxZoom: 10, max: 5, gradient: {0.2: '#ffffb2', 0.4: '#fd8d3c', 0.6: '#f03b20', 0.8: '#bd0026', 1: '#800026'} }).addTo(map); } else if (mode === 'valuation') { // Circle markers colored by valuation circleLayer = L.layerGroup(); const maxVal = Math.max(...mapPoints.map(p => p[4]).filter(v => v > 0)) || 1; mapPoints.filter(p => p[1] && p[2] && p[4] > 0).forEach(p => { const ratio = Math.min(p[4] / maxVal, 1); const r = Math.round(ratio * 255); const g = Math.round((1 - ratio) * 200); const color = `rgb(${r}, ${g}, 50)`; const radius = 4 + ratio * 10; L.circleMarker([p[1], p[2]], { radius: radius, fillColor: color, color: '#fff', weight: 1, fillOpacity: 0.7 }).bindPopup(`$${(p[4]/1000).toFixed(0)}K`).addTo(circleLayer); }); circleLayer.addTo(map); } else if (mode === 'quality') { // Circle markers colored by data_score circleLayer = L.layerGroup(); mapPoints.filter(p => p[1] && p[2]).forEach(p => { const score = p[5] || 0; const ratio = score / 10; // Green = high, Red = low const r = Math.round((1 - ratio) * 255); const g = Math.round(ratio * 200); const color = `rgb(${r}, ${g}, 50)`; L.circleMarker([p[1], p[2]], { radius: 3 + ratio * 5, fillColor: color, color: '#fff', weight: 0.5, fillOpacity: 0.6 }).addTo(circleLayer); }); circleLayer.addTo(map); } else if (mode === 'motivated') { // Heat map weighted by motivated score const pts = mapPoints.filter(p => p[1] && p[2] && p[6] > 0).map(p => [p[1], p[2], p[6] / 100]); heatLayer = L.heatLayer(pts, {radius: 25, blur: 20, maxZoom: 10, max: 1, gradient: {0.2: '#fff7bc', 0.4: '#fec44f', 0.6: '#fe9929', 0.8: '#d95f0e', 1: '#993404'} }).addTo(map); } } // ===== Slide-over detail panel ===== const panel = document.getElementById('detailPanel'); const dpBody = document.getElementById('dpBody'); const dpHead = document.getElementById('dpHead'); const dpIcon = document.getElementById('dpIcon'); const MEDIA_GRADIENTS = { self_storage:'#fde68a,#f59e0b', car_wash:'#bfdbfe,#3b82f6', laundromat:'#ddd6fe,#8b5cf6', rv_park:'#fecaca,#ef4444', mobile_home_park:'#a7f3d0,#10b981', marina:'#a5f3fc,#06b6d4', budget_motel:'#fed7aa,#f97316', boat_rv_storage:'#cbd5e1,#64748b', mailbox_pack_ship:'#fbcfe8,#ec4899', dry_cleaner:'#99f6e4,#14b8a6', gas_station:'#fef08a,#eab308' }; function esc(s){ return (s==null?'':String(s)).replace(/[&<>"']/g, c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); } function renderDetail(d) { // header gradient by category const g = MEDIA_GRADIENTS[d.category] || '#e2e8f0,#cbd5e1'; dpHead.style.background = `linear-gradient(135deg, ${g.split(',')[0]} 0%, ${g.split(',')[1]} 100%)`; dpIcon.textContent = d.category_icon || '๐Ÿข'; // badges row let badges = ''; if (d.motivated) badges += '๐Ÿ”ฅ MOTIVATED '; if (d.for_sale) badges += 'FOR SALE '; // headline metrics (free) let metrics = ''; if (d.total_units) metrics += `
${esc(d.total_units)}
${esc(d.unit_label)}
`; if (d.year_established) metrics += `
${esc(d.year_established)}
Established
`; if (d.acreage) metrics += `
${esc(d.acreage)}
Acres
`; // financials section (paid) let fin = ''; if (d.paid_locked && d.has_financials) { fin = `

Financials

๐Ÿ”’ Valuation, cap rate & NOI โ€” members only
`; } else if (!d.paid_locked) { let rows = ''; if (d.valuation) rows += `
Est. Valuation${esc(d.valuation)}
`; if (d.asking_price) rows += `
Asking Price${esc(d.asking_price)}
`; if (d.cap_rate) rows += `
Cap Rate${esc(d.cap_rate)}
`; if (d.noi) rows += `
NOI${esc(d.noi)}
`; if (d.annual_revenue) rows += `
Annual Revenue${esc(d.annual_revenue)}
`; if (d.occupancy_rate) rows += `
Occupancy${esc(d.occupancy_rate)}
`; if (rows) fin = `

Financials

${rows}
`; } // contact section let contact = ''; if (d.owner_name) contact += `
Owner${esc(d.owner_name)}
`; if (d.phone) { const ql = d.phone_quality==='owner_direct'?' โœ“ owner':(d.phone_quality==='corporate'?' ยท corp':''); contact += `
Phone${esc(d.phone)}${ql}
`; } if (d.email) contact += `
Email${esc(d.email)}
`; if (d.website) contact += `
Websitevisit โ†—
`; if (contact) contact = `

Contact

${contact}
`; // description let desc = ''; if (d.description) desc = `

About

${esc(d.description.slice(0,320))}${d.description.length>320?'โ€ฆ':''}

`; dpBody.innerHTML = `
${badges}

${esc(d.name)}

${esc(d.category_label)} ยท ${esc(d.city||'')}${d.city?', ':''}${esc(d.state||'')}

${d.address ? `

${esc(d.address)}

`:''}
${metrics ? `

Overview

${metrics}
`:''} ${fin} ${contact} ${desc} View full details โ†’ `; } let activeDetailId = null; function openDetail(ev, id) { if (ev) ev.preventDefault(); activeDetailId = id; panel.classList.add('open','loading'); panel.setAttribute('aria-hidden','false'); // mark active card document.querySelectorAll('.prop-card').forEach(c => c.classList.toggle('active', c.dataset.id == id)); // shareable URL + back-button support const url = new URL(window.location); url.searchParams.set('selected', id); history.pushState({selected: id}, '', url); fetch(`/api/property/${id}/detail`).then(r=>r.json()).then(d => { if (activeDetailId != id) return; // user clicked another card meanwhile if (!d || !d.id) { dpBody.innerHTML = '

Not found.

'; } else renderDetail(d); panel.classList.remove('loading'); }).catch(()=>{ dpBody.innerHTML = '

Could not load.

'; panel.classList.remove('loading'); }); return false; } function closeDetail(push) { activeDetailId = null; panel.classList.remove('open'); panel.setAttribute('aria-hidden','true'); document.querySelectorAll('.prop-card.active').forEach(c => c.classList.remove('active')); if (push !== false) { const url = new URL(window.location); url.searchParams.delete('selected'); history.pushState({}, '', url); } } // back/forward window.addEventListener('popstate', (e) => { const sel = new URL(window.location).searchParams.get('selected'); if (sel) openDetailFromHistory(parseInt(sel)); else closeDetail(false); }); function openDetailFromHistory(id) { activeDetailId = id; panel.classList.add('open','loading'); panel.setAttribute('aria-hidden','false'); document.querySelectorAll('.prop-card').forEach(c => c.classList.toggle('active', c.dataset.id == id)); fetch(`/api/property/${id}/detail`).then(r=>r.json()).then(d => { if (activeDetailId != id) return; if (d && d.id) renderDetail(d); panel.classList.remove('loading'); }); } // Esc closes document.addEventListener('keydown', e => { if (e.key === 'Escape' && panel.classList.contains('open')) closeDetail(); }); // Open on load if ?selected= present (shared URL) (function(){ const sel = new URL(window.location).searchParams.get('selected'); if (sel) openDetailFromHistory(parseInt(sel)); })();
๐Ÿ”’
Unlock owner contacts for 78,335+ businesses
$500/yr Get Access