Our Services

One Family Team for Your Plumbing and Gas

From dripping taps to full hot water replacements, gas safety certificates to pre-purchase inspections, we handle it under one roof. Every job is licensed, insured and delivered to the same standard right across Brisbane.

north_east
A job done right
What We Do

Residential Plumbing and Gas, Done Properly

Eight ways we look after your home. All residential plumbing and gas, all delivered by the same family team to the same standard.

Plumbing

Everyday plumbing repairs and replacements for Brisbane homes, from a dripping tap to a burst pipe, diagnosed properly before we quote.

Gasfitting

Licensed gasfitting for Brisbane homes, covering appliance installs, regulators, leak detection and Queensland gas compliance certificates.

Hot Water Systems

Repair, replacement and servicing for every hot water system type in Brisbane homes, from electric storage to heat pump and solar.

Blocked Drains

Blocked sinks, gullies, toilets and sewer lines cleared across Brisbane with jet rodding and camera inspection, plus the cause found and explained.

Waste Disposal Units

Repair, replacement and new installation of kitchen waste disposal units, including InSinkErator, for Brisbane homes.

Water Filters

Installation, repair and servicing of whole house and under sink water filtration systems for Brisbane homes.

Pre-Purchase Plumbing Inspections

Independent plumbing inspections for Brisbane home buyers, with a written report on drains, water, hot water and gas before you sign.

Why Brisbane Chooses Us

The Same Thorough Process on Every Job

01

Full Diagnosis First

We inspect the whole picture before we quote, so you pay for the fix and not the guess.

02

Clear Options, Honest Pricing

Every job comes with written options. You choose the one that suits, and we never apply pressure.

03

Quality Parts Only

Licensed, insured, and stocking gear we would put in our own homes. There are no sub-standard shortcuts.

04

Tidy Finish, Every Time

We leave your home cleaner than we found it. Mats down, boots off, rubbish gone.

+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
+ we’re on our way
Real Words. Real Neighbours.

Hear From Our Happy Brisbane Homeowners

4.9
star
star
star
star
star

on Google 668 reviews

star
star
star
star
star
Fixed our gas stovetop igniters quickly at a very reasonable price.
David Rutherford
star
star
star
star
star
Thanks Billy for taking the time to explain the job in detail to us. I am very happy with work done and I would recommend Octoplus to anyone looking for an honest and genuine plumber. Customer service was excellent!
Chris Taylor
star
star
star
star
star
Great service by Billy, Marcus and all their team as a follow-up to a previous gas hot water replacement. Good communications along the way, punctual and helpful. Couldn’t ask for more. Highly recommended.
Eric Sonego
star
star
star
star
star
The team are amazing , they came the same day and helped me with a blocked toilet. The booking was easy and communication was really good. Thanks Guys !
Pedzi
star
star
star
star
star
Excellent service - from Michelle on the phone to Billy the plumber who came out that same afternoon. Everything was sorted quickly and explained clearly. Appreciate the great work - will definitely use these guys again!
Claire Monsour
star
star
star
star
star
After our hot water system failed overnight, we called Billy at 8:00 AM on Saturday. By midday, he had a brand-new system completely installed! The team was super friendly, efficient, and did an amazing job. Highly recommend their services.
Glenn Wiseman
star
star
star
star
star
We had a friendly service from Billy. He did a great job, would highly recommend.
Joanna Horn
star
star
star
star
star
Great service, friendly and timely in all communication. Really appreciate the professionalism
Michelle Kretschmer
star
star
star
star
star
Billy was so professional and I felt very comfortable having him working in my home
Janine Mellor
star
star
star
star
star
Responded quickly and provided helpful and thorough service. Highly recommended!
Karla Kramer
Where We Work

Serving Brisbane From Our Morningside Base

We work within a 12km radius of our Morningside office, right across Brisbane. Primary suburbs include Morningside, Bulimba, Balmoral, Hawthorne, Cannon Hill, Seven Hills, Norman Park, Camp Hill and Coorparoo. We also cover Ascot, Hamilton, New Farm, Paddington, Red Hill, Wynnum, Manly and more.

