Invisible ducted air conditioning.
Luxury comfort, hidden from view.
Bespoke heating and cooling for Midlands homes. Concealed indoor units, discreet ceiling vents and comfort designed around you.
Finance available — explore monthly payments →

Luxury comfort.
Spread the cost.
Explore monthly payments for your installation through Ideal4Finance.
Finance is subject to status and lender approval.
Finance information: EAGLES TRIBE LTD, trading as OptimPRO, is an Introducer Appointed Representative of Ideal Sales Solutions Ltd, t/a Ideal4Finance. Ideal Sales Solutions Ltd is a credit broker and not a lender (FRN 703401). Finance is subject to status. The rate offered is provisional and depends on your personal circumstances, the loan amount and the term.
Ducted air conditioning for your home
Ideal for suitable existing homes, renovations and new builds. We check loft or ceiling space, drainage and service access, then agree any ceiling openings and finishes before work begins.

Four parts. One discreet system.
Heated or cooled air reaches your rooms through insulated ducts. A return grille draws air back to the concealed unit.

Outdoor unit
Connected by neatly routed refrigerant pipework.
Hidden indoor unit
Concealed in a suitable space, accessible for servicing.
Insulated ductwork
Sized to distribute air throughout your chosen rooms.
Vents & controls
Discreet grilles and controls tailored to your system.
Comfort without the visual clutter
Quiet bedrooms
Equipment, duct sizing and air speed planned together for restful rooms.
Clean interior design
Keep walls clear, with vents positioned around your lighting and layout.
Heating & cooling
Summer cooling and winter heating from one heat-pump system.
Room-by-room control
Available with suitable zoning or separate indoor units, specified for your home.
Comfort you can feel.
Service you can trust.
Customer experiences on Google and Trustpilot.
3-year installation
& labour guarantee
Two extra years beyond our standard one-year guarantee.
Included on ducted AC installations with at least 2 indoor ducted units.
- Engineer call-out included
- Fault diagnosis included
- Repair labour included
No call-out or labour charges for covered faults. Installation workmanship is also covered.
Equipment parts remain subject to the manufacturer’s separate warranty. Routine servicing is not included in this guarantee.
Guarantee cover and exclusions
Provided by Eagles Tribe Ltd, trading as OptimPRO, for qualifying ducted installations listed in your quotation. Cover starts on commissioning and lasts 36 months. Eligibility requires at least two indoor ducted units; multiple ceiling vents connected to one indoor unit do not meet this requirement.
We will rectify defects attributable to our installation workmanship at no charge, including necessary labour and installation materials. Call-out, diagnosis and repair labour for equipment faults covered by the manufacturer’s warranty are also included. Equipment replacement parts are subject to the manufacturer’s separate warranty.
The guarantee excludes routine servicing, consumables and faults caused by misuse, accidental damage, external electrical supply problems, third-party alterations or failure to maintain the system in accordance with the manufacturer’s instructions. These exclusions apply only where they caused or contributed to the fault.
Please report faults promptly using the contact details on your quotation and allow reasonable access for inspection and repair. Any work outside this guarantee will be explained and priced for your approval before it proceeds. Full guarantee terms will be supplied with your quotation before you commit to purchase.
This guarantee is additional to, and does not limit, your statutory rights.
See the system in practice
Southam: a 5 kW Daikin ducted system serving three rooms, with concealed controller wiring. The loft hatch and frame were removed for access, then refitted.
West Midlands, Warwickshire & surrounding areas
Residential ducted installations across the Midlands.
Details that make the difference






