{"id":5043,"date":"2025-10-14T14:20:16","date_gmt":"2025-10-14T14:20:16","guid":{"rendered":"https:\/\/www.windownation.com\/locations\/missouri\/"},"modified":"2026-09-17T21:50:14","modified_gmt":"2026-09-17T21:50:14","slug":"missouri","status":"publish","type":"nbly_state","link":"https:\/\/www.windownation.com\/locations\/missouri\/","title":{"rendered":"Missouri"},"content":{"rendered":"    <section class=\"wp-block-wn-state-intro\">\n        <div class=\"wn-state-intro-copy\">\n            <h1>Window Replacement Experts in Missouri<\/h1>\n            <div class=\"wn-state-intro-text\"><p>Drafts in winter and overheated rooms in summer can be signs that your Missouri home\u2019s windows are ready for an upgrade. Explore window replacement in Missouri with Window Nation to find options that support energy efficiency and complement your home\u2019s style. From traditional brick houses to suburban ranches, replacement windows can refresh curb appeal while helping keep indoor temperatures more comfortable. Bring your next home improvement project into focus with window styles that welcome natural light and suit your everyday needs.<\/p>\n<\/div>\n        <\/div>\n        <div class=\"wn-state-search\">\n            <form class=\"wn-state-search-form\" action=\"https:\/\/www.windownation.com\/locations\/\" method=\"get\">\n                <label for=\"wn-state-zip-1\">Find Your Local Window Nation:<\/label>\n                <input id=\"wn-state-zip-1\" name=\"zip\" type=\"text\" inputmode=\"numeric\" autocomplete=\"postal-code\" pattern=\"[0-9]{5}\" maxlength=\"5\" placeholder=\"Enter your zip code\" title=\"Please enter a 5-digit ZIP code.\" required>\n                <button class=\"primary-btn\" type=\"submit\">Search<\/button>\n                <p class=\"wn-state-search-status\" role=\"status\" aria-live=\"polite\"><\/p>\n            <\/form>\n        <\/div>\n    <\/section>\n    \n\n<section class=\"wp-block-wn-state-cities\"><h2>Cities Served in Missouri<\/h2><div class=\"wn-state-cities-layout\"><div class=\"wn-state-cities-list\"><ul><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/affton\/\">Affton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/ballwin\/\">Ballwin<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/belton\/\">Belton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/blue-springs\/\">Blue Springs<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/bridgeton\/\">Bridgeton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/chesterfield\/\">Chesterfield<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/clayton\/\">Clayton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/ferguson\/\">Ferguson<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/florissant\/\">Florissant<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/gladstone\/\">Gladstone<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/grain-valley\/\">Grain Valley<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/grandview\/\">Grandview<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/hazelwood\/\">Hazelwood<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/independence\/\">Independence<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/kansas-city\/\">Kansas City<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/kirkwood\/\">Kirkwood<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/lee-s-summit\/\">Lee&#039;s Summit<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/liberty\/\">Liberty<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/maryland-heights\/\">Maryland Heights<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/mehlville\/\">Mehlville<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/o-fallon\/\">O&#039;Fallon<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/oakville\/\">Oakville<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/raymore\/\">Raymore<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/raytown\/\">Raytown<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/st-charles\/\">St. Charles<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/st-louis\/\">St. Louis<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/st-peters\/\">St. Peters<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/university-city\/\">University City<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/webster-groves\/\">Webster Groves<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/wentzville\/\">Wentzville<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/missouri\/wildwood\/\">Wildwood<\/a><\/li><\/ul><\/div><img class=\"wn-state-cities-image\" src=\"https:\/\/www.windownation.com\/locations\/wp-content\/plugins\/window-nation-blocks\/build\/state-cities\/assets\/cities-served-home.webp\" alt=\"Blue house with large illuminated windows at dusk\" width=\"640\" height=\"640\" loading=\"lazy\" decoding=\"async\"><\/div><\/section>\n\n\n<section class=\"wp-block-wn-mini-cta\"><div class=\"wn-block-container\"><div class=\"wn-mini-cta-content\"><h2>Save 50% on all windows<\/h2><p>And save even more with 0% interest for 60 months!<\/p><\/div><div class=\"wn-cta-buttons\">\n<div class=\"wp-block-wn-cta-button\"><a class=\"secondary-btn\" href=\"#request-quote\" data-quote-link=\"true\"><span>Get a Quote<\/span><\/a><\/div>\n<\/div><\/div><\/section>\n\n\n<section class=\"wp-block-nbly-locations-original wn-state-showrooms\"><h2>Window Nation Showrooms in Missouri<\/h2><div class=\"wn-block-container\"><div class=\"wp-block-nbly-locations-original-list\"><ul class=\"location-list\"><li class=\"location-item\">\n                <h4 class=\"location-title\">Window Nation St. Louis<\/h4>\n                <div class=\"wn-review-stars\">\n                <div class=\"wn-review-stars-container stars-full\" style=\"width:95px\">\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                <\/div>\n                <div class=\"wn-review-stars-container stars-empty\">\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                <\/div>\n            <\/div>\n                <p>\n                    3655 Pennridge Dr<br \/>\n                    Bridgeton, MO 63044<br \/>\n                    (314) 279-8249\n                <\/p>\n                <a class=\"primary-btn\" href=\"https:\/\/www.windownation.com\/locations\/missouri\/st-louis\/\">Learn More<\/a>\n                <a class=\"primary-btn call-us\" href=\"tel:3142798249\">Call Us&nbsp;<\/a>\n            <\/li><\/ul><\/div><div class=\"wp-block-nbly-locations-original-map\"><div id=\"map\" role=\"presentation\"><\/div>\n                    <script>\n                        (g=>{var h,a,k,p=\"The Google Maps JavaScript API\",c=\"google\",l=\"importLibrary\",q=\"__ib__\",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement(\"script\"));e.set(\"libraries\",[...r]+\"\");for(k in g)e.set(k.replace(\/[A-Z]\/g,t=>\"_\"+t[0].toLowerCase()),g[k]);e.set(\"callback\",c+\".maps.\"+q);a.src=`https:\/\/maps.${c}apis.com\/maps\/api\/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+\" could not load.\"));a.nonce=m.querySelector(\"script[nonce]\")?.nonce||\"\";m.head.append(a)}));d[l]?console.warn(p+\" only loads once. Ignoring:\",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({\n                            key: \"AIzaSyAgutGJdUeN8A3K5pre71IrumEAXexIeKI\",\n                            v: \"weekly\",\n                        });\n                    <\/script>\n                    <script src=\"https:\/\/unpkg.com\/@googlemaps\/markerclusterer\/dist\/index.min.js\"><\/script>\n                    <script>\n                        var map;\n                        async function initMap() {\n                            const { Map, InfoWindow } = await google.maps.importLibrary(\"maps\");\n                            const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary(\"marker\",);\n                            map = new google.maps.Map(document.getElementById(\"map\"), {\n                                zoom: 3,\n                                center: { lat: -28.024, lng: 140.887 },\n                                streetViewControl: false,\n                                fullscreenControl: false,\n                                mapTypeControl: false,\n                                mapId: \"fe7cac85af94d16c\",\n                            });\n                            \n                            const stateName = \"Missouri\";\n                            if (!stateName) map.addListener(\"idle\", () => {\n                                var bounds = map.getBounds();\n                                let markerList = [];\n                                for (var i = 0; i < markers.length; i++) {\n                                    if (bounds.contains(markers[i].position) === true) {\n                                        locations.map((location, j) => {\n                                            if (markers[i].zIndex == location.id) {\n                                                console.log(location.title + \" \" + location.phone);\n                                                markerList.push({title:markers[i].title, url:location.url, address:location.address, phone:location.phone, phone_formatted:location.phone_formatted, reviews:location.reviews});\n                                            }\n                                        });\n                                    }\n                                }\n                                nblyBuildList(markerList);\n                            });\n\n                            const infoWindow = new google.maps.InfoWindow({\n                                content: \"\",\n                                disableAutoPan: true,\n                            });\n                            \n                            const locations = [{\"id\":8,\"title\":\"Window Nation St. Louis\",\"address\":\"3655 Pennridge Dr\\u003Cbr \\\/\\u003EBridgeton, MO 63044\",\"phone\":\"3142798249\",\"phone_formatted\":\"(314) 279-8249\",\"url\":\"https:\\\/\\\/www.windownation.com\\\/locations\\\/missouri\\\/st-louis\\\/\",\"lat\":38.627,\"lng\":-90.198,\"reviews\":\"\\u003Cdiv class=\\u0022wn-review-stars\\u0022\\u003E\\n                \\u003Cdiv class=\\u0022wn-review-stars-container stars-full\\u0022 style=\\u0022width:95px\\u0022\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                \\u003C\\\/div\\u003E\\n                \\u003Cdiv class=\\u0022wn-review-stars-container stars-empty\\u0022\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                \\u003C\\\/div\\u003E\\n            \\u003C\\\/div\\u003E\"}]\n                            const markers = locations.map((position, i) => {\n                                const markerImg = document.createElement(\"img\");\n                                markerImg.src = \"https:\/\/www.windownation.com\/locations\/wp-content\/themes\/window-nation\/brands\/wn\/images\/map-view.svg\";\n                                markerImg.setAttribute(\"height\", \"30px\");\n                                markerImg.setAttribute(\"width\", \"30px\");\n                                const _marker = new google.maps.LatLng(position.lat, position.lng); \n                                const marker = new google.maps.marker.AdvancedMarkerElement({\n                                    position: _marker,\n                                    content: markerImg,\n                                    title: position.title,\n                                    zIndex: position.id\n                                });\n\n                                marker.addListener(\"gmp-click\", () => {\n                                    infoWindow.setContent(\"<div class='modal-body'><div class='modal-heading'>\" + position.title + \"<\/div><div class='modal-text'>\" + position.address + \"<\/div><div class='modal-cta'><a href='tel:\" + position.phone + \"'>\" + position.phone_formatted + \"<\/a><a href='\" + position.url + \"'>Learn More<\/a><\/div><\/div>\");\n                                    infoWindow.open(map, marker);\n                                    map.setCenter(marker.position);\n                                });\n                            \n                                return marker;\n                            });\n\n                            const svg = window.btoa(`<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"32\" width=\"32\"><circle class=\"c\" cx=\"16\" cy=\"16\" r=\"14\" fill=\"none\" stroke=\"#005BA7\" stroke-width=\"3\"\/><circle class=\"d\" cx=\"16\" cy=\"16\" r=\"5\" fill=\"#005BA7\" stroke=\"#005BA7\" stroke-width=\"10\"\/><\/svg>`);\n                            const renderer = {\n                                render: ({ count, position }) =>\n                                    new google.maps.Marker({\n                                        label: { text: String(count), color: \"#ffffff\", fontSize: \"13px\", fontWeight: \"600\" },\n                                        icon: {\n                                            url: `data:image\/svg+xml;base64,${svg}`,\n                                            scaledSize: new google.maps.Size(32, 32),\n                                        },\n                                        position,\n                                        zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n                                    })\n                            };\n\n                        const markerCluster = new markerClusterer.MarkerClusterer({ markers, map, renderer });\n\n                        let bounds = new google.maps.LatLngBounds();\n                        locations.forEach(function(LatLng) {\n                            bounds.extend(LatLng);\n                        });\n                        \n                        if (locations.length) map.fitBounds(bounds);\n                        if (markers.length == 1 && !stateName)\n                            map.setOptions({maxZoom: 9});\n                        if (stateName) {\n                            const stateBounds = {\"east\":-89.1338,\"north\":40.615,\"south\":35.998,\"west\":-95.7664};\n                            if (stateBounds) {\n                                map.fitBounds(stateBounds, 24);\n                            } else if (locations.length === 1) {\n                                map.setZoom(8);\n                            }\n                        }\n                        }\n\n                        initMap().then(() => {\n                            const zip = new URLSearchParams(window.location.search).get(\"zip\") || \"\";\n                            if (!\"Missouri\" && \/^[0-9]{5}$\/.test(zip)) {\n                                jQuery(() => {\n                                    jQuery(\"#location-search\").val(zip);\n                                    jQuery(\".nbly-do-find-location\").trigger(\"click\");\n                                });\n                            }\n                        });\n\n                        function nblyBuildList(markerList) {\n                            let list_contents = \"\";\n                            for (var i = 0; i < markerList.length; i++) {\n                                list_contents = list_contents + nblyBuildListItem(markerList[i]);\n                            }\n                            jQuery(\".location-list\").html(list_contents);\n                            if (markerList.length == 1) { \n                                jQuery(\".location-total-text span\").html(markerList.length + \" location found\");\n                            } else {\n                                jQuery(\".location-total-text span\").html(markerList.length + \" locations found\");\n                            }\n                        }\n\n                        function nblyBuildListItem(obj) {\n                            return \"<li class='location-item'><h4 class='location-title'>\" + obj.title + \"<\/h4> \" + obj.reviews + \"<p>\" + obj.address + \"<br \/>\" + obj.phone_formatted + \"<\/p><a class='primary-btn' a href='\" + obj.url + \"'>Learn More<\/a><\/li>\";\n                        }\n                    <\/script><\/div><\/div><\/section>\n\n    <section class=\"wp-block-wn-schedule-service wp-block-wn-schedule-service--landing\">\n        <div class=\"service-form-container\">\n            <div class=\"service-form\">\n                                    <h2>Get Your Free Estimate<\/h2>\n                                                <form class=\"wn-schedule-service-form\" name=\"homepageForm\" id=\"wn-schedule-service-2\" data-msevent=\"form_submitted\" data-mscategory=\"form_submitted\" data-msaction=\"form submission\" data-thank-you-url=\"\">\n                    <div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-first-name\">First Name*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-first-name\" data-wn=\"req-first-name\" placeholder=\"First Name*\" autocomplete=\"given-name\" maxlength=\"30\" pattern=\"[A-Za-z]+\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-last-name\">Last Name*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-last-name\" data-wn=\"req-last-name\" placeholder=\"Last Name*\" autocomplete=\"family-name\" maxlength=\"50\" pattern=\"[A-Za-z]+\" required>\n                        <\/div>\n                    <\/div>\n                    <div>\n                        <div class=\"form-wide\">\n                            <label for=\"wn-schedule-service-2-email\">Email*<\/label>\n                            <input type=\"email\" id=\"wn-schedule-service-2-email\" data-wn=\"req-email\" placeholder=\"Email*\" autocomplete=\"email\" inputmode=\"email\" required>\n                        <\/div>\n                    <\/div>\n                    <div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-phone\">Phone Number*<\/label>\n                            <input type=\"tel\" id=\"wn-schedule-service-2-phone\" data-wn=\"req-phone\" placeholder=\"Phone Number*\" autocomplete=\"tel\" inputmode=\"tel\" maxlength=\"14\" required pattern=\"\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}\" title=\"Please enter a 10-digit phone number.\">\n                        <\/div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-postal-code\">ZIP Code*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-postal-code\" data-wn=\"req-postal-code\" placeholder=\"ZIP Code*\" autocomplete=\"postal-code\" inputmode=\"numeric\" maxlength=\"5\" required pattern=\"[0-9]{5}\" title=\"Please enter a 5-digit ZIP code.\">\n                        <\/div>\n                    <\/div>\n                                            <label class=\"service-form-consent\">\n                            <input type=\"checkbox\" name=\"consent\" required>\n                            <span>By submitting this form, you are giving your express written consent without obligation for Window Nation to contact you regarding our services using e-mail, phone, or text, including automated technology for calls and\/or texts to the mobile number(s) provided. For more details, including how to opt out, read our <a href=\"https:\/\/www.windownation.com\/privacy-policy\" target=\"_blank\">privacy policy<\/a>.<\/span>\n                        <\/label>\n                                        <button type=\"submit\" class=\"primary-btn wn-schedule-service\" title=\"Submit\">Submit<\/button>\n                                    <\/form>\n            <\/div>\n            <div class=\"service-form-success\">\n                <h2>Thank you for contacting us!<\/h2>\n                <p><\/p>\n            <\/div>\n        <\/div>\n    <\/section>\n    ","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5043","nbly_state","type-nbly_state","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/5043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state"}],"about":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/types\/nbly_state"}],"author":[{"embeddable":true,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/comments?post=5043"}],"version-history":[{"count":2,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/5043\/revisions"}],"predecessor-version":[{"id":41155,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/5043\/revisions\/41155"}],"wp:attachment":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/media?parent=5043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}