Skip Navigation

Choose Carpeting for Your Home Renovation

When you choose to invest in new carpeting from Ideal Carpets & Interiors Ltd. Flooring Canada, you can rest easy knowing that your new carpet flooring will be of top value and comfort. As a leading carpet supplier in the area, we’re proud to offer a beautiful variety of selections from stylish high-end brands at an affordable cost. A perfect option for homes with children and active families, carpet flooring provides a comfortable and cozy space for playrooms, living rooms, and bedrooms.

Step into our showroom and let our experts help you select the perfect fit for your home. We provide a free, no-obligation consultation including room measurements to ensure your investment is worth every cent. With modern upgrades in carpeting technology, our brands are built to withstand daily use and retain their original vibrance. Our carpeting options have a range of hues, textures, and fibers, and our friendly and knowledgeable staff is ready to answer any questions you may have!

Shop Our Elite Carpeting Brands

It's important to consider the many different types of carpeting available when replacing or installing new carpet flooring for the first time. Our knowledgeable staff can walk you through the many benefits of carpeting, and can assist with your perfect selection. Aside from the sheer comfort of walking on our plush carpeting, any of our top labels will leave your home with a stunning and fresh appearance. Here at Carpets & Interiors Ltd. Flooring Canada, we have 500-store buying power, which grants us access to luxury brands that are long-lasting and cost-effective. Shop from many top carpeting manufacturers including:

  • Hearth & Home
  • Innovia
  • Innovia Touch
  • Resista® 3.0
  • Resista® Soft Style
  • Rival By Resista 
  • Tigressa®
  • Tigressa® Cherish

Carpeting Types & Benefits

Carpet flooring has numerous advantages as a flooring choice for your home. Our various carpet styles include non-slip (ideal for children), convenient, and allergy-resistant surfaces. A new carpet can cover uneven subfloors and modernize any design for homeowners who live in historical or older homes. Fiber type, pile height, face weight, gauge, twist level, tuft tie, density, and stitch rate can all affect the durability and performance of your carpet. As a result, we always advise consulting our experts when selecting a new carpet. We are pleased to offer the following types of carpeting at our St. Paul location:

Frieze Carpet

Frieze carpeting is exceptionally soft and comes crafted in a cut-pile construction. Frieze's durable curling fibers are known for their ability to camouflage dirt.

Loop & Loop Cut Carpet

Loop Carpeting is crafted with a surface of uncut loop fibers. A level-loop carpet style comes woven or tufted, with a same-height loop surface. A multi-loop carpet consists of loops with two or three different pile heights. These carpets offer a casual look that is good for hiding foot traffic. Alternatively, cut-loop carpeting is designed just as it sounds. In this case, the loop fibers have been cut straight, offering a snag-free consistency that is popular for those with children or pets.

Patterned Carpet

Carpets containing patterns are created using methods similar to printing paper. These methods include flatbed screen printing, rotary screen printing, Stalwart printing, and modern computer-programmed jet printing. 

Saxony & Textured Saxony Carpet

Saxony carpets are cut-pile carpets that can add a touch of luxury to any room in your home. Saxony Type patterns are resistant to wear, shading, and traffic marks in your home. Textured Saxony uses the same fiber types, though they’ve been twisted in different directions to offer a coarser appearance.

Berber Carpet

Berber carpet has a unique style and a cushiony feeling underfoot that can be found in various pile heights and can be constructed as a level-loop or multi-loop carpet, depending on your preference. Berber's natural strength and soil hiding capabilities make it a go-to floor for active areas in the home.

Worry-Free Maintenance

One of the many reasons our customers choose carpeting is for its low-stress maintenance. Carpet upkeep is as simple as weekly vacuuming and annual professional cleaning. While yearly carpet shampooing can assist with any blemishes that may have accrued, our carpets are built to withstand even the toughest stains and foot traffic. Prior to the purchase and use of at-home cleaning products, be sure to check your warranty as some products contain harsh chemicals that can damage carpet fibers.

Expert Installation Services Available

Before attempting a DIY carpet installation, consider utilizing our in-house technicians for any installation needs. Amateur carpet installs can result in mistakes or shabby craftsmanship. Our team consists of fully trained, experienced individuals who are dedicated to finalizing your home-improvement journey. Our carpeting selections are backed by our Ultimate Confidence Guarantee. If you are dissatisfied with your new carpeting within 30 days of installation, we will happily replace them, free of charge.

Contact us today to take the first steps towards refurbishing your home with a new carpet from our stylish collection! We proudly serve customers throughout St. Paul, Bonnyville, Fork Lake, Lafond, and Elk Point, Alberta

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")); } }