---
title: Contact us
description: Speak With Perth's Roofing &amp; Patio Specialists		Get in touch with our team for a free quote on roofing, guttering, patios, pergolas, repairs, and maintenanc
url: https://perthroofpatio.com.au/contact-us
date_modified: 2026-07-15
author: admin
language: en_US
---

## Speak With Perth's Roofing & Patio Specialists

				
				
									Get in touch with our team for a free quote on roofing, guttering, patios, pergolas, repairs, and maintenance services.								
		
				
				
					
				
		
					
		
		
				
					
## Contact Perth Roof & Patio Maintenance

				
				
							

			
						

									
### Phone

				
									
[0475 711 254](tel:0475711254)

				
			
			
		
						
				
							

			
						

									
### Email

				
									
[abdul@perthroofpatio.com.au](mailto:abdul@perthroofpatio.com.au)

				
			
			
		
						
				
							

			
						

									
### Address

				
									
[2580 Albany Highway
Kelmscott WA 6111](https://maps.app.goo.gl/J75W1SKpH38BSVSXA)

				
			
			
		
						
				
							

			
						

									
### Opening Hours

				
									
Monday - Sunday  7 am–7 pm

				
			
			
		
						
				
				
							
			
		
						
				
		
				
					
## Get Your Free Quote Today

				
				
							
			
			
			

							
			
			
								
												
								Name							
														
											
								
												
								Phone							
								

						
								
												
								Email							
														
											
								
												
								Suburb / Location							
														
											
								
												
								Upload Photo 							
								

						
								
												
								Message / Description							
										
								
									
								
					
						
																						Submit
													
					
				
			
		
						
				
					
    (function () {
  // ── Guard: prevent running twice ──────────────────────────────────────────
  if (document.querySelector(".upload-grid")) return;

  const INPUT_ID = "form-field-field_6b58174";
  const PLACEHOLDER_IMG =
    "https://perthroofpatio.com.au/wp-content/uploads/2026/06/Group-112.png";
  const MAX_SLOTS = 3;

  const fileInput = document.getElementById(INPUT_ID);
  if (!fileInput) return;

  const wrapper = fileInput.closest(".elementor-field-group-field_6b58174");
  if (!wrapper) return;

  // ── Guard: remove any existing grid inside this wrapper ───────────────────
  const existingGrid = wrapper.querySelector(".upload-grid");
  if (existingGrid) existingGrid.remove();

  // ── State ──────────────────────────────────────────────────────────────────
  let uploadedFiles = [null, null, null];

  // ── Hide native input ─────────────────────────────────────────────────────
  fileInput.style.cssText =
    "position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;";

  // ── Build grid ─────────────────────────────────────────────────────────────
  const grid = document.createElement("div");
  grid.className = "upload-grid";
  grid.style.cssText = `
    display: flex;
    gap: 12px;
    margin-top: 14px;
    flex-wrap: wrap;
  `;

  const slots = [];

  for (let i = 0; i  {
      if (e.target === removeBtn) return;
      const tempInput = document.createElement("input");
      tempInput.type = "file";
      tempInput.accept = "image/*";
      tempInput.onchange = () => {
        if (tempInput.files[0]) handleFileSelect(i, tempInput.files[0]);
      };
      tempInput.click();
    });

    removeBtn.addEventListener("click", (e) => {
      e.stopPropagation();
      clearSlot(i);
    });

    slot.addEventListener("dragover", (e) => {
      e.preventDefault();
      slot.style.boxShadow = "0 0 0 3px #fff inset";
    });
    slot.addEventListener("dragleave", () => {
      slot.style.boxShadow = "";
    });
    slot.addEventListener("drop", (e) => {
      e.preventDefault();
      slot.style.boxShadow = "";
      const file = e.dataTransfer.files[0];
      if (file && file.type.startsWith("image/")) handleFileSelect(i, file);
    });

    grid.appendChild(slot);
    slots.push({ slot, ph, removeBtn });
  }

  wrapper.appendChild(grid);

  // ── Responsive ─────────────────────────────────────────────────────────────
  const ro = new ResizeObserver(([entry]) => {
    const w = entry.contentRect.width;
    if (w  (slot.style.flex = "1 1 100%"));
    } else {
      grid.style.flexDirection = "row";
      slots.forEach(({ slot }) => (slot.style.flex = "1 1 calc(33.333% - 12px)"));
    }
  });
  ro.observe(wrapper);

  // ── Handlers ───────────────────────────────────────────────────────────────
  function handleFileSelect(index, file) {
    uploadedFiles[index] = file;
    const reader = new FileReader();
    reader.onload = (e) => {
      slots[index].ph.src = e.target.result;
      slots[index].ph.style.objectFit = "cover";
      slots[index].removeBtn.style.display = "block";
    };
    reader.readAsDataURL(file);
    syncFileInput();
  }

  function clearSlot(index) {
    uploadedFiles[index] = null;
    slots[index].ph.src = PLACEHOLDER_IMG;
    slots[index].ph.style.objectFit = "cover";
    slots[index].removeBtn.style.display = "none";
    syncFileInput();
  }

  function syncFileInput() {
    const dt = new DataTransfer();
    uploadedFiles.forEach((f) => {
      if (f) dt.items.add(f);
    });
    fileInput.files = dt.files;
    fileInput.required = dt.files.length === 0;
  }
})();
				
				
					
				
		
					
				
					
## Servicing Perth & Surrounding Suburbs

				
		
		
				
							
			
						
		
						
				
									Perth								
				
		
				
							
			
						
		
						
				
									Fremantle								
				
		
				
							
			
						
		
						
				
									Joondalup								
				
		
				
							
			
						
		
						
				
									Wanneroo								
				
		
				
							
			
						
		
						
				
									Stirling								
				
		
				
							
			
						
		
						
				
									Scarborough								
				
		
				
							
			
						
		
						
				
									Morley								
				
		
				
							
			
						
		
						
				
									Midland								
				
		
				
							
			
						
		
						
				
									Cannington								
				
		
				
							
			
						
		
						
				
									Osborne Park								
				
		
				
							
			
						
		
						
				
									Balcatta								
				
		
				
							
			
						
		
						
				
									Bayswater								
				
		
				
							
			
						
		
						
				
									Belmont								
				
		
				
							
			
						
		
						
				
									Canning Vale								
				
		
				
							
			
						
		
						
				
									Armadale								
				
		
				
							
			
						
		
						
				
									Rockingham								
				
		
				
							
			
						
		
						
				
									Mandurah								
				
		
				
							
			
						
		
						
				
									Clarkson								
				
		
				
							
			
						
		
						
				
									Butler								
				
		
				
							
			
						
		
						
				
									Duncraig								
				
		
				
							
			
						
		
						
				
									Hillarys								
				
		
				
							
			
						
		
						
				
									Woodvalea								
				
		
				
							
			
						
		
						
				
									Wangara								
				
		
				
							
			
						
		
						
				
									Scarborough								
				
		
				
							
			
						
		
						
				
									Gosnells								
				
				
					
				
		
					
				
					
## Not sure if we cover your area?

				
				
									
Give us a call, we’ll let you know straight away.
