Skip Navigation

Carpet in Woodstock, ON

Patterned carpet in a living room

 

Transform your Woodstock home with the warmth, comfort, and style of new carpeting from SacWal Flooring Canada. As Woodstock's premier flooring retailer, we offer an extensive selection of carpets to suit any taste and budget. Whether you're looking to refresh a single room or give your entire home a new look, our expert team is here to guide you through the process, from choosing the ideal carpet for your lifestyle to professional installation.

Our carpet collection features a wide array of fibers, colours, textures, patterns, and designs, allowing you to create a personalized space that reflects your unique style. With the buying power of 500 stores nationwide, we offer endless possibilities to enhance the beauty and value of your Woodstock home. As an exclusive flooring dealer, we provide residential and commercial carpeting options to meet the needs of any property.

Experience the elegance and warmth only carpet can provide, especially during the colder months. Visit our expansive showroom today and discover the perfect carpet to elevate your Woodstock living space.

 

 

Why Carpet is the Perfect Choice for Your Woodstock Home

 

Discover the many benefits that make carpet a popular and practical flooring solution for Woodstock homeowners:

 

  • Unmatched Comfort: Experience the plush, soft feel of carpet underfoot, creating a cozy and inviting atmosphere in your home.
  • Warmth and Insulation: The carpet's natural insulation properties make your home warmer and more energy-efficient, which is especially beneficial during Woodstock's colder months.
  • Superior Sound Absorption: Carpet's ability to absorb sound reduces noise and creates a more peaceful environment in your home.
  • Enhanced Safety: Prevent slips and falls with carpet's non-slip surface, providing added safety for your family, especially in high-traffic areas.
  • Endless Design Possibilities: Explore various styles, colours, and patterns to find the perfect carpet to match your unique taste and decor.
  • Healthier Indoor Air: Breathe easier with carpet's ability to trap dust, allergens, and pollen, improving indoor air quality and reducing allergy symptoms.
  • Budget-Friendly: Enjoy the luxurious feel and numerous benefits of carpet at a fraction of the cost of other flooring options.

 

 

Discover Your Dream Carpet at SacWal Flooring Canada

 

Explore our diverse carpet selection, tailored to your Woodstock lifestyle and design preferences:

 

  • Frieze: Embrace the durability and resilience of frieze carpet, perfect for busy households and high-traffic areas. Its twisted fibers effortlessly conceal footprints and vacuum marks, maintaining a pristine appearance.
  • Berber: Opt for the enduring strength and stain resistance of berber carpet, which is ideal for active families and spill-prone spaces. Its looped construction ensures lasting beauty and easy maintenance.
  • Shag: Indulge in the luxurious softness and warmth of shag carpet, adding a touch of cozy texture to any room. Its plush pile creates a welcoming atmosphere and a comfortable feel underfoot.
  • Patterned: Elevate your interior design with the artistic flair of patterned carpet. Choose from various unique patterns and designs to make a bold statement and personalize your space.
  • Saxony: Luxuriate in the plush comfort and timeless elegance of Saxony carpet. Its dense, soft pile exudes warmth and sophistication, adding a touch of luxury to your home.
  • Loop & Cut-Loop: Combine the best of both worlds with loop & cut-loop carpet. Its textured surface, created by a blend of looped and cut fibers, offers visual interest, durability, and a unique tactile experience.

 

 

Elevate Your Woodstock Business with Commercial Carpets from SacWal Flooring Canada

 

Upgrade your Woodstock workplace with our premium commercial carpets, designed to enhance the look and feel of your business while withstanding the demands of daily use:

 

  • Unrivaled Durability: Our commercial carpets are expertly crafted with high-performance materials, engineered to resist wear and tear, ensuring a long-lasting investment for your Woodstock business.
  • Superior Stain Resistance: Keep your carpets pristine with our advanced stain-resistant technology, repelling spills and stains for easy maintenance and a professional appearance.
  • Diverse Style Selection: Choose from various colours, patterns, and textures to complement your unique brand aesthetic and create a welcoming environment for employees and customers.
  • Tailored Customization: We offer personalized carpet solutions to meet your business needs, from custom colours and patterns to unique sizes and shapes, ensuring a perfect fit for your Woodstock space.
  • Expert Installation: Our experienced professionals will ensure a seamless and efficient installation process, minimizing disruptions to your business and delivering a flawless finish.

 

 

Expert Carpet Installation in Woodstock with Our Adore Your Floor Guarantee

 