Let’s design it around your home.
Send your location, floor plans and the rooms you want to heat or cool. We’ll advise on the options and prepare your quotation.
(function () { 'use strict'; function initReviews() { document.querySelectorAll('.op-ducted-page [data-op-review-carousel]').forEach(function (carousel) { if (carousel.dataset.opReviewReady) return; var track = carousel.querySelector('[data-op-review-track]'); var slides = Array.from(track.children); if (slides.length < 2) return; var controls = carousel.querySelector('[data-op-review-controls]'); var previous = carousel.querySelector('[data-op-review-prev]'); var next = carousel.querySelector('[data-op-review-next]'); var toggle = carousel.querySelector('[data-op-review-toggle]'); var status = carousel.querySelector('[data-op-review-status]'); var reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)'); var userPaused = reducedMotion.matches; var hovering = false, focused = false, touching = false, inView = true; var frame = null, lastTime = 0, position = 0, cycle = 0, step = 0; var interactionUntil = 0, resumeTimer; var speed = 26; // Pixels per second, independent of the screen refresh rate. // Keep one accessible set; duplicate sets provide the seamless visual wrap. function duplicate(slide) { var copy = slide.cloneNode(true); copy.dataset.opReviewClone = 'true'; copy.setAttribute('aria-hidden', 'true'); copy.removeAttribute('id'); copy.querySelectorAll('[id]').forEach(function (node) { node.removeAttribute('id'); }); copy.querySelectorAll('a,button,input,select,textarea,[tabindex]').forEach(function (node) { node.setAttribute('tabindex', '-1'); }); return copy; } var before = document.createDocumentFragment(); var after = document.createDocumentFragment(); slides.forEach(function (slide) { before.appendChild(duplicate(slide)); after.appendChild(duplicate(slide)); }); track.insertBefore(before, slides[0]); track.appendChild(after); carousel.dataset.opReviewReady = 'true'; controls.hidden = false; status.setAttribute('aria-live', 'off'); function wrap(value) { return cycle + ((value - cycle) % cycle + cycle) % cycle; } function currentIndex() { return step ? Math.round((wrap(track.scrollLeft) - cycle) / step) % slides.length : 0; } function updateStatus() { var text = (currentIndex() + 1) + ' / ' + slides.length; if (status.textContent !== text) status.textContent = text; } function canRun() { return cycle > 0 && !userPaused && !hovering && !focused && !touching && inView && !document.hidden && performance.now() >= interactionUntil; } function tick(now) { if (!canRun()) { frame = null; lastTime = 0; return; } if (lastTime) position = wrap(position + Math.min(now - lastTime, 50) * speed / 1000); lastTime = now; track.scrollLeft = position; updateStatus(); frame = requestAnimationFrame(tick); } function syncPlayback() { toggle.setAttribute('aria-pressed', String(userPaused)); toggle.setAttribute('aria-label', userPaused ? 'Start automatic review scrolling' : 'Pause automatic review scrolling'); toggle.querySelector('[data-op-toggle-label]').textContent = userPaused ? 'Play' : 'Pause'; if (canRun()) { if (frame === null) { position = wrap(track.scrollLeft); lastTime = 0; frame = requestAnimationFrame(tick); } } else if (frame !== null) { cancelAnimationFrame(frame); frame = null; lastTime = 0; } } function measure() { var oldPhase = cycle ? (wrap(track.scrollLeft) - cycle) / cycle : 0; var newStep = slides[1].getBoundingClientRect().left - slides[0].getBoundingClientRect().left; if (newStep <= 0 || Math.abs(newStep - step) < .1) return; step = newStep; cycle = step * slides.length; position = cycle * (1 + oldPhase); track.scrollLeft = position; updateStatus(); syncPlayback(); } function holdForInteraction() { interactionUntil = performance.now() + 3500; clearTimeout(resumeTimer); syncPlayback(); resumeTimer = setTimeout(syncPlayback, 3550); } function goTo(index) { holdForInteraction(); position = cycle + ((index % slides.length + slides.length) % slides.length) * step; track.scrollLeft = position; updateStatus(); } previous.addEventListener('click', function () { goTo(currentIndex() - 1); }); next.addEventListener('click', function () { goTo(currentIndex() + 1); }); toggle.addEventListener('click', function () { userPaused = !userPaused; syncPlayback(); }); track.addEventListener('keydown', function (event) { if (event.target !== track) return; if (event.key === 'ArrowRight') { event.preventDefault(); goTo(currentIndex() + 1); } if (event.key === 'ArrowLeft') { event.preventDefault(); goTo(currentIndex() - 1); } if (event.key === 'Home') { event.preventDefault(); goTo(0); } if (event.key === 'End') { event.preventDefault(); goTo(slides.length - 1); } }); carousel.addEventListener('pointerenter', function (event) { if (event.pointerType === 'mouse') { hovering = true; syncPlayback(); } }); carousel.addEventListener('pointerleave', function (event) { if (event.pointerType === 'mouse') { hovering = false; syncPlayback(); } }); carousel.addEventListener('focusin', function () { focused = true; syncPlayback(); }); carousel.addEventListener('focusout', function () { setTimeout(function () { focused = carousel.contains(document.activeElement); syncPlayback(); }, 0); }); track.addEventListener('pointerdown', function () { touching = true; syncPlayback(); }, {passive:true}); function release() { if (touching) { touching = false; holdForInteraction(); } } window.addEventListener('pointerup', release, {passive:true}); window.addEventListener('pointercancel', release, {passive:true}); track.addEventListener('wheel', holdForInteraction, {passive:true}); track.addEventListener('scroll', function () { if (frame === null && cycle && !touching) { position = wrap(track.scrollLeft); if (Math.abs(track.scrollLeft - position) > 1) track.scrollLeft = position; } updateStatus(); }, {passive:true}); document.addEventListener('visibilitychange', syncPlayback); reducedMotion.addEventListener('change', function () { userPaused = reducedMotion.matches; syncPlayback(); }); if ('IntersectionObserver' in window) { new IntersectionObserver(function (entries) { inView = entries[0].isIntersecting; syncPlayback(); }, {threshold:0}).observe(carousel); } if ('ResizeObserver' in window) new ResizeObserver(measure).observe(track); else window.addEventListener('resize', measure); measure(); syncPlayback(); }); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initReviews, {once:true}); else initReviews(); })();