north_east
location_on
Morningside
location_on
Bulimba
location_on
Hawthorne
location_on
Cannon Hill
location_on
Camp Hill
location_on
Coorparoo
location_on
Balmoral
location_on
Norman Park
location_on
Seven Hills

Not Sure What You Need? Give Us a Call.

If you can describe the problem, we can usually tell you what is involved and what it costs before we turn up. Ring Natalie on (07) 3523 1888 and we will walk you through the options. No pressure and no upsells, just straight plumbing advice from a licensed Brisbane crew.

event
/* ========================================= Lumos GSAP Starter Interactions Version: v1.1 ========================================= */ document.addEventListener("DOMContentLoaded", () => { /* ========================================= Validación inicial de GSAP ========================================= */ if (typeof gsap === "undefined") return; gsap.registerPlugin(ScrollTrigger); const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; if (prefersReducedMotion) return; /* ========================================= Animaciones de counters, cards e íconos ========================================= */ function initCounters() { /* Elementos */ const cards = document.querySelectorAll(".counter_card"); const counters = document.querySelectorAll(".counter_digit"); const icons = document.querySelectorAll(".counter_icon"); if (!cards.length && !counters.length && !icons.length) return; /* ----------------------------------------- Animación de entrada de las cards ----------------------------------------- */ if (cards.length) { gsap.fromTo(cards, { y: 32, opacity: 0, scale: 0.96, filter: "blur(8px)" }, { y: 0, opacity: 1, scale: 1, filter: "blur(0px)", duration: 0.75, ease: "power3.out", stagger: 0.12, scrollTrigger: { trigger: cards[0], start: "top 85%", once: true } } ); } /* ----------------------------------------- Animación numérica de los counters ----------------------------------------- */ counters.forEach((counter) => { const originalValue = counter.textContent.trim(); // Normaliza el número para aceptar separadores de miles const numericValue = originalValue.replace(/,/g, ""); const endValue = parseFloat(numericValue); if (isNaN(endValue)) return; const before = counter.dataset.before || ""; const after = counter.dataset.after || ""; const duration = parseFloat(counter.dataset.duration) || 2.2; const delay = parseFloat(counter.dataset.delay) || 0.2; // Detecta los decimales desde el valor numérico real. // Opcionalmente se pueden definir manualmente con data-decimals. const decimals = counter.dataset.decimals !== undefined ? Math.max(0, parseInt(counter.dataset.decimals, 10) || 0) : (String(endValue).split(".")[1] || "").length; // Mantiene separadores de miles y decimales const formatter = new Intl.NumberFormat("en-US", { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); let obj = { value: 0 }; gsap.to(obj, { value: endValue, duration, delay, ease: "power4.out", scrollTrigger: { trigger: counter, start: "top 85%", once: true }, // Actualiza el texto mientras avanza la animación onUpdate: () => { counter.textContent = before + formatter.format(obj.value) + after; }, // Ajusta el valor final y agrega un pequeño rebote onComplete: () => { counter.textContent = before + formatter.format(endValue) + after; gsap.fromTo(counter, { scale: 1 }, { scale: 1.08, duration: 0.18, yoyo: true, repeat: 1, ease: "power2.out" } ); } }); }); /* ----------------------------------------- Animación de íconos ----------------------------------------- */ icons.forEach((icon, index) => { const iconInner = icon.querySelector(".material_icon") || icon; const tl = gsap.timeline({ scrollTrigger: { trigger: icon, start: "top 85%", once: true }, delay: 0.35 + index * 0.12 }); tl.fromTo(iconInner, { scale: 0, rotate: -20, opacity: 0, filter: "blur(8px)" }, { scale: 1.18, rotate: 0, opacity: 1, filter: "blur(0px)", duration: 0.55, ease: "back.out(2.4)" } ) .to(iconInner, { scale: 1, duration: 0.25, ease: "power2.out" }) .to(iconInner, { y: -4, duration: 1.8, repeat: -1, yoyo: true, ease: "sine.inOut" }); }); } /* ========================================= Inicialización general ========================================= */ initCounters(); initAutoTabs(); initHeadingReveal(); });