Kansas City

Shop space for contractors & small businesses

Shops, garages and small bays for trades, e-commerce, light manufacturing and growing businesses. Free for tenants.
Owners and brokers list direct.

Five-bay contractor shop building with drive-in garage doors and a fenced yard

1,200+

shop and small-bay buildings tracked in Johnson and Wyandotte counties

~4%

vacancy in KC warehouse space; good space goes fast.

FREE

for tenants forever, and owners for now

(function(){ function h(s){return s.replace(/«/g,'\u003c').replace(/»/g,'\u003e');} function init(){ var CELLS=[[38.96843,-94.72529,51,"Overland Park"],[38.98095,-94.716,51,"Lenexa"],[38.84325,-94.81822,42,"Olathe"],[38.93088,-94.75317,33,"Lenexa"],[38.95591,-94.75317,32,"Lenexa"],[38.91836,-94.76246,30,"Olathe"],[38.85577,-94.80893,29,"Olathe"],[39.08109,-94.64165,28,"Kansas City KS"],[38.93088,-94.77175,27,"Lenexa"],[39.04354,-94.68812,25,"Overland Park"],[38.84325,-94.79963,25,"Olathe"],[38.90584,-94.79034,23,"Olathe"],[39.08109,-94.62306,22,"Kansas City KS"],[38.98095,-94.86469,22,"Shawnee"],[38.94339,-94.74387,20,"Lenexa"],[38.8808,-94.79034,20,"Olathe"],[38.89332,-94.78105,20,"Olathe"],[38.86829,-94.81822,20,"Olathe"],[38.83073,-94.67882,19,"Overland Park"],[39.00598,-94.82751,19,"Shawnee"],[38.95591,-94.716,18,"Overland Park"],[39.04354,-94.65094,17,"Kansas City KS"],[39.04354,-94.66953,17,"Mission"],[39.05606,-94.64165,17,"Kansas City KS"],[38.8808,-94.82751,17,"Olathe"],[39.09361,-94.63236,16,"Kansas City KS"],[38.8808,-94.80893,16,"Olathe"],[38.98095,-94.8461,16,"Shawnee"],[39.10613,-94.60448,15,"Kansas City KS"],[38.98095,-94.69741,14,"Lenexa"],[39.05606,-94.62306,13,"Kansas City KS"],[38.94339,-94.76246,13,"Lenexa"],[38.85577,-94.82751,13,"Olathe"],[38.84325,-94.66953,13,"Overland Park"],[39.03102,-94.69741,13,"Merriam"],[39.13116,-94.92044,12,"Basehor"],[39.11865,-94.65094,12,"Kansas City KS"],[39.11865,-94.63236,12,"Kansas City KS"],[38.85577,-94.66024,12,"Overland Park"],[38.95591,-94.77175,11,"Lenexa"],[38.89332,-94.79963,11,"Olathe"],[38.83073,-94.90186,10,"Johnson County (unincorporated)"],[38.86829,-94.83681,10,"Olathe"],[39.06857,-94.85539,9,"Bonner Springs"],[39.06857,-94.83681,9,"Edwardsville"],[39.09361,-94.72529,9,"Kansas City KS"],[38.95591,-94.73458,9,"Lenexa"],[38.8057,-94.92044,8,"Gardner"],[38.8057,-94.93903,8,"Gardner"],[39.00598,-94.69741,8,"Merriam"],[39.09361,-94.61377,7,"Kansas City KS"],[38.85577,-94.8461,7,"Olathe"],[39.06857,-94.61377,6,"Kansas City KS"],[39.09361,-94.66953,6,"Kansas City KS"],[39.14368,-94.61377,6,"Kansas City KS"],[38.96843,-94.7067,6,"Lenexa"],[38.83073,-94.82751,6,"Olathe"],[39.0185,-94.81822,6,"Shawnee"],[38.74311,-94.81822,6,"Spring Hill"],[38.76814,-94.66953,6,"Stilwell"],[38.73059,-94.82751,6,"Spring Hill"],[38.98095,-94.95762,5,"De Soto"],[39.05606,-94.80893,5,"Edwardsville"],[39.09361,-94.74387,5,"Kansas City KS"],[39.09361,-94.7067,5,"Kansas City KS"],[39.08109,-94.73458,5,"Kansas City KS"],[39.1562,-94.62306,5,"Kansas City KS"],[38.93088,-94.73458,5,"Lenexa"],[39.0185,-94.7067,5,"Shawnee"],[38.83073,-94.66024,5,"Overland Park"],[38.90584,-94.67882,5,"Overland Park"],[39.0185,-94.72529,5,"Shawnee"],[38.75562,-94.66024,4,"Bucyrus"],[38.8057,-94.90186,4,"Gardner"],[38.81821,-94.89257,4,"Gardner"],[39.09361,-94.65094,4,"Kansas City KS"],[39.08109,-94.60448,4,"Kansas City KS"],[39.08109,-94.66024,4,"Kansas City KS"],[39.0185,-94.68812,4,"Merriam"],[39.0185,-94.66953,4,"Mission"],[39.03102,-94.82751,4,"Shawnee"],[39.05606,-94.8461,3,"Bonner Springs"],[38.95591,-94.9762,3,"De Soto"],[39.05606,-94.79034,3,"Edwardsville"],[38.81821,-94.92974,3,"Gardner"],[39.06857,-94.74387,3,"Kansas City KS"],[39.06857,-94.68812,3,"Kansas City KS"],[39.13116,-94.64165,3,"Kansas City KS"],[38.91836,-94.78105,3,"Olathe"],[38.86829,-94.79963,3,"Olathe"],[38.8808,-94.69741,3,"Overland Park"],[38.93088,-94.66024,3,"Overland Park"],[38.78066,-94.82751,3,"Spring Hill"],[38.75562,-94.82751,3,"Spring Hill"],[38.99347,-94.7067,3,"Merriam"],[39.04354,-94.89257,2,"Bonner Springs"],[39.05606,-94.88327,2,"Bonner Springs"],[38.74311,-94.66953,2,"Bucyrus"],[38.75562,-94.67882,2,"Bucyrus"],[38.81821,-94.91115,2,"Gardner"],[39.05606,-94.67882,2,"Kansas City KS"],[39.09361,-94.68812,2,"Kansas City KS"],[39.06857,-94.65094,2,"Kansas City KS"],[39.06857,-94.78105,2,"Kansas City KS"],[39.10613,-94.62306,2,"Kansas City KS"],[39.11865,-94.91115,2,"Kansas City KS"],[39.11865,-94.7067,2,"Kansas City KS"],[39.11865,-94.61377,2,"Kansas City KS"],[39.13116,-94.77175,2,"Kansas City KS"],[39.13116,-94.60448,2,"Kansas City KS"],[39.14368,-94.76246,2,"Kansas City KS"],[39.14368,-94.68812,2,"Kansas City KS"],[39.14368,-94.63236,2,"Kansas City KS"],[39.11865,-94.76246,2,"Kansas City KS"],[39.10613,-94.64165,2,"Kansas City KS"],[38.96843,-94.74387,2,"Lenexa"],[39.03102,-94.67882,2,"Merriam"],[39.0185,-94.65094,2,"Mission"],[38.98095,-94.67882,2,"Overland Park"],[38.99347,-94.66953,2,"Overland Park"],[39.03102,-94.716,2,"Shawnee"],[39.0185,-94.74387,2,"Shawnee"],[38.75562,-94.80893,2,"Spring Hill"],[38.78066,-94.66024,2,"Johnson County (unincorporated)"],[38.95591,-94.99479,2,"De Soto"],[38.99347,-94.76246,2,"Shawnee"],[38.83073,-94.80893,2,"Olathe"],[38.8808,-94.75317,2,"Olathe"],[39.11865,-94.94832,1,"Basehor"],[39.13116,-94.93903,1,"Basehor"],[39.10613,-94.90186,1,"Bonner Springs"],[39.10613,-94.88327,1,"Bonner Springs"],[39.05606,-94.90186,1,"Bonner Springs"],[38.95591,-95.01338,1,"De Soto"],[38.98095,-94.9762,1,"De Soto"],[39.05606,-94.82751,1,"Edwardsville"],[39.09361,-94.81822,1,"Edwardsville"],[38.79318,-94.91115,1,"Gardner"],[39.04354,-94.61377,1,"Kansas City KS"],[39.05606,-94.75317,1,"Kansas City KS"],[39.11865,-94.72529,1,"Kansas City KS"],[39.1562,-94.73458,1,"Kansas City KS"],[39.18124,-94.80893,1,"Kansas City KS"],[39.05606,-94.77175,1,"Kansas City KS"],[39.08109,-94.75317,1,"Kansas City KS"],[39.09361,-94.76246,1,"Kansas City KS"],[38.85577,-94.88327,1,"Olathe"],[38.90584,-94.77175,1,"Olathe"],[38.93088,-94.67882,1,"Overland Park"],[38.99347,-94.78105,1,"Shawnee"],[38.99347,-94.85539,1,"Shawnee"],[38.74311,-95.00408,1,"Edgerton"],[38.76814,-95.00408,1,"Edgerton"],[38.78066,-94.80893,1,"Spring Hill"],[38.73059,-94.66024,1,"Johnson County (unincorporated)"],[38.83073,-94.62306,1,"Johnson County (unincorporated)"],[38.78066,-94.93903,1,"Gardner"],[38.96843,-95.00408,1,"De Soto"],[38.98095,-94.99479,1,"De Soto"],[38.84325,-94.83681,1,"Johnson County (unincorporated)"],[39.03102,-94.66024,1,"Mission"],[38.86829,-94.61377,1,"Leawood"],[39.0185,-94.79963,1,"Shawnee"],[38.86829,-94.85539,1,"Olathe"],[38.8808,-94.77175,1,"Olathe"],[38.8808,-94.67882,1,"Overland Park"],[38.99347,-94.74387,1,"Lenexa"]]; var R=929.0; /* hex circumradius, meters */ /* ---- Listings: one object per approved unit. Location rounded (~0.5 mi). ---- */ var LISTINGS=[ /* {id:"U-0001",lat:38.88,lon:-94.80,title:"2,400 sf shop",city:"Olathe",size:"2,400 sf",door:"12 x 14 ft",power:"200 amp, 3-phase",outdoor:"Fenced yard",cost:"$2,600/mo all-in",available:"April 2027"} */ ]; function ga(ev,p){try{if(window.gtag){window.gtag('event',ev,p||{});}}catch(e){}} var map=L.map('sas-map',{scrollWheelZoom:false,zoomSnap:0.5}).setView([38.98,-94.72],10.5); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',{maxZoom:16,attribution:'Tiles © Esri'}).addTo(map); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',{maxZoom:16,pane:'shadowPane'}).addTo(map); var mlat=111320,mlon=111320*Math.cos(38.95*Math.PI/180); function hex(lat,lon){var pts=[];for(var i=0;i<6;i++){var a=Math.PI/180*(60*i-30);pts.push([lat+R*Math.sin(a)/mlat,lon+R*Math.cos(a)/mlon]);}return pts;} function col(n){return n>=25?'#9c3f0f':n>=15?'#C4571B':n>=8?'#D86828':n>=5?'#EBA06E':'#F6D4BC';} /* Fog of war: unmapped areas locked (added 10/22) */ (function(map,PID){ var CLEAR=[[38.7386,-95.0564],[38.9821,-95.0563],[38.9744,-95.0411],[38.9756,-95.0334],[38.9829,-95.0254],[38.9931,-95.0261],[38.9996,-95.0218],[39.0009,-95.0141],[38.9924,-94.9804],[38.9823,-94.9646],[38.9865,-94.9445],[39.002,-94.9299],[39.0023,-94.9218],[38.9989,-94.917],[38.9952,-94.9163],[38.9901,-94.9189],[38.9875,-94.9173],[38.9874,-94.9147],[38.9913,-94.9093],[39.1043,-94.9086],[39.106,-94.9104],[39.1066,-94.9154],[39.1088,-94.921],[39.1123,-94.925],[39.1172,-94.9275],[39.1182,-94.9296],[39.1172,-94.932],[39.111,-94.9356],[39.1079,-94.9402],[39.1063,-94.9461],[39.1066,-94.9526],[39.1087,-94.958],[39.1111,-94.9611],[39.1154,-94.9638],[39.1187,-94.9644],[39.125,-94.9622],[39.1303,-94.9556],[39.1375,-94.9529],[39.141,-94.9489],[39.1427,-94.9451],[39.1436,-94.937],[39.1417,-94.9296],[39.1432,-94.9245],[39.1435,-94.9183],[39.1411,-94.9107],[39.1365,-94.9052],[39.1365,-94.9032],[39.1376,-94.9018],[39.2029,-94.9002],[39.201,-94.7772],[39.1801,-94.7628],[39.1701,-94.7408],[39.1704,-94.7143],[39.1832,-94.6888],[39.1842,-94.6782],[39.1774,-94.6616],[39.1741,-94.6592],[39.1626,-94.6611],[39.1557,-94.6551],[39.1549,-94.6408],[39.1562,-94.6394],[39.161,-94.6379],[39.1651,-94.6344],[39.1678,-94.6291],[39.1687,-94.623],[39.1671,-94.6151],[39.165,-94.6116],[39.1605,-94.6073],[39.1548,-94.5907],[39.1489,-94.5884],[39.1381,-94.5903],[39.1234,-94.6036],[39.1213,-94.6044],[39.1188,-94.603],[39.117,-94.5965],[39.115,-94.5932],[39.1094,-94.5889],[39.1061,-94.5884],[39.1014,-94.5896],[39.0956,-94.5954],[39.0935,-94.5962],[39.0916,-94.5954],[39.0859,-94.5896],[39.0795,-94.5885],[39.0749,-94.5905],[39.0722,-94.5932],[39.0695,-94.5984],[39.0683,-94.6059],[39.0658,-94.6076],[39.056,-94.6073],[39.0499,-94.5999],[39.0435,-94.5977],[39.0374,-94.5998],[39.0321,-94.6066],[39.03,-94.6075],[38.7381,-94.6091],[38.7379,-94.6432],[38.7357,-94.645],[38.7306,-94.6442],[38.7274,-94.6447],[38.7231,-94.6474],[38.7197,-94.6523],[38.7181,-94.6603],[38.7197,-94.6682],[38.7231,-94.6731],[38.729,-94.6762],[38.736,-94.6756],[38.7382,-94.6782],[38.7383,-94.8096],[38.7362,-94.8122],[38.729,-94.8116],[38.7231,-94.8147],[38.7197,-94.8195],[38.7181,-94.8276],[38.7197,-94.8355],[38.7231,-94.8403],[38.729,-94.8435],[38.7362,-94.8428],[38.7383,-94.8453],[38.7386,-95.0564]]; var LOCKS=[["Lawrence",38.9717,-95.2353],["Leavenworth",39.3111,-94.9225],["Independence",39.0911,-94.4155],["Lee\u2019s Summit",38.9108,-94.3822],["Liberty",39.2461,-94.4191],["Blue Springs",39.0169,-94.2816],["Gladstone",39.2039,-94.5547],["North Kansas City",39.13,-94.5622],["Ottawa",38.6156,-95.2678],["Paola",38.5722,-94.8791],["Belton",38.8119,-94.5319],["Raytown",39.0086,-94.4636],["Grandview",38.8858,-94.533],["Raymore",38.8017,-94.4527],["Lansing",39.2486,-94.9],["Platte City",39.37,-94.7825],["Parkville",39.1911,-94.6819],["Riverside",39.1775,-94.613],["Harrisonville",38.6533,-94.3488],["Eudora",38.9433,-95.0986],["Tonganoxie",39.1089,-95.0878],["Baldwin City",38.775,-95.1864],["Louisburg",38.6195,-94.6808],["Smithville",39.3869,-94.5811],["Kearney",39.3678,-94.3622],["Sugar Creek",39.1097,-94.4447],["Peculiar",38.7192,-94.4586],["Pleasant Hill",38.7875,-94.2694],["Greenwood",38.8517,-94.3436],["Weston",39.4111,-94.9011],["Wellsville",38.7183,-95.0811],["Osawatomie",38.4972,-94.9505],["Lake Lotawana",38.9228,-94.2447],["Linwood",38.9989,-95.0333]]; if(!document.getElementById('sasfog-css')){var st=document.createElement('style');st.id='sasfog-css';st.textContent='.sasfog-lock{display:inline-flex;width:max-content;align-items:center;gap:5px;background:rgba(24,32,36,.88);color:#fff;border:1px solid rgba(255,255,255,.35);border-radius:999px;padding:3px 9px 3px 6px;font:600 11px Barlow,Arial,sans-serif;white-space:nowrap;visibility:hidden;pointer-events:none}.sasfog-lock i,.sasfog-tag i{display:inline-block;position:relative;width:9px;height:7px;background:#fff;border-radius:1.5px;margin:5px 1px 0 2px}.sasfog-lock i:before,.sasfog-tag i:before{content:"";position:absolute;left:1.5px;top:-5px;width:6px;height:6px;border:1.6px solid #fff;border-bottom:0;border-radius:4px 4px 0 0;box-sizing:border-box}.sasfog-tag{position:absolute;top:12px;right:12px;z-index:800;background:rgba(24,32,36,.92);color:#fff;border-radius:8px;padding:9px 12px;max-width:260px;font:500 12px/1.35 Barlow,Arial,sans-serif;box-shadow:0 4px 14px rgba(0,0,0,.25);text-align:left;pointer-events:none}.sasfog-tag b{display:flex;align-items:center;gap:6px;font:700 14px Oswald,Arial,sans-serif;text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px;color:#fff}.sasfog-tag span{color:#C9CFD3;display:block}.sasfog-below{position:static;max-width:none;margin:8px 0 0;box-shadow:none}';document.head.appendChild(st);} var outer=[[37.5,-96.8],[37.5,-92.6],[40.4,-92.6],[40.4,-96.8]]; L.polygon([outer,CLEAR],{stroke:false,fillColor:'#182024',fillOpacity:0.6,interactive:false}).addTo(map); var hatch=L.polygon([outer,CLEAR],{stroke:false,fillOpacity:1,interactive:false}).addTo(map); try{var svg=map.getPanes().overlayPane.querySelector('svg');var NS='http://www.w3.org/2000/svg';var defs=document.createElementNS(NS,'defs');var pat=document.createElementNS(NS,'pattern');pat.setAttribute('id',PID);pat.setAttribute('width','9');pat.setAttribute('height','9');pat.setAttribute('patternUnits','userSpaceOnUse');pat.setAttribute('patternTransform','rotate(45)');var ln=document.createElementNS(NS,'line');ln.setAttribute('x1','0');ln.setAttribute('y1','0');ln.setAttribute('x2','0');ln.setAttribute('y2','9');ln.setAttribute('stroke','rgba(255,255,255,0.13)');ln.setAttribute('stroke-width','2');pat.appendChild(ln);defs.appendChild(pat);svg.insertBefore(defs,svg.firstChild);hatch.getElement().setAttribute('fill','url(#'+PID+')');}catch(e){hatch.setStyle({fillOpacity:0});} L.polyline(CLEAR.concat([CLEAR[0]]),{color:'#D86828',weight:2.5,opacity:0.95,interactive:false}).addTo(map); var tag=document.createElement('div');tag.className='sasfog-tag';var tb=document.createElement('b');tb.appendChild(document.createElement('i'));tb.appendChild(document.createTextNode('Locked = not mapped yet'));var ts=document.createElement('span');ts.textContent='Kansas City, Missouri is next. Get matched and we\u2019ll tell you when it opens.';tag.appendChild(tb);tag.appendChild(ts);if(600>=window.innerWidth){tag.className='sasfog-tag sasfog-below';var mc=map.getContainer();mc.parentNode.insertBefore(tag,mc.nextSibling);}else map.getContainer().appendChild(tag); var mk=[];LOCKS.forEach(function(p){var el=document.createElement('div');el.className='sasfog-lock';el.appendChild(document.createElement('i'));el.appendChild(document.createTextNode(p[0]));var m=L.marker([p[1],p[2]],{interactive:false,keyboard:false,icon:L.divIcon({className:'',html:el,iconSize:[0,0]})}).addTo(map);mk.push(m);}); function pip(x,y,P){var c=false;for(var a=0,b=P.length-1;P.length>a;b=a++){var xi=P[a].x,yi=P[a].y,xj=P[b].x,yj=P[b].y;if(((yi>y)!==(yj>y))&&(((xj-xi)*(y-yi)/(yj-yi)+xi)>x))c=!c;}return c;} function hits(r,P){for(var x=r.l;r.r>=x;x+=5){for(var y=r.t;r.b>=y;y+=5){if(pip(x,y,P))return true;}}for(var k=0;P.length>k;k++){var q=P[k];if(q.x>=r.l&&r.r>=q.x&&q.y>=r.t&&r.b>=q.y)return true;}return false;} function ovl(a,b){return !(a.l>b.r||b.l>a.r||a.t>b.b||b.t>a.b);} var cand=[[0,0]];for(var dd=8;130>=dd;dd+=8){cand.push([0,-dd],[0,dd],[dd,0],[-dd,0],[dd,-dd],[-dd,-dd],[dd,dd],[-dd,dd]);} function place(){var sz=map.getSize();if(!sz.x)return;var P=CLEAR.map(function(ll){return map.latLngToContainerPoint(ll);});var done=[];var cr=map.getContainer().getBoundingClientRect();[].forEach.call(map.getContainer().querySelectorAll('.leaflet-control,.sasfog-tag'),function(o){var tr=o.getBoundingClientRect();if(tr.width)done.push({l:tr.left-cr.left-4,r:tr.right-cr.left+4,t:tr.top-cr.top-4,b:tr.bottom-cr.top+4});});mk.forEach(function(m){var e=m.getElement();if(!e)return;var el=e.firstChild;el.style.visibility='hidden';el.style.transform='translate(-50%,-50%)';var w=el.offsetWidth,hh=el.offsetHeight;if(!w)return;var p=map.latLngToContainerPoint(m.getLatLng());for(var c=0;cand.length>c;c++){var cx=p.x+cand[c][0],cy=p.y+cand[c][1];var r={l:cx-w/2-3,r:cx+w/2+3,t:cy-hh/2-3,b:cy+hh/2+3};if(4>r.l||r.r>sz.x-4||4>r.t||r.b>sz.y-4)continue;if(hits(r,P))continue;if(done.some(function(o){return ovl(o,r);}))continue;done.push(r);el.style.transform='translate(-50%,-50%) translate('+cand[c][0]+'px,'+cand[c][1]+'px)';el.style.visibility='visible';break;}});} var LIM=L.latLngBounds([38.44,-95.34],[39.46,-94.17]); function limits(){var sz=map.getSize();if(!sz.x)return;map.setMinZoom(0);var z=Math.floor(map.getBoundsZoom(LIM,false)*4)/4;map.setMinZoom(z);map.setMaxBounds(LIM);map.options.maxBoundsViscosity=1.0;} map.setMaxZoom(15);limits(); map.on('moveend',place);map.on('resize',function(){limits();place();}); setTimeout(function(){limits();place();},300);setTimeout(place,1500); })(map,'sasfoghatchhome'); /* Browse listings button on the map (added 10/22) */ (function(map){var hid=false;try{hid=sessionStorage.getItem('sas_browse_x')==='1';}catch(e){}if(hid)return; if(!document.getElementById('sasbrowse-css')){var st=document.createElement('style');st.id='sasbrowse-css';st.textContent='.sas-browse{display:flex;align-items:center;gap:2px;background:#D86828;border:2px solid #fff;border-radius:8px;box-shadow:0 4px 14px rgba(0,0,0,.25);padding:4px 4px 4px 0;margin:0!important;box-shadow:0 8px 28px rgba(0,0,0,.4)!important}.sas-browse a{color:#fff!important;text-decoration:none!important;font:700 18px Barlow,Arial,sans-serif;padding:13px 10px 13px 20px;cursor:pointer;white-space:nowrap}.sas-browse a:hover{text-decoration:underline!important}.sas-browse button{background:none;border:0;color:#FBE9DE;font:400 20px/1 Arial,sans-serif;width:30px;height:30px;cursor:pointer;border-radius:6px;padding:0}.sas-browse button:hover{background:rgba(0,0,0,.15);color:#fff}';document.head.appendChild(st);} var c;var C=L.Control.extend({options:{position:'bottomleft'},onAdd:function(){var d=L.DomUtil.create('div','sas-browse');var a=document.createElement('a');a.textContent='Browse listings \u2192';a.setAttribute('role','link');a.tabIndex=0;var go=function(){try{if(window.gtag)window.gtag('event','map_browse_listings',{});}catch(e){}location.href=location.origin+'/#listings';};a.onclick=go;a.onkeydown=function(e){if(e.key==='Enter')go();};var x=document.createElement('button');x.type='button';x.setAttribute('aria-label','Hide this button');x.textContent='\u00d7';x.onclick=function(){try{sessionStorage.setItem('sas_browse_x','1');}catch(e){}map.removeControl(c);map.fire('moveend');try{if(window.gtag)window.gtag('event','map_browse_dismiss',{});}catch(e){}};d.appendChild(a);d.appendChild(x);L.DomEvent.disableClickPropagation(d);return d;}}); c=new C();c.addTo(map);var ce=c.getContainer();ce.style.position='absolute';ce.style.left='50%';ce.style.top='50%';ce.style.transform='translate(-50%,-50%)';ce.style.zIndex='800';map.getContainer().appendChild(ce);})(map); var hexes=L.layerGroup().addTo(map); var sst=document.createElement('style');sst.textContent='.sas-nolab .sas-hexn{display:none}';document.head.appendChild(sst);map.on('zoomend',function(){map.getContainer().classList.toggle('sas-nolab',10>map.getZoom());}); CELLS.forEach(function(c){var n=c[2],city=c[3]; var p=L.polygon(hex(c[0],c[1]),{color:'#ffffff',weight:1,fillColor:col(n),fillOpacity:0.72,interactive:false}); p.addTo(hexes); L.marker([c[0],c[1]],{interactive:false,keyboard:false,icon:L.divIcon({className:'sas-hexn',html:h('«span style="display:block;text-align:center;font:700 10px/14px Barlow,Arial,sans-serif;color:'+(n>=8?'#ffffff':'#182024')+'"»'+n+'«/span»'),iconSize:[28,14],iconAnchor:[14,7]})}).addTo(hexes);}); var pins=L.layerGroup().addTo(map); var icon=L.divIcon({className:'',html:h('«div class="sas-pin"»«/div»'),iconSize:[14,14],iconAnchor:[7,7],popupAnchor:[0,-8]}); /* Live listings from the Public Listings sheet (added 10/15) */ (function(){var PV=new URLSearchParams(location.search).get('preview')==='1';var CSVU='https://docs.google.com/spreadsheets/d/e/2PACX-1vRj5sdo0NdYBcH30t3bIUpe2P6xy-KBiEyH6nC4WN_q60bjAVnXJbi95kDxqYwrZIKFt60J9xEqSsif/pub?gid=0&single=true&output=csv'; function pc(t){var o=[],r=[],f='',q=false;for(var i=0;t.length>i;i++){var c=t[i];if(q){if(c==='"'){if(t[i+1]==='"'){f+='"';i++;}else q=false;}else f+=c;}else{if(c==='"')q=true;else if(c===','){r.push(f);f='';}else if(c==='\n'){r.push(f);o.push(r);r=[];f='';}else if(c!=='\r')f+=c;}}if(f!==''||r.length){r.push(f);o.push(r);}return o;} function e(s){return String(s||'').replace(/[«»\x3c\x3e"]/g,'');} fetch(CSVU+'\x26t='+Date.now()).then(function(r){return r.text();}).then(function(t){var a=pc(t),H=(a.shift()||[]).map(function(x){return x.trim();});a.forEach(function(x){var u={};H.forEach(function(k,i){u[k]=(x[i]||'').trim();});var s=(u.Status||'').toLowerCase();if(!u.Slug||!(s==='live'||(PV&&s==='test')))return;var la=parseFloat(u.Lat),ln=parseFloat(u.Lng);if(isNaN(la)||isNaN(ln))return;var n=Number(String(u['All-in $/mo']).replace(/[^0-9.]/g,''));var link='https://shopaspace.com/?unit='+encodeURIComponent(u.Slug)+(PV?'\x26preview=1':'')+'#listings';var m=L.marker([la,ln],{icon:icon});m.bindPopup(h('«div class="sas-pop"»«h4»'+e(u.Title)+' · '+e(u.City)+'«/h4»«table»'+(n?'«tr»«td»All-in«/td»«td»$'+n.toLocaleString('en-US')+'/mo«/td»«/tr»':'')+(u['Size (sf)']?'«tr»«td»Size«/td»«td»'+e(u['Size (sf)'])+' sf«/td»«/tr»':'')+(u['Drive-in doors']?'«tr»«td»Drive-in«/td»«td»'+e(u['Drive-in doors'])+'«/td»«/tr»':'')+(u.Power?'«tr»«td»Power«/td»«td»'+e(u.Power)+'«/td»«/tr»':'')+'«/table»«a class="sas-btn" href="'+link+'" onclick="location.href=this.href;return false;"»View listing«/a»«/div»'));m.addTo(pins);});}).catch(function(){});})(); LISTINGS.forEach(function(u){var m=L.marker([u.lat,u.lon],{icon:icon}); var link='https://shopaspace.com/?utm_source=map&utm_medium='+encodeURIComponent(u.id)+'#get-matched'; m.bindPopup(h('«div class="sas-pop"»«h4»'+u.title+' · '+u.city+'«/h4»«table»'+ (u.size?'«tr»«td»Size«/td»«td»'+u.size+'«/td»«/tr»':'')+(u.door?'«tr»«td»Drive-in door«/td»«td»'+u.door+'«/td»«/tr»':'')+ (u.power?'«tr»«td»Power«/td»«td»'+u.power+'«/td»«/tr»':'')+(u.outdoor?'«tr»«td»Outdoor«/td»«td»'+u.outdoor+'«/td»«/tr»':'')+ (u.cost?'«tr»«td»All-in cost«/td»«td»'+u.cost+'«/td»«/tr»':'')+(u.available?'«tr»«td»Available«/td»«td»'+u.available+'«/td»«/tr»':'')+ '«/table»«div class="muted"»Exact address and contact come with your match.«/div»«a class="sas-btn" href="'+link+'" onclick="try{gtag(\'event\',\'listing_contact_request\',{listing_id:\''+u.id+'\'})}catch(e){}"»Get matched to this unit →«/a»«/div»'),{maxWidth:300}); m.on('click',function(){ga('listing_view',{listing_id:u.id,city:u.city});}); m.addTo(pins);}); var legend=L.control({position:'bottomright'}); legend.onAdd=function(){var d=L.DomUtil.create('div','sas-legend');d.innerHTML=h('«b»BUILDINGS TRACKED PER SQ MILE«/b»'+ '«div»«i style="background:#F6D4BC"»«/i»1–4«/div»«div»«i style="background:#EBA06E"»«/i»5–7«/div»«div»«i style="background:#D86828"»«/i»8–14«/div»«div»«i style="background:#C4571B"»«/i»15–24«/div»«div»«i style="background:#9c3f0f"»«/i»25+«/div»'+ '«div style="margin-top:6px"»«span class="pin"»«/span»Open unit (pins appear as owners list)«/div»');return d;}; legend.addTo(map); if(window.innerWidth<600){map.setView([38.99,-94.72],9.5);} } if(window.L){init();}else{var s=document.createElement('script');s.src='https://unpkg.com/[email protected]/dist/leaflet.js';s.crossOrigin='';s.onload=init;document.head.appendChild(s);} })();

Kansas City, Missouri is next. Vacancy: Cushman & Wakefield, Kansas City industrial, Q2 2026.

How it works

1. Tell us what you need.
Tell us your business and where you want to be. Takes 30 seconds. Add details anytime for better matches.

2. We match you.
When space that fits opens up, including units that aren't advertised yet, we send it to you.

3. Call the owner direct.
You deal straight with the landlord or their broker. No middleman, no fees.

What we match on

Location: the cities and areas you choose
Size: 500 to 10,000 sf
Drive-in doors: tall enough for your truck
Power: 200 amp and 3-phase
Yard and outdoor storage: trailers, equipment, material
All-in monthly cost: rent plus fees, per month

Tell us what you need

30 seconds. We'll only contact you about space that fits.

Where do you want to be?

Check all that apply.

Pick at least one area.
(function(){ /* Same questions and option text as the live sign-up form (QK6kNA). Switch FORM to 'QK6kNA' to go live. */ var FORM = 'QK6kNA'; var WHERE = ['Olathe','Lenexa','Overland Park','Shawnee','Gardner / Edgerton','De Soto','Merriam / Mission / Roeland Park','KCK / Wyandotte County','Kansas City MO','Northland',"Lee's Summit",'Anywhere in KC']; var BIZ = ['Construction and trades','Auto, truck and equipment repair','Fabrication, machine shop, signs and printing','Landscaping, lawn and pest control','Cleaning, restoration and home services','Wholesale, supply and e-commerce storage','Showroom or office up front, warehouse in back','Fitness, dance and sports training','Other']; var state = {step:0, where:[], biz:'', name:'', email:'', sf:2000, size:''}; var STOPS = [500,750,1000,1250,1500,1750,2000,2500,3000,3500,4000,5000,6000,7500,10000]; function fmt(n){ return n.toLocaleString('en-US'); } function bucket(n){ return n < 2000 ? 'Under 2,000 sf' : (n <= 4000 ? '2,000 to 4,000 sf' : '4,000+ sf'); } var $ = function(id){return document.getElementById(id)}; if (FORM === 'QK6kNA') $('saf-note').hidden = true; function track(name, params){ try{ if (window.gtag) window.gtag('event', name, params||{}); }catch(e){} } function optBtn(label, radio){ var b = document.createElement('button'); b.type = 'button'; b.className = 'opt' + (radio ? ' radio' : ''); b.setAttribute('aria-pressed','false'); var box = document.createElement('span'); box.className = 'box'; var t = document.createElement('span'); t.textContent = label; b.appendChild(box); b.appendChild(t); return b; } WHERE.forEach(function(w){ var b = optBtn(w,false); b.addEventListener('click', function(){ var i = state.where.indexOf(w); if (i < 0) state.where.push(w); else state.where.splice(i,1); b.setAttribute('aria-pressed', i < 0 ? 'true' : 'false'); var n = state.where.length; $('saf-next0').disabled = n === 0; $('saf-count0').textContent = n === 0 ? 'Pick at least one area.' : n + (n === 1 ? ' area picked.' : ' areas picked.'); }); $('saf-where').appendChild(b); }); $('saf-next0').addEventListener('click', function(){ go(1); }); BIZ.forEach(function(z){ var b = optBtn(z,true); b.setAttribute('role','radio'); b.addEventListener('click', function(){ state.biz = z; [].forEach.call($('saf-biz').children, function(c){ c.setAttribute('aria-pressed', c === b ? 'true' : 'false'); }); setTimeout(function(){ go(2); }, 180); }); $('saf-biz').appendChild(b); }); function showSf(){ var n = STOPS[+$('saf-range').value]; state.sf = n; $('saf-sf').textContent = fmt(n) + (n === 10000 ? '+' : ''); } $('saf-range').addEventListener('input', showSf); $('saf-next-size').addEventListener('click', function(){ showSf(); state.size = bucket(state.sf); go(3); }); $('saf-notsure').addEventListener('click', function(){ state.size = 'Not sure'; state.sf = ''; go(3); }); $('saf-form').addEventListener('submit', function(e){ e.preventDefault(); var n = $('saf-name').value.trim(), m = $('saf-email').value.trim(); if (!n){ $('saf-err').textContent = 'Add your name.'; $('saf-name').focus(); return; } if (!/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(m)){ $('saf-err').textContent = 'Check the email address.'; $('saf-email').focus(); return; } $('saf-err').textContent = ''; state.name = n; state.email = m; go(4); }); function embed(){ /* Inline Tally form: every question is pre-filled and hidden, so only the robot check and Get matched show. */ var src = link().replace('/r/', '/embed/') + '&alignLeft=1&hideTitle=1&transparentBackground=1&dynamicHeight=1'; var box = $('saf-frame'); var old = box.querySelector('iframe'); if (old) box.removeChild(old); $('saf-loading').hidden = false; var f = document.createElement('iframe'); f.title = 'Confirm and get matched'; f.setAttribute('loading','eager'); f.height = '190'; f.addEventListener('load', function(){ $('saf-loading').hidden = true; }); if (window.Tally && window.Tally.loadEmbeds){ f.setAttribute('data-tally-src', src); box.appendChild(f); window.Tally.loadEmbeds(); } else { f.src = src; box.appendChild(f); } } /* Tally sends its height so the frame grows for the thank-you message. */ window.addEventListener('message', function(e){ if (!/tally\.so$/.test((e.origin||'').replace(/^https?:\/\//,''))) return; if (typeof e.data === 'string' && e.data.indexOf('[iFrameSizer]') === 0){ var h = parseInt(e.data.split(':')[1], 10); var fr = $('saf-frame').querySelector('iframe'); if (fr && h > 60) fr.style.height = (h + 4) + 'px'; return; } try { var d = typeof e.data === 'string' ? JSON.parse(e.data) : e.data; if (d && d.event === 'Tally.FormPageView'){} if (d && d.event === 'Tally.FormSubmitted'){ track('finder_submitted', {}); } if (d && d.payload && d.payload.height){ var f = $('saf-frame').querySelector('iframe'); if (f) f.style.height = d.payload.height + 'px'; } } catch(err){} }); function link(){ /* Tally pre-fills from hidden fields: checkbox values comma-separated, each value URL-encoded. */ var q = 'finder_where=' + state.where.map(encodeURIComponent).join(',') + '&finder_biz=' + encodeURIComponent(state.biz) + '&finder_size=' + encodeURIComponent(state.size) + '&finder_sf=' + encodeURIComponent(state.sf) + '&finder_name=' + encodeURIComponent(state.name) + '&finder_email=' + encodeURIComponent(state.email) + '&utm_source=finder&utm_medium=web'; return 'https://tally.so/r/' + FORM + '?' + q; } function crumbs(){ var c = $('saf-crumbs'); c.innerHTML = ''; if (state.step > 0){ var back = document.createElement('button'); back.className = 'back'; back.type = 'button'; back.textContent = '← Back'; back.addEventListener('click', function(){ go(state.step - 1); }); c.appendChild(back); } if (state.step > 0 && state.where.length){ var a = document.createElement('button'); a.type = 'button'; a.textContent = state.where.length > 2 ? state.where.slice(0,2).join(', ') + ' +' + (state.where.length-2) : state.where.join(', '); a.addEventListener('click', function(){ go(0); }); c.appendChild(a); } if (state.step > 1 && state.biz){ var b = document.createElement('button'); b.type = 'button'; b.textContent = state.biz; b.addEventListener('click', function(){ go(1); }); c.appendChild(b); } if (state.step > 2 && state.size){ var z2 = document.createElement('button'); z2.type = 'button'; z2.textContent = state.size === 'Not sure' ? 'Size: not sure' : '~' + fmt(state.sf) + ' sf'; z2.addEventListener('click', function(){ go(2); }); c.appendChild(z2); } if (state.step > 3 && state.name){ var e2 = document.createElement('button'); e2.type = 'button'; e2.textContent = state.name; e2.addEventListener('click', function(){ go(3); }); c.appendChild(e2); } } function go(n){ state.step = n; for (var i = 0; i < 5; i++) $('saf-s' + i).hidden = i !== n; var ticks = document.querySelectorAll('#saf .ticks span'); for (var j = 0; j < ticks.length; j++) ticks[j].className = j <= n ? 'on' : ''; if (n === 4){ $('saf-sum-size').textContent = state.size === 'Not sure' ? 'Not sure yet' : 'About ' + fmt(state.sf) + (state.sf === 10000 ? '+' : '') + ' sf'; $('saf-sum-biz').textContent = state.biz; $('saf-sum-where').textContent = state.where.join(', '); $('saf-sum-name').textContent = state.name; $('saf-sum-email').textContent = state.email; $('saf-go').href = link(); embed(); } crumbs(); track('finder_step', {step: n}); var h = $('saf-s' + n).querySelector('h1'); if (h && n > 0){ h.setAttribute('tabindex','-1'); h.focus({preventScroll:true}); } if (n > 0) $('saf').scrollIntoView({block:'start', behavior:'smooth'}); } $('saf-go').addEventListener('click', function(){ track('finder_handoff', {areas: state.where.length}); }); /* Opens on the first question with nothing picked, the same state a visitor sees. */ go(0); })(); var d=document,w="https://tally.so/widgets/embed.js",v=function(){"undefined"!=typeof Tally?Tally.loadEmbeds():d.querySelectorAll("iframe[data-tally-src]:not([src])").forEach((function(e){e.src=e.dataset.tallySrc}))};if("undefined"!=typeof Tally)v();else if(d.querySelector('script[src="'+w+'"]')==null){var s=d.createElement("script");s.src=w,s.onload=v,s.onerror=v,d.body.appendChild(s);} /* Shop A Space: count completed Tally sign-ups in Google Analytics (sends form name only, never answers) */ window.addEventListener('message', function (e) { if (typeof e.data !== 'string' || e.data.indexOf('Tally.FormSubmitted') === -1) return; try { if (!/(^|\.)tally\.so$/.test(new URL(e.origin).hostname)) return; } catch (x) { return; } var p = {}; try { p = JSON.parse(e.data).payload || {}; } catch (x) {} window.dataLayer = window.dataLayer || []; var g = window.gtag || function () { window.dataLayer.push(arguments); }; g('event', 'sign_up', { method: 'tally', form_id: p.formId || '', form_name: p.formName || '' }); });

Own or list shop space?

Shop A Space puts your space in front of contractors looking for exactly what you have: drive-in bays, power and yard. Interested contractors contact you or your broker directly. We never take a commission or get in the middle of your deal.Free while we launch. Any pricing is posted before it applies. No commissions, ever.
Lease ending soon? Tell us now and contractors hear about the unit before it's empty.

FAQ

FOR BUSINESSES LOOKING FOR SPACEIs it really free?
Yes. Businesses looking for space never pay.
How does matching work?
Sign up with your business and area, then finish your match profile: size, timing, budget and must-haves. It takes 2 minutes. When a space fits, we email it to you, often before it's advertised.
How often will you email me?
Only when something fits, plus the occasional update. Unsubscribe anytime.
Why isn't every property listed?
Owners share their space with us first, and we send it straight to the businesses it fits, often before it's advertised anywhere. Exact addresses show only on listings owners approve. The map shows where KC's shop space is; pins appear as owners list open units. Tell us what you need and matches land in your inbox.
Who sees my information?
Only us, unless you check the box allowing a listing's owner or broker to contact you. See the privacy policy.
FOR OWNERS AND BROKERSWhat does it cost to list?
Free while we launch. Any future pricing is posted before it applies, and it's never a commission or a fee tied to a lease.
Are you a real estate broker?
No. We're a listing publisher. Contractors deal directly with you or your broker. We don't negotiate, screen or take a commission.
What areas do you cover?
We track buildings in Johnson and Wyandotte counties today and are adding Missouri. Sign up for any KC area and we'll send what fits.

Shop A Space · Kansas City · [email protected]
Privacy policy · Terms of use
Shop A Space is a listing publisher, not a real estate broker. Inquiries go directly to the property owner or listing broker.
© 2026 Shop A Space

Privacy Policy

← Back to Shop A SpaceLast updated: October 2026Shop A Space ("we," "us") runs shopaspace.com, a free marketplace that helps small businesses in the Kansas City area find shop and small-bay space. This policy explains what we collect and how we use it.What we collect
Information you give us in our forms: your name, email, phone (optional), business type and the space you need. If you own or list property: your contact details and property details. We also note how you found us (for example, a link from a flyer or an ad). We also use Google Analytics, which uses cookies to count visits and see which pages and links people use. It never receives what you type into our forms. You can block these cookies in your browser settings.
How we use it
To match you with space and email you about it, to follow up with property owners and brokers about listings, and to understand the market and run and grow our business.
What we don't do
We never sell your information. We share a contractor's contact information with a property owner or broker only if the contractor checks the box allowing it.
Service providers
We use trusted providers to run the site, measure site traffic, collect forms, store information and send email. They use it only to provide their services to us. Our forms use Google reCAPTCHA to block spam, which is subject to Google's Privacy Policy and Terms of Service.
Emails
Every email we send includes a way to unsubscribe.
Security
We take reasonable steps to protect your information. No system is perfectly secure.
Your choices
Email us to see, correct or delete the information you gave us.
Children
Shop A Space is for businesses. We don't knowingly collect information from anyone under 18.
Changes
If we change this policy, we'll update the date above.
Contact: [email protected]

Terms of Use

← Back to Shop A SpaceLast updated: October 2026By using shopaspace.com you agree to these terms.1. What we are. Shop A Space is a listing publisher. We are not a real estate broker or agent. We don't represent anyone, negotiate rent or terms, screen tenants, or take a commission. Businesses looking for space deal directly with the property owner or the owner's broker.2. Free for businesses looking for space. Getting matched with space is free.3. Listings. Listings come from property owners and their brokers. We don't inspect properties or verify every detail, and we can't promise a space is available, accurate, or allowed for your use. Confirm everything directly with the owner or broker before you sign anything.4. If you list a property. You confirm that you own the property or are authorized to list it, and that the information you give us is accurate. You give us permission to display your listing details and photos on Shop A Space and in our emails, and to use the information you provide as described in our Privacy Policy. Any listing fees will be posted before they apply, and a fee never depends on whether or when a space leases.5. Using the site. Don't submit false information, scrape the site, or use it to send spam.6. No warranties. Shop A Space is provided "as is." We're not responsible for any lease, deal or dispute between users, or for the condition of any property.7. Limit of liability. To the extent the law allows, we aren't liable for indirect or consequential damages arising from your use of the site.8. Changes. We may update these terms. Continued use means you accept the updated terms.9. Governing law. Kansas law governs these terms.Contact: [email protected]

Sample match

← Back to Shop A SpaceThis is what a contractor receives when a space fits what they told us they need. The details below are made up.New match: 2,400 sf shop in Olathe

Address: 123 Example Dr, Unit B, Olathe, KS
Size: 2,400 sf
Drive-in door: 12 ft wide x 14 ft high
Clear height: 18 ft
Power: 200 amp, 3-phase
Outdoor: Gated and fenced yard
Bathroom: Private
All-in monthly cost: $2,600 (this figure includes rent plus taxes, insurance and common-area charges)
Available: April 1, 2027
Lease term: 2+ years
Why this unit matched for you: You selected: in Olathe, 2,000 to 4,000 sf, it's within budget, and it has the drive-in door and fenced yard you asked for.Contact the broker directly: Jane Sample, Example Realty, (913) 555-0100, [email protected]Inquiries go straight to the owner or broker. Shop A Space never takes a commission or sits in the middle of a lease.Like what you see? List your space in 2 minutes.

← Back to Shop A Space

Here’s what your listing will look like

Every unit gets a page like this: photos, the specs contractors filter on, your all-in price, and your phone and email so tenants reach you directly. Until public listings open, we send your unit straight to contractors whose needs fit.

List your spaceFree while we launch · about a minute
Sample listing · the map, units and contact details below are made up
Step 1 · The map

How contractors find you

Contractors will search the map for space near them. Until then, we email your unit directly to contractors whose size, area and must-haves fit.

8 sample units
Sample map: every pin is a made-up unit. Real listings appear here when public listings open.
Step 2 · The listing
Each unit gets a full page like this one
↓
Kansas City › Olathe › Shop & small-bay space
Front of the building with drive-in doors
Aerial of the five-bay building; Bay 2 outlined in greenView all photos

Bay 2 · 2,400 sf shop

123 Example Dr, Olathe, KS 66061
$2,600/moAll-in: rent + taxes, insurance and CAM
12×14 drive-in door
18 ft clear height
200A 3-phase power
Fenced yard
Private bathroom
Available Apr 1, 2027

About this space

Bay 2 of a 5-bay contractor building near I-35, with a gated, fenced storage yard and on-site parking. Open shop floor with a small office and private restroom, one 12×14 overhead door, and room in the shared yard for trailers and equipment. Good fit for trades, light fabrication or a service business that needs to park vehicles inside.

Specs

Unit size2,400 sf (approx. 400 sf office)
Drive-in doors1 · 12 ft wide × 14 ft high
Clear height18 ft
Power200 amp, 3-phase
Outdoor storageYes, gated and fenced
HeatGas unit heater
ZoningIndustrial (I)
Lease term2+ years
All-in monthly cost$2,600

Location

Approximate location shown for this sample.
Available Apr 1, 2027 · listed 3 days ago
JS
Jane SampleListing broker · Example Realty
Email Jane Call (913) 555-0100
You contact the owner or broker directly. Shop A Space never takes a commission and never sits in the middle of a lease.
Step 3 · Your turn
Want to list with us? Fill out this form
↓

List your space

Free while we launch. Takes about a minute. Tenants contact you or your broker directly; no commission, ever.
(function(){ function go(){var el=document.getElementById('sas-lmap');if(!el||el._done||!window.L)return;el._done=1; var m=L.map(el,{scrollWheelZoom:false,attributionControl:true}).setView([38.885,-94.80],12); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',{maxZoom:16,attribution:'Tiles © Esri'}).addTo(m); L.circle([38.885,-94.80],{radius:900,color:'#D86828',weight:2,fillColor:'#D86828',fillOpacity:.25}).addTo(m); window.addEventListener('hashchange',function(){setTimeout(function(){m.invalidateSize()},300)}); setTimeout(function(){m.invalidateSize()},500);} if(window.L)go();else{var s=document.createElement('script');s.src='https://unpkg.com/[email protected]/dist/leaflet.js';s.onload=go;document.head.appendChild(s); if(!document.querySelector('link[href*="leaflet.css"]')){var c=document.createElement('link');c.rel='stylesheet';c.href='https://unpkg.com/[email protected]/dist/leaflet.css';document.head.appendChild(c);}} window.addEventListener('hashchange',go); })(); (function(){function l(){if(window.Tally)Tally.loadEmbeds();else document.querySelectorAll("iframe[data-tally-src]:not([src])").forEach(function(e){e.src=e.dataset.tallySrc})}if(window.Tally){l()}else{var s=document.createElement("script");s.src="https://tally.so/widgets/embed.js";s.onload=l;s.onerror=l;document.body.appendChild(s)}window.addEventListener("hashchange",function(){setTimeout(l,200)});[800,2000,4000].forEach(function(t){setTimeout(l,t)});setTimeout(function(){document.querySelectorAll("#sas-listing iframe[data-tally-src]:not([src])").forEach(function(e){e.src=e.dataset.tallySrc})},6000)})(); (function(){ var U=[ {t:'Bay 2 \u00b7 2,400 sf shop',c:'Olathe',p:2600,ll:[38.885,-94.80],f:['door','p3','yard','bath'],img:'g',feat:1}, {t:'Unit C \u00b7 1,500 sf',c:'Lenexa',p:1750,ll:[38.952,-94.758],f:['door','bath'],img:'a'}, {t:'Bay 4 \u00b7 3,200 sf shop',c:'Olathe',p:3300,ll:[38.858,-94.838],f:['door','p3','yard'],img:'a'}, {t:'Suite 110 \u00b7 1,200 sf',c:'Overland Park',p:1600,ll:[38.903,-94.688],f:['door','bath'],img:'g'}, {t:'Bay 1 \u00b7 4,000 sf shop',c:'Lenexa',p:4100,ll:[38.972,-94.805],f:['door','p3','yard','bath'],img:'g'}, {t:'Unit 6 \u00b7 1,800 sf',c:'Shawnee',p:1950,ll:[39.008,-94.79],f:['door','yard'],img:'a'}, {t:'Bay 3 \u00b7 2,000 sf shop',c:'Gardner',p:1900,ll:[38.812,-94.925],f:['door','p3','yard'],img:'a'}, {t:'Unit B \u00b7 2,800 sf',c:'Merriam',p:3000,ll:[39.018,-94.693],f:['door','p3','bath'],img:'g'} ]; var IMG={g:'https://shopaspace.com/assets/images/gallery01/958480e7.jpg',a:'https://shopaspace.com/assets/images/image02.jpg'}; var TAG={door:'Drive-in door',p3:'3-phase',yard:'Fenced yard',bath:'Bathroom'}; var m,mk=[],sel=null,on={}; function k(p){return '$'+(p/1000).toFixed(1).replace('.0','')+'k';} function card(u,i){var c=document.getElementById('sas-fcard'); c.innerHTML='\x3cbutton type="button" class="fx" aria-label="Close">\u00d7\x3c/button>\x3cimg src="'+IMG[u.img]+'" alt="">\x3cdiv class="fb">\x3cdiv class="fpr">$'+u.p.toLocaleString()+'/mo\x3c/div>\x3cdiv class="fti">'+u.t+'\x3c/div>\x3cdiv class="fsub">'+u.c+', KS \u00b7 all-in \u00b7 sample unit\x3c/div>\x3cdiv class="ftags">'+u.f.map(function(x){return '\x3cspan>'+TAG[x]+'\x3c/span>'}).join('')+'\x3c/div>\x3ca class="fgo">'+(u.feat?'View listing':'See a full sample listing')+'\x3c/a>\x3c/div>'; c.classList.add('show'); c.querySelector('.fx').onclick=function(e){e.stopPropagation();close();}; c.querySelector('.fgo').onclick=function(e){e.preventDefault();var g=document.querySelector('#sas-listing .fdiv');if(g){var y=g.getBoundingClientRect().top+window.pageYOffset-90;window.scrollTo({top:y,behavior:'smooth'});}}; if(sel!==null)mk[sel].el&&mk[sel].el.classList.remove('sel');sel=i;var el=mk[i].getElement&&mk[i].getElement();if(el){mk[i].el=el.querySelector('.fpin');mk[i].el.classList.add('sel');} } function close(){var c=document.getElementById('sas-fcard');if(c)c.classList.remove('show');if(sel!==null&&mk[sel].el)mk[sel].el.classList.remove('sel');sel=null;} function apply(){var n=0,need=Object.keys(on).filter(function(x){return on[x]}); U.forEach(function(u,i){var ok=need.every(function(x){return u.f.indexOf(x)>-1});if(ok){n++;if(!m.hasLayer(mk[i]))mk[i].addTo(m);}else{if(m.hasLayer(mk[i]))m.removeLayer(mk[i]);if(sel===i)close();}}); document.getElementById('sas-fcount').textContent=(need.length?n+' of 8':'8')+' sample units';} function init(){var el=document.getElementById('sas-fmap');if(!el||el._done||!window.L||!el.offsetWidth)return;el._done=1; m=L.map(el,{scrollWheelZoom:false,zoomControl:true,zoomSnap:0.25}); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',{maxZoom:16,attribution:'Tiles © Esri'}).addTo(m); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}',{maxZoom:16}).addTo(m); U.forEach(function(u,i){var x=L.marker(u.ll,{icon:L.divIcon({className:'fpin-wrap',html:'\x3cspan class="fpin'+(u.feat?' feat':'')+'">'+k(u.p)+'\x3c/span>',iconSize:null}),title:u.t,riseOnHover:true}).addTo(m);x.on('click',function(e){L.DomEvent.stopPropagation(e);card(u,i);});mk.push(x);}); m.fitBounds(L.latLngBounds(U.map(function(u){return u.ll})),{padding:[24,24]}); m.on('click',close); document.querySelectorAll('#sas-find .fc').forEach(function(b){b.onclick=function(){var f=b.getAttribute('data-f');on[f]=!on[f];b.classList.toggle('on',!!on[f]);apply();};}); window.addEventListener('hashchange',function(){setTimeout(function(){m.invalidateSize()},300)}); } var tries=0,iv=setInterval(function(){init();var el=document.getElementById('sas-fmap');if((el&&el._done)||++tries>120)clearInterval(iv);},500); window.addEventListener('hashchange',function(){setTimeout(init,300)}); })(); (function(){ function fv(fs,re){for(var i=0;fs.length>i;i++){var f=fs[i]||{};var t=f.title||f.label||f.key||'';if(re.test(t)){var a=f.answer!==undefined?f.answer:f.value;if(a&&typeof a==='object'&&!Array.isArray(a))a=a.value!==undefined?a.value:a.raw;if(Array.isArray(a))a=a.join(', ');return a==null?'':String(a);}}return '';} window.addEventListener('message',function(e){if(!/tally\.so$/.test((e.origin||'').replace(/^https?:\/\//,'')))return;var d=e.data;if(typeof d==='string'){try{d=JSON.parse(d);}catch(x){return;}}if(!d||d.event!=='Tally.FormSubmitted')return;var p=d.payload||{};if(p.formId&&p.formId!=='1A1pY4')return;var fs=p.fields||[];var em=fv(fs,/email/i),ad=fv(fs,/^(?!.*e-?mail).*address/i); try{if(window.gtag)window.gtag('event','list_space_to_unit_details_prompt');}catch(x){} var box=document.getElementById('list-form');if(!box||document.getElementById('sas-next'))return;var w=document.createElement('div');w.id='sas-next';w.style.cssText='margin-top:18px;padding:20px;border-radius:8px;background:#fdf1ea;text-align:center;font-family:Barlow,Arial,sans-serif'; var h=document.createElement('div');h.textContent='Next: add your unit details';h.style.cssText='font:700 22px Oswald,sans-serif;text-transform:uppercase;color:#182024;margin-bottom:6px'; var s=document.createElement('div');s.textContent='About 3 minutes per unit. Photos, size, door, power and price are what contractors filter on.';s.style.cssText='color:#5c636b;margin-bottom:14px'; var b=document.createElement('button');b.type='button';b.textContent='Add unit details';b.style.cssText='background:#D86828;color:#fff;border:0;border-radius:6px;padding:13px 22px;font:600 16px Barlow,sans-serif;cursor:pointer'; b.onclick=function(){var q=new URLSearchParams();if(em){q.set('email',em);q.set('cemail',em);}if(ad)q.set('address',ad);location.href=location.pathname+'?'+q.toString()+'#unit-details';}; w.appendChild(h);w.appendChild(s);w.appendChild(b);box.appendChild(w);try{w.scrollIntoView({behavior:'smooth',block:'center'});}catch(x){}}); })();

Shop space for rent in Kansas City

Shops, garages and small bays listed by their owners and brokers. Contact them directly; no fees for tenants.

Looking for space? We send units that fit.
Own or broker space? Brokers list free.
Loading space…
(function(){ var CSV = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vRj5sdo0NdYBcH30t3bIUpe2P6xy-KBiEyH6nC4WN_q60bjAVnXJbi95kDxqYwrZIKFt60J9xEqSsif/pub?gid=0&single=true&output=csv'; var CELLS = [[38.96843,-94.72529,51,"Overland Park"],[38.98095,-94.716,51,"Lenexa"],[38.84325,-94.81822,42,"Olathe"],[38.93088,-94.75317,33,"Lenexa"],[38.95591,-94.75317,32,"Lenexa"],[38.91836,-94.76246,30,"Olathe"],[38.85577,-94.80893,29,"Olathe"],[39.08109,-94.64165,28,"Kansas City KS"],[38.93088,-94.77175,27,"Lenexa"],[39.04354,-94.68812,25,"Overland Park"],[38.84325,-94.79963,25,"Olathe"],[38.90584,-94.79034,23,"Olathe"],[39.08109,-94.62306,22,"Kansas City KS"],[38.98095,-94.86469,22,"Shawnee"],[38.94339,-94.74387,20,"Lenexa"],[38.8808,-94.79034,20,"Olathe"],[38.89332,-94.78105,20,"Olathe"],[38.86829,-94.81822,20,"Olathe"],[38.83073,-94.67882,19,"Overland Park"],[39.00598,-94.82751,19,"Shawnee"],[38.95591,-94.716,18,"Overland Park"],[39.04354,-94.65094,17,"Kansas City KS"],[39.04354,-94.66953,17,"Mission"],[39.05606,-94.64165,17,"Kansas City KS"],[38.8808,-94.82751,17,"Olathe"],[39.09361,-94.63236,16,"Kansas City KS"],[38.8808,-94.80893,16,"Olathe"],[38.98095,-94.8461,16,"Shawnee"],[39.10613,-94.60448,15,"Kansas City KS"],[38.98095,-94.69741,14,"Lenexa"],[39.05606,-94.62306,13,"Kansas City KS"],[38.94339,-94.76246,13,"Lenexa"],[38.85577,-94.82751,13,"Olathe"],[38.84325,-94.66953,13,"Overland Park"],[39.03102,-94.69741,13,"Merriam"],[39.13116,-94.92044,12,"Basehor"],[39.11865,-94.65094,12,"Kansas City KS"],[39.11865,-94.63236,12,"Kansas City KS"],[38.85577,-94.66024,12,"Overland Park"],[38.95591,-94.77175,11,"Lenexa"],[38.89332,-94.79963,11,"Olathe"],[38.83073,-94.90186,10,"Johnson County (unincorporated)"],[38.86829,-94.83681,10,"Olathe"],[39.06857,-94.85539,9,"Bonner Springs"],[39.06857,-94.83681,9,"Edwardsville"],[39.09361,-94.72529,9,"Kansas City KS"],[38.95591,-94.73458,9,"Lenexa"],[38.8057,-94.92044,8,"Gardner"],[38.8057,-94.93903,8,"Gardner"],[39.00598,-94.69741,8,"Merriam"],[39.09361,-94.61377,7,"Kansas City KS"],[38.85577,-94.8461,7,"Olathe"],[39.06857,-94.61377,6,"Kansas City KS"],[39.09361,-94.66953,6,"Kansas City KS"],[39.14368,-94.61377,6,"Kansas City KS"],[38.96843,-94.7067,6,"Lenexa"],[38.83073,-94.82751,6,"Olathe"],[39.0185,-94.81822,6,"Shawnee"],[38.74311,-94.81822,6,"Spring Hill"],[38.76814,-94.66953,6,"Stilwell"],[38.73059,-94.82751,6,"Spring Hill"],[38.98095,-94.95762,5,"De Soto"],[39.05606,-94.80893,5,"Edwardsville"],[39.09361,-94.74387,5,"Kansas City KS"],[39.09361,-94.7067,5,"Kansas City KS"],[39.08109,-94.73458,5,"Kansas City KS"],[39.1562,-94.62306,5,"Kansas City KS"],[38.93088,-94.73458,5,"Lenexa"],[39.0185,-94.7067,5,"Shawnee"],[38.83073,-94.66024,5,"Overland Park"],[38.90584,-94.67882,5,"Overland Park"],[39.0185,-94.72529,5,"Shawnee"],[38.75562,-94.66024,4,"Bucyrus"],[38.8057,-94.90186,4,"Gardner"],[38.81821,-94.89257,4,"Gardner"],[39.09361,-94.65094,4,"Kansas City KS"],[39.08109,-94.60448,4,"Kansas City KS"],[39.08109,-94.66024,4,"Kansas City KS"],[39.0185,-94.68812,4,"Merriam"],[39.0185,-94.66953,4,"Mission"],[39.03102,-94.82751,4,"Shawnee"],[39.05606,-94.8461,3,"Bonner Springs"],[38.95591,-94.9762,3,"De Soto"],[39.05606,-94.79034,3,"Edwardsville"],[38.81821,-94.92974,3,"Gardner"],[39.06857,-94.74387,3,"Kansas City KS"],[39.06857,-94.68812,3,"Kansas City KS"],[39.13116,-94.64165,3,"Kansas City KS"],[38.91836,-94.78105,3,"Olathe"],[38.86829,-94.79963,3,"Olathe"],[38.8808,-94.69741,3,"Overland Park"],[38.93088,-94.66024,3,"Overland Park"],[38.78066,-94.82751,3,"Spring Hill"],[38.75562,-94.82751,3,"Spring Hill"],[38.99347,-94.7067,3,"Merriam"],[39.04354,-94.89257,2,"Bonner Springs"],[39.05606,-94.88327,2,"Bonner Springs"],[38.74311,-94.66953,2,"Bucyrus"],[38.75562,-94.67882,2,"Bucyrus"],[38.81821,-94.91115,2,"Gardner"],[39.05606,-94.67882,2,"Kansas City KS"],[39.09361,-94.68812,2,"Kansas City KS"],[39.06857,-94.65094,2,"Kansas City KS"],[39.06857,-94.78105,2,"Kansas City KS"],[39.10613,-94.62306,2,"Kansas City KS"],[39.11865,-94.91115,2,"Kansas City KS"],[39.11865,-94.7067,2,"Kansas City KS"],[39.11865,-94.61377,2,"Kansas City KS"],[39.13116,-94.77175,2,"Kansas City KS"],[39.13116,-94.60448,2,"Kansas City KS"],[39.14368,-94.76246,2,"Kansas City KS"],[39.14368,-94.68812,2,"Kansas City KS"],[39.14368,-94.63236,2,"Kansas City KS"],[39.11865,-94.76246,2,"Kansas City KS"],[39.10613,-94.64165,2,"Kansas City KS"],[38.96843,-94.74387,2,"Lenexa"],[39.03102,-94.67882,2,"Merriam"],[39.0185,-94.65094,2,"Mission"],[38.98095,-94.67882,2,"Overland Park"],[38.99347,-94.66953,2,"Overland Park"],[39.03102,-94.716,2,"Shawnee"],[39.0185,-94.74387,2,"Shawnee"],[38.75562,-94.80893,2,"Spring Hill"],[38.78066,-94.66024,2,"Johnson County (unincorporated)"],[38.95591,-94.99479,2,"De Soto"],[38.99347,-94.76246,2,"Shawnee"],[38.83073,-94.80893,2,"Olathe"],[38.8808,-94.75317,2,"Olathe"],[39.11865,-94.94832,1,"Basehor"],[39.13116,-94.93903,1,"Basehor"],[39.10613,-94.90186,1,"Bonner Springs"],[39.10613,-94.88327,1,"Bonner Springs"],[39.05606,-94.90186,1,"Bonner Springs"],[38.95591,-95.01338,1,"De Soto"],[38.98095,-94.9762,1,"De Soto"],[39.05606,-94.82751,1,"Edwardsville"],[39.09361,-94.81822,1,"Edwardsville"],[38.79318,-94.91115,1,"Gardner"],[39.04354,-94.61377,1,"Kansas City KS"],[39.05606,-94.75317,1,"Kansas City KS"],[39.11865,-94.72529,1,"Kansas City KS"],[39.1562,-94.73458,1,"Kansas City KS"],[39.18124,-94.80893,1,"Kansas City KS"],[39.05606,-94.77175,1,"Kansas City KS"],[39.08109,-94.75317,1,"Kansas City KS"],[39.09361,-94.76246,1,"Kansas City KS"],[38.85577,-94.88327,1,"Olathe"],[38.90584,-94.77175,1,"Olathe"],[38.93088,-94.67882,1,"Overland Park"],[38.99347,-94.78105,1,"Shawnee"],[38.99347,-94.85539,1,"Shawnee"],[38.74311,-95.00408,1,"Edgerton"],[38.76814,-95.00408,1,"Edgerton"],[38.78066,-94.80893,1,"Spring Hill"],[38.73059,-94.66024,1,"Johnson County (unincorporated)"],[38.83073,-94.62306,1,"Johnson County (unincorporated)"],[38.78066,-94.93903,1,"Gardner"],[38.96843,-95.00408,1,"De Soto"],[38.98095,-94.99479,1,"De Soto"],[38.84325,-94.83681,1,"Johnson County (unincorporated)"],[39.03102,-94.66024,1,"Mission"],[38.86829,-94.61377,1,"Leawood"],[39.0185,-94.79963,1,"Shawnee"],[38.86829,-94.85539,1,"Olathe"],[38.8808,-94.77175,1,"Olathe"],[38.8808,-94.67882,1,"Overland Park"],[38.99347,-94.74387,1,"Lenexa"]]; var R = 929, MLAT = 111320, MLON = 111320 * Math.cos(38.95 * Math.PI / 180); var PREVIEW = new URLSearchParams(location.search).get('preview') === '1'; var state = {all: [], pmin: 0, pmax: 0, smin: 0, smax: 0, use: '', more: {}, sort: 'new', active: null, open: null}; var map, pinLayer, markers = {}, bb0 = []; function $(id){ return document.getElementById(id); } function h(tag, cls, text){ var e = document.createElement(tag); if (cls) e.className = cls; if (text != null) e.textContent = text; return e; } function track(n, p){ try { if (window.gtag) window.gtag('event', n, p || {}); } catch(e) {} } function num(v){ var d = String(v || '').replace(/[^0-9.]/g, ''); return d ? parseFloat(d) : null; } function money(v){ var n = num(v); return n ? '$' + Math.round(n).toLocaleString('en-US') : ''; } function sf(v){ var n = num(v); return n ? Math.round(n).toLocaleString('en-US') + ' sf' : ''; } function yes(v){ var s = String(v || '').trim().toLowerCase(); return !!s && ['no','none','n','0','-','n/a'].indexOf(s) === -1; } function parseCSV(t){ var rows = [], row = [], f = '', q = false; for (var i = 0; t.length > i; i++){ var c = t[i]; if (q){ if (c === '"'){ if (t[i+1] === '"'){ f += '"'; i++; } else q = false; } else f += c; } else if (c === '"') q = true; else if (c === ','){ row.push(f); f = ''; } else if (c === '\n'){ row.push(f); rows.push(row); row = []; f = ''; } else if (c !== '\r') f += c; } if (f || row.length){ row.push(f); rows.push(row); } var hd = rows.shift() || []; return rows.filter(function(r){ return r.join('').trim(); }).map(function(r){ var o = {}; hd.forEach(function(k, j){ o[k.trim()] = (r[j] || '').trim(); }); return o; }); } function cellColor(n){ return n >= 25 ? '#9C3F0F' : n >= 15 ? '#C4571B' : n >= 8 ? '#D86828' : n >= 5 ? '#EBA06E' : '#F6D4BC'; } function hexPts(la, lo){ var p = []; for (var i = 0; 6 > i; i++){ var a = (60 * i + 30) * Math.PI / 180; p.push([la + R * Math.sin(a) / MLAT, lo + R * Math.cos(a) / MLON]); } return p; } function spot(u){ var la = num(u['Lat']), lo = parseFloat(u['Lng']); if (!la || isNaN(lo)) return null; if (yes(u['Show address (Y/N)'])) return [la, lo]; var s = slugOf(u), k = 0; for (var i = 0; s.length > i; i++) k = (k * 31 + s.charCodeAt(i)) % 3600; var a = k * Math.PI / 1800; return [la + 450 * Math.sin(a) / MLAT, lo + 450 * Math.cos(a) / MLON]; } function slugOf(u){ return u['Slug'] || (u['Title'] || u['Address'] || '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); } function title(u){ return u['Title'] || ((sf(u['Size (sf)']) || 'Shop space') + ' in ' + (u['City'] || 'Kansas City')); } function place(u){ return yes(u['Show address (Y/N)']) && u['Address'] ? u['Address'] + (u['City'] ? ', ' + u['City'] : '') : (u['City'] || 'Kansas City area') + ' (approximate location)'; } function photos(u){ var a = []; for (var i = 1; 5 >= i; i++){ var p = u['Photo ' + i]; if (p) p.split(/[\s,]+/).forEach(function(x){ if (/^https?:/.test(x)) a.push(x); }); } return a; } var USES = [['trades','Contractor / trades',/contract|trades?\b|construct/i],['auto','Auto & equipment repair',/auto|vehicle|cars?\b|truck|repair|mechanic|body shop/i],['fab','Fabrication / machine shop',/fabricat|weld|machin|metal/i],['land','Landscaping',/landscap|lawn/i],['clean','Cleaning & home services',/clean|restoration|janitor/i],['ware','Warehouse / e-commerce',/warehouse|storage|e-?commerce|distribution/i],['show','Showroom + warehouse',/showroom|retail/i],['fit','Fitness / training',/fitness|gym|dance|sport/i]]; var MORE = [['door','Drive-in door'],['phase','3-phase power'],['yard','Yard / outdoor storage'],['bath','Private bathroom'],['now','Available now']]; var PRICES = [500,1000,1500,2000,2500,3000,4000,5000,7500,10000], SIZES = [500,1000,1500,2000,2500,3000,4000,5000,7500,10000]; function fmt$(n){ return '$' + n.toLocaleString('en-US'); } function fmtSf(n){ return n.toLocaleString('en-US') + ' sf'; } function availNow(u){ var v = String(u['Available'] || '').trim(); if (!v || /now|immediate|today|asap/i.test(v)) return true; var d = new Date(v); return !isNaN(d) && (Date.now() + 864e5) >= d.getTime(); } function moreOk(u){ var m = state.more; if (m.door && !yes(u['Drive-in doors'])) return false; if (m.phase && !/3\s*-?\s*ph|three\s*-?\s*phase/i.test(u['Power'] || '')) return false; if (m.yard && !/fenced|yard|outdoor storage|open lot|storage/i.test(u['Yard / outdoor'] || '')) return false; if (m.bath && !/private/i.test(u['Bathroom'] || '')) return false; if (m.now && !availNow(u)) return false; return true; } function useOk(u){ if (!state.use) return true; var r = null; USES.forEach(function(x){ if (x[0] === state.use) r = x[2]; }); return !(r && r.test(String(u['Uses not allowed'] || ''))); } function passes(u){ var p = num(u['All-in $/mo']), s = num(u['Size (sf)']); if (state.pmin && !(p >= state.pmin)) return false; if (state.pmax && !(state.pmax >= p)) return false; if (state.smin && !(s >= state.smin)) return false; if (state.smax && !(state.smax >= s)) return false; return useOk(u) && moreOk(u); } function hasUseData(){ return state.all.some(function(u){ return Object.prototype.hasOwnProperty.call(u, 'Uses not allowed'); }); } function visible(){ var l = state.all.filter(passes); l.sort(function(a, b){ var pr = (yes(b['Pro (Y/N)']) ? 1 : 0) - (yes(a['Pro (Y/N)']) ? 1 : 0); if (state.sort === 'new' && pr) return pr; if (state.sort === 'price') return (num(a['All-in $/mo']) || 9e9) - (num(b['All-in $/mo']) || 9e9); if (state.sort === 'size') return (num(a['Size (sf)']) || 9e9) - (num(b['Size (sf)']) || 9e9); return String(b['Listed date'] || '').localeCompare(String(a['Listed date'] || '')); }); return l; } function rangeLabel(lo, hi, f, def){ if (lo && hi) return f(lo) + '\u2013' + f(hi); if (lo) return f(lo) + '+'; if (hi) return 'Up to ' + f(hi); return def; } function moreCount(){ var n = 0; MORE.forEach(function(x){ if (state.more[x[0]]) n++; }); return n; } function anyActive(){ return !!(state.pmin || state.pmax || state.smin || state.smax || state.use || moreCount()); } var popEl = null; function closePop(){ if (popEl){ popEl.remove(); popEl = null; } state.open = null; [].forEach.call(document.querySelectorAll('#sasm .fbtn'), function(b){ b.setAttribute('aria-expanded', 'false'); }); } function openPop(btn, key, build){ if (state.open === key){ closePop(); return; } closePop(); state.open = key; btn.setAttribute('aria-expanded', 'true'); popEl = h('div', 'fpop'); build(popEl); $('sasm').appendChild(popEl); var r = btn.getBoundingClientRect(), w = popEl.offsetWidth; var left = Math.max(8, Math.min(r.left, window.innerWidth - w - 8)); popEl.style.left = left + 'px'; popEl.style.top = (r.bottom + 6) + 'px'; } document.addEventListener('click', function(e){ if (!popEl) return; if (popEl.contains(e.target) || (e.target.closest && e.target.closest('#sasm .fbtn'))) return; closePop(); }); window.addEventListener('resize', closePop); window.addEventListener('scroll', function(){ if (popEl) closePop(); }, true); function rangeSel(label, vals, f, lo, hi, set){ var row = h('div', 'frow'); [['Min', lo, 'No min'], ['Max', hi, 'No max']].forEach(function(o, k){ var wrap = h('label', 'fsel'); wrap.appendChild(h('span', null, o[0])); var s = h('select'); var z = h('option', null, o[2]); z.value = '0'; s.appendChild(z); vals.forEach(function(v){ var op = h('option', null, f(v)); op.value = String(v); if (o[1] === v) op.selected = true; s.appendChild(op); }); s.onchange = function(){ set(k, parseInt(s.value, 10) || 0); }; wrap.appendChild(s); row.appendChild(wrap); if (k === 0) row.appendChild(h('span', 'fdash', '\u2013')); }); return row; } function fbtn(box, label, active, key, build){ var b = h('button', 'fbtn' + (active ? ' on' : ''), label); b.type = 'button'; b.setAttribute('aria-expanded', 'false'); b.setAttribute('aria-haspopup', 'true'); b.appendChild(h('span', 'car', '\u25be')); b.onclick = function(e){ e.stopPropagation(); openPop(b, key, build); }; box.appendChild(b); return b; } function applyFilters(what){ render(); buildFilters(); track('map_filter', {filter: what}); } function buildFilters(){ var box = $('sm-filters'); box.innerHTML = ''; var seg = h('div', 'seg'); var rent = h('button', 'on', 'For rent'); rent.type = 'button'; rent.setAttribute('aria-pressed', 'true'); seg.appendChild(rent); var sale = h('button', 'soonbtn', 'For sale'); sale.type = 'button'; sale.setAttribute('aria-pressed', 'false'); sale.appendChild(h('span', 'soon', 'Soon')); sale.onclick = function(e){ e.stopPropagation(); openPop(sale, 'sale', function(p){ p.appendChild(h('b', null, 'For-sale listings are coming soon')); p.appendChild(h('p', 'fnote', 'Want to buy a shop or garage condo? Get matched and tell us; we\u2019ll let you know when sale listings open.')); var g = h('button', 'btn', 'Get matched'); g.type = 'button'; g.onclick = function(){ track('map_get_matched', {from: 'for_sale'}); location.href = location.origin + '/#get-matched'; }; p.appendChild(g); }); track('map_for_sale_click', {}); }; seg.appendChild(sale); box.appendChild(seg); fbtn(box, rangeLabel(state.pmin, state.pmax, fmt$, 'Price'), state.pmin || state.pmax, 'price', function(p){ p.appendChild(h('b', null, 'All-in monthly cost')); p.appendChild(rangeSel('Price', PRICES, fmt$, state.pmin, state.pmax, function(k, v){ if (k === 0) state.pmin = v; else state.pmax = v; applyFilters('price'); })); }); fbtn(box, rangeLabel(state.smin, state.smax, fmtSf, 'Size'), state.smin || state.smax, 'size', function(p){ p.appendChild(h('b', null, 'Square feet')); p.appendChild(rangeSel('Size', SIZES, fmtSf, state.smin, state.smax, function(k, v){ if (k === 0) state.smin = v; else state.smax = v; applyFilters('size'); })); }); if (hasUseData()){ var ul = 'Business type'; USES.forEach(function(x){ if (x[0] === state.use) ul = x[1]; }); fbtn(box, ul, !!state.use, 'use', function(p){ p.appendChild(h('b', null, 'What kind of business?')); [['', 'Any business']].concat(USES).forEach(function(x){ var l = h('label', 'fchk'); var r = h('input'); r.type = 'radio'; r.name = 'smuse'; r.checked = state.use === x[0]; r.onchange = function(){ state.use = x[0]; applyFilters('use'); }; l.appendChild(r); l.appendChild(document.createTextNode(x[1])); p.appendChild(l); }); p.appendChild(h('p', 'fnote', 'Hides units whose owner says your use isn\u2019t allowed. Always confirm zoning with the city before you sign.')); }); } var mc = moreCount(); fbtn(box, mc ? 'More (' + mc + ')' : 'More', mc > 0, 'more', function(p){ p.appendChild(h('b', null, 'Must-haves')); MORE.forEach(function(x){ var l = h('label', 'fchk'); var c = h('input'); c.type = 'checkbox'; c.checked = !!state.more[x[0]]; c.onchange = function(){ state.more[x[0]] = c.checked; applyFilters('more_' + x[0]); }; l.appendChild(c); l.appendChild(document.createTextNode(x[1])); p.appendChild(l); }); }); if (anyActive()){ var rs = h('button', 'freset', 'Reset'); rs.type = 'button'; rs.onclick = function(){ state.pmin = state.pmax = state.smin = state.smax = 0; state.use = ''; MORE.forEach(function(x){ state.more[x[0]] = false; }); closePop(); applyFilters('reset'); }; box.appendChild(rs); } var sw = h('div', 'fsort'); var s = h('select'); s.setAttribute('aria-label', 'Sort'); [['new','Sort: Newest'],['price','Sort: Price, low to high'],['size','Sort: Size, small to large']].forEach(function(o){ var op = h('option', null, o[1]); op.value = o[0]; if (state.sort === o[0]) op.selected = true; s.appendChild(op); }); s.onchange = function(){ state.sort = s.value; render(); }; sw.appendChild(s); box.appendChild(sw); } function buildLegend(){ var g = $('sm-legend'); g.innerHTML = ''; var p = h('span'); var pin = h('span', 'pin', '$'); p.appendChild(pin); p.appendChild(document.createTextNode('Available unit')); g.appendChild(p); g.appendChild(h('span', null, 'Shop and small-bay buildings tracked per area:')); [['1\u20134', 1], ['5\u20137', 5], ['8\u201314', 8], ['15\u201324', 15], ['25+', 25]].forEach(function(o){ var s = h('span'); var i = h('i'); i.style.background = cellColor(o[1]); s.appendChild(i); s.appendChild(document.createTextNode(o[0])); g.appendChild(s); }); } function card(u){ var b = h('button', 'card'); b.type = 'button'; b.dataset.slug = slugOf(u); var ph = h('div', 'ph'); var ps = photos(u); if (ps[0]) ph.style.backgroundImage = 'url("' + ps[0] + '")'; else ph.textContent = 'Photo coming'; var tx = h('div'); var tt = h('div', 't', title(u)); if (yes(u['Pro (Y/N)'])) tt.appendChild(h('span', 'feat', 'Featured')); tx.appendChild(tt); if (money(u['All-in $/mo'])) tx.appendChild(h('div', 'p', money(u['All-in $/mo']) + '/mo all-in')); tx.appendChild(h('div', 'm', place(u))); var sp = h('div', 'specs'); [sf(u['Size (sf)']), u['Drive-in doors'] ? 'Door: ' + u['Drive-in doors'] : '', u['Power'], /fenced|yard|outdoor storage|open lot/i.test(u['Yard / outdoor'] || '') ? 'Yard' : ''].forEach(function(x){ if (x) sp.appendChild(h('span', 'tag', x)); }); tx.appendChild(sp); b.appendChild(ph); b.appendChild(tx); b.onclick = function(){ preview(slugOf(u)); }; b.onmouseenter = function(){ highlight(slugOf(u)); }; return b; } function tipCard(u){ var c = h('div', 'tc'); var ps = photos(u); var ph = h('div', 'tc-ph'); if (ps[0]) ph.style.backgroundImage = 'url("' + ps[0] + '")'; else ph.textContent = 'Photo coming'; c.appendChild(ph); var b = h('div', 'tc-b'); if (money(u['All-in $/mo'])){ var p = h('div', 'tc-p', money(u['All-in $/mo'])); p.appendChild(h('span', null, ' /mo')); b.appendChild(p); } b.appendChild(h('div', 'tc-t', title(u))); b.appendChild(h('div', 'tc-m', [sf(u['Size (sf)']), u['City']].filter(Boolean).join(' \u00b7 '))); b.appendChild(h('div', 'tc-cta', 'Click for details')); c.appendChild(b); return c; } function highlight(slug){ state.active = slug; if (!slug){ Object.keys(markers).forEach(function(k){ var el = markers[k].getElement(); if (el){ var p = el.querySelector('.pricepin'); if (p) p.className = 'pricepin'; } }); } Object.keys(markers).forEach(function(k){ var el = markers[k].getElement(); if (el){ var p = el.querySelector('.pricepin'); if (p) p.className = 'pricepin' + (k === slug ? ' on' : ''); } }); [].forEach.call(document.querySelectorAll('#sm-list .card'), function(c){ c.classList.toggle('on', c.dataset.slug === slug); }); } function sideHead(list, t, sub){ list.appendChild(h('h3', 'sd-h', t)); if (sub) list.appendChild(h('p', 'sd-sub', sub)); } function backBtn(list){ var b = h('button', 'back', state.all.length ? '\u2190 All units' : '\u2190 Back'); b.type = 'button'; b.onclick = function(){ state.active = null; state.area = null; hexOn(null); highlight(null); sideList(); }; list.appendChild(b); } function sideList(){ var list = $('sm-list'); list.innerHTML = ''; var l = visible(), n = state.all.length; if (!state.loaded){ sideHead(list, 'Loading units\u2026'); return; } if (n === 0){ sideHead(list, 'No units listed yet'); var hi = h('div', 'hint'); hi.appendChild(h('b', null, 'Orange price pins appear on the map as owners and brokers list space.')); hi.appendChild(h('p', null, 'Click a pin to see the unit here, then open its full page. Until then, click any shaded area to see how many shop and small-bay buildings are there.')); list.appendChild(hi); return; } sideHead(list, l.length + (l.length === 1 ? ' unit' : ' units'), 'Click a pin or a unit to see it here.'); if (l.length === 0) list.appendChild(h('div', 'hint', 'No units match these filters yet. Try another size.')); l.forEach(function(u){ list.appendChild(card(u)); }); } function preview(slug){ var u = null; state.all.forEach(function(x){ if (slugOf(x) === slug) u = x; }); if (!u) return; state.area = null; hexOn(null); highlight(slug); track('listing_preview', {listing: slug}); var list = $('sm-list'); list.innerHTML = ''; list.scrollTop = 0; backBtn(list); var box = h('div', 'pvw'); var ps = photos(u); var ph = h('div', 'pv-ph'); if (ps[0]) ph.style.backgroundImage = 'url("' + ps[0] + '")'; else ph.textContent = 'Photo coming'; box.appendChild(ph); var tt = h('div', 'pv-t', title(u)); if (yes(u['Pro (Y/N)'])) tt.appendChild(h('span', 'feat', 'Featured')); box.appendChild(tt); box.appendChild(h('div', 'd-loc', place(u))); if (money(u['All-in $/mo'])){ var pr = h('div', 'pv-p', money(u['All-in $/mo'])); pr.appendChild(h('span', null, ' /mo all-in')); box.appendChild(pr); } var t = h('table'); row(t, 'Size', sf(u['Size (sf)'])); row(t, 'Available', u['Available']); row(t, 'Drive-in doors', u['Drive-in doors']); row(t, 'Clear height', u['Clear height']); row(t, 'Power', u['Power']); row(t, 'Yard / outdoor', u['Yard / outdoor']); box.appendChild(t); var who = [u['Contact name'], u['Company']].filter(Boolean).join(' \u00b7 '); if (who) box.appendChild(h('div', 'note', 'Listed by ' + who)); var go = h('button', 'btn', 'View full listing \u2192'); go.type = 'button'; go.style.marginTop = '12px'; go.onclick = function(){ openUnit(slug, true); }; box.appendChild(go); list.appendChild(box); if (860 >= window.innerWidth) list.scrollIntoView({block: 'start', behavior: 'smooth'}); } function areaPanel(c){ state.active = null; highlight(null); state.area = c; track('map_cell_click', {city: c[3], count: c[2]}); var list = $('sm-list'); list.innerHTML = ''; backBtn(list); list.appendChild(h('div', 'area-n', String(c[2]))); sideHead(list, (c[2] === 1 ? 'Shop or small-bay building' : 'Shop and small-bay buildings') + ' tracked here', c[3] + ' \u00b7 about one square mile'); var near = visible().filter(function(u){ var ll = spot(u); if (!ll) return false; var dy = (ll[0] - c[0]) * MLAT, dx = (ll[1] - c[1]) * MLON; return 3000 > Math.sqrt(dx * dx + dy * dy); }); if (near.length){ list.appendChild(h('p', 'sd-sub', 'Units listed nearby:')); near.forEach(function(u){ list.appendChild(card(u)); }); } else list.appendChild(h('div', 'hint', 'No units are listed in this area right now. We track buildings, not vacancies; units show up as owners and brokers list them.')); if (860 >= window.innerWidth) list.scrollIntoView({block: 'start', behavior: 'smooth'}); } var hexes = []; function hexOn(poly){ hexes.forEach(function(p){ p.setStyle({color: '#FFFFFF', weight: 1}); }); if (poly){ poly.setStyle({color: '#182024', weight: 2.5}); poly.bringToFront(); } } function render(){ var l = visible(); sideList(); var n = state.all.length; $('sm-count').innerHTML = ''; $('sm-count').appendChild(document.createTextNode(n === 0 ? 'No units listed yet' : l.length + (l.length === 1 ? ' unit available' : ' units available'))); $('sm-count').appendChild(h('span', null, ' \u00b7 1,242 shop and small-bay buildings tracked on the Kansas side')); if (!map) return; pinLayer.clearLayers(); markers = {}; var pts = []; l.forEach(function(u){ var ll = spot(u); if (!ll) return; var la = ll[0], lo = ll[1]; var label = money(u['All-in $/mo']) || sf(u['Size (sf)']) || 'View'; var ic = L.divIcon({className: '', html: '\x3cspan class="pricepin">' + label.replace(/[^0-9$,a-zA-Z +]/g, '') + '\x3c/span>', iconSize: [0, 0]}); var m = L.marker([la, lo], {icon: ic, riseOnHover: true}).addTo(pinLayer); m.bindTooltip(tipCard(u), {direction: 'top', offset: [0, -10], className: 'sm-tip', opacity: 1}); m.on('click', function(){ preview(slugOf(u)); }); m.on('mouseover', function(){ highlight(slugOf(u)); }); markers[slugOf(u)] = m; pts.push([la, lo]); }); } function initMap(){ map = L.map('sm-map', {scrollWheelZoom: false, zoomControl: true, zoomSnap: 0.25}).setView([38.93, -94.76], 10); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', {maxZoom: 16, attribution: 'Tiles \u00a9 Esri'}).addTo(map); /* Fog of war: unmapped areas locked (added 10/22) */ (function(map,PID){ var CLEAR=[[38.7386,-95.0564],[38.9821,-95.0563],[38.9744,-95.0411],[38.9756,-95.0334],[38.9829,-95.0254],[38.9931,-95.0261],[38.9996,-95.0218],[39.0009,-95.0141],[38.9924,-94.9804],[38.9823,-94.9646],[38.9865,-94.9445],[39.002,-94.9299],[39.0023,-94.9218],[38.9989,-94.917],[38.9952,-94.9163],[38.9901,-94.9189],[38.9875,-94.9173],[38.9874,-94.9147],[38.9913,-94.9093],[39.1043,-94.9086],[39.106,-94.9104],[39.1066,-94.9154],[39.1088,-94.921],[39.1123,-94.925],[39.1172,-94.9275],[39.1182,-94.9296],[39.1172,-94.932],[39.111,-94.9356],[39.1079,-94.9402],[39.1063,-94.9461],[39.1066,-94.9526],[39.1087,-94.958],[39.1111,-94.9611],[39.1154,-94.9638],[39.1187,-94.9644],[39.125,-94.9622],[39.1303,-94.9556],[39.1375,-94.9529],[39.141,-94.9489],[39.1427,-94.9451],[39.1436,-94.937],[39.1417,-94.9296],[39.1432,-94.9245],[39.1435,-94.9183],[39.1411,-94.9107],[39.1365,-94.9052],[39.1365,-94.9032],[39.1376,-94.9018],[39.2029,-94.9002],[39.201,-94.7772],[39.1801,-94.7628],[39.1701,-94.7408],[39.1704,-94.7143],[39.1832,-94.6888],[39.1842,-94.6782],[39.1774,-94.6616],[39.1741,-94.6592],[39.1626,-94.6611],[39.1557,-94.6551],[39.1549,-94.6408],[39.1562,-94.6394],[39.161,-94.6379],[39.1651,-94.6344],[39.1678,-94.6291],[39.1687,-94.623],[39.1671,-94.6151],[39.165,-94.6116],[39.1605,-94.6073],[39.1548,-94.5907],[39.1489,-94.5884],[39.1381,-94.5903],[39.1234,-94.6036],[39.1213,-94.6044],[39.1188,-94.603],[39.117,-94.5965],[39.115,-94.5932],[39.1094,-94.5889],[39.1061,-94.5884],[39.1014,-94.5896],[39.0956,-94.5954],[39.0935,-94.5962],[39.0916,-94.5954],[39.0859,-94.5896],[39.0795,-94.5885],[39.0749,-94.5905],[39.0722,-94.5932],[39.0695,-94.5984],[39.0683,-94.6059],[39.0658,-94.6076],[39.056,-94.6073],[39.0499,-94.5999],[39.0435,-94.5977],[39.0374,-94.5998],[39.0321,-94.6066],[39.03,-94.6075],[38.7381,-94.6091],[38.7379,-94.6432],[38.7357,-94.645],[38.7306,-94.6442],[38.7274,-94.6447],[38.7231,-94.6474],[38.7197,-94.6523],[38.7181,-94.6603],[38.7197,-94.6682],[38.7231,-94.6731],[38.729,-94.6762],[38.736,-94.6756],[38.7382,-94.6782],[38.7383,-94.8096],[38.7362,-94.8122],[38.729,-94.8116],[38.7231,-94.8147],[38.7197,-94.8195],[38.7181,-94.8276],[38.7197,-94.8355],[38.7231,-94.8403],[38.729,-94.8435],[38.7362,-94.8428],[38.7383,-94.8453],[38.7386,-95.0564]]; var LOCKS=[["Lawrence",38.9717,-95.2353],["Leavenworth",39.3111,-94.9225],["Independence",39.0911,-94.4155],["Lee\u2019s Summit",38.9108,-94.3822],["Liberty",39.2461,-94.4191],["Blue Springs",39.0169,-94.2816],["Gladstone",39.2039,-94.5547],["North Kansas City",39.13,-94.5622],["Ottawa",38.6156,-95.2678],["Paola",38.5722,-94.8791],["Belton",38.8119,-94.5319],["Raytown",39.0086,-94.4636],["Grandview",38.8858,-94.533],["Raymore",38.8017,-94.4527],["Lansing",39.2486,-94.9],["Platte City",39.37,-94.7825],["Parkville",39.1911,-94.6819],["Riverside",39.1775,-94.613],["Harrisonville",38.6533,-94.3488],["Eudora",38.9433,-95.0986],["Tonganoxie",39.1089,-95.0878],["Baldwin City",38.775,-95.1864],["Louisburg",38.6195,-94.6808],["Smithville",39.3869,-94.5811],["Kearney",39.3678,-94.3622],["Sugar Creek",39.1097,-94.4447],["Peculiar",38.7192,-94.4586],["Pleasant Hill",38.7875,-94.2694],["Greenwood",38.8517,-94.3436],["Weston",39.4111,-94.9011],["Wellsville",38.7183,-95.0811],["Osawatomie",38.4972,-94.9505],["Lake Lotawana",38.9228,-94.2447],["Linwood",38.9989,-95.0333]]; if(!document.getElementById('sasfog-css')){var st=document.createElement('style');st.id='sasfog-css';st.textContent='.sasfog-lock{display:inline-flex;width:max-content;align-items:center;gap:5px;background:rgba(24,32,36,.88);color:#fff;border:1px solid rgba(255,255,255,.35);border-radius:999px;padding:3px 9px 3px 6px;font:600 11px Barlow,Arial,sans-serif;white-space:nowrap;visibility:hidden;pointer-events:none}.sasfog-lock i,.sasfog-tag i{display:inline-block;position:relative;width:9px;height:7px;background:#fff;border-radius:1.5px;margin:5px 1px 0 2px}.sasfog-lock i:before,.sasfog-tag i:before{content:"";position:absolute;left:1.5px;top:-5px;width:6px;height:6px;border:1.6px solid #fff;border-bottom:0;border-radius:4px 4px 0 0;box-sizing:border-box}.sasfog-tag{position:absolute;top:12px;right:12px;z-index:800;background:rgba(24,32,36,.92);color:#fff;border-radius:8px;padding:9px 12px;max-width:260px;font:500 12px/1.35 Barlow,Arial,sans-serif;box-shadow:0 4px 14px rgba(0,0,0,.25);text-align:left;pointer-events:none}.sasfog-tag b{display:flex;align-items:center;gap:6px;font:700 14px Oswald,Arial,sans-serif;text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px;color:#fff}.sasfog-tag span{color:#C9CFD3;display:block}.sasfog-below{position:static;max-width:none;margin:8px 0 0;box-shadow:none}';document.head.appendChild(st);} var outer=[[37.5,-96.8],[37.5,-92.6],[40.4,-92.6],[40.4,-96.8]]; L.polygon([outer,CLEAR],{stroke:false,fillColor:'#182024',fillOpacity:0.6,interactive:false}).addTo(map); var hatch=L.polygon([outer,CLEAR],{stroke:false,fillOpacity:1,interactive:false}).addTo(map); try{var svg=map.getPanes().overlayPane.querySelector('svg');var NS='http://www.w3.org/2000/svg';var defs=document.createElementNS(NS,'defs');var pat=document.createElementNS(NS,'pattern');pat.setAttribute('id',PID);pat.setAttribute('width','9');pat.setAttribute('height','9');pat.setAttribute('patternUnits','userSpaceOnUse');pat.setAttribute('patternTransform','rotate(45)');var ln=document.createElementNS(NS,'line');ln.setAttribute('x1','0');ln.setAttribute('y1','0');ln.setAttribute('x2','0');ln.setAttribute('y2','9');ln.setAttribute('stroke','rgba(255,255,255,0.13)');ln.setAttribute('stroke-width','2');pat.appendChild(ln);defs.appendChild(pat);svg.insertBefore(defs,svg.firstChild);hatch.getElement().setAttribute('fill','url(#'+PID+')');}catch(e){hatch.setStyle({fillOpacity:0});} L.polyline(CLEAR.concat([CLEAR[0]]),{color:'#D86828',weight:2.5,opacity:0.95,interactive:false}).addTo(map); var tag=document.createElement('div');tag.className='sasfog-tag';var tb=document.createElement('b');tb.appendChild(document.createElement('i'));tb.appendChild(document.createTextNode('Locked = not mapped yet'));var ts=document.createElement('span');ts.textContent='Kansas City, Missouri is next. Get matched and we\u2019ll tell you when it opens.';tag.appendChild(tb);tag.appendChild(ts);if(600>=window.innerWidth){tag.className='sasfog-tag sasfog-below';var mc=map.getContainer();mc.parentNode.insertBefore(tag,mc.nextSibling);}else map.getContainer().appendChild(tag); var mk=[];LOCKS.forEach(function(p){var el=document.createElement('div');el.className='sasfog-lock';el.appendChild(document.createElement('i'));el.appendChild(document.createTextNode(p[0]));var m=L.marker([p[1],p[2]],{interactive:false,keyboard:false,icon:L.divIcon({className:'',html:el,iconSize:[0,0]})}).addTo(map);mk.push(m);}); function pip(x,y,P){var c=false;for(var a=0,b=P.length-1;P.length>a;b=a++){var xi=P[a].x,yi=P[a].y,xj=P[b].x,yj=P[b].y;if(((yi>y)!==(yj>y))&&(((xj-xi)*(y-yi)/(yj-yi)+xi)>x))c=!c;}return c;} function hits(r,P){for(var x=r.l;r.r>=x;x+=5){for(var y=r.t;r.b>=y;y+=5){if(pip(x,y,P))return true;}}for(var k=0;P.length>k;k++){var q=P[k];if(q.x>=r.l&&r.r>=q.x&&q.y>=r.t&&r.b>=q.y)return true;}return false;} function ovl(a,b){return !(a.l>b.r||b.l>a.r||a.t>b.b||b.t>a.b);} var cand=[[0,0]];for(var dd=8;130>=dd;dd+=8){cand.push([0,-dd],[0,dd],[dd,0],[-dd,0],[dd,-dd],[-dd,-dd],[dd,dd],[-dd,dd]);} function place(){var sz=map.getSize();if(!sz.x)return;var P=CLEAR.map(function(ll){return map.latLngToContainerPoint(ll);});var done=[];var cr=map.getContainer().getBoundingClientRect();[].forEach.call(map.getContainer().querySelectorAll('.leaflet-control,.sasfog-tag'),function(o){var tr=o.getBoundingClientRect();if(tr.width)done.push({l:tr.left-cr.left-4,r:tr.right-cr.left+4,t:tr.top-cr.top-4,b:tr.bottom-cr.top+4});});mk.forEach(function(m){var e=m.getElement();if(!e)return;var el=e.firstChild;el.style.visibility='hidden';el.style.transform='translate(-50%,-50%)';var w=el.offsetWidth,hh=el.offsetHeight;if(!w)return;var p=map.latLngToContainerPoint(m.getLatLng());for(var c=0;cand.length>c;c++){var cx=p.x+cand[c][0],cy=p.y+cand[c][1];var r={l:cx-w/2-3,r:cx+w/2+3,t:cy-hh/2-3,b:cy+hh/2+3};if(4>r.l||r.r>sz.x-4||4>r.t||r.b>sz.y-4)continue;if(hits(r,P))continue;if(done.some(function(o){return ovl(o,r);}))continue;done.push(r);el.style.transform='translate(-50%,-50%) translate('+cand[c][0]+'px,'+cand[c][1]+'px)';el.style.visibility='visible';break;}});} var LIM=L.latLngBounds([38.44,-95.34],[39.46,-94.17]); function limits(){var sz=map.getSize();if(!sz.x)return;map.setMinZoom(0);var z=Math.floor(map.getBoundsZoom(LIM,false)*4)/4;map.setMinZoom(z);map.setMaxBounds(LIM);map.options.maxBoundsViscosity=1.0;} map.setMaxZoom(15);limits(); map.on('moveend',place);map.on('resize',function(){limits();place();}); setTimeout(function(){limits();place();},300);setTimeout(place,1500); })(map,'sasfoghatchlist'); var hex = L.layerGroup().addTo(map); CELLS.forEach(function(c){ var n = c[2]; var pg = L.polygon(hexPts(c[0], c[1]), {stroke: true, color: '#FFFFFF', weight: 1, fillColor: cellColor(n), fillOpacity: .55}).addTo(hex); pg.on('click', function(){ hexOn(pg); areaPanel(c); }); hexes.push(pg); }); pinLayer = L.layerGroup().addTo(map); CELLS.forEach(function(c){ bb0.push([c[0], c[1]]); }); if (bb0.length) map.fitBounds(bb0, {padding: [10, 10]}); map.on('focus', function(){ map.scrollWheelZoom.enable(); }); } function row(t, k, v){ if (!v) return; var tr = h('tr'); tr.appendChild(h('td', null, k)); tr.appendChild(h('td', null, v)); t.appendChild(tr); } function openUnit(slug, push){ var u = null; state.all.forEach(function(x){ if (slugOf(x) === slug) u = x; }); if (!u){ closeUnit(false); return; } if (push){ try { history.pushState({unit: slug}, '', '?unit=' + encodeURIComponent(slug) + (PREVIEW ? '&preview=1' : '') + '#listings'); } catch(e) {} } track('listing_view', {listing: slug}); var d = $('sm-detail'); d.innerHTML = ''; d.hidden = false; $('sm-browse').hidden = true; var box = h('div', 'sm-detail'); var back = h('button', 'back', '\u2190 All space'); back.type = 'button'; back.onclick = function(){ closeUnit(true); }; box.appendChild(back); var ps = photos(u); if (ps.length){ var g = h('div', 'gal'); ps.slice(0, 3).forEach(function(p, i){ var c = h('div', i === 0 ? 'big' : ''); c.style.backgroundImage = 'url("' + p + '")'; c.onclick = function(){ window.open(p, '_blank'); }; g.appendChild(c); }); box.appendChild(g); } var grid = h('div', 'd-grid'), left = h('div'), right = h('div'); left.appendChild(h('h2', 'd-title', title(u))); left.appendChild(h('div', 'd-loc', place(u))); if (money(u['All-in $/mo'])){ var pr = h('div', 'd-price', money(u['All-in $/mo'])); pr.appendChild(h('span', null, ' per month, all-in')); left.appendChild(pr); } if (u['Description']) left.appendChild(h('p', null, u['Description'])); var t = h('table'); row(t, 'Size', sf(u['Size (sf)'])); row(t, 'Available', u['Available']); row(t, 'Drive-in doors', u['Drive-in doors']); row(t, 'Clear height', u['Clear height']); row(t, 'Power', u['Power']); row(t, 'Yard / outdoor', u['Yard / outdoor']); row(t, 'Bathroom', u['Bathroom']); row(t, 'Office', u['Office']); row(t, 'Lease term', u['Lease term']); row(t, 'Zoning', u['Zoning']); left.appendChild(t); var c = h('div', 'contact'); c.appendChild(h('h4', null, 'Contact')); var who = [u['Contact name'], u['Contact role'], u['Company']].filter(Boolean).join(' \u00b7 '); if (who) c.appendChild(h('div', 'who', who)); if (u['Phone']){ var a = h('a', null, u['Phone']); a.href = 'tel:' + u['Phone'].replace(/[^0-9+]/g, ''); a.onclick = function(){ track('listing_call_click', {listing: slug}); }; c.appendChild(a); } if (u['Email']){ var e = h('a', null, u['Email']); e.href = 'mailto:' + u['Email'] + '?subject=' + encodeURIComponent('Shop A Space: ' + title(u)); e.onclick = function(){ track('listing_email_click', {listing: slug}); }; c.appendChild(e); } c.appendChild(h('div', 'note', 'You contact the owner or broker directly. Shop A Space charges tenants nothing.')); var share = h('button', 'btn ghost', 'Copy link to this unit'); share.type = 'button'; var ok = h('span', 'copied', ''); share.onclick = function(){ var url = location.origin + '/?unit=' + encodeURIComponent(slug) + '#listings'; try { navigator.clipboard.writeText(url).then(function(){ ok.textContent = 'Copied'; }); } catch(x) { ok.textContent = url; } track('listing_share', {listing: slug}); }; var sh = h('div'); sh.appendChild(share); sh.appendChild(ok); c.appendChild(sh); right.appendChild(c); var mm = h('div', 'minimap'); right.appendChild(mm); right.appendChild(h('div', 'note', yes(u['Show address (Y/N)']) ? 'Exact location.' : 'Approximate area. The owner shares the exact address when you reach out.')); grid.appendChild(left); grid.appendChild(right); box.appendChild(grid); d.appendChild(box); var ll = spot(u), la = ll ? ll[0] : null, lo = ll ? ll[1] : NaN; if (la && !isNaN(lo) && window.L){ var m2 = L.map(mm, {scrollWheelZoom: false, attributionControl: true}).setView([la, lo], yes(u['Show address (Y/N)']) ? 14 : 13); L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', {maxZoom: 16, attribution: 'Tiles \u00a9 Esri'}).addTo(m2); if (yes(u['Show address (Y/N)'])) L.circleMarker([la, lo], {radius: 9, color: '#fff', weight: 2, fillColor: '#D86828', fillOpacity: 1}).addTo(m2); else L.circle([la, lo], {radius: 800, color: '#D86828', weight: 2, fillColor: '#D86828', fillOpacity: .15}).addTo(m2); } else mm.hidden = true; $('sasm').scrollIntoView({block: 'start', behavior: 'smooth'}); } function closeUnit(push){ $('sm-detail').hidden = true; $('sm-detail').innerHTML = ''; $('sm-browse').hidden = false; if (push){ try { history.pushState({}, '', location.pathname + (PREVIEW ? '?preview=1' : '') + '#listings'); } catch(e) {} } if (map) setTimeout(function(){ map.invalidateSize(); }, 50); } window.addEventListener('popstate', function(){ var s = new URLSearchParams(location.search).get('unit'); if (s) openUnit(s, false); else closeUnit(false); }); if (PREVIEW) $('sm-pv').hidden = false; $('sm-home').onclick = function(){ location.href = location.origin + '/'; }; [].forEach.call(document.querySelectorAll('#sasm [data-match]'), function(b){ b.onclick = function(){ track('map_get_matched', {}); location.href = location.origin + '/#get-matched'; }; }); [].forEach.call(document.querySelectorAll('#sasm [data-list]'), function(b){ b.onclick = function(){ track('map_list_space', {}); location.href = location.origin + '/#sample-listing'; }; }); function load(){ initMap(); buildFilters(); buildLegend(); sideList(); fetch(CSV + '&t=' + Date.now()).then(function(r){ return r.text(); }).then(function(t){ state.loaded = true; state.all = parseCSV(t).filter(function(u){ var st = String(u['Status']).trim().toLowerCase(); return st === 'live' || (PREVIEW && st === 'test'); }); render(); var s = new URLSearchParams(location.search).get('unit'); if (s) openUnit(s, false); }).catch(function(){ state.loaded = true; state.all = []; render(); }); setTimeout(function(){ map.invalidateSize(); if (bb0.length) map.fitBounds(bb0, {padding: [10, 10]}); }, 300); } function boot(){ if (window.L) return load(); var s = document.createElement('script'); s.src = 'https://unpkg.com/[email protected]/dist/leaflet.js'; s.onload = load; document.head.appendChild(s); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot(); window.addEventListener('hashchange', function(){ if (location.hash === '#listings' && map) setTimeout(function(){ map.invalidateSize(); }, 100); }); })();
← Back to Shop A Space
Step 2 of 2

Add your unit details

One form per available unit, about 3 minutes. Photos, specs and price are what contractors filter on.

Unit added

Do you have another unit at this property? We'll keep the address and contact so you only fill in the unit.

Thanks, you're all set

We'll review your units and confirm with you, usually within one business day, before we send them to matching contractors.

(function(){ var FORM='Ek4Mp2';var n=0; var qs=new URLSearchParams(location.search); var P={};['email','name','role','address','cname','cemail','cphone'].forEach(function(k){var v=qs.get(k);if(v)P[k]=v;}); if(P.email&&!P.cemail)P.cemail=P.email; function src(){var u='https://tally.so/embed/'+FORM+'?alignLeft=1&hideTitle=1&transparentBackground=1&dynamicHeight=1';Object.keys(P).forEach(function(k){u+='&'+k+'='+encodeURIComponent(P[k]);});return u;} function el(id){return document.getElementById(id);} function ga(ev,p){try{if(window.gtag)window.gtag('event',ev,p||{});}catch(e){}} function show(which){el('ud-form').style.display=which==='form'?'block':'none';el('ud-ask').style.display=which==='ask'?'block':'none';el('ud-end').style.display=which==='end'?'block':'none';} function cnt(){el('ud-cnt').textContent=n?('Units added so far: '+n):'';} function load(){var f=el('ud-frame');if(!f)return;f.removeAttribute('src');f.setAttribute('data-tally-src',src());if(window.Tally&&window.Tally.loadEmbeds){window.Tally.loadEmbeds();}setTimeout(function(){if(!f.getAttribute('src'))f.src=f.getAttribute('data-tally-src');},1500);} function fieldVal(fs,re){for(var i=0;fs.length>i;i++){var f=fs[i]||{};var t=f.title||f.label||f.key||'';if(re.test(t)){var a=f.answer!==undefined?f.answer:f.value;if(a&&typeof a==='object'&&!Array.isArray(a))a=a.value!==undefined?a.value:a.raw;if(Array.isArray(a))a=a.join(', ');return a==null?'':String(a);}}return '';} window.addEventListener('message',function(e){if(!/tally\.so$/.test((e.origin||'').replace(/^https?:\/\//,'')))return;var d=e.data;if(typeof d==='string'){try{d=JSON.parse(d);}catch(x){return;}}if(!d||d.event!=='Tally.FormSubmitted')return;var p=d.payload||{};if(p.formId&&p.formId!==FORM)return;var fs=p.fields||[]; var a=fieldVal(fs,/property address/i);if(a)P.address=a;var cn=fieldVal(fs,/contact name/i);if(cn)P.cname=cn;var ce=fieldVal(fs,/contact email/i);if(ce)P.cemail=ce;var cp=fieldVal(fs,/contact phone/i);if(cp)P.cphone=cp; n++;cnt();ga('unit_details_submitted',{units:n});show('ask');var b=el('sas-ud');window.scrollTo({top:Math.max(0,b.getBoundingClientRect().top+window.pageYOffset-10)});}); function bind(){var m=el('ud-more');if(!m)return false;m.onclick=function(){ga('unit_add_another',{units:n});show('form');load();};el('ud-fin').onclick=function(){ga('unit_details_done',{units:n});show('end');};document.querySelectorAll('#sas-ud [data-home]').forEach(function(h){h.onclick=function(){location.href=location.pathname;};});return true;} var started=false;function start(){if(started)return;var r=el('sas-ud');if(!r||!r.offsetParent)return;started=true;bind();show('form');cnt(); if(!window.Tally){var s=document.createElement('script');s.src='https://tally.so/widgets/embed.js';s.onload=load;s.onerror=load;document.body.appendChild(s);}else load();} start();window.addEventListener('hashchange',function(){setTimeout(start,150);});setTimeout(start,800);setTimeout(start,2500); })();