Emergency Drain Unblocking Dubai β 24/7, From 450 AED/hr
Contact on WHATSAPP
Available Right Now60-Min ResponseFrom 450 AED / hr+971 58 570 7110No Fix. No Charge.
Certified Technicians On Standby
Emergency Drain Unblocking with 100% Money Back Guarantee
Blocked Drain? We Arrive in 60 Minutes. Day or Night.
Professional Emergency Drain Unblocking Services in Dubai
Blocked toilet flooding your bathroom? Drain backing up at 2am? We handle every emergency drain blockage in Dubai fast. Our certified team uses high-pressure jetting to clear any blockage on the first visit. If we do not fix it, you pay nothing.
We fix blocked drains and toilets fast. All property types. All areas of Dubai. Prices from 450 AED per hour with a clear quote before we start.
π½
Emergency Toilet Unblocking
Toilet blocked solid or not flushing? We provide emergency toilet unblocking across Dubai within 60 minutes. Fixed on the first visit or you pay nothing.
π
Emergency Blocked Drain Clearance
Water backing up, bad smells or flooding under sinks? Our team clears any emergency blocked drain in Dubai fast. Clean work, no mess left behind.
π
Emergency Drain Unblocking Near You
We cover every area of Dubai. Need emergency drain unblocking near you right now? The closest technician is dispatched to your address straight away.
βοΈ
Emergency Drain Blockage Removal
Grease buildup, tree roots, foreign objects or collapsed pipes. High-pressure water jetting and CCTV for complete emergency drain blockage removal on the first visit.
π¦
CCTV Drain Inspection
Recurring blockages? We insert a professional CCTV camera into your pipes to find the exact problem. No guesswork, no unnecessary digging, fixed permanently.
π¦
High-Pressure Water Jetting
Professional grade jetting equipment that blasts through the toughest grease, scale and root blockages. No drain is too difficult for our team.
Not Sure What You Are Dealing With?
Send us a message. Describe the problem. We will tell you exactly what is needed and at what cost before you commit to anything.
Residential and Commercial Emergency Drain Services
Whether it is a family home at midnight or a restaurant during peak service, we respond fast and fix it properly.
π Residential
Home and Apartment Emergency Drain Services
A blocked drain at home is stressful. A blocked toilet at 2am is a nightmare. Our residential team has handled over 8,000 home emergencies across Dubai. We arrive fast, work clean and leave your home exactly as we found it.
Emergency toilet unblocking
Kitchen and bathroom drain blockages
Shower and bathtub drain clearance
Outdoor drain and soakaway blockages
Apartments, villas and townhouses
Available 24 hours, 7 days a week
π’ Commercial
Business and Commercial Emergency Drain Services
A blocked drain in a restaurant, hotel or office does not just cause inconvenience. It costs you customers and revenue. Our commercial team understands urgency. We respond faster, work around your schedule and minimise disruption.
Restaurant and hotel kitchen drains
Office building drainage systems
Retail and shopping centre drains
Grease trap emergency clearance
Industrial and warehouse drains
Priority response for commercial clients
Why Choose Us
The Emergency Drain Team Dubai Calls First
When you have an emergency blocked drain at midnight, you need a team that picks up the phone, shows up fast and fixes it the same visit.
1
On Site in 60 Minutes. Guaranteed.
We commit to 60 minutes for emergency drain unblocking near you across all Dubai areas. Miss that window and the call-out fee is waived. No arguments.
2
Licensed, Insured, Background Checked
Every technician is certified and fully insured. You get a trained professional at your door, not a subcontractor working off a phone call.
3
Clear Price Before We Start
Starting from 450 AED per hour. We give you a firm quote before touching anything. No inflated bills after the job. No call-out surprises on the invoice.
4
Available Every Hour, Every Day
3am on a Friday. Public holiday. Weekend in Ramadan. It does not matter. Our lines are open and technicians are dispatching around the clock.
5
Right Equipment. Fixed First Time.
Every van carries high-pressure jetting machines, electric eels and a CCTV camera. We find blockages and clear them on the first visit. 98% success rate.
6
No Fix. No Charge. Simple.
If we cannot clear your emergency drain blockage, you do not pay a single dirham. We back every job with a 100% money-back guarantee. No small print.
Transparent Pricing
Simple Pricing. No Surprises.
We quote clearly before we start. You know the exact cost before any work begins. No hidden call-out fees. No shock invoices when the job is done.
From450AED / hr
Final price depends on blockage type and severity. We always quote upfront.
We guarantee a certified technician at your door within 60 minutes for any emergency drain blockage removal call in Dubai. If we arrive late, the call-out fee is waived. If we cannot fix the blockage, you pay zero. No excuses, no small print.
Common questions about emergency toilet unblocking, emergency blocked drain clearance and pricing in Dubai.
We dispatch a certified technician within 60 minutes for any emergency blocked drain in Dubai. Our team operates 24 hours a day, 7 days a week, including public holidays. Miss the 60-minute window and your call-out fee is waived.
Yes. Emergency toilet unblocking is available 24 hours a day. It does not matter if it is 2am or a public holiday. We answer the call and dispatch a plumber immediately. Fixed on the first visit or you pay nothing.
We cover every area of Dubai for emergency drain unblocking near you. Call or WhatsApp with your location and we dispatch the closest available technician straight to your address.
Our emergency drain blockage removal starts from 450 AED per hour. We provide a clear upfront quote before any work begins. No hidden fees, no call-out charges, no surprise invoices after the job is done.
If we cannot clear your emergency drain blockage, you do not pay a single dirham. Our 100% money-back guarantee applies to every job. No arguments, no delays, no small print.
Yes. WhatsApp is our fastest booking method. Message +971585707110, share your location and describe the problem. We confirm and dispatch within minutes.
Your Drain Is Blocked. We Fix It Today.
Every minute a blocked drain goes unfixed, the damage grows. Call or WhatsApp now. A certified technician will be at your door in 60 minutes. Prices from 450 AED per hour. No fix means no charge.
Emergency Drain Unblocking Near You Across All Dubai
We cover every area in Dubai. Call and the closest certified technician is dispatched to you immediately.
π Zabeel Secondπ Zabeel Firstπ World Islandsπ Umm Suqeim Thirdπ Umm Suqeim Secondπ Umm Suqeim Firstπ Umm Hurair Secondπ Umm Hurair Firstπ Umm Al Sheifπ Trade Centre 2π Trade Centre 1π Palm Jumeirahπ Oud Methaπ Jumeirah Thirdπ Jumeirah Secondπ Jumeirah Island 2π Jumeirah Firstπ Jumeirah Bayπ Ghadeer Al Tairπ Dubai Maritime Cityπ Dubai Marinaπ Downtown Dubaiπ Al Waslπ Al Thanyah Thirdπ Al Thanyah Secondπ Al Thanyah Fourthπ Al Thanyah Firstπ Al Thanyah Fifthπ Al Sufouh Secondπ Al Sufouh Firstπ Al Souk Al Kabirπ Al Shindaghaπ Al Satwaπ Al Safa Secondπ Al Safa Firstπ Al Rifaπ Al Quoz Thirdπ Al Quoz Industrial Thirdπ Al Quoz Industrial Secondπ Al Quoz Industrial Fourthπ Al Quoz Industrial Firstπ Al Quoz Fourthπ Al Quoz Firstπ Al Markadaπ Al Mankhoolπ Al Manaraπ Al Kifafπ Al Karamaπ Business Bayπ Al Jafiliyaπ Al Jaddafπ Al Hudaibaπ Al Hamriyaπ Al Barsha Thirdπ Al Barsha Secondπ Al Barsha Firstπ Al Badaπ Springs 1π Springs 2π Springs 3π Springs 4π Springs 5π Springs 6π Springs 7π Springs 8π Springs 9π Springs 10π Springs 11π Springs 12π Springs 13π Springs 14π Springs 15π Meadows 1π Meadows 2π Meadows 3π Meadows 4π Meadows 5π Meadows 6π Zabeel Secondπ Zabeel Firstπ World Islandsπ Umm Suqeim Thirdπ Umm Suqeim Secondπ Umm Suqeim Firstπ Umm Hurair Secondπ Umm Hurair Firstπ Umm Al Sheifπ Trade Centre 2π Trade Centre 1π Palm Jumeirahπ Oud Methaπ Jumeirah Thirdπ Jumeirah Secondπ Jumeirah Island 2π Jumeirah Firstπ Jumeirah Bayπ Ghadeer Al Tairπ Dubai Maritime Cityπ Dubai Marinaπ Downtown Dubaiπ Al Waslπ Al Thanyah Thirdπ Al Thanyah Secondπ Al Thanyah Fourthπ Al Thanyah Firstπ Al Thanyah Fifthπ Al Sufouh Secondπ Al Sufouh Firstπ Al Souk Al Kabirπ Al Shindaghaπ Al Satwaπ Al Safa Secondπ Al Safa Firstπ Al Rifaπ Al Quoz Thirdπ Al Quoz Industrial Thirdπ Al Quoz Industrial Secondπ Al Quoz Industrial Fourthπ Al Quoz Industrial Firstπ Al Quoz Fourthπ Al Quoz Firstπ Al Markadaπ Al Mankhoolπ Al Manaraπ Al Kifafπ Al Karamaπ Business Bayπ Al Jafiliyaπ Al Jaddafπ Al Hudaibaπ Al Hamriyaπ Al Barsha Thirdπ Al Barsha Secondπ Al Barsha Firstπ Al Badaπ Springs 1π Springs 2π Springs 3π Springs 4π Springs 5π Springs 6π Springs 7π Springs 8π Springs 9π Springs 10π Springs 11π Springs 12π Springs 13π Springs 14π Springs 15π Meadows 1π Meadows 2π Meadows 3π Meadows 4π Meadows 5π Meadows 6
π Meadows 7π Meadows 8π Meadows 9π Al Kheeranπ Ras Al Khorπ Al Khairan Firstπ Nad Al Hammarπ Al Warqaa Firstπ Al Warqaa Secondπ Al Warqaa Thirdπ Al Warqaa Fourthπ Al Warqaa Fifthπ Al Athbahπ Palm Jebel Aliπ Hessyan Firstπ Hessyan Secondπ Saih Shuaib 1π Jebel Ali Industrial Thirdπ Jebel Ali Industrial Secondπ Madinat Al Mataarπ Saih Shuaib 2π Saih Shuaib 3π Saih Shuaib 4π Jebel Ali Firstπ Jebel Ali Secondπ Jebel Ali Thirdπ Mena Jebel Aliπ Dubai Investment Park Secondπ Dubai Investment Park Firstπ Jebel Ali Industrial Firstπ Bu Kadraπ Ras Al Khor Industrial Firstπ Ras Al Khor Industrial Secondπ Ras Al Khor Industrial Thirdπ Nad Al Sheba Secondπ Nad Al Sheba Thirdπ Nad Al Sheba Fourthπ Nad Al Sheba Firstπ Warsan Firstπ Warsan Secondπ Warsan Fourthπ Nad Hessaπ Hadaeq Sheikh Mohammed Bin Rashidπ Wadi Al Safa 2π Wadi Al Safa 3π Wadi Al Safa 4π Wadi Al Safa 5π Wadi Al Safa 6π Wadi Al Safa 7π Al Barsha South Firstπ Al Barsha South Secondπ Al Barsha South Thirdπ Al Hebiah Firstπ Al Hebiah Secondπ Al Hebiah Thirdπ Al Hebiah Sixthπ Al Barsha South Fourthπ Al Hebiah Fourthπ Al Hebiah Fifthπ Al Barsha South Fifthπ Me'aisem Firstπ Me'aisem Secondπ Al Awir Firstπ Al Awir Secondπ Enkhaliπ Al Wohooshπ Lehbab Firstπ Al Meryalπ Nazwahπ Warsan 3π Al Rowaiyah Firstπ Al Rowaiyah Secondπ Al Rowaiyah Thirdπ Mereiyeelπ Umm Al Damanπ Le Hemairaπ Lehbab Secondπ Umm Al Mo'meneenπ Meadows 7π Meadows 8π Meadows 9π Al Kheeranπ Ras Al Khorπ Al Khairan Firstπ Nad Al Hammarπ Al Warqaa Firstπ Al Warqaa Secondπ Al Warqaa Thirdπ Al Warqaa Fourthπ Al Warqaa Fifthπ Al Athbahπ Palm Jebel Aliπ Hessyan Firstπ Hessyan Secondπ Saih Shuaib 1π Jebel Ali Industrial Thirdπ Jebel Ali Industrial Secondπ Madinat Al Mataarπ Saih Shuaib 2π Saih Shuaib 3π Saih Shuaib 4π Jebel Ali Firstπ Jebel Ali Secondπ Jebel Ali Thirdπ Mena Jebel Aliπ Dubai Investment Park Secondπ Dubai Investment Park Firstπ Jebel Ali Industrial Firstπ Bu Kadraπ Ras Al Khor Industrial Firstπ Ras Al Khor Industrial Secondπ Ras Al Khor Industrial Thirdπ Nad Al Sheba Secondπ Nad Al Sheba Thirdπ Nad Al Sheba Fourthπ Nad Al Sheba Firstπ Warsan Firstπ Warsan Secondπ Warsan Fourthπ Nad Hessaπ Hadaeq Sheikh Mohammed Bin Rashidπ Wadi Al Safa 2π Wadi Al Safa 3π Wadi Al Safa 4π Wadi Al Safa 5π Wadi Al Safa 6π Wadi Al Safa 7π Al Barsha South Firstπ Al Barsha South Secondπ Al Barsha South Thirdπ Al Hebiah Firstπ Al Hebiah Secondπ Al Hebiah Thirdπ Al Hebiah Sixthπ Al Barsha South Fourthπ Al Hebiah Fourthπ Al Hebiah Fifthπ Al Barsha South Fifthπ Me'aisem Firstπ Me'aisem Secondπ Al Awir Firstπ Al Awir Secondπ Enkhaliπ Al Wohooshπ Lehbab Firstπ Al Meryalπ Nazwahπ Warsan 3π Al Rowaiyah Firstπ Al Rowaiyah Secondπ Al Rowaiyah Thirdπ Mereiyeelπ Umm Al Damanπ Le Hemairaπ Lehbab Secondπ Umm Al Mo'meneen
π Marghamπ Al Mahaπ Umm Eselayπ Remahπ Margabπ Yaraahπ Hattaπ Madinat Hind 1π Madinat Hind 2π Madinat Hind 3π Madinat Hind 4π Al Yufrah 1π Al Marmoomπ Al Yufrah 2π Al Yalayis 1π Al Yalayis 2π Al Yalayis 3π Al Yalayis 4π Al Yalayis 5π Al Lesailyπ Grayteesahπ Al Fagaaπ Saih Al Salamπ Al Hathmahπ Madinat Latifaπ Ghadeer Barashyπ Saih Al Dahalπ Al O'shooshπ Saih Shua'alahπ Mugatrahπ Al Layan 1π Al Layan 2π Hefairπ Al Nahdaπ Al Qusaisπ Al Qusais Industrial Firstπ Al Qusais Industrial Secondπ Al Qusais Industrial Thirdπ Al Qusais Industrial Fourthπ Al Qusais Industrial Fifthπ Muhaisnahπ Muhaisnah Firstπ Muhaisnah Secondπ Muhaisnah Thirdπ Muhaisnah Fourthπ Al Twarπ Al Twar Firstπ Al Twar Secondπ Al Twar Thirdπ Al Mizharπ Al Mizhar Firstπ Al Mizhar Secondπ Al Mizhar Thirdπ Mirdifπ Al Khawaneejπ Al Khawaneej Firstπ Al Khawaneej Secondπ Al Rashidiyaπ Al Garhoudπ Umm Ramoolπ Oud Al Muteenaπ Al Barahaπ Al Muteenaπ Al Murarπ Al Riggaπ Al Sabkhaπ Al Buteenπ Al Rasπ Naifπ Al Dhagayaπ Ayal Nasirπ Corniche Deiraπ Port Saeedπ Rigga Al Buteenπ Hor Al Anzπ Abu Hailπ Al Mamzarπ Marghamπ Al Mahaπ Umm Eselayπ Remahπ Margabπ Yaraahπ Hattaπ Madinat Hind 1π Madinat Hind 2π Madinat Hind 3π Madinat Hind 4π Al Yufrah 1π Al Marmoomπ Al Yufrah 2π Al Yalayis 1π Al Yalayis 2π Al Yalayis 3π Al Yalayis 4π Al Yalayis 5π Al Lesailyπ Grayteesahπ Al Fagaaπ Saih Al Salamπ Al Hathmahπ Madinat Latifaπ Ghadeer Barashyπ Saih Al Dahalπ Al O'shooshπ Saih Shua'alahπ Mugatrahπ Al Layan 1π Al Layan 2π Hefairπ Al Nahdaπ Al Qusaisπ Al Qusais Industrial Firstπ Al Qusais Industrial Secondπ Al Qusais Industrial Thirdπ Al Qusais Industrial Fourthπ Al Qusais Industrial Fifthπ Muhaisnahπ Muhaisnah Firstπ Muhaisnah Secondπ Muhaisnah Thirdπ Muhaisnah Fourthπ Al Twarπ Al Twar Firstπ Al Twar Secondπ Al Twar Thirdπ Al Mizharπ Al Mizhar Firstπ Al Mizhar Secondπ Al Mizhar Thirdπ Mirdifπ Al Khawaneejπ Al Khawaneej Firstπ Al Khawaneej Secondπ Al Rashidiyaπ Al Garhoudπ Umm Ramoolπ Oud Al Muteenaπ Al Barahaπ Al Muteenaπ Al Murarπ Al Riggaπ Al Sabkhaπ Al Buteenπ Al Rasπ Naifπ Al Dhagayaπ Ayal Nasirπ Corniche Deiraπ Port Saeedπ Rigga Al Buteenπ Hor Al Anzπ Abu Hailπ Al Mamzar
* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
*/(function () {
'use strict';/* βββββββββββββββββββββββββββββββββββββββ
CONFIG β update n8n webhook URL only
βββββββββββββββββββββββββββββββββββββββ */
const CFG = {
webhookUrl: 'https://greasetrapcleaning.ae/wp-admin/admin-ajax.php?action=drain_lead',
cookieDays: 30,
waNumber: '971585707110',
convValue: 150,
currency: 'AED',
};/* βββββββββββββββββββββββββββββββββββββββ
KEYWORD β CONTENT MAP
Each ad group has a set of trigger keywords.
First match wins.
βββββββββββββββββββββββββββββββββββββββ */
const KW_MAP = [
{
// Ad Group 1 β Blocked Drain / Drain Unblocking
match: [
'blocked drain', 'drain unblocking', 'unblock drain',
'blocked pipes', 'blocked sink', 'drain blockage',
'blocked basin', 'blocked toilet', 'drain clearance',
],
h1: 'Drain Unblocking Dubai',
h1sub: 'Blocked Drain Β· Blocked Sink Β· Blocked Pipes',
sub: 'Blocked Drain in Dubai? We Arrive in 60 Minutes β Day or Night.',
tag: 'Drain unblocking Β· Blocked sink Β· Blocked pipes Β· Blocked basin drain Β· Villa drain unblocking',
wa: 'Hi, I need drain unblocking in Dubai! Please help ASAP.',
canonical: 'https://greasetrapcleaning.ae/drain-unblocking/',
},
{
// Ad Group 2 β Drain Line Cleaning & Jetting
match: [
'drain jetting', 'drain line jetting', 'drain line cleaning',
'sewer jetting', 'drainage cleaning', 'high pressure jetting',
'pipe jetting', 'hydrojet', 'drain cleaning dubai',
'drain line', 'sewer drain',
],
h1: 'Drain Line Cleaning & Jetting Dubai',
h1sub: 'High-Pressure Jetting Β· Sewer Jetting Β· Drainage Cleaning',
sub: 'Drain Line Blocked or Scaled? We Jet-Clean It in 60 Minutes.',
tag: 'Drain line jetting Β· Sewer drain jetting Β· High pressure pipe jetting Β· CCTV drain inspection',
wa: 'Hi, I need drain line cleaning and jetting in Dubai! Please help.',
canonical: 'https://greasetrapcleaning.ae/drain-line-cleaning-jetting/',
},
{
// Ad Group 3 β Emergency Drain (default fallback)
match: [
'emergency drain', 'emergency blocked', '24 hour drain',
'24/7 drain', 'urgent drain', 'same day drain',
'overnight drain', 'emergency toilet',
],
h1: 'Emergency Drain Unblocking Dubai',
h1sub: 'Blocked Drain Β· Toilet Unblocking Β· Villa & Home Drain Cleaning',
sub: 'Blocked Drain or Blocked Pipes? We Arrive in 60 Minutes β Day or Night.',
tag: 'Emergency toilet unblocking Β· Villa drain cleaning Β· Home drain unblocking Β· Kitchen drain cleaning',
wa: 'Hi, I need EMERGENCY drain unblocking in Dubai ASAP!',
canonical: 'https://greasetrapcleaning.ae/emergency-drain-line-unblock/',
},
{
// Ad Group 4 β Location / Near Me
match: [
'near me', 'drain cleaning near', 'drain unblocking near',
'drain jetting near', 'local drain', 'drain service near',
'drain near me',
],
h1: 'Drain Cleaning Near Me Dubai',
h1sub: 'Blocked Drain Near Me Β· Drain Unblocking Services Near Me Β· Drain Jetting Near Me',
sub: 'Blocked Drain Near You in Dubai? Local Team Arrives in 60 Minutes.',
tag: 'Drain cleaning near me Β· Blocked drain near me Β· Drain jetting near me Β· Local drain experts',
wa: 'Hi, I need drain cleaning near me in Dubai! Please help.',
canonical: 'https://greasetrapcleaning.ae/drain-cleaning-near-me/',
},
];// Default if nothing matches
const KW_DEFAULT = KW_MAP[2];/* βββββββββββββββββββββββββββββββββββββββ
PARSE URL PARAMETERS
βββββββββββββββββββββββββββββββββββββββ */
function getParams() {
const p = new URLSearchParams(window.location.search);
return {
gclid: p.get('gclid') || '',
keyword: (p.get('kw') || p.get('keyword') || p.get('utm_term') || '').toLowerCase().trim(),
utm_source: p.get('utm_source') || 'google',
utm_medium: p.get('utm_medium') || 'cpc',
utm_campaign: p.get('utm_campaign') || '',
utm_content: p.get('utm_content') || '',
utm_term: p.get('utm_term') || '',
device: p.get('device') || '',
loc: p.get('loc') || '',
network: p.get('network') || '',
matchtype: p.get('matchtype') || '',
};
}/* βββββββββββββββββββββββββββββββββββββββ
SESSION ID
βββββββββββββββββββββββββββββββββββββββ */
function getSessionId() {
let sid = sessionStorage.getItem('_trk_sid');
if (!sid) {
sid = 'sid_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 7);
sessionStorage.setItem('_trk_sid', sid);
}
return sid;
}/* βββββββββββββββββββββββββββββββββββββββ
STORAGE (localStorage + cookie)
βββββββββββββββββββββββββββββββββββββββ */
function setCookie(name, val, days) {
const exp = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = name + '=' + encodeURIComponent(val) + ';expires=' + exp + ';path=/;SameSite=Lax';
}function saveData(data) {
try { localStorage.setItem('_trk', JSON.stringify(data)); } catch (e) {}
if (data.gclid) setCookie('_gclid', data.gclid, CFG.cookieDays);
if (data.keyword) setCookie('_trk_kw', data.keyword, CFG.cookieDays);
}function loadData() {
try { return JSON.parse(localStorage.getItem('_trk') || '{}'); } catch (e) { return {}; }
}/* βββββββββββββββββββββββββββββββββββββββ
KEYWORD MATCHING
βββββββββββββββββββββββββββββββββββββββ */
function matchContent(kw) {
if (!kw) return KW_DEFAULT;
for (var i = 0; i < KW_MAP.length; i++) {
for (var j = 0; j < KW_MAP[i].match.length; j++) {
var term = KW_MAP[i].match[j];
if (kw.indexOf(term) !== -1 || term.indexOf(kw) !== -1) {
return KW_MAP[i];
}
}
}
return KW_DEFAULT;
}/* βββββββββββββββββββββββββββββββββββββββ
DOM INJECTION
βββββββββββββββββββββββββββββββββββββββ */
function injectContent(content, rawKw) {
// H1 β main keyword heading
var h1 = document.querySelector('h1');
if (h1) {
h1.innerHTML = content.h1 + ' ' + content.h1sub + '';
}// Page title
if (rawKw) {
var titleKw = rawKw.replace(/\b\w/g, function (c) { return c.toUpperCase(); });
document.title = titleKw + ' Dubai | 24/7 | 60-Min Response | 450 AED/Hr';
}// Hero subtitle
var sub = document.querySelector('.hero-sub, [data-inject="sub"]');
if (sub) sub.textContent = content.sub;// Hero tagline
var tag = document.querySelector('.hero-tagline, .hero-tag, [data-inject="tag"]');
if (tag) tag.textContent = content.tag;// Canonical URL
var canon = document.querySelector('link[rel="canonical"]');
if (!canon) {
canon = document.createElement('link');
canon.rel = 'canonical';
document.head.appendChild(canon);
}
canon.href = content.canonical;// Update WhatsApp message on all WA links
var waMsg = encodeURIComponent(content.wa);
var waLinks = document.querySelectorAll('a[href*="wa.me"]');
for (var k = 0; k < waLinks.length; k++) {
waLinks[k].href = 'https://wa.me/' + CFG.waNumber + '?text=' + waMsg;
}
}function injectLocation(geo) {
if (!geo || !geo.area) return;// Hero badge β show the customer's area
var badge = document.querySelector('.hero-badge, .badge, [data-inject="badge"]');
if (badge) {
var dotEl = badge.querySelector('.t-dot, .tdot');
var dotHtml = dotEl ? dotEl.outerHTML
: '';
badge.innerHTML = dotHtml + ' Serving ' + geo.area + ' β Certified Technicians On Standby 24/7';
}// Personalise hero subtitle with area name
var sub = document.querySelector('.hero-sub, [data-inject="sub"]');
if (sub && geo.area !== 'Dubai') {
var t = sub.textContent;
if (t.indexOf(geo.area) === -1) {
sub.textContent = t.replace('Dubai?', geo.area + ', Dubai?');
}
}
}/* βββββββββββββββββββββββββββββββββββββββ
GEOLOCATION β NOMINATIM REVERSE GEOCODE
(OpenStreetMap β free, no API key)
βββββββββββββββββββββββββββββββββββββββ */
function getGeo(cb) {
if (!navigator.geolocation) return cb(null);
navigator.geolocation.getCurrentPosition(
function (pos) {
var lat = pos.coords.latitude;
var lng = pos.coords.longitude;
fetch(
'https://nominatim.openstreetmap.org/reverse?lat=' + lat + '&lon=' + lng + '&format=json&accept-language=en',
{ headers: { 'Accept-Language': 'en' } }
)
.then(function (r) { return r.json(); })
.then(function (d) {
var addr = d.address || {};
var area = addr.suburb || addr.quarter || addr.city_district
|| addr.neighbourhood || addr.town || addr.city || 'Dubai';
cb({ lat: lat.toFixed(5), lng: lng.toFixed(5), area: area });
})
.catch(function () {
cb({ lat: lat.toFixed(5), lng: lng.toFixed(5), area: 'Dubai' });
});
},
function () { cb(null); },
{ timeout: 6000, maximumAge: 300000 }
);
}/* βββββββββββββββββββββββββββββββββββββββ
SEND TO N8N WEBHOOK
Uses fetch with no-cors to avoid CORS preflight issues
βββββββββββββββββββββββββββββββββββββββ */
function send(eventType, extra) {
var stored = loadData();
var payload = Object.assign({
event: eventType,
session_id: getSessionId(),
timestamp: new Date().toISOString(),
page_url: window.location.href,
page_path: window.location.pathname,
referrer: document.referrer || '',
user_agent: navigator.userAgent,
screen: screen.width + 'x' + screen.height,
conv_value: CFG.convValue,
currency: CFG.currency,
}, stored, extra);fetch(CFG.webhookUrl, {
method: 'POST',
body: JSON.stringify(payload),
mode: 'no-cors',
keepalive: true,
}).catch(function () {});// GTM dataLayer push
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'drain_' + eventType, lead_data: payload });return payload;
}/* βββββββββββββββββββββββββββββββββββββββ
CTA CLICK INTERCEPTORS
βββββββββββββββββββββββββββββββββββββββ */
function askLeadInfo(waMsg, cb) {
// ββ 2-step pre-WhatsApp qualifier popup ββ
var stored = loadData();var PROPS = [
{ label: 'π Apartment', value: 'Apartment' },
{ label: 'π‘ Villa', value: 'Villa' },
{ label: 'π½οΈ Restaurant', value: 'Restaurant'},
{ label: 'π’ Other', value: 'Other' },
];
var URGENCY = [
{ label: 'π΄ Right Now', value: 'Right Now', sub: 'I need help immediately' },
{ label: 'π‘ Within 6 Hours', value: 'Within 6 Hours', sub: 'Same-day service' },
{ label: 'π’ Today', value: 'Today', sub: 'Before end of day' },
{ label: 'βͺ Not Urgent', value: 'Not Urgent', sub: 'Just planning ahead' },
];var sel = { prop: stored.property_type || '', urgency: stored.urgency || '', name: stored.lead_name || '' };var overlay = document.createElement('div');
overlay.style.cssText = [
'position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:99999',
'display:flex;align-items:flex-end;justify-content:center',
'font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',
].join(';');function render(step) {
var html = [
'
',
// Handle bar
'',
// Step indicator
'
',
'',
'',
'',
'
',
].join('');if (step === 1) {
html += '
What type of property?
';
html += '
Helps us send the right team
';
html += '
';
PROPS.forEach(function (p) {
var active = sel.prop === p.value;
html += '';
});
html += '
';} else if (step === 2) {
html += '
How urgent is this?
';
html += '
We prioritise based on urgency
';
html += '
';
URGENCY.forEach(function (u) {
var active = sel.urgency === u.value;
html += '';
});
html += '
';} else if (step === 3) {
html += '
Almost there π
';
html += '
Your name so our team can greet you properly
';
html += '';
html += '';
}html += '
'; // close card
overlay.innerHTML = html;// Step 1 β property selection
if (step === 1) {
overlay.querySelectorAll('[data-prop]').forEach(function (btn) {
btn.addEventListener('click', function () {
sel.prop = btn.getAttribute('data-prop');
render(2);
});
});
}// Step 2 β urgency selection
if (step === 2) {
overlay.querySelectorAll('[data-urgency]').forEach(function (btn) {
btn.addEventListener('click', function () {
sel.urgency = btn.getAttribute('data-urgency');
render(3);
});
});
}// Step 3 β name + submit
if (step === 3) {
var ni = overlay.querySelector('#_trk_ni');
var go = overlay.querySelector('#_trk_go');
setTimeout(function () { if (ni) ni.focus(); }, 100);function submit() {
sel.name = (ni ? ni.value.trim() : '') || 'Customer';
document.body.removeChild(overlay);
// Persist for next visit
var data = loadData();
data.property_type = sel.prop;
data.urgency = sel.urgency;
data.lead_name = sel.name;
saveData(data);
cb(sel);
}
go.addEventListener('click', submit);
if (ni) ni.addEventListener('keydown', function (e) { if (e.key === 'Enter') submit(); });
}// Close on backdrop tap
overlay.addEventListener('click', function (e) {
if (e.target === overlay) document.body.removeChild(overlay);
}, { once: true });
}// If we already have all 3 from localStorage β skip popup
if (sel.prop && sel.urgency && sel.name) {
return cb(sel);
}document.body.appendChild(overlay);
render(sel.prop ? (sel.urgency ? 3 : 2) : 1);
}function attachTracking() {
// ββ WhatsApp buttons ββ
var waEls = document.querySelectorAll('a[href*="wa.me"], .btn-wa, .swa-btn');
for (var i = 0; i < waEls.length; i++) {
(function (el) {
el.addEventListener('click', function (e) {
e.preventDefault();
var href = el.href || (el.closest && el.closest('a') ? el.closest('a').href : '');
var waMsg = '';
try {
waMsg = decodeURIComponent(new URL(href).searchParams.get('text') || '');
} catch (e2) {}askLeadInfo(waMsg, function (info) {
var urgencyEmoji = { 'Right Now': 'π΄', 'Within 6 Hours': 'π‘', 'Today': 'π’', 'Not Urgent': 'βͺ' };
var stored = loadData();
var finalMsg = [
'Hi! I need help with my drain. π',
'π€ Name: ' + info.name,
'π Property: ' + info.prop,
'β° Urgency: ' + (urgencyEmoji[info.urgency] || '') + ' ' + info.urgency,
'π Area: ' + (stored.geo_area || 'Dubai'),
'π§ Issue: ' + (stored.content_variant || waMsg),
].join('\n');
var finalUrl = 'https://wa.me/' + CFG.waNumber + '?text=' + encodeURIComponent(finalMsg);
send('whatsapp_click', {
cta_type: 'whatsapp',
cta_text: (el.textContent || '').trim().slice(0, 80),
wa_message: finalMsg,
lead_name: info.name,
property_type: info.prop,
urgency: info.urgency,
});
window.open(finalUrl, '_blank');
});
});
})(waEls[i]);
}// ββ Phone / tel: links ββ
var telEls = document.querySelectorAll('a[href^="tel:"]');
for (var j = 0; j < telEls.length; j++) {
(function (el) {
el.addEventListener('click', function () {
send('call_click', {
cta_type: 'call',
cta_text: (el.textContent || '').trim().slice(0, 80),
});
});
})(telEls[j]);
}// ββ Gold call buttons (btn-gold / btn-g labelled "Call on:") ββ
var btnEls = document.querySelectorAll('.btn-gold, .btn-g');
for (var k = 0; k < btnEls.length; k++) {
(function (el) {
var txt = (el.textContent || '').toLowerCase();
if (txt.indexOf('call') !== -1 || txt.indexOf('phone') !== -1) {
el.addEventListener('click', function () {
send('call_click', {
cta_type: 'call',
cta_text: (el.textContent || '').trim().slice(0, 80),
});
});
}
})(btnEls[k]);
}
}/* βββββββββββββββββββββββββββββββββββββββ
INIT
βββββββββββββββββββββββββββββββββββββββ */
function init() {
var params = getParams();
var content = matchContent(params.keyword);// 1. Inject keyword content into DOM immediately (sync)
injectContent(content, params.keyword);// 2. Geolocation (async β non-blocking)
getGeo(function (geo) {
if (geo) injectLocation(geo);// 3. Persist everything + fire page_view event
var data = Object.assign({}, params, {
geo_lat: geo ? geo.lat : '',
geo_lng: geo ? geo.lng : '',
geo_area: geo ? geo.area : '',
content_variant: content.h1,
lead_status: 'new',
});
saveData(data);
send('page_view', data);
});// 4. Attach CTA trackers
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', attachTracking);
} else {
attachTracking();
}
}// Boot
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}})();