Complete your carpet transformation with our professional installation services, ensuring a flawless finish and optimal performance for your Woodstock home or business. Learn more:

 

  • Skilled Technicians: Our experienced installation team is dedicated to providing precise and efficient installations,minimizing disruptions to your daily routine.
  • Flexible Scheduling: We work with your schedule to find the most convenient time for your carpet installation, ensuring a stress-free experience.
  • Adore Your Floor Guarantee: Fall in love with your new carpet, backed by our exclusive guarantee. If you're not completely satisfied within 30 days, we'll replace it with a comparable model free of charge.

 

Invest in expert installation for your Woodstock carpet and experience the peace of mind that comes with our Adore Your Floor Guarantee.


 

Contact us today to browse and purchase high-quality carpeting from our extensive inventory. We proudly serve customers in Woodstock, Cambridge, and Brantford, ON.

Contact Us

Name
Address
Make An Appointment
document.querySelectorAll("form:not(.filter-dropdown-wrapper)").forEach(elem => { elem.addEventListener('submit', function (event) { return handleFormSubmit(event, this); }) }); $(document).ready(function () { $("div.custom-form").each((index, element) => { const formData = $(element).data(); Object.keys(formData).forEach(key => { if (formData[key] == null || formData[key] === "") { delete formData[key]; } }); const queryString = $.param(formData); $.get("/custom/ajax/form?" + queryString, (response) => { $(element).html(response); // if any col-md-6 elements are present, and there are odd number of them switch the last one to col-md-12 const colMd6Elements = $(element).find('.col-md-6'); if (colMd6Elements.length > 0 && colMd6Elements.length % 2 !== 0) { colMd6Elements.last().removeClass('col-md-6').addClass('col-md-12'); } // Initialize Parsley validation const form = $(element).find("form"); form.parsley(); // Attach submit handler to the custom form form.on('submit', function (event) { return handleFormSubmit(event, this); }); //update hidden input PageURL and LeadSourceUrl to the current page URL const pageUrl = window.location.href; $(element).find('input[name="PageURL"]').val(pageUrl); $(element).find('input[name="LeadSourceUrl"]').val(pageUrl); }).fail(() => { console.error("Failed to load custom form."); }); }); }); function handleFormSubmit(event, cForm) { if (window.jQuery && $(cForm).parsley().isValid()) { event.preventDefault(); fetchLeadOrigin(cForm).then(() => { leadCleanUp(cForm); if (window.grecaptcha && window.globalRecaptchaKey) { grecaptcha.ready(function () { grecaptcha.execute(window.globalRecaptchaKey, { action: 'submit' }).then(function (token) { $(cForm).find('.g-recaptcha-response').val(token); handleFormSubmission(event, cForm); }); }); } else { handleFormSubmission(event, cForm); } }); } return false; } function leadCleanUp(cForm) { if ($("input[name='Phone']", $(cForm)).length > 0) { var cleanphone = $("input[name='Phone']", $(cForm)).val(); $("input[name='Phone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } if ($("input[name='CleanHomePhone']", $(cForm)).length > 0) { var cleanphone = $("input[name='CleanHomePhone']", $(cForm)).val(); $("input[name='CleanHomePhone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } if ($("input[name='CleanMobilePhone']", $(cForm)).length > 0) { var cleanphone = $("input[name='CleanMobilePhone']", $(cForm)).val(); $("input[name='CleanMobilePhone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } var notesField = $("input[name=OpportunityNotes]", $(cForm)); if (notesField.length == 0) { notesField = $("textarea[name=OpportunityNotes]", $(cForm)); } if (notesField, length > 0) { let messageField = $("textarea[name=MyMessage]", $(cForm)); if (messageField.length == 0) { messageField = $("textarea[name=Message]", $(cForm)); } var notesVal = ""; if (messageField && messageField.length > 0) { notesVal += messageField.val(); } $(".add-to-notes").each(function () { if ($(this).find("input").attr("name") && $(this).find("input").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("input").attr("name") + ": " + $(this).find("input").val(); } // Also check for select elements within .add-to-notes if ($(this).find("textarea").attr("name") && $(this).find("textarea").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("textarea").attr("name") + ": " + $(this).find("textarea").val(); } //if ($(this).find("input[type=checkbox]").attr("name") && $(this).find("input[type=checkbox]").attr("name") !== undefined) { // notesVal += "\n\n" + $(this).find("input[type=checkbox]").attr("name") + ": " + ($(this).find("input[type=checkbox]").is(":checked") ? "Yes" : "No"); //} //if ($(this).find("input[type=radio]:checked").attr("name") && $(this).find("input[type=radio]:checked").attr("name") !== undefined) { // notesVal += "\n\n" + $(this).find("input[type=radio]:checked").attr("name") + ": " + $(this).find("input[type=radio]:checked").val(); //} if ($(this).find("select").attr("name") && $(this).find("select").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("select").attr("name") + ": " + $(this).find("select").val(); } }) $(notesField).val(notesVal); } } function handleFormSubmission(event, cForm) { if (event.target.className.indexOf("external-form-handling") == -1) { if (event.target.className.indexOf("gnix-ajax-form") > -1) { submitViaAjax(cForm); } else { cForm.submit(); } } } function submitViaAjax(formElem) { /* get the action attribute from theelement */ var $form = $(formElem), url = $form.attr('action'); /* Send the data using post with element id name and name2*/ $form.children('[type=submit]').addClass("disabled"); var origText = $form.children('[type=submit]').html(); $form.children('[type=submit]').html(`
Loading...
`); if (!url) { url = window.location; } $.ajax({ url: url, type: 'POST', data: $form.serialize() }).done(function (result) { $form.addClass("d-none"); $form.parent().children("div.form-thank-you").removeClass("d-none"); }).fail(function (result) { // Try to parse the response text as JSON try { if (result.responseText) { const errorResponse = JSON.parse(result.responseText); handleServerValidationErrors($form, errorResponse); } } catch (e) { console.error("Could not parse error response:", e); } $form.children('[type=submit]').removeClass("disabled"); $form.children('[type=submit]').html(origText); }).always(function (result) { $form.children('[type=submit]').removeClass("disabled"); $form.children('[type=submit]').html(origText); }); } function handleServerValidationErrors($form, response) { // Check if we have errors to display in the ValidationProblemDetails format if (response && response.errors) { // Get all error fields const errorFields = Object.keys(response.errors); // Check if the only error is related to g-recaptcha const isOnlyCaptchaError = errorFields.length === 1 && errorFields[0] === "g-recaptcha"; // Only show captcha modal if it's the only error if (isOnlyCaptchaError) { showCaptchaModal(); } // Process each error field errorFields.forEach(function (fieldName) { const errorMessages = response.errors[fieldName]; if (fieldName && errorMessages && errorMessages.length > 0) { // Find the field by name const $field = $form.find(`[name="${fieldName}"]`); if ($field.length > 0) { // Get the Parsley instance for this field const fieldInstance = $field.parsley(); if (fieldInstance) { // Create a unique error name to avoid conflicts const errorName = fieldName + "-custom"; // Remove any existing errors with this name fieldInstance.removeError(errorName, { updateClass: true }); // Add the new error message fieldInstance.addError(errorName, { message: errorMessages[0], // Use the first error message updateClass: true }); // Remove existing event handlers to prevent duplicates $field.off('focus.customError input.customError change.customError'); // Add event handlers to clear errors when field is focused and then changed $field.on('focus.customError', function () { // Store reference to the field for the change event $(this).data('focused', true); }); // Handle input/change events $field.on('input.customError change.customError', function () { // Only process if field was previously focused if ($(this).data('focused') && $(this).val().trim() !== '') { const fieldInstance = $(this).parsley(); if (fieldInstance) { // Remove the custom error fieldInstance.removeError(errorName, { updateClass: true }); // If no other errors exist, remove error class if (fieldInstance.isValid()) { $(this).removeClass('parsley-error'); $(this).addClass('parsley-success'); } } } }); } } } }); // Focus on the first field with an error const $firstErrorField = $form.find('.parsley-error').first(); if ($firstErrorField.length > 0) { $firstErrorField.focus(); } } } async function fetchLeadOrigin(formElem) { var hiddenInput = $(formElem).find('input[name="__leadOrigin"]'); if (hiddenInput.length === 0) { // If the hidden input doesn't exist, create it hiddenInput = $('', { type: 'hidden', name: '__leadOrigin' }).appendTo(formElem); } try { const response = await fetch("https://api.ipify.org/?format=json"); const data = await response.json(); if (data) { // && data.serverVariables && data.serverVariables.RemoteIpAddress) { let leadOrigin = btoa(data.ip); hiddenInput.val(leadOrigin); } else { hiddenInput.val(btoa("0.0.0.0")); } } catch (error) { hiddenInput.val(btoa("0.0.0.0")); } }