Skip Navigation

Tile Flooring Store in Woodstock, ON

 

Bring your dream tile flooring or backsplash to life at Sawal Flooring Canada in Woodstock, ON!

 

We offer a wide range of textures, colours, and eco-friendly materials to help you create the perfect look for any room. Our local team is here to guide you every step of the way to ensure your project matches your style and needs. Visit our local flooring store in Woodstock, ON to explore our wide selection of tile flooring products and services!

 

 

 

Types of Tile Flooring at SacWal Flooring Canada

 

Our showroom in Woodstock, ON, showcases a wide range of tile options to suit every style and budget:

 

Porcelain Tile Flooring
Known for its durability and water resistance, porcelain tile is an ideal choice for high-traffic areas like kitchens and bathrooms. Available in a variety of colours, patterns, and finishes, porcelain tiles offer a versatile and long-lasting flooring solution.

 

Ceramic Tile Flooring
Ceramic tiles are a popular choice for both floor and wall applications. They come in a range of styles, from traditional to contemporary, and offer easy maintenance and durability. Ceramic tiles are a great option for adding a touch of elegance to any space.

 

Glass Tile Flooring
Glass tiles add a unique, modern flair to any room. They are available in a wide range of colours and finishes, making them a versatile choice for backsplashes, accent walls, and decorative features. Glass tiles are also easy to clean and maintain, making them a practical choice for busy households.

 

Natural Stone Tile Flooring
Natural stone tiles, such as marble, granite, and slate, offer a timeless and elegant look. Each piece is unique, adding a touch of luxury to any space. While natural stone requires more maintenance than other tile types, its beauty and durability make it a worthwhile investment.

 

Wood-Look Tile Flooring
Combining the warmth and beauty of hardwood with the durability of tile, wood-look tile is a popular choice for those seeking the look of wood with the benefits of tile. Available in a variety of colours and styles, wood-look tile is perfect for adding a rustic or contemporary feel to any room.
 

The Benefits of Tile Flooring for Your Woodstock Home

 

Shower Tiling and Large Format Tile Install in Woodstock

 

Tile for More Than Floors: Kitchen Backsplashes, Custom Showers and More

 

Large Format Tile Installation in Woodstock

 

At SacWal Flooring Canada, we supply and professionally install large-format tiles and porcelain slabs to bring sleek, modern style to any space. Perfect for bathrooms, kitchens, or open-concept living areas, these oversized tiles create a seamless, elegant look with minimal grout lines—making them stylish and easy to maintain.

 

We offer a wide range of options, including popular choices like large porcelain tiles, porcelain slab shower walls, and marble-look large tiles. Our expert installers handle every detail, even for complex applications like thin porcelain slab walls or extra-large floor tiles, ensuring a flawless finish every time.

 

Large-format tiles combine durability, elegance, and low-maintenance benefits, making them a great choice for any project. Trust SacWal Flooring Canada to elevate your space with high-quality tiles and professional installation.

 

Offering Schluter Waterproofing Systems

 

The Schluter® System acts as a comprehensive waterproofing solution, creating a secure barrier that prevents water from seeping through tiles and into the underlying structure. This state-of-the-art technology is designed to safeguard tiled areas—especially moisture-prone spaces like showers—from long-term water damage. 

 

By stopping moisture in its tracks, it helps protect your walls and subfloors from mould, mildew, and rot. Not only does this extend the life of your tile installation, but it also preserves the beauty of your space and helps you avoid expensive repairs down the road. With the Schluter® System, you get peace of mind and performance that lasts.

 

Experience The Benefits of Heated Flooring Systems

 

Professional Tile Flooring Installation Services

 

Choosing a new tile floor is exciting, but proper installation is key to getting the best results. While DIY might work for some, mistakes can affect how your flooring looks and performs. That’s why our professional team is here to help. 

 

We offer expert tile installation for all types of spaces, including outdoor patios and walkways. Our technicians use the right tools and techniques, applying premixed grout precisely and placing each tile with care. The result? A beautiful, durable surface you’ll love for years to come.  Plus, with our Adore Your Floor Guarantee, we’ll reinstall your tile for free if you’re not fully satisfied within 30 days. From start to finish, we’re here to guide you every step of the way!

 

Contact us today to discover all the tile design possibilities at SacWal Flooring Canada! We proudly serve customers in Woodstock, Cambridge, and Brantford, ON.
 

wood look tile flooring in a bright living room with large windows and chair

Contact Us

wood look tile flooring in a bright living room with large windows and chair
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")); } }