Your St. Louis Roofing Experts

The St. Louis Roofer All Your Neighbors Count On

Your home’s roof is a complex system, one that requires the attention of an experienced expert. For more than 30 years Bone Dry Roofing has been a leading St. Louis area roofer, offering top quality roofing, roof replacements, and roof repairs that local homeowners can count on for years to come. 

A Full Roofing System

Your home’s roof is a complex system, each aspect as important as the last. Your roof, your gutters and downspouts, and even your chimney and fireplace must work together cohesively to properly protect your home. At Bone Dry Roofing our experienced team understands the ins and outs of every aspect of your roofing system. When you choose Bone Dry Roofing as your St. Louis roofer, every aspect of your roofing system will be attended to by a deeply experienced roofing expert who has been trusted by local homeowners for more than 30 years. 

Owens Corning Platinum Preferred

At Bone Dry Roofing we have earned the distinction of being one of the few Owens Corning Platinum Preferred St. Louis roofing companies. Through our partnership with this industry leader we are able to offer an unmatched level of quality in both our materials and our installations. Our expert team has undergone countless hours of training at the hands of Owens Corning, which allows us to back every roofing project we perform with their warranties. When you turn to Bone Dry for roofing or roof repairs in St. Louis you’ll have peace of mind knowing that your investment is protected. 

What can we help you with today? Click on a link below to learn more about our complete range of roofing services. Then call 636-489-1830 or use our convenient online form to get a free quote from Bone Dry Roofing, one of the top roofing companies in St. Louis MO. 

Roof Replacement

Why risk damage to your home when Bone Dry Roofing can replace your old roof with a top-rated Owens Corning Roofing System?

Learn More

Roof Repairs

Do you have an annoying leak? Major storm damage? We can fix almost any roofing problem and help extend the life of your roof.

Learn More

Roof Maintenance

Protect your roofing investment with regularly scheduled maintenance that will keep your home and family safe from the elements.

Learn More

Gutters & Downspouts

No roof is complete without a carefully engineered and professionally-installed system for moving water away from your home. 

Learn More

For All Your St. Louis MO Roofing Needs

Bone Dry provides roof replacement, roof repair and other home services to the greater St. Louis area, including Wentzville, St. Charles, O’ Fallon, Howell, Cottleville and other communities. Give us a call at 636-489-1830 or request a free estimate online today!

Contact Us
(function(cookieName, domain){ var traffic_source_COOKIE_TOKEN_SEPARATOR = ">>"; //separating between concatenated lead source var traffic_source_date_SEPARATOR = "|>"; var NONE = "(website)"; domain = domain || window.location.hostname; function getCookie(cookieName){ var name = cookieName + "="; var cookieArray = document.cookie.split(';'); //break cookie into array for(var i = 0; i < cookieArray.length; i++){ var cookie = cookieArray[i].replace(/^\s+|\s+$/g, ''); //replace all space with '' = delete it if (cookie.indexOf(name)==0){ return cookie.substring(name.length,cookie.length); // } } return null; } function getURLParameter(param){ var pageURL =; //get the query string parameters without the "?" var URLVariables = pageURL.split('&'); //break the parameters and values attached together to an array for (var i = 0; i -1) { if(end === -1) { end = utmzCookie.length; } cookieCampaignName = "utmz:" + utmzCookie.substring((start + UTMSRC.length), end); //get the value of the UTMZ, without the parameter name } } if(cookieCampaignName != "" && isNotNullOrEmpty(urlParamSRC)){ //if there is a campaign name AND there is SRC value traffic_source = urlParamSRC + traffic_source_COOKIE_TOKEN_SEPARATOR + cookieCampaignName; //concateane the SRC with the existing campaign name // traffic_source = urlParamSRC + currTime() + traffic_source_COOKIE_TOKEN_SEPARATOR + cookieCampaignName; // Optional: add the session time } else if(cookieCampaignName != ""){ //if there is campaign name traffic_source = cookieCampaignName; //just use it for the new cookie } else if(urlParamSRC != null) { //if there is not campaign name but we have SRC traffic_source = decodeURI(urlParamSRC); // decode URI of the SRC parameter // traffic_source = decodeURI(urlParamSRC) + currTime(); // Optional: add the session time } else if(document.referrer != ""){ //if there is not campaign, and no src, check if there is a referrer, var referrerHostName = removeProtocol(document.referrer); var GOOGLE = /; var YAHOO = /; var BING = /; if(GOOGLE.test(referrerHostName)){ traffic_source = "Google Search"; //traffic_source = "Google Search" + currTime(); // + Optional: Add the current session time. Choose one of them. } else if(YAHOO.test(referrerHostName)){ traffic_source = "Yahoo Search"; //traffic_source = "Yahoo Search" + currTime(); } else if(BING.test(referrerHostName)){ traffic_source = "Bing Search"; //traffic_source = "Bing Search" + currTime(); } else { traffic_source = referrerHostName; //traffic_source = referrerHostName + currTime(); } } else { traffic_source = NONE; } setCookie(cookieName, traffic_source); //set the cookie } else if(isNotNullOrEmpty(urlParamSRC)){ //if there is a cookie, add the SRC to the cookie, unless the same src already exists as the first token. var firstToken = getFirstTokenFromCookie(getCookie(cookieName)); if(firstToken !== "" && urlParamSRC !== firstToken) { var newTrafficSourceCookie = urlParamSRC + traffic_source_COOKIE_TOKEN_SEPARATOR + getCookie(cookieName); //concetenate new SRC with old cookie values // var newTrafficSourceCookie = urlParamSRC + currTime() + traffic_source_COOKIE_TOKEN_SEPARATOR + getCookie(cookieName); // Optional: add the time of current session setCookie(cookieName, newTrafficSourceCookie); } } })("traffic_source", ""); function getCookie(name) { //Gets the value of traffic_source var value = "; " + document.cookie; var parts = value.split("; " + name + "="); if (parts.length == 2) return parts.pop().split(";").shift(); } function addTrafficSourceToForm(){ //injects the traffic_source value to the form jQuery(".lead_source input").each(function() { this.value = getCookie("traffic_source"); console.log("Executing"); }); } addTrafficSourceToForm() //initates the process