{"id":3214,"date":"2025-10-08T14:04:35","date_gmt":"2025-10-08T14:04:35","guid":{"rendered":"https:\/\/www.windownation.com\/locations\/oregon\/"},"modified":"2026-09-17T21:59:49","modified_gmt":"2026-09-17T21:59:49","slug":"oregon","status":"publish","type":"nbly_state","link":"https:\/\/www.windownation.com\/locations\/oregon\/","title":{"rendered":"Oregon"},"content":{"rendered":"    <section class=\"wp-block-wn-state-intro\">\n        <div class=\"wn-state-intro-copy\">\n            <h1>Window Replacement Experts in Oregon<\/h1>\n            <div class=\"wn-state-intro-text\"><p>Oregon\u2019s rainy western winters and drier inland climate make choosing windows that suit your home an important part of any update. Explore window replacement in Oregon with Window Nation to find options that complement your style and support year-round comfort. Replacing aging or drafty windows can help improve energy efficiency while refreshing the look of your living spaces. From classic Craftsman homes to modern designs, discover replacement windows that welcome natural light and frame the views you love.<\/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 Oregon<\/h2><div class=\"wn-state-cities-layout\"><div class=\"wn-state-cities-list\"><ul><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/battle-ground\/\">Battle Ground<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/beaverton\/\">Beaverton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/canby\/\">Canby<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/colton\/\">Colton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/cornelius\/\">Cornelius<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/damascus\/\">Damascus<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/forest-grove\/\">Forest Grove<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/gladstone\/\">Gladstone<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/gresham\/\">Gresham<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/happy-valley\/\">Happy Valley<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/hillsboro\/\">Hillsboro<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/lake-oswego\/\">Lake Oswego<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/molalla\/\">Molalla<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/newberg\/\">Newberg<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/oregon-city\/\">Oregon City<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/portland\/\">Portland<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/salem\/\">Salem<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/sandy\/\">Sandy<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/sherwood\/\">Sherwood<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/silverton\/\">Silverton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/st-helens\/\">St. Helens<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/troutdale\/\">Troutdale<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/tualatin\/\">Tualatin<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/west-linn\/\">West Linn<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/oregon\/wilsonville\/\">Wilsonville<\/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 Oregon<\/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 Portland<\/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                    4225 NE 161st Ave<br \/>\n                    Portland, OR 97230<br \/>\n                    (503) 383-9986\n                <\/p>\n                <a class=\"primary-btn\" href=\"https:\/\/www.windownation.com\/locations\/oregon\/portland\/\">Learn More<\/a>\n                <a class=\"primary-btn call-us\" href=\"tel:5033839986\">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 = \"Oregon\";\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\":2,\"title\":\"Window Nation Portland\",\"address\":\"4225 NE 161st Ave\\u003Cbr \\\/\\u003EPortland, OR 97230\",\"phone\":\"5033839986\",\"phone_formatted\":\"(503) 383-9986\",\"url\":\"https:\\\/\\\/www.windownation.com\\\/locations\\\/oregon\\\/portland\\\/\",\"lat\":45.515,\"lng\":-122.678,\"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\":-116.4638,\"north\":46.2618,\"south\":41.9898,\"west\":-124.5532};\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 (!\"Oregon\" && \/^[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-3214","nbly_state","type-nbly_state","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/3214","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=3214"}],"version-history":[{"count":2,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/3214\/revisions"}],"predecessor-version":[{"id":41164,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/3214\/revisions\/41164"}],"wp:attachment":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/media?parent=3214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}