1<!DOCTYPE html> 2 3<html lang='en'> 4<head> 5 <meta charset='utf-8'> 6 <meta name='viewport' content='width=device-width, initial-scale=1'> 7 <meta http-equiv='X-UA-Compatible' content='IE=edge'> 8 <title>Top-Rated AC Replacement Near Me in Springdale & NWA | Franklin</title> 9 <meta name='description' content="Top-rated AC replacement quotes across Northwest Arkansas â always free. Honest repair-vs-replace advice, every rebate you qualify for, all-in pricing."/> 10 <link rel="canonical" href="https://www.getfranklin.com/services/ac-install"> 11 12 <meta property="og:title" content="Top-Rated AC Replacement Near Me in Springdale & NWA | Franklin"> 13 <meta property="og:description" content="Top-rated AC replacement quotes across Northwest Arkansas â always free. Honest repair-vs-replace advice, every rebate you qualify for, all-in pricing."> 14 <meta property="og:image" content="https://franklinair-assets.s3.amazonaws.com/static/media/share_ac_install.jpg"> 15 <meta property="og:url" content="https://www.getfranklin.com/services/ac-install"> 16 <meta name="twitter:card" content="summary_large_image"> 17 <meta property="og:site_name" content="Franklin AC, Plumbing, & Electrical"> 18 <meta name="twitter:image:alt" content="Franklin AC, Plumbing, & Electrical"> 19 <meta property="og:type" content="website"> 20 <meta property="og:locale" content="en_US"> 21 22 23
24<script type="application/ld+json"> 25{ 26 "@context": "https://schema.org", 27 "@graph": [ 28 { 29 "@type": ["LocalBusiness", "HVACBusiness", "Plumber", "Electrician"], 30 "@id": "https://www.getfranklin.com/#business", 31 "name": "Franklin AC, Plumbing, & Electrical", 32 "alternateName": "Franklin", 33 "url": "https://www.getfranklin.com", 34 "logo": "https://s3.amazonaws.com/franklinair-assets/static/media/logo.png", 35 "image": "https://s3.amazonaws.com/franklinair-assets/static/media/franklin_team.jpg", 36 "telephone": "+1-479-282-0003", 37 "email": "[email protected]", 38 "priceRange": "$$", 39 "description": "Family-owned HVAC, plumbing, and electrical services for Northwest Arkansas. Home of the $29 service call. Honest, upfront pricing â no surprises.", 40 "slogan": "Pricing is an open book.", 41 "address": { 42 "@type": "PostalAddress", 43 "streetAddress": "1500 S Thompson St, Suite A", 44 "addressLocality": "Springdale", 45 "addressRegion": "AR", 46 "postalCode": "72764", 47 "addressCountry": "US" 48 }, 49 "geo": { 50 "@type": "GeoCoordinates", 51 "latitude": 36.1867, 52 "longitude": -94.1288 53 }, 54 "openingHoursSpecification": [ 55 { 56 "@type": "OpeningHoursSpecification", 57 "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 58 "opens": "07:00", 59 "closes": "19:00" 60 } 61 ], 62 "areaServed": [ 63 {"@type": "City", "name": "Fayetteville", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 64 {"@type": "City", "name": "Bentonville", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 65 {"@type": "City", "name": "Rogers", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 66 {"@type": "City", "name": "Springdale", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 67 {"@type": "City", "name": "Bella Vista", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 68 {"@type": "City", "name": "Farmington", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 69 {"@type": "City", "name": "Centerton", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 70 {"@type": "City", "name": "Cave Springs", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 71 {"@type": "City", "name": "Lowell", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 72 {"@type": "City", "name": "Tontitown", "containedInPlace": {"@type":"State","name":"Arkansas"}}, 73 {"@type": "City", "name": "Siloam Springs", "containedInPlace": {"@type":"State","name":"Arkansas"}} 74 ], 75 "aggregateRating": { 76 "@type": "AggregateRating", 77 "ratingValue": "5", 78 "reviewCount": "1361", 79 "bestRating": "5", 80 "worstRating": "1" 81 }, 82 "review": [ 83 { 84 "@type": "Review", 85 "author": {"@type": "Person", "name": "Hannah Dow"}, 86 "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5", "worstRating": "1"}, 87 "reviewBody": "Axell was really helpful, knowledgable, and took his time finding answers and solutions to the problems he uncovered in our system.", 88 "datePublished": "2026-10-02", 89 "publisher": {"@type": "Organization", "name": "Google"} 90 }, 91 { 92 "@type": "Review", 93 "author": {"@type": "Person", "name": "Yoga Candice"}, 94 "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5", "worstRating": "1"}, 95 "reviewBody": "Adrian was very professional and polite! Answered all my questions kindly and got us all fixed up!", 96 "datePublished": "2026-10-02", 97 "publisher": {"@type": "Organization", "name": "Google"} 98 }, 99 { 100 "@type": "Review", 101 "author": {"@type": "Person", "name": "Joseph Proto"}, 102 "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5", "worstRating": "1"}, 103 "reviewBody": "Axell was awesome", 104 "datePublished": "2026-10-01", 105 "publisher": {"@type": "Organization", "name": "Google"} 106 }, 107 { 108 "@type": "Review", 109 "author": {"@type": "Person", "name": "Saul Ruvalcaba"}, 110 "reviewRating": {"@type": "Rating", "ratingValue": "5", "bestRating": "5", "worstRating": "1"}, 111 "reviewBody": "All the technicians who came to service my house today were very professional and able to answer any questions I had.", 112 "datePublished": "2026-10-01", 113 "publisher": {"@type": "Organization", "name": "Google"} 114 } 115 ], 116 "hasOfferCatalog": { 117 "@type": "OfferCatalog", 118 "name": "Home services", 119 "itemListElement": [ 120 {"@type":"Offer","itemOffered":{"@type":"Service","name":"AC repair","url":"https://www.getfranklin.com/services/ac-repair"}}, 121 {"@type":"Offer","itemOffered":{"@type":"Service","name":"AC installation & replacement","url":"https://www.getfranklin.com/services/ac-install"}}, 122 {"@type":"Offer","itemOffered":{"@type":"Service","name":"AC maintenance","url":"https://www.getfranklin.com/services/ac-maintenance"}}, 123 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Furnace repair","url":"https://www.getfranklin.com/services/furnace-repair"}}, 124 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Furnace installation","url":"https://www.getfranklin.com/services/furnace-install"}}, 125 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Mini-split installation","url":"https://www.getfranklin.com/services/mini-split-install"}}, 126 {"@type":"Offer","itemOffered":{"@type":"Service","name":"HVAC inspections","url":"https://www.getfranklin.com/services/hvac-inspections"}}, 127 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Aeroseal duct sealing","url":"https://www.getfranklin.com/services/duct-sealing"}}, 128 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Indoor air quality","url":"https://www.getfranklin.com/services/indoor-air-quality"}}, 129 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Plumbing services","url":"https://www.getfranklin.com/services/plumbing"}}, 130 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Water heater repair","url":"https://www.getfranklin.com/services/water-heater-repair"}}, 131 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Water heater replacement","url":"https://www.getfranklin.com/services/water-heater-replacement"}}, 132 {"@type":"Offer","itemOffered":{"@type":"Service","name":"Electrical services","url":"https://www.getfranklin.com/services/electrical"}} 133 ] 134 }, 135 "makesOffer": { 136 "@type": "Offer", 137 "name": "$29 Service Call", 138 "description": "Every in-home visit starts with a flat $29 service call. Your tech provides an all-in price before any work begins.", 139 "price": "29.00", 140 "priceCurrency": "USD" 141 }, 142 "knowsAbout": [ 143 "HVAC repair", "Air conditioning installation", "Furnace repair", 144 "Heat pump installation", "Mini-split systems", "Duct sealing", 145 "Indoor air quality", "Plumbing leak repair", "Drain cleaning", 146 "Water heater installation", "Water heater repair", "Sewer repair", 147 "Electrical troubleshooting", "Electrical panel upgrades", 148 "Outlet installation", "Lighting installation", "EV charger installation" 149 ], 150 "hasCredential": [ 151 {
152 "@type": "EducationalOccupationalCredential", 153 "credentialCategory": "license", 154 "name": "Arkansas HVAC License", 155 "identifier": "0003484", 156 "recognizedBy": {"@type": "GovernmentOrganization", "name": "Arkansas HVACR Licensing Board"} 157 }, 158 { 159 "@type": "EducationalOccupationalCredential", 160 "credentialCategory": "license", 161 "name": "Arkansas Electrical License", 162 "identifier": "RM-1111", 163 "recognizedBy": {"@type": "GovernmentOrganization", "name": "Arkansas Board of Electrical Examiners"} 164 }, 165 { 166 "@type": "EducationalOccupationalCredential", 167 "credentialCategory": "license", 168 "name": "Arkansas Master Plumber License", 169 "identifier": "MP6911", 170 "recognizedBy": {"@type": "GovernmentOrganization", "name": "Arkansas Department of Health Plumbing Division"} 171 } 172 ] 173 }, 174 { 175 "@type": "WebSite", 176 "@id": "https://www.getfranklin.com/#website", 177 "url": "https://www.getfranklin.com", 178 "name": "Franklin AC, Plumbing, & Electrical", 179 "publisher": {"@id": "https://www.getfranklin.com/#business"}, 180 "inLanguage": "en-US" 181 } 182 ] 183} 184</script>
184 185 186
187<script type="application/ld+json"> 188{ 189 "@context": "https://schema.org", 190 "@type": "Service", 191 "@id": "https://www.getfranklin.com/services/ac-install#service", 192 "name": "AC Installation & Replacement", 193 "serviceType": "AC Installation", 194 "category": "HVAC", 195 "url": "https://www.getfranklin.com/services/ac-install", 196 "provider": {"@id": "https://www.getfranklin.com/#business"}, 197 "areaServed": [ 198 {"@type": "City", "name": "Fayetteville"}, 199 {"@type": "City", "name": "Bentonville"}, 200 {"@type": "City", "name": "Rogers"}, 201 {"@type": "City", "name": "Springdale"}, 202 {"@type": "City", "name": "Bella Vista"}, 203 {"@type": "City", "name": "Farmington"}, 204 {"@type": "City", "name": "Centerton"}, 205 {"@type": "City", "name": "Cave Springs"}, 206 {"@type": "City", "name": "Lowell"}, 207 {"@type": "City", "name": "Tontitown"}, 208 {"@type": "City", "name": "Siloam Springs"} 209 ], 210 "offers": { 211 "@type": "Offer", 212 "name": "Free AC Replacement Quote", 213 "description": "No-cost in-home assessment and all-in replacement quote.", 214 "price": "0", 215 "priceCurrency": "USD" 216 } 217} 218</script>
vendor: 1 bytes, line 218
218
219<script type="application/ld+json"> 220{ 221 "@context": "https://schema.org", 222 "@type": "WebPage", 223 "@id": "https://www.getfranklin.com/services/ac-install", 224 "url": "https://www.getfranklin.com/services/ac-install", 225 "name": "Top-Rated AC Replacement Near Me in Springdale & NWA | Franklin", 226 "description": "Top-rated AC replacement quotes across Northwest Arkansas \u2014 always free. Honest repair-vs-replace advice, every rebate you qualify for, all-in pricing.", 227 "speakable": { 228 "@type": "SpeakableSpecification", 229 "cssSelector": [".fr-hero-title", ".fr-article-tldr"] 230 }, 231 "isPartOf": {"@id": "https://www.getfranklin.com/#website"}, 232 "about": {"@id": "https://www.getfranklin.com/#business"} 233} 234</script>
vendor: 1 bytes, line 234
234
235<script type="application/ld+json"> 236{ 237 "@context": "https://schema.org", 238 "@type": "BreadcrumbList", 239 "itemListElement": [ 240 {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.getfranklin.com/"}, 241 {"@type": "ListItem", "position": 2, "name": "Services", "item": "https://www.getfranklin.com/#services"}, 242 {"@type": "ListItem", "position": 3, "name": "AC Installation", "item": "https://www.getfranklin.com/services/ac-install"} 243 ] 244} 245</script>
245 246 247 248 249 <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin> 250 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 251 <link rel="preconnect" href="https://www.googletagmanager.com"> 252 <link rel="preconnect" href="https://dashboard.retellai.com" crossorigin> 253 <link rel="preconnect" href="https://load.usefomo.com"> 254 <link rel="dns-prefetch" href="https://franklinair-assets.s3.amazonaws.com"> 255 256 257 <link rel="preload" as="image" href="https://franklinair-assets.s3.amazonaws.com/static/media/hero_team.webp" type="image/webp" fetchpriority="high"> 258 259 <link href='https://fonts.googleapis.com/css?family=Libre+Franklin:400,600,700,800|Vollkorn:400,600,700&display=swap' rel='stylesheet'> 260 261 <link rel='stylesheet' href="https://franklinair-assets.s3.amazonaws.com/static/css/blog.css" type='text/css'/> 262 263
263<script defer src='https://code.jquery.com/jquery-1.11.3.min.js'></script>
263 264 265 <link rel="shortcut icon" type="image/png" href="https://franklinair-assets.s3.amazonaws.com/static/media/favicon.ico"/> 266 267 <meta name="google-site-verification" content="rTNGzJRVNNnKASl1OO8n3wgubGlKUNGsRVb4-8MAp8Y" /> 268 269
269<script>
vendor: 343 bytes, lines 269-273
269(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 270 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 271 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 272 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 273 })(window,document,'script','dataLayer','
273GTM-MPWMNC3
vendor: 3 bytes, line 273
273');
273</script>
273 274 275
275<script src="https://load.usefomo.com/api/v1/nRCa_CTvdW953-0Q4Dtp5Q/load.js" async></script>
275 276 277
277<script 278 id="retell-widget" 279 src="https://dashboard.retellai.com/retell-widget.js" 280 type="module" 281 async 282 data-public-key="public_key_b7511d40a1fa09a5e7fa7" 283 data-agent-id="agent_331eaef75e6c5c3cba5da7b88c" 284 data-title="Chat with Halo" 285 data-logo-url="https://franklinair-assets.s3.us-east-1.amazonaws.com/static/media/halo_avatar.jpg" 286 data-color="#3EC1CD" 287 data-bot-name="Halo" 288 data-popup-message="Hi there! My name is Halo. How can I help?" 289 data-show-ai-popup="true" 290 data-show-ai-popup-time="5" 291 data-auto-open="false" 292 ></script>
292 293 294 295
295<script> 296 (function() { 297 var AVATAR_URL = "https://franklinair-assets.s3.us-east-1.amazonaws.com/static/media/halo_avatar.jpg"; 298 var STYLE_ID = "fr-retell-overrides"; 299 var OVERRIDE_CSS = [ 300 ".retell-fab {", 301 " background-image: url('" + AVATAR_URL + "') !important;", 302 " background-size: cover !important;", 303 " background-position: center center !important;", 304 " background-repeat: no-repeat !important;", 305 " box-shadow: 0 0 0 3px #3EC1CD, 0 6px 20px rgba(0,0,0,0.25) !important;", 306 "}", 307 ".retell-fab > svg { display: none !important; }", 308 ".retell-agent-logo img {", 309 " border-radius: 50% !important;", 310 " object-fit: cover !important;", 311 " width: 28px !important;", 312 " height: 28px !important;", 313 "}", 314 // Pre-click popup message ("Hi there! My name is Halo..."): 315 // bump from default 14px to a more readable 17px and widen the 316 // bubble slightly so the longer text doesn't reflow awkwardly. 317 ".retell-ai-message-content {", 318 " font-size: 16px !important;", 319 " line-height: 26px !important;", 320 "}", 321 ".retell-ai-message-bubble {", 322 " max-width: 310px !important;", 323 " width: 310px !important;", 324 "}" 325 ].join("\n"); 326 327 function injectInto(shadowRoot) { 328 if (!shadowRoot || shadowRoot.getElementById(STYLE_ID)) return; 329 var styleEl = document.createElement("style"); 330 styleEl.id = STYLE_ID; 331 styleEl.textContent = OVERRIDE_CSS; 332 shadowRoot.appendChild(styleEl); 333 } 334 335 function findAndInject() { 336 // Retell's host element is an anonymous <div> appended to <body> 337 // with an open shadow root containing .retell-fab. Walk top-level 338 // body children and find the one whose shadow root has the FAB. 339 var nodes = document.body ? document.body.children : []; 340 for (var i = 0; i < nodes.length; i++) { 341 var sr = nodes[i].shadowRoot; 342 if (sr && sr.querySelector(".retell-fab")) { 343 injectInto(sr); 344 return true; 345 } 346 } 347 return false; 348 } 349 350 // Try immediately, then watch for the widget to mount asynchronously. 351 if (findAndInject()) return; 352 var observer = new MutationObserver(function() { 353 if (findAndInject()) observer.disconnect(); 354 }); 355 if (document.body) { 356 observer.observe(document.body, { childList: true, subtree: true }); 357 } else { 358 document.addEventListener("DOMContentLoaded", function() { 359 observer.observe(document.body, { childList: true, subtree: true }); 360 findAndInject(); 361 }); 362 } 363 // Stop watching after 20s; widget should be mounted long before then. 364 setTimeout(function() { observer.disconnect(); }, 20000); 365 })(); 366 </script>
366 367 368 369</head> 370 371<body class="fr2025" data-fr-page="ac_install"> 372 373
374<script> 375window.FR_HOURS = {"open_min": 420, "regular_close_min": 1020, "after_hours_close_min": 1140, "tz": "America/Chicago"}; 376window.frChicagoNow = function() { 377 try { 378 var H = window.FR_HOURS || { tz: 'America/Chicago' }; 379 var parts = new Intl.DateTimeFormat('en-US', { 380 timeZone: H.tz || 'America/Chicago', 381 weekday: 'short', 382 hour: 'numeric', 383 minute: 'numeric', 384 hour12: false 385 }).formatToParts(new Date()); 386 var day = '', h = 0, m = 0; 387 for (var i = 0; i < parts.length; i++) { 388 var p = parts[i]; 389 if (p.type === 'weekday') day = p.value; 390 if (p.type === 'hour') h = parseInt(p.value, 10); 391 if (p.type === 'minute') m = parseInt(p.value, 10); 392 } 393 if (h === 24) h = 0; 394 return { day: day, minutes: h * 60 + m }; 395 } catch (e) { return null; } 396}; 397window.frIsAfterHoursCentral = function() { 398 var H = window.FR_HOURS || {}; 399 var t = window.frChicagoNow(); 400 if (!t || !H) return false; 401 if (['Mon','Tue','Wed','Thu','Fri'].indexOf(t.day) !== -1) { 402 return t.minutes >= H.regular_close_min && t.minutes < H.after_hours_close_min; 403 } 404 if (t.day === 'Sat') { 405 return t.minutes >= H.open_min && t.minutes < H.after_hours_close_min; 406 } 407 return false; 408}; 409window.frIsClosedCentral = function() { 410 var H = window.FR_HOURS || {}; 411 var t = window.frChicagoNow(); 412 if (!t || !H) return false; 413 if (t.day === 'Sun') return true; 414 return t.minutes < H.open_min || t.minutes >= H.after_hours_close_min; 415}; 416</script>
416 417 418
419<script> 420window.FR_LEAD_VALUES = { 421 DEFAULT: 300, 422 by_trade_issue: { 423 "hvac|install": 5000, 424 "hvac|repair": 300, 425 "hvac|maintenance": 69, 426 "plumbing|install": 1000, 427 "plumbing|repair": 400, 428 "electrical|install": 1000, 429 "electrical|repair": 200 430 }, 431 // intent_weight applied to booking_started (partial credit before submit) 432 intent_weight: 0.3, 433 // phone_intent_weight applied to phone_click events. Lower than the form 434 // intent_weight because a tel: click is "I might call" â many never actually 435 // dial, and of those who do, many are tire-kickers. Tune as we gather data. 436 phone_intent_weight: 0.3 437}; 438function frEstimateLeadValue(trade, issueType /*, serviceDetails (unused) */) { 439 var t = (window.FR_LEAD_VALUES || {}); 440 var key = ((trade || '') + '|' + (issueType || '')).trim().toLowerCase(); 441 if (key !== '|' && t.by_trade_issue && t.by_trade_issue[key] != null) { 442 return t.by_trade_issue[key]; 443 } 444 return t.DEFAULT != null ? t.DEFAULT : 400; 445} 446</script>
vendor: 69 bytes, lines 446-448
446 447 448<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
448GTM-MPWMNC3
vendor: 84 bytes, lines 448-450
448" 449height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 450
451<a class="fr-skip" href="#main">Skip to content</a> 452 453 454<header class="fr-header"> 455 456 <div class="fr-header-stripe" aria-hidden="true"></div> 457 <div class="fr-header-inner"> 458 <a href='/' class="fr-logo" aria-label="Franklin home"> 459 <img alt='Franklin AC, Plumbing & Electrical' src="https://franklinair-assets.s3.amazonaws.com/static/media/logo.png"> 460 </a> 461 462 <nav class="fr-header-nav" aria-label="Primary"> 463 464 <div class="fr-nav-item fr-nav-item--has-dropdown" data-fr-dropdown> 465 <button type="button" 466 class="fr-nav-link is-active" 467 aria-haspopup="true" 468 aria-expanded="false" 469 data-fr-dropdown-toggle> 470 <span>Services</span> 471 <svg class="fr-nav-chevron" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg> 472 </button> 473 <div class="fr-dropdown" role="menu"> 474 <div class="fr-dropdown-grid"> 475 <div class="fr-dropdown-col"> 476 <div class="fr-dropdown-col-title fr-dropdown-col-title--hvac">HVAC</div> 477 <a href='/services/ac-repair' role="menuitem">AC Repair</a> 478 <a href='/services/ac-install' role="menuitem">AC Installation</a> 479 <a href='/services/ac-maintenance' role="menuitem">AC Maintenance</a> 480 <a href='/services/furnace-repair' role="menuitem">Furnace Repair</a> 481 <a href='/services/furnace-install' role="menuitem">Furnace Installation</a> 482 <a href='/services/mini-split-install' role="menuitem">Mini-Split Installation</a> 483 <a href='/services/hvac-inspections' role="menuitem">HVAC Inspections</a> 484 <a href='/services/duct-sealing' role="menuitem">Duct Sealing</a> 485 <a href='/services/indoor-air-quality' role="menuitem">Indoor Air Quality</a> 486 </div> 487 <div class="fr-dropdown-col"> 488 <div class="fr-dropdown-col-title fr-dropdown-col-title--plumbing">Plumbing</div> 489 <a href='/services/plumbing' role="menuitem">Plumbing Services</a> 490 <a href='/services/water-heater-repair' role="menuitem">Water Heater Repair</a> 491 <a href='/services/water-heater-replacement' role="menuitem">Water Heater Replacement</a> 492 <a href='/services/drain-cleaning' role="menuitem">Drain Cleaning</a> 493 <a href='/services/emergency-plumbing' role="menuitem">Emergency Plumbing</a> 494 <a href='/services/garbage-disposal' role="menuitem">Garbage Disposal</a> 495 <a href='/services/sewer-line-repair' role="menuitem">Sewer Line Repair</a> 496 <a href='/services/water-leak-repair' role="menuitem">Water Leak Repair</a> 497 <a href='/services/water-filtration' role="menuitem">Water Filtration</a> 498 </div> 499 <div class="fr-dropdown-col"> 500 <div class="fr-dropdown-col-title fr-dropdown-col-title--electrical">Electrical</div> 501 <a href='/services/electrical' role="menuitem">Electrical Services</a> 502 <a href='/services/panel-upgrade' role="menuitem">Panel Upgrade</a> 503 <a href='/services/outlet-installation' role="menuitem">Outlet & Switch Installation</a> 504 <a href='/services/ev-charger-install' role="menuitem">EV Charger Install</a> 505 </div> 506 </div> 507 </div> 508 </div> 509 510 <a href='/locations' class="fr-nav-link ">Locations</a> 511 <a href='/autopilot' class="fr-nav-link ">Autopilot</a> 512 <a href='/pricing' class="fr-nav-link ">Pricing</a> 513 <a href='/financing' class="fr-nav-link ">Financing</a> 514 <a href='/careers' class="fr-nav-link ">Careers</a> 515 </nav> 516 517 <div class="fr-header-actions"> 518 <a href='tel:+14792820003' class="fr-header-phone number_html" aria-label="Call (479) 282-0003"> 519 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
520 <span class="number_link">(479) 282-0003</span> 521 </a> 522 <a href='tel:+14792820003' class="fr-icon-btn fr-icon-btn--mobile-phone number_html" aria-label="Call Franklin"> 523 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg> 524 </a> 525 <button type="button" class="fr-header-cta open-scheduler-btn">Schedule</button> 526 <button type="button" class="fr-icon-btn fr-menu-toggle" id="fr-menu-toggle" aria-label="Open menu" aria-expanded="false" aria-controls="fr-mobile-drawer"> 527 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg> 528 </button> 529 </div> 530 </div> 531</header> 532 533 534<div class="fr-mobile-drawer" id="fr-mobile-drawer" aria-hidden="true"> 535 <div class="fr-mobile-drawer__backdrop" data-fr-drawer-close></div> 536 <aside class="fr-mobile-drawer__panel" role="dialog" aria-modal="true" aria-label="Site navigation"> 537 <div class="fr-mobile-drawer__header"> 538 <a href='/' class="fr-logo" data-fr-drawer-close-on-click> 539 <img alt='Franklin' src="https://franklinair-assets.s3.amazonaws.com/static/media/logo.png"> 540 </a> 541 <button type="button" class="fr-icon-btn" data-fr-drawer-close aria-label="Close menu"> 542 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> 543 </button> 544 </div> 545 546 <nav class="fr-mobile-drawer__nav" aria-label="Mobile navigation"> 547 <details class="fr-mobile-drawer__group" open> 548 <summary>Services</summary> 549 <div class="fr-mobile-drawer__sublist"> 550 <span class="fr-mobile-drawer__subhead">HVAC</span> 551 <a href='/services/ac-repair'>AC Repair</a> 552 <a href='/services/ac-install'>AC Installation</a> 553 <a href='/services/ac-maintenance'>AC Maintenance</a> 554 <a href='/services/furnace-repair'>Furnace Repair</a> 555 <a href='/services/furnace-install'>Furnace Installation</a> 556 <a href='/services/mini-split-install'>Mini-Split Installation</a> 557 <a href='/services/hvac-inspections'>HVAC Inspections</a> 558 <a href='/services/duct-sealing'>Duct Sealing</a> 559 <a href='/services/indoor-air-quality'>Indoor Air Quality</a> 560 561 <span class="fr-mobile-drawer__subhead">Plumbing</span> 562 <a href='/services/plumbing'>Plumbing Services</a> 563 <a href='/services/water-heater-repair'>Water Heater Repair</a> 564 <a href='/services/water-heater-replacement'>Water Heater Replacement</a> 565 <a href='/services/drain-cleaning'>Drain Cleaning</a> 566 <a href='/services/emergency-plumbing'>Emergency Plumbing</a> 567 <a href='/services/garbage-disposal'>Garbage Disposal</a> 568 <a href='/services/sewer-line-repair'>Sewer Line Repair</a> 569 <a href='/services/water-leak-repair'>Water Leak Repair</a> 570 <a href='/services/water-filtration'>Water Filtration</a> 571 572 <span class="fr-mobile-drawer__subhead">Electrical</span> 573 <a href='/services/electrical'>Electrical Services</a> 574 <a href='/services/panel-upgrade'>Panel Upgrade</a> 575 <a href='/services/outlet-installation'>Outlet & Switch Installation</a> 576 <a href='/services/ev-charger-install'>EV Charger Install</a> 577 </div> 578 </details> 579 580 <a href='/locations' class="">Locations</a> 581 <a href='/autopilot' class="">Autopilot</a> 582 <a href='/pricing' class="">Pricing</a> 583 <a href='/financing' class="">Financing</a> 584 <a href='/free-second-opinion' class="">Free 2nd Opinion</a> 585 <a href='/pay' class="">Make a Payment</a> 586 <a href='/calculator' class="">Rebate Calculator</a> 587 <a href='/blog/'>Blog</a> 588 <a href='/careers' class="">Careers</a> 589 590 </nav> 591 592 <div class="fr-mobile-drawer__cta"> 593 <button type="button" class="fr-btn-primary open-scheduler-btn" data-fr-drawer-close-on-click>Schedule online</button> 594 <a class="fr-mobile-drawer__phone number_html" href="tel:+14792820003"> 595 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
596 <span class="number_link">(479) 282-0003</span> 597 </a> 598 </div> 599 </aside> 600</div> 601 602 603<main> 604 605 606 607<section class="fr-hero" id="main"> 608 <div class="fr-hero-grid"> 609 <div class="fr-hero-text"> 610 <span class="fr-eyebrow fr-eyebrow--on-dark">HVAC Service</span> 611 <h1 class="fr-hero-title">Top-Rated NWA AC Installation</h1> 612 <p class="fr-hero-sub">A new AC in NWA typically runs $7,000–$15,000+, and <strong>the contractor you pick matters as much as the equipment — on the same unit, quotes can swing $3,000–$5,000, and a sloppy install will cripple even the best system within a couple of years.</strong> Get a Franklin estimator to your home for a free, all-in quote — every rebate you qualify for, and a flat-rate price before any work begins. No AC right now? Tell us when you book — we prioritize customers who are completely down. We’ve earned 1,361 5-star Google reviews from your neighbors. Schedule online or call <a class="number_link" href="tel:+14792820003">(479) 282-0003</a>.</p> 613 <div class="fr-hero-ctas"> <a class="fr-btn-ghost-light number_html" href="tel:+14792820003"> 614 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg> 615 <span class="number_link">(479) 282-0003</span> 616 </a> 617 618<span class="fr-hours-badge" data-fr-hours-badge> 619 <span class="fr-hours-badge__dot" aria-hidden="true"></span> 620 <span data-fr-hours-status>OPEN NOW · Mon–Sat 7am–7pm</span> 621</span> 622 623 </div> 624 <div class="fr-google-badge" aria-label="5.0 stars on Google based on 1,361 reviews"> 625 <svg class="fr-google-badge__g" viewBox="0 0 48 48" aria-hidden="true"> 626 <path fill="#FFC107" d="M43.6 20.5H42V20H24v8h11.3a12 12 0 1 1-3.3-12.7l5.7-5.7A20 20 0 1 0 44 24c0-1.2-.1-2.3-.4-3.5z"/> 627 <path fill="#FF3D00" d="M6.3 14.7l6.6 4.8A12 12 0 0 1 24 12c3 0 5.7 1.1 7.8 3l5.7-5.7A20 20 0 0 0 6.3 14.7z"/> 628 <path fill="#4CAF50" d="M24 44c5.2 0 9.9-2 13.4-5.2l-6.2-5.2A11.9 11.9 0 0 1 12.7 28l-6.5 5A20 20 0 0 0 24 44z"/> 629 <path fill="#1976D2" d="M43.6 20.5H42V20H24v8h11.3a12 12 0 0 1-4.1 5.6l6.2 5.2C37 39 44 33 44 24c0-1.2-.1-2.3-.4-3.5z"/> 630 </svg> 631 <div class="fr-google-badge__text"> 632 <div class="fr-google-badge__stars" aria-hidden="true">â â â â â </div> 633 <div class="fr-google-badge__rating">5.0 · 1,361 Google reviews</div> 634 </div> 635 </div> 636 </div> 637 638 <div class="fr-hero-art fr-hero-art--inline-sched"> 639 640 641 642<aside class="fr-inline-sched" 643 data-fr-inline-sched 644 data-default-trade="hvac" 645 data-default-issue-type="install" 646 data-default-service-details="Install AC" 647 aria-labelledby="fr-inline-sched-title"> 648 <div class="fr-inline-sched__head"> 649 <span class="fr-inline-sched__eyebrow">Quote in 60 seconds</span> 650 <h2 id="fr-inline-sched-title" class="fr-inline-sched__title">Get your free quote.</h2> 651 <p class="fr-inline-sched__sub">Free in-home quote · flat-rate before any work begins.</p> 652 </div> 653 654 <form id="inline-scheduler-form" class="fr-inline-sched__form" novalidate 655 action='/submit-request' method="POST"> 656 <input type="hidden" name="csrfmiddlewaretoken" value="A9ujDQcazV4BTRnDfbyd42B3nrOzpnwJFLIHgYLO1n34Ru1jQwDw70WmyvNtVJ08"> 657 658 <div class="honeypot-field" aria-hidden="true"> 659 <label for="inline-id-website">Do not fill out this field</label> 660 <input type="text" name="website" id="inline-id-website" tabindex="-1" autocomplete="off"> 661 </div> 662 663 664 <input type="hidden" name="utm_source" data-fr-attr="utm_source"> 665 <input type="hidden" name="utm_medium" data-fr-attr="utm_medium"> 666 <input type="hidden" name="utm_campaign" data-fr-attr="utm_campaign"> 667 <input type="hidden" name="utm_content" data-fr-attr="utm_content"> 668 <input type="hidden" name="utm_term" data-fr-attr="utm_term"> 669 <input type="hidden" name="gclid" data-fr-attr="gclid"> 670 <input type="hidden" name="fbclid" data-fr-attr="fbclid"> 671 <input type="hidden" name="msclkid" data-fr-attr="msclkid"> 672 <input type="hidden" name="referrer" data-fr-attr="referrer"> 673 <input type="hidden" name="landing_page" data-fr-attr="landing_page"> 674 <input type="hidden" name="submission_page" data-fr-attr="submission_page">
675 <input type="hidden" name="submission_path" value="inline"> 676 <input type="hidden" id="inline-scheduler-address-zip" name="address_zip" value=""> 677 <input type="hidden" id="inline-scheduler-address-city" name="address_city" value=""> 678 679 <input type="hidden" name="is_after_hours" value="false"> 680 <input type="hidden" name="is_closed" value="false"> 681 682 683 684 <input type="hidden" name="service_trade" value="hvac"> 685 686 687 688 <fieldset class="fr-inline-sched__step is-active" 689 data-step="issue_type" data-next="service_details"> 690 <legend class="fr-inline-sched__q">What kind of service would you like?</legend> 691 <div class="fr-inline-sched__radios" data-fr-inline-radio-group> 692 <label><input type="radio" name="issue_type" value="repair" required> Repair</label> 693 <label><input type="radio" name="issue_type" value="install" required> Install</label> 694 <label data-issue-maintenance class="hidden"><input type="radio" name="issue_type" value="maintenance" required> Maintenance</label> 695 <label><input type="radio" name="issue_type" value="other" required> Other</label> 696 </div> 697 <p class="fr-inline-sched__err" data-err></p> 698 </fieldset> 699 700 701 <fieldset class="fr-inline-sched__step" data-step="service_details" data-next="timing"> 702 <legend class="fr-inline-sched__q" data-details-title>What needs to be repaired/installed?</legend> 703 <div class="fr-inline-sched__radios fr-inline-sched__radios--vertical" 704 data-fr-inline-radio-group data-service-options-container></div> 705 <div data-other-issue-container class="hidden"> 706 <textarea name="other_issue_description" rows="3" 707 placeholder="Please tell us what issue you are needing help with."></textarea> 708 </div> 709 <p class="fr-inline-sched__err" data-err></p> 710 </fieldset> 711 712 713 <fieldset class="fr-inline-sched__step" data-step="timing" data-next="address"> 714 <legend class="fr-inline-sched__q">When would you like service?</legend> 715 <div class="fr-inline-sched__radios" data-fr-inline-radio-group> 716 <label><input type="radio" name="timing" value="asap" required> ASAP (emergency)</label> 717 <label><input type="radio" name="timing" value="next_few_days" required> Next few days</label> 718 <label><input type="radio" name="timing" value="next_few_weeks" required> Next few weeks</label> 719 </div> 720 <p class="fr-inline-sched__err" data-err></p> 721 </fieldset> 722 723 724 <fieldset class="fr-inline-sched__step" data-step="after_hours" data-next="address"> 725 <legend class="fr-inline-sched__q">It’s currently outside our standard business hours.</legend> 726 <p class="fr-inline-sched__note">We’re happy to help you right away. Emergency after-hours service is available with an additional <strong>$60 after-hours fee</strong> on top of the standard <strong>$29 service call</strong>.</p> 727 <div class="fr-inline-sched__radios fr-inline-sched__radios--vertical" data-fr-inline-radio-group> 728 <label><input type="radio" name="after_hours_emergency" value="yes" required> Submit an emergency after-hours request</label> 729 <label><input type="radio" name="after_hours_emergency" value="no" required> I’ll wait for the next business day</label> 730 </div> 731 <p class="fr-inline-sched__err" data-err></p> 732 </fieldset> 733 734 735 <fieldset class="fr-inline-sched__step" data-step="address" data-next="contact"> 736 <legend class="fr-inline-sched__q">What’s the service address?</legend> 737 <input id="inline-scheduler-address-input" name="service_address" type="text" 738 placeholder="Start typing your address" autocomplete="off" required> 739 <input type="hidden" id="inline-google-address-selected" name="google_address_selected" value=""> 740 <p class="fr-inline-sched__err" data-err></p> 741 </fieldset> 742 743 744 <fieldset class="fr-inline-sched__step" data-step="contact" data-next="notes"> 745 <legend class="fr-inline-sched__q">Who should we contact?</legend> 746 <div class="fr-inline-sched__row"> 747 <div class="fr-inline-sched__field"> 748 <label for="inline-first-name-input">First name</label> 749 <input type="text" id="inline-first-name-input" name="first_name" required> 750 </div> 751 <div class="fr-inline-sched__field"> 752 <label for="inline-last-name-input">Last name</label> 753 <input type="text" id="inline-last-name-input" name="last_name" required> 754 </div> 755 </div> 756 <div class="fr-inline-sched__field"> 757 <label for="inline-email-input">Email</label> 758 <input type="email" id="inline-email-input" name="email" required> 759 </div> 760 <div class="fr-inline-sched__field"> 761 <label for="inline-phone-number-input">Phone number</label> 762 <input type="tel" id="inline-phone-number-input" name="phone_number" required placeholder="(555) 555-5555"> 763 <p class="fr-inline-sched__sms-note">
763By providing your phone number, you agree to receive texts from Franklin AC, Plumbing, & Electrical with appointment reminders and updates relating to past service. We promise to never text you for marketing purposes. Reply STOP to unsubscribe.</p> 764 </div> 765 <p class="fr-inline-sched__err" data-err></p> 766 </fieldset> 767 768 769 <fieldset class="fr-inline-sched__step fr-inline-sched__step--final" data-step="notes"> 770 <legend class="fr-inline-sched__q">Anything else we should know? <span class="fr-inline-sched__optional">(optional)</span></legend> 771 <textarea name="notes" rows="3" placeholder="Scheduling preferences, gate codes, parking notes, etc."></textarea> 772 <p class="fr-inline-sched__err" data-err></p> 773 <button type="submit" class="fr-btn-primary fr-inline-sched__submit">Submit request →</button> 774 </fieldset> 775 776 777 <div class="fr-inline-sched__confirmation hidden" data-fr-inline-confirmation> 778 <h3>Thank you!</h3> 779 <p>Your appointment request has been submitted successfully.</p> 780 <p> 781 <strong>During business hours</strong> (Mon–Fri, 7am–5pm), our team will reach out to confirm your booking within a few minutes.<br><br> 782 <strong>After hours</strong> (Mon–Fri 5pm–7pm, or Saturday 7am–7pm), our on-call dispatcher will follow up shortly if you selected emergency service; otherwise we’ll be in touch first thing the next business day.<br><br> 783 <strong>Overnight or on Sunday</strong>, we’ll reach out first thing the next business morning. Thank you for the opportunity! 784 </p> 785 </div> 786 </form> 787</aside> 788 789 </div> 790 </div> 791</section> 792 793 794<div class="fr-trust-bar"> 795 <div class="fr-trust-bar-inner fr-trust-bar-inner--single"> 796 <p class="fr-trust-tagline">A <em>family-owned</em> and operated company</p> 797 </div> 798</div> 799 800 801<button type="button" class="fr-schedule-strip open-scheduler-btn"> 802 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 803 <rect x="3" y="4" width="18" height="18" rx="2" ry="2"/> 804 <line x1="16" y1="2" x2="16" y2="6"/> 805 <line x1="8" y1="2" x2="8" y2="6"/> 806 <line x1="3" y1="10" x2="21" y2="10"/> 807 </svg> 808 Tap to schedule a quote 809</button> 810 811 812<section class="fr-why"> 813 <div class="fr-why-inner"> 814 <div class="fr-section-head"> 815 <span class="fr-eyebrow">The Franklin Difference</span> 816 <h2 class="fr-section-title">Why Customers Choose Franklin</h2> 817 </div> 818 <div class="fr-why-list"> 819 <div class="fr-why-item"> 820 <span class="fr-why-item__icon" aria-hidden="true"> 821 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 822 </span> 823 <div> 824 <h3 class="fr-why-item__title">Top Rated</h3> 825 <p class="fr-why-item__body">Franklin is one of the highest-rated service companies in Northwest Arkansas with a 5.0 rating based on 1,361 Google reviews.</p> 826 </div> 827 </div> 828 829 <div class="fr-why-item"> 830 <span class="fr-why-item__icon" aria-hidden="true"> 831 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 832 </span> 833 <div> 834 <h3 class="fr-why-item__title">Free Replacement Quotes</h3> 835 <p class="fr-why-item__body">Replacement quotes are free. We'll send an estimator out, walk you through the options, and get you an all-in price — no obligation.</p> 836 </div> 837 </div> 838 839 <div class="fr-why-item"> 840 <span class="fr-why-item__icon" aria-hidden="true"> 841 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 842 </span> 843 <div> 844 <h3 class="fr-why-item__title">Top-Tier Equipment</h3> 845 <p class="fr-why-item__body">Franklin installs <strong>American Standard</strong> and <strong>Amana</strong>. American Standard is consistently rated by <em>Consumer Reports</em> among the most reliable central AC brands; Amana puts variable-speed comfort within reach at a lower price.</p> 846 </div> 847 </div> 848 849 <div class="fr-why-item">
850 <span class="fr-why-item__icon" aria-hidden="true"> 851 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 852 </span> 853 <div> 854 <h3 class="fr-why-item__title">In-Depth Installation Process</h3> 855 <p class="fr-why-item__body">Our installs are exhaustive — <strong>30+ commissioning checks</strong> on every system (refrigerant charge, airflow, static pressure, electrical, condensate, and more) plus a separate <strong>QA visit</strong> from a second technician to verify the installation was done to our quality standards.</p> 856 </div> 857 </div> 858 859 <div class="fr-why-item"> 860 <span class="fr-why-item__icon" aria-hidden="true"> 861 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 862 </span> 863 <div> 864 <h3 class="fr-why-item__title">Free Second Opinions</h3> 865 <p class="fr-why-item__body">Got a repair or replacement recommendation from another company that feels off? We'll come out at no charge and give you a straight, independent second opinion. <a href='/free-second-opinion'>Learn more.</a></p> 866 </div> 867 </div> 868 869 <div class="fr-why-item"> 870 <span class="fr-why-item__icon" aria-hidden="true"> 871 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg> 872 </span> 873 <div> 874 <h3 class="fr-why-item__title">Franklin Service Guarantee</h3> 875 <p class="fr-why-item__body">Every job we do at your home is backed by the Franklin Service Guarantee. <a href='/guarantee'>Learn more.</a></p> 876 </div> 877 </div> 878 </div> 879 </div> 880</section> 881 882 883<section class="fr-article"> 884 <article class="fr-article-inner fr-article-inner--wide"> 885 886 <p class="fr-article-tldr"><strong>TL;DR:</strong> Replacing your AC in Northwest Arkansas typically runs $7k–$15k+ depending on size, efficiency, ductwork, and the contractor installing it. Franklin offers free in-home replacement quotes — and we install the brands and tiers we'd put in our own homes.</p> 887 888 <h2>What to know before you spend $7k–$15k+ on a new AC</h2> 889 890 <p><strong>1. Run the rebate numbers before you pick a system.</strong> SWEPCO and Black Hills Energy offer rebates ranging from a few hundred dollars on a basic AC up to $3,000+ on a high-efficiency heat pump. Picking the wrong tier can leave $2,000 on the table. Spend ninety seconds with our <a href='/calculator'>rebate calculator</a> before you sign anything. (Full list of NWA rebates <a href="https://www.getfranklin.com/blog/northwest-arkansas-hvac-energy-rebates-complete-list" target="_blank" rel="noopener">here</a>.)</p> 891 892 <p><strong>2. Use the “50% rule” on repair vs. replace.</strong> If the repair quote is more than half the cost of a new system <em>and</em> your unit is past 10 years old, replacement is usually the right call. Two facts that should push you toward replacement regardless of cost:</p> 893 894 <ul> 895 <li><strong>Your system is over 12 years old.</strong> Average AC life in NWA is 15–18 years; builder-grade units sometimes only make it 10–12. Pouring money into year 13 of a 15-year unit rarely pencils out.</li> 896 <li><strong>Your system uses R-22 refrigerant.</strong> R-22 was banned from manufacturing in 2020 and is no longer sold in NWA. Any refrigerant-related repair on an R-22 system is essentially a no-go</li> 897 </ul> 898 899 <p><strong>3. Consider getting multiple quotes.</strong> If you don’t feel good about the first quote you got, get another (or two). On the exact same equipment, NWA homeowners regularly see quotes swing $3,000&
899ndash;$5,000 — quotes are free, so the only cost is an hour of your time. If you’ve already got one and it feels off, we’ll come out for a <a href='/free-second-opinion'>free second opinion</a>, no obligation to switch. (We also wrote up <a href="https://www.getfranklin.com/blog/how-much-it-actually-costs-replace-your-hvac-unit-northwest-arkansas" target="_blank" rel="noopener">a real breakdown of NWA replacement costs</a> with actual quotes and post-install utility bills if you want to see the math.)</p> 900 901 <p><strong>4. Strongly consider a heat pump.</strong> A heat pump is just an AC that can run in reverse to heat your home in winter — using outdoor air as the heat source instead of burning gas. The result: the same system handles both your cooling and your heating, often cutting winter utility bills 30–50% versus a gas furnace. They also unlock the largest utility rebates available ($1,500–$3,000+ in NWA), which often makes the upfront cost competitive with a basic AC after rebates. Watch <a href="https://www.youtube.com/watch?v=iQaycSD5GWE" target="_blank" rel="noopener">this short explainer</a> if heat pumps are new to you.</p> 902 903 <h2>How Franklin installs an AC</h2> 904 <p>Most replacements are a single-day job, but the difference between a system that lasts 18 years and one that limps to 10 is what happens <em>during</em> that day. Every Franklin install runs through <strong>30+ commissioning checks</strong> — refrigerant charge, airflow, static pressure, electrical, condensate, gas pressure, and more — before we leave. Shortly after the install, a <strong>second technician returns for a QA visit</strong> to verify the work was done to our standards and catch anything the install team might have missed. We pull the permit in advance, lay protective floor covering on day-of, haul away your old equipment, and coordinate the city inspection on your behalf.</p> 905 <aside class="fr-pricing-block"><div class="fr-pricing-block__head"><h3 class="fr-pricing-block__title">Pricing for common repairs.</h3><p class="fr-pricing-block__note">Includes parts & labor.</p></div><ul class="fr-pricing-grid"><li class="fr-pricing-row"><span class="fr-pricing-row__label">Permit + haul-away</span><span class="fr-pricing-row__value">included</span></li><li class="fr-pricing-row"><span class="fr-pricing-row__label">REME HALO</span><span class="fr-pricing-row__value">$669.67</span></li><li class="fr-pricing-row"><span class="fr-pricing-row__label">Aeroseal® duct sealing</span><span class="fr-pricing-row__value">$2,995.00</span></li><li class="fr-pricing-row"><span class="fr-pricing-row__label">Mini split install</span><span class="fr-pricing-row__value">from $2,000s</span></li><li class="fr-pricing-row"><span class="fr-pricing-row__label">American Standard or Amana AC install</span><span class="fr-pricing-row__value">from $7,000s</span></li><li class="fr-pricing-row"><span class="fr-pricing-row__label">American Standard or Amana heat pump install</span><span class="fr-pricing-row__value">from $7,000s</span></li></ul><a class="fr-pricing-financing" href="/financing"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 1v22M17 5H9.5a3.5 3.5 0 1 0 0 7h5a3.5 3.5 0 1 1 0 7H6"/></svg> Financing available for repairs over $1,000</a><p class="fr-pricing-block__disclaimer"><strong>A few honest caveats:</strong> prices don’t include sales tax, and rates shift a bit over time — so the numbers above are accurate to the best of our knowledge but may move. Either way, your tech will always quote a flat-rate price on-site <em>before</em> any work begins.</p></aside> 906 907 908 909<aside class="fr-friendly-callout"> 910 <img class="fr-friendly-callout__photo" 911 src="https://franklinair-assets.s3.amazonaws.com/static/media/friendly_hvac_install.jpg" 912 alt="A friendly Franklin estimator on the job in Northwest Arkansas." 913 loading="lazy"> 914 <div> 915 <h3 class="fr-friendly-callout__title">HVAC techs you’ll actually want in your house.</h3> 916 <p class="fr-friendly-callout__body">Every Franklin technician is licensed, background-checked, and trained to leave your home cleaner than they found it. They’ll explain what’s going on in plain English, walk you through your options without pressure, and treat your house like it’s their own. It’s a big part of why our neighbors keep calling us back.</p> 917 </div> 918</aside> 919 920 921 </article> 922</section> 923 924 925<section class="fr-section fr-section--blue"> 926 <div class="fr-section-head">
927 <span class="fr-eyebrow fr-eyebrow--light">What to expect</span> 928 <h2 class="fr-section-title fr-section-title--light">How the quoting process works.</h2> 929 <p class="fr-section-lede fr-section-lede--light">No mystery. Here’s exactly how the Franklin quoting process works.</p> 930 </div> 931 932 <ol class="fr-timeline"> 933 <li> 934 <span class="fr-timeline__num">1</span> 935 <h4>Book online or call</h4> 936 <p>Tell us what’s going on — takes about 90 seconds.</p> 937 </li> 938 <li> 939 <span class="fr-timeline__num">2</span> 940 <h4>Estimator arrives</h4> 941 <p>We confirm a time window and text you a heads-up when we’re on the way.</p> 942 </li> 943 <li> 944 <span class="fr-timeline__num">3</span> 945 <h4>Upfront quote</h4> 946 <p>Flat-rate quote with all options laid out. You decide.</p> 947 </li> 948 <li> 949 <span class="fr-timeline__num">4</span> 950 <h4>Install — or walk</h4> 951 <p>If you decide to move forward, we get you on the schedule. If not, no hard feelings.</p> 952 </li> 953 </ol> 954</section> 955 956 957<section class="fr-stat-band"> 958 <div class="fr-stat-band-inner"> 959 <div class="fr-stat"> 960 <span class="fr-stat__num">9,000+</span> 961 <span class="fr-stat__label">Families Served</span> 962 </div> 963 <div class="fr-stat"> 964 <span class="fr-stat__num">5.0 â </span> 965 <span class="fr-stat__label">1,361 Google Reviews</span> 966 </div> 967 <div class="fr-stat"> 968 <span class="fr-stat__num">Free</span> 969 <span class="fr-stat__label">Replacement Quotes</span> 970 </div> 971 </div> 972</section> 973 974 975<section class="fr-reviews"> 976 <div class="fr-reviews-inner"> 977 <div class="fr-reviews-header"> 978 <span class="fr-eyebrow">Real reviews</span> 979 <h2 class="fr-section-title">Hear it from your neighbors.</h2> 980 <p class="fr-reviews-note-short"> 981 <strong>A live, unfiltered feed</strong> from Google — good, bad, and everything in between. 982 </p> 983 <div class="fr-google-badge fr-google-badge--light"> 984 <svg class="fr-google-badge__g" viewBox="0 0 48 48" aria-hidden="true"> 985 <path fill="#FFC107" d="M43.6 20.5H42V20H24v8h11.3a12 12 0 1 1-3.3-12.7l5.7-5.7A20 20 0 1 0 44 24c0-1.2-.1-2.3-.4-3.5z"/> 986 <path fill="#FF3D00" d="M6.3 14.7l6.6 4.8A12 12 0 0 1 24 12c3 0 5.7 1.1 7.8 3l5.7-5.7A20 20 0 0 0 6.3 14.7z"/> 987 <path fill="#4CAF50" d="M24 44c5.2 0 9.9-2 13.4-5.2l-6.2-5.2A11.9 11.9 0 0 1 12.7 28l-6.5 5A20 20 0 0 0 24 44z"/> 988 <path fill="#1976D2" d="M43.6 20.5H42V20H24v8h11.3a12 12 0 0 1-4.1 5.6l6.2 5.2C37 39 44 33 44 24c0-1.2-.1-2.3-.4-3.5z"/> 989 </svg> 990 <div class="fr-google-badge__text"> 991 <div class="fr-google-badge__stars" aria-hidden="true">â â â â â </div> 992 <div class="fr-google-badge__rating">5.0 · 1,361 Google reviews</div> 993 </div> 994 </div> 995 </div> 996 997 <div class="fr-reviews-scroller-wrap"> 998 <button type="button" class="fr-reviews-arrow fr-reviews-arrow--prev" aria-label="Previous reviews" data-fr-scroller-prev> 999 <svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg> 1000 </button> 1001 <div class="fr-reviews-scroller" data-fr-scroller> 1002 1003 <article class="fr-review-card"> 1004 <div class="fr-review-card__stars" aria-label="5 out of 5 stars"> 1005 <span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span> 1006 </div> 1007 <p class="fr-review-card__body">Axell was really helpful, knowledgable, and took his time finding answers and solutions to the problems he uncovered in our system.</p> 1008 <footer class="fr-review-card__footer">
1009 <span class="fr-review-card__author">Hannah Dow</span> 1010 <span class="fr-review-card__date">in the last week</span> 1011 </footer> 1012 </article> 1013 1014 <article class="fr-review-card"> 1015 <div class="fr-review-card__stars" aria-label="5 out of 5 stars"> 1016 <span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span> 1017 </div> 1018 <p class="fr-review-card__body">Adrian was very professional and polite! Answered all my questions kindly and got us all fixed up!</p> 1019 <footer class="fr-review-card__footer"> 1020 <span class="fr-review-card__author">Yoga Candice</span> 1021 <span class="fr-review-card__date">in the last week</span> 1022 </footer> 1023 </article> 1024 1025 <article class="fr-review-card"> 1026 <div class="fr-review-card__stars" aria-label="5 out of 5 stars"> 1027 <span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span> 1028 </div> 1029 <p class="fr-review-card__body">Axell was awesome</p> 1030 <footer class="fr-review-card__footer"> 1031 <span class="fr-review-card__author">Joseph Proto</span> 1032 <span class="fr-review-card__date">in the last week</span> 1033 </footer> 1034 </article> 1035 1036 <article class="fr-review-card"> 1037 <div class="fr-review-card__stars" aria-label="5 out of 5 stars"> 1038 <span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span><span class="fr-review-card__star fr-review-card__star--filled" aria-hidden="true">â </span> 1039 </div> 1040 <p class="fr-review-card__body">All the technicians who came to service my house today were very professional and able to answer any questions I had.</p> 1041 <footer class="fr-review-card__footer"> 1042 <span class="fr-review-card__author">Saul Ruvalcaba</span> 1043 <span class="fr-review-card__date">in the last week</span> 1044 </footer> 1045 </article> 1046 1047 </div> 1048 <button type="button" class="fr-reviews-arrow fr-reviews-arrow--next" aria-label="Next reviews" data-fr-scroller-next> 1049 <svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg> 1050 </button> 1051 </div> 1052 1053 <div class="fr-reviews-cta-row"> 1054 <a class="fr-btn-secondary" href="http://bit.ly/franklin-recent-reviews" target="_blank" rel="noopener"> 1055 See all reviews → 1056 </a> 1057 </div> 1058 1059
1059<script> 1060 (function() { 1061 var scroller = document.querySelector('[data-fr-scroller]'); 1062 var prev = document.querySelector('[data-fr-scroller-prev]'); 1063 var next = document.querySelector('[data-fr-scroller-next]'); 1064 if (!scroller || !prev || !next) return; 1065 function step() { 1066 var card = scroller.querySelector('.fr-review-card'); 1067 if (!card) return scroller.clientWidth * 0.85; 1068 var styles = getComputedStyle(scroller); 1069 var gap = parseFloat(styles.columnGap || styles.gap || 0) || 0; 1070 return card.getBoundingClientRect().width + gap; 1071 } 1072 prev.addEventListener('click', function() { scroller.scrollBy({ left: -step(), behavior: 'smooth' }); }); 1073 next.addEventListener('click', function() { scroller.scrollBy({ left: step(), behavior: 'smooth' }); }); 1074 function updateArrows() { 1075 var atStart = scroller.scrollLeft <= 4; 1076 var atEnd = scroller.scrollLeft + scroller.clientWidth >= scroller.scrollWidth - 4; 1077 prev.disabled = atStart; 1078 next.disabled = atEnd; 1079 } 1080 scroller.addEventListener('scroll', updateArrows, { passive: true }); 1081 window.addEventListener('resize', updateArrows); 1082 updateArrows(); 1083 })(); 1084 </script>
1084 1085 </div> 1086</section> 1087 1088 1089 1090 1091 1092<section class="fr-other-services"> 1093 <div class="fr-other-services-inner"> 1094 <div class="fr-section-head"> 1095 <span class="fr-eyebrow">Our other services</span> 1096 <h2 class="fr-section-title">Whatever’s broken, we can fix it.</h2> 1097 <p class="fr-section-lede">From AC and furnace work to plumbing and electrical, our techs cover the whole home.</p> 1098 </div> 1099 1100 <div class="fr-other-services-grid"> 1101 1102 <a class="fr-other-service-card" href="/services/ac-repair"> 1103 <span class="fr-other-service-card__trade">HVAC</span> 1104 <span class="fr-other-service-card__title">AC Repair</span> 1105 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1106 </a> 1107 1108 1109 1110 <a class="fr-other-service-card" href="/services/ac-maintenance"> 1111 <span class="fr-other-service-card__trade">HVAC</span> 1112 <span class="fr-other-service-card__title">AC Maintenance</span> 1113 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1114 </a> 1115 1116 1117 <a class="fr-other-service-card" href="/services/furnace-repair"> 1118 <span class="fr-other-service-card__trade">HVAC</span> 1119 <span class="fr-other-service-card__title">Furnace Repair</span> 1120 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1121 </a> 1122 1123 1124 <a class="fr-other-service-card" href="/services/furnace-install"> 1125 <span class="fr-other-service-card__trade">HVAC</span> 1126 <span class="fr-other-service-card__title">Furnace Installation</span> 1127 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1128 </a> 1129 1130 1131 <a class="fr-other-service-card" href="/services/mini-split-install"> 1132 <span class="fr-other-service-card__trade">HVAC</span> 1133 <span class="fr-other-service-card__title">Mini-Split Installation</span> 1134 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1135 </a> 1136 1137 1138 <a class="fr-other-service-card" href="/services/hvac-inspections"> 1139 <span class="fr-other-service-card__trade">HVAC</span> 1140 <span class="fr-other-service-card__title">HVAC Inspections</span> 1141 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1142 </a> 1143 1144 1145 <a class="fr-other-service-card" href="/services/duct-sealing"> 1146 <span class="fr-other-service-card__trade">HVAC</span> 1147 <span class="fr-other-service-card__title">Aeroseal Duct Sealing</span> 1148 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1149 </a> 1150 1151 1152 <a class="fr-other-service-card" href="/services/indoor-air-quality"> 1153 <span class="fr-other-service-card__trade">HVAC</span> 1154 <span class="fr-other-service-card__title">Indoor Air Quality</span> 1155 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1156 </a> 1157 1158 1159 <a class="fr-other-service-card" href="/services/plumbing"> 1160 <span class="fr-other-service-card__trade">Plumbing</span> 1161 <span class="fr-other-service-card__title">Plumbing</span> 1162 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1163 </a> 1164 1165 1166 <a class="fr-other-service-card" href="/services/water-heater-replacement"> 1167 <span class="fr-other-service-card__trade">Plumbing</span> 1168 <span class="fr-other-service-card__title">Water Heater Replacement</span> 1169 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1170 </a> 1171 1172 1173 <a class="fr-other-service-card" href="/services/water-heater-repair">
1174 <span class="fr-other-service-card__trade">Plumbing</span> 1175 <span class="fr-other-service-card__title">Water Heater Repair</span> 1176 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1177 </a> 1178 1179 1180 <a class="fr-other-service-card" href="/services/drain-cleaning"> 1181 <span class="fr-other-service-card__trade">Plumbing</span> 1182 <span class="fr-other-service-card__title">Drain Cleaning</span> 1183 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1184 </a> 1185 1186 1187 <a class="fr-other-service-card" href="/services/emergency-plumbing"> 1188 <span class="fr-other-service-card__trade">Plumbing</span> 1189 <span class="fr-other-service-card__title">Emergency Plumbing</span> 1190 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1191 </a> 1192 1193 1194 <a class="fr-other-service-card" href="/services/garbage-disposal"> 1195 <span class="fr-other-service-card__trade">Plumbing</span> 1196 <span class="fr-other-service-card__title">Garbage Disposal</span> 1197 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1198 </a> 1199 1200 1201 <a class="fr-other-service-card" href="/services/sewer-line-repair"> 1202 <span class="fr-other-service-card__trade">Plumbing</span> 1203 <span class="fr-other-service-card__title">Sewer Line Repair</span> 1204 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1205 </a> 1206 1207 1208 <a class="fr-other-service-card" href="/services/water-leak-repair"> 1209 <span class="fr-other-service-card__trade">Plumbing</span> 1210 <span class="fr-other-service-card__title">Water Leak Repair</span> 1211 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1212 </a> 1213 1214 1215 <a class="fr-other-service-card" href="/services/water-filtration"> 1216 <span class="fr-other-service-card__trade">Plumbing</span> 1217 <span class="fr-other-service-card__title">Water Filtration</span> 1218 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1219 </a> 1220 1221 1222 <a class="fr-other-service-card" href="/services/electrical"> 1223 <span class="fr-other-service-card__trade">Electrical</span> 1224 <span class="fr-other-service-card__title">Electrical</span> 1225 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1226 </a> 1227 1228 1229 <a class="fr-other-service-card" href="/services/panel-upgrade"> 1230 <span class="fr-other-service-card__trade">Electrical</span> 1231 <span class="fr-other-service-card__title">Panel Upgrade</span> 1232 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1233 </a> 1234 1235 1236 <a class="fr-other-service-card" href="/services/outlet-installation"> 1237 <span class="fr-other-service-card__trade">Electrical</span> 1238 <span class="fr-other-service-card__title">Outlet & Switch Installation</span> 1239 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1240 </a> 1241 1242 1243 <a class="fr-other-service-card" href="/services/ev-charger-install"> 1244 <span class="fr-other-service-card__trade">Electrical</span> 1245 <span class="fr-other-service-card__title">EV Charger Install</span> 1246 <span class="fr-other-service-card__arrow" aria-hidden="true">→</span> 1247 </a> 1248 1249 </div> 1250 </div> 1251</section> 1252 1253 1254 1255<section class="fr-faq"> 1256 <div class="fr-faq-inner"> 1257 <div class="fr-faq-head">
1258 <span class="fr-eyebrow fr-eyebrow--light">FAQ</span> 1259 <h2 class="fr-section-title fr-section-title--light">Common AC replacement questions.</h2> 1260 </div> 1261 1262
1262<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How quickly can you install a new AC?", "acceptedAnswer": {"@type": "Answer", "text": "Most full system installs happen within 1â3 business days of you approving the quote. For emergency no-cool situations, weâll prioritize your install as soon as the equipment lands."}}, {"@type": "Question", "name": "How much does a new AC cost?", "acceptedAnswer": {"@type": "Answer", "text": "HVAC system pricing can vary quite a bit depending on size (tonnage), efficiency, and brand. That said, we generally see companies in the area offer full HVAC replacements for $7,000â$15,000+."}}, {"@type": "Question", "name": "What brands do you install?", "acceptedAnswer": {"@type": "Answer", "text": "American Standard and Amana â Trane and Daikin equipment respectively, two of the largest manufacturers in the industry. Both start in the same price range, so the choice isnât about budget at the entry level. American Standard is consistently rated by Consumer Reports among the most reliable central AC brands, which makes it the pick if lowest lifetime repair risk is what matters most to you. Amana is where the mid-range gets interesting â thatâs where you get variable-speed equipment for less than it typically costs. A variable-speed system runs long and slow instead of cycling full-blast on and off, which means steadier temperatures room to room, far better humidity control through an Arkansas summer, and a noticeably quieter house. Weâll quote whichever fits your home, and weâll say so when the less expensive option is the right one."}}, {"@type": "Question", "name": "Are your technicians licensed and insured?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. Every Franklin technician works under our Arkansas state licensing, and we're fully insured (general liability + workers' comp). Our team is also background-checked and drug-tested. Email us if you'd like proof of license and insurance."}}, {"@type": "Question", "name": "Do you guarantee the work?", "acceptedAnswer": {"@type": "Answer", "text": "Yes â every job is backed by the Franklin Service Guarantee. If something we repaired or installed isn't right, we'll come back and make it right at no charge."}}, {"@type": "Question", "name": "What is the $29 service call?", "acceptedAnswer": {"@type": "Answer", "text": "It's our diagnostic visit. A licensed technician comes out, figures out what's actually going on, and gives you an all-in flat-rate price for the repair before any work starts. If you decide not to move forward, you only owe the $29 â no penalty. Replacement quotes (water heaters, AC systems, panels, etc.) are always free."}}, {"@type": "Question", "name": "Do you offer financing?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. We've teamed up with Wells Fargo to offer financing on home repairs over $1,000, upon credit approval. See our financing page for current promotions, or ask your technician for options before approving the quote."}}, {"@type": "Question", "name": "Do you offer services other than this?", "acceptedAnswer": {"@type": "Answer", "text": "Yes â Franklin handles HVAC, plumbing, and electrical work. Same crew, same $29 service call, same flat-rate guarantee."}}]}</script>
1262<div class="fr-faq-list" data-fr-faq-accordion><details class="fr-faq-item" open><summary class="fr-faq-summary"><span>How quickly can you install a new AC?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">Most full system installs happen within 1–3 business days of you approving the quote. For emergency no-cool situations, we’ll prioritize your install as soon as the equipment lands.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>How much does a new AC cost?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">HVAC system pricing can vary quite a bit depending on size (tonnage), efficiency, and brand. That said, we generally see companies in the area offer full HVAC replacements for $7,000–$15,000+.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>What brands do you install?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">American Standard and Amana — Trane and Daikin equipment respectively, two of the largest manufacturers in the industry. Both start in the same price range, so the choice isn’t about budget at the entry level. American Standard is consistently rated by <em>Consumer Reports</em> among the most reliable central AC brands, which makes it the pick if lowest lifetime repair risk is what matters most to you. Amana is where the mid-range gets interesting — that’s where you get variable-speed equipment for less than it typically costs. A variable-speed system runs long and slow instead of cycling full-blast on and off, which means steadier temperatures room to room, far better humidity control through an Arkansas summer, and a noticeably quieter house. We’ll quote whichever fits your home, and we’ll say so when the less expensive option is the right one.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>Are your technicians licensed and insured?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">Yes. Every Franklin technician works under our Arkansas state licensing, and we're fully insured (general liability + workers' comp). Our team is also background-checked and drug-tested. Email us if you'd like proof of license and insurance.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>Do you guarantee the work?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">Yes — every job is backed by the <a href='/guarantee'>Franklin Service Guarantee</a>. If something we repaired or installed isn't right, we'll come back and make it right at no charge.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>What is the $29 service call?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">It's our diagnostic visit. A licensed technician comes out, figures out what's actually going on, and gives you an all-in flat-rate price for the repair before any work starts. If you decide not to move forward, you only owe the $29 — no penalty. Replacement quotes (water heaters, AC systems, panels, etc.) are always free.</div></details>
1262<details class="fr-faq-item"><summary class="fr-faq-summary"><span>Do you offer financing?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">Yes. We've teamed up with Wells Fargo to offer financing on home repairs over $1,000, upon credit approval. See our <a href='/financing'>financing page</a> for current promotions, or ask your technician for options before approving the quote.</div></details><details class="fr-faq-item"><summary class="fr-faq-summary"><span>Do you offer services other than this?</span><span class="fr-faq-toggle" aria-hidden="true"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></span></summary><div class="fr-faq-body">Yes — Franklin handles HVAC, plumbing, and electrical work. Same crew, same $29 service call, same flat-rate guarantee.</div></details></div> 1263 </div> 1264</section> 1265 1266 1267</main> 1268 1269<footer class="fr-footer"> 1270 1271 <div class="fr-footer-cta"> 1272 <div class="fr-footer-cta-inner"> 1273 <div class="fr-footer-cta-text"> 1274 <span class="fr-footer-eyebrow">Family owned · 5.0 â · 1,361 reviews</span> 1275 <h2 class="fr-footer-cta-title">Need service? We’re just a tap away.</h2> 1276 </div> 1277 <div class="fr-footer-cta-actions"> 1278 <button type="button" class="fr-btn-primary open-scheduler-btn">Schedule online</button> 1279 <a class="fr-footer-phone-cta number_html" href="tel:+14792820003"> 1280 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg> 1281 <span class="number_link">(479) 282-0003</span> 1282 </a> 1283 </div> 1284 </div> 1285 </div> 1286 1287 1288 <div class="fr-footer-main"> 1289 <div class="fr-footer-grid"> 1290 <div class="fr-footer-brand-col"> 1291 <img class="fr-footer-logo" alt="Franklin AC, Plumbing & Electrical" src="https://franklinair-assets.s3.amazonaws.com/static/media/logo.png"> 1292 <p class="fr-footer-tagline">Family-owned and operated home services for Northwest Arkansas. HVAC, plumbing, and electrical â three trades, one local company. Past winner of Best of HomeAdvisor and the Angi Super Service Award.</p> 1293 <div class="fr-footer-trust" aria-label="Trust badges"> 1294 <img src="https://franklinair-assets.s3.amazonaws.com/static/media/bbb_trust.png" alt="BBB Accredited Business" width="80" height="56" loading="lazy" decoding="async"> 1295 <img src="https://franklinair-assets.s3.amazonaws.com/static/media/google_trust.png" alt="Google Reviews" width="94" height="56" loading="lazy" decoding="async"> 1296 <!-- <img src="https://franklinair-assets.s3.amazonaws.com/static/media/ha_trust.png" alt="HomeAdvisor Top Rated" width="57" height="56" loading="lazy" decoding="async"> --> 1297 <!-- <img src="https://franklinair-assets.s3.amazonaws.com/static/media/super_service.png" alt="Angi Super Service" width="64" height="56" loading="lazy" decoding="async"> --> 1298 </div> 1299 </div> 1300 1301 <div class="fr-footer-col"> 1302 <h3>Popular Services</h3> 1303 <a href='/services/ac-repair'>AC Repair</a> 1304 <a href='/services/ac-install'>AC Installation</a> 1305 <a href='/services/furnace-repair'>Furnace Repair</a> 1306 <a href='/services/plumbing'>Plumbing</a> 1307 <a href='/services/electrical'>Electrical</a> 1308 <a href='/services/water-heater-replacement'>Water Heaters</a> 1309 <a href='/services/water-filtration'>Water Filtration</a> 1310 </div> 1311 1312 <div class="fr-footer-col"> 1313 <h3>Company</h3> 1314 <a href='/pricing'>Pricing</a> 1315 <a href='/autopilot'>Autopilot Membership</a> 1316 <a href='/guarantee'>Service Guarantee</a> 1317 <a href='/free-second-opinion'>Free 2nd Opinion</a> 1318 <a href='/careers'>Careers</a> 1319 <a href='/blog/'>Blog</a> 1320 </div> 1321 1322 <div class="fr-footer-col"> 1323 <h3>Customer Tools</h3> 1324 <a href='/financing'>Apply for Financing</a> 1325 <a href='/pay'>Make a Payment</a> 1326 <a href='/calculator'>Rebate Calculator</a> 1327 </div> 1328 1329 <div class="fr-footer-col fr-footer-col--contact"> 1330 <h3>Contact</h3> 1331 <address class="fr-footer-address"> 1332 1500 S Thompson St, Suite A<br> 1333 Springdale, AR 72764 1334 </address> 1335 <p class="fr-footer-hours"><strong>Mon–Sat</strong> · 7am – 7pm</p> 1336 <a class="fr-footer-phone-bold number_link" href="tel:+14792820003">(479) 282-0003</a> 1337 <a class="fr-footer-email" href="/cdn-cgi/l/email-protection#cba3aea7a7a48bacaebfadb9aaa5a0a7a2a5e5a8a4a6"><span class="__cf_email__" data-cfemail="a2cac7cececde2c5c7d6c4d0c3ccc9cecb
1337cc8cc1cdcf">[email protected]</span></a> 1338 </div> 1339 </div> 1340 1341 1342 <div class="fr-footer-areas"> 1343 <span class="fr-footer-areas-label">Proudly serving <a href='/locations'>Northwest Arkansas</a>:</span> 1344 <ul class="fr-footer-areas-list"> 1345 <li><a href='/locations/fayetteville'>Fayetteville</a></li> 1346 <li><a href='/locations/bentonville'>Bentonville</a></li> 1347 <li><a href='/locations/rogers'>Rogers</a></li> 1348 <li><a href='/locations/springdale'>Springdale</a></li> 1349 <li><a href='/locations/bella-vista'>Bella Vista</a></li> 1350 <li><a href='/locations/farmington'>Farmington</a></li> 1351 <li><a href='/locations/centerton'>Centerton</a></li> 1352 <li><a href='/locations/cave-springs'>Cave Springs</a></li> 1353 <li><a href='/locations/lowell'>Lowell</a></li> 1354 <li><a href='/locations/tontitown'>Tontitown</a></li> 1355 <li><a href='/locations/siloam-springs'>Siloam Springs</a></li> 1356 </ul> 1357 </div> 1358 </div> 1359 1360 1361 <div class="fr-footer-bottom"> 1362 <div class="fr-footer-bottom-inner"> 1363 <span>© 2026 Franklin AC, Plumbing & Electrical. All rights reserved.</span> 1364 <span class="fr-footer-licenses">AR HVAC #0003484 · AR Electrical #RM-1111 · AR Plumbing #MP6911</span> 1365 <a href='/privacy-policy'>Privacy Policy</a> 1366 <a href='/terms'>Terms</a> 1367 <a href='/accessibility'>Accessibility</a> 1368 </div> 1369 </div> 1370</footer> 1371 1372 1373 1374<div id="scheduler-modal" class="modal-overlay" style="display: none;"> 1375 <div class="modal-content"> 1376 <span class="close-btn">×</span> 1377 1378 <div class="modal-header-custom"> 1379 <h2>Schedule Online</h2> 1380 <div class="progress-bar"> 1381 <div class="progress-step active" data-step="1"> 1382 <div class="step-circle">1</div> 1383 <div class="step-label">Service</div> 1384 </div> 1385 <div class="progress-step" data-step="2"> 1386 <div class="step-circle">2</div> 1387 <div class="step-label">Urgency</div> 1388 </div> 1389 <div class="progress-step" data-step="3"> 1390 <div class="step-circle">3</div> 1391 <div class="step-label">Contact</div> 1392 </div> 1393 <div class="progress-step" data-step="4"> 1394 <div class="step-circle">4</div> 1395 <div class="step-label">Review</div> 1396 </div> 1397 </div> 1398 </div> 1399 1400 <form id="scheduler-form" novalidate action='/submit-request' method="POST"> 1401 <input type="hidden" name="csrfmiddlewaretoken" value="A9ujDQcazV4BTRnDfbyd42B3nrOzpnwJFLIHgYLO1n34Ru1jQwDw70WmyvNtVJ08"> 1402 1403 <div class="honeypot-field" aria-hidden="true"> 1404 <label for="id_website">Do not fill out this field</label> 1405 <input type="text" name="website" id="id_website" tabindex="-1" autocomplete="off"> 1406 </div> 1407 1408 1409 <input type="hidden" name="utm_source" data-fr-attr="utm_source"> 1410 <input type="hidden" name="utm_medium" data-fr-attr="utm_medium"> 1411 <input type="hidden" name="utm_campaign" data-fr-attr="utm_campaign"> 1412 <input type="hidden" name="utm_content" data-fr-attr="utm_content"> 1413 <input type="hidden" name="utm_term" data-fr-attr="utm_term"> 1414 <input type="hidden" name="gclid" data-fr-attr="gclid"> 1415 <input type="hidden" name="fbclid" data-fr-attr="fbclid"> 1416 <input type="hidden" name="msclkid" data-fr-attr="msclkid"> 1417 <input type="hidden" name="referrer" data-fr-attr="referrer"> 1418 <input type="hidden" name="landing_page" data-fr-attr="landing_page"> 1419 <input type="hidden" name="submission_page" data-fr-attr="submission_page"> 1420 <input type="hidden" name="submission_path" value="modal"> 1421 <input type="hidden" id="scheduler-address-zip" name="address_zip" value=""> 1422 <input type="hidden" id="scheduler-address-city" name="address_city" value=""> 1423 1424 <input type="hidden" name="is_after_hours" value="false"> 1425 <input type="hidden" name="is_closed" value="false"> 1426 1427 <div id="form-page-1-service" class="form-page"> 1428 <div class="page-content-wrapper"> 1429 <div class="form-section"> 1430 <h2>What service do you need?</h2> 1431 <div class="radio-group" data-next-section="section-issue-type"> 1432 <label><input type="radio" name="service_trade" value="hvac" required> HVAC</label> 1433 <label><input type="radio" name="service_trade" value="plumbing" required> Plumbing</label> 1434 <label><input type="radio" name="service_trade" value="electrical" required>
1434 Electrical</label> 1435 </div> 1436 <div class="error-message radio-error"></div> 1437 </div> 1438 1439 <div id="section-issue-type" class="form-section"> 1440 <h2>Please select your issue:</h2> 1441 <div class="radio-group" data-next-section="section-service-list"> 1442 <label><input type="radio" name="issue_type" value="repair" required> Repair</label> 1443 <label><input type="radio" name="issue_type" value="install" required> Install</label> 1444 <label id="maintenance-option" class="hidden"><input type="radio" name="issue_type" value="maintenance" required> Maintenance</label> 1445 <label><input type="radio" name="issue_type" value="other" required> Other</label> 1446 </div> 1447 <div class="error-message radio-error"></div> 1448 </div> 1449 1450 <div id="section-service-list" class="form-section"> 1451 <h2 id="details-title">What needs to be repaired/installed?</h2> 1452 <div id="service-options-container" class="radio-group vertical"></div> 1453 <div id="other-issue-container" class="hidden"> 1454 <textarea id="other-issue-description" name="other_issue_description" rows="4" placeholder="Please tell us what issue you are needing help with."></textarea> 1455 <div class="error-message"></div> 1456 </div> 1457 <div class="error-message radio-error"></div> 1458 </div> 1459 </div> 1460 1461 <div class="navigation-btns"> 1462 <button type="button" class="next-btn">Next →</button> 1463 </div> 1464 </div> 1465 1466 <div id="form-page-2-timing" class="form-page hidden"> 1467 <div class="page-content-wrapper"> 1468 <div id="section-timing" class="form-section"> 1469 <h2>When would you like service?</h2> 1470 <div class="radio-group" data-next-section="section-notes"> 1471 <label><input type="radio" name="timing" value="asap" required> ASAP (emergency)</label> 1472 <label><input type="radio" name="timing" value="next_few_days" required> Next few days</label> 1473 <label><input type="radio" name="timing" value="next_few_weeks" required> Next few weeks</label> 1474 </div> 1475 <div class="error-message radio-error"></div> 1476 </div> 1477 1478 <div id="section-emergency-confirm" class="form-section"> 1479 <h2>It’s currently outside our standard business hours.</h2> 1480 <p class="emergency-fee-note">We’re happy to help you right away! Emergency after-hours service is fully available — just note that there’s an additional <strong>$60 after-hours fee</strong> on top of the standard <strong>$29 service call fee</strong>.</p> 1481 <div class="radio-group" data-next-section="section-notes"> 1482 <label><input type="radio" name="after_hours_emergency" value="yes" required> Submit an emergency after-hours request</label> 1483 <label><input type="radio" name="after_hours_emergency" value="no" required> I’ll wait for the next business day</label> 1484 </div> 1485 <div class="error-message radio-error"></div> 1486 </div> 1487 1488 <div id="section-notes" class="form-section"> 1489 <h2>Would you like to add any notes? (optional)</h2> 1490 <textarea id="notes-input" name="notes" rows="4" placeholder="e.g., scheduling preferences, details about the issue, gate codes, etc."></textarea> 1491 </div> 1492 </div> 1493 1494 <div class="navigation-btns"> 1495 <button type="button" class="back-btn">← Back</button> 1496 <button type="button" class="next-btn">Next →</button> 1497 </div> 1498 </div> 1499 1500 <div id="form-page-3-contact" class="form-page hidden"> 1501 <div class="page-content-wrapper"> 1502 <div class="form-section"> 1503 <h2>What is the address for service?</h2> 1504 1505 <input id="scheduler-address-input" name="service_address" type="text" placeholder="Enter service address" required data-next-section="section-contact-details"> 1506 <input type="hidden" id="google-address-selected" name="google_address_selected" value=""> 1507 1508 <div class="error-message"></div> 1509 </div> 1510 1511 <div id="section-contact-details" class="form-section"> 1512 <h2>Who should we contact about the appointment?</h2> 1513 1514 <div class="form-field-group"> 1515 <label for="first-name-input">First name </label> 1516 <input type="text" id="first-name-input" name="first_name" required> 1517 <div class="error-message"></div> 1518 </div> 1519 1520 <div class="form-field-group"> 1521 <label for="last-name-input">Last name </label> 1522 <input type="text" id="last-name-input" name="last_name" required> 1523 <div class="error-message"></div> 1524 </div> 1525 1526 <div class="form-field-group"> 1527 <label for="email-input">Email </label> 1528 <input type="email" id="email-input" name="email" required> 1529 <div class="error-message"></div> 1530 </div> 1531 1532 <div class="form-field-group"> 1533 <label for="phone-number-input">Phone number</label> 1534 <input type="tel" id="phone-number-input" name="phone_number" required placeholder="(555) 555-5555"> 1535 <div class="error-message"></div> 1536 <div class="sms-consent"> 1537 <label>
1537By providing your phone number, you agree to receive texts from Franklin AC, Plumbing, & Electrical with appointment reminders and updates relating to past service. We promise to never text you for marketing purposes. Message and data rates may apply. You can reply STOP at any time to unsubscribe.</label> 1538 </div> 1539 </div> 1540 1541 1542 </div> 1543 </div> 1544 1545 <div class="navigation-btns"> 1546 <button type="button" class="back-btn">← Back</button> 1547 <button type="button" class="next-btn">Next →</button> 1548 </div> 1549 </div> 1550 1551 <div id="form-page-4-review" class="form-page hidden"> 1552 <div class="page-content-wrapper"> 1553 <h2>Confirm your booking request</h2> 1554 <div class="review-summary"> 1555 <p><strong>Service:</strong> <span id="review-service"></span></p> 1556 <p><strong>Issue:</strong> <span id="review-issue-detail"></span></p> 1557 <p><strong>When:</strong> <span id="review-timing"></span></p> 1558 <p><strong>Where:</strong> <span id="review-address"></span></p> 1559 <p><strong>Contact:</strong> <span id="review-name"></span></p> 1560 <p><strong>Email:</strong> <span id="review-email"></span></p> 1561 <p><strong>Phone:</strong> <span id="review-phone"></span></p> 1562 <p><strong>Notes:</strong> <span id="review-notes"></span></p> 1563 </div> 1564 <div class="error-message checkbox-error"></div> 1565 </div> 1566 <div class="navigation-btns"> 1567 <button type="button" class="back-btn">← Back</button> 1568 <button type="submit" id="book-appointment-btn">Submit →</button> 1569 </div> 1570 </div> 1571 1572 <div id="scheduler-form-page-confirmation" class="form-page hidden"> 1573 <div class="page-content-wrapper"> 1574 <h2>Thank you!</h2> 1575 <p>Your appointment request has been submitted successfully.</p> 1576 <p> 1577 <strong>During business hours</strong> (Mon–Fri, 7am–5pm), our team will reach out to confirm your booking within a few minutes.<br><br> 1578 <strong>After hours</strong> (Mon–Fri 5pm–7pm, or Saturday 7am–7pm), our on-call dispatcher will follow up shortly if you selected emergency service; otherwise we’ll be in touch first thing the next business day.<br><br> 1579 <strong>Overnight or on Sunday</strong>, we’ll reach out first thing the next business morning. Thank you for the opportunity! 1580 </p> 1581 </div> 1582 <div class="navigation-btns"> 1583 <button type="button" id="scheduler-close-confirmation-btn">Close</button> 1584 </div> 1585 </div> 1586 1587 </form> 1588 </div> 1589</div>
vendor: 111 bytes, lines 1589-1592
1589 1590 1591 1592<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1592<script defer src="https://franklinair-assets.s3.amazonaws.com/static/js/fr-attribution.js"></script>
vendor: 1 bytes, line 1592
1592
1593<script defer src="https://franklinair-assets.s3.amazonaws.com/static/js/blog.js"></script>
vendor: 1 bytes, line 1593
1593
1594<script defer src="https://franklinair-assets.s3.amazonaws.com/static/js/scheduler_widget.js"></script>
vendor: 1 bytes, line 1594
1594
1595<script defer src="https://franklinair-assets.s3.amazonaws.com/static/js/scheduler_inline_widget.js"></script>
1595 1596 1597
1598<script> 1599// Pull the postal_code and locality out of a Google Place result so we can 1600// expose non-PII geo signals (ZIP + city only â NEVER street/full address) 1601// to GA4 for value-based bidding and heat-mapping. 1602function _frExtractZipCity(place) { 1603 var out = { zip: '', city: '' }; 1604 var comps = (place && place.address_components) || []; 1605 for (var i = 0; i < comps.length; i++) { 1606 var types = comps[i].types || []; 1607 if (types.indexOf('postal_code') !== -1 && !out.zip) { 1608 out.zip = comps[i].short_name || comps[i].long_name || ''; 1609 } 1610 if (types.indexOf('locality') !== -1 && !out.city) { 1611 out.city = comps[i].long_name || comps[i].short_name || ''; 1612 } 1613 // Fallback if locality is missing (some addresses use sublocality) 1614 if (!out.city && types.indexOf('sublocality') !== -1) { 1615 out.city = comps[i].long_name || comps[i].short_name || ''; 1616 } 1617 } 1618 return out; 1619} 1620function _frWriteZipCity(zipInputId, cityInputId, place) { 1621 var zc = _frExtractZipCity(place); 1622 var zEl = document.getElementById(zipInputId); 1623 var cEl = document.getElementById(cityInputId); 1624 if (zEl) zEl.value = zc.zip; 1625 if (cEl) cEl.value = zc.city; 1626} 1627 1628function initAutocomplete() { 1629 const selectedFlag = document.getElementById('google-address-selected'); 1630 if (!selectedFlag) return; 1631 1632 // --- Scheduler modal address autocomplete --- 1633 const schedulerInput = document.getElementById('scheduler-address-input'); 1634 if (schedulerInput && window.google && google.maps) { 1635 const autocomplete = new google.maps.places.Autocomplete(schedulerInput, { 1636 types: ['address'], 1637 componentRestrictions: { 'country': 'us' }, 1638 fields: ['formatted_address', 'address_components'] 1639 }); 1640 autocomplete.addListener('place_changed', () => { 1641 const place = autocomplete.getPlace(); 1642 if (place && place.formatted_address) { 1643 selectedFlag.value = 'true'; 1644 _frWriteZipCity('scheduler-address-zip', 'scheduler-address-city', place); 1645 if (typeof unfoldSection === 'function') unfoldSection(schedulerInput); 1646 } 1647 }); 1648 schedulerInput.addEventListener('input', () => { 1649 selectedFlag.value = ''; 1650 // Stale ZIP/city â clear so we don't ship the previous pick's geo. 1651 var z = document.getElementById('scheduler-address-zip'); 1652 var c = document.getElementById('scheduler-address-city'); 1653 if (z) z.value = ''; 1654 if (c) c.value = ''; 1655 }); 1656 } 1657 1658 // --- Inline scheduler address autocomplete (per-page hero form) --- 1659 const inlineInput = document.getElementById('inline-scheduler-address-input'); 1660 const inlineFlag = document.getElementById('inline-google-address-selected'); 1661 if (inlineInput && inlineFlag && window.google && google.maps) { 1662 const autocomplete = new google.maps.places.Autocomplete(inlineInput, { 1663 types: ['address'], 1664 componentRestrictions: { 'country': 'us' }, 1665 fields: ['formatted_address', 'address_components'] 1666 }); 1667 autocomplete.addListener('place_changed', () => { 1668 const place = autocomplete.getPlace(); 1669 if (place && place.formatted_address) { 1670 inlineFlag.value = 'true'; 1671 _frWriteZipCity('inline-scheduler-address-zip', 'inline-scheduler-address-city', place); 1672 // Reveal the next inline step (contact info). 1673 const addrStep = inlineInput.closest('.fr-inline-sched__step'); 1674 const nextName = addrStep?.dataset.next; 1675 if (nextName) { 1676 const nextStep = document.querySelector(`.fr-inline-sched__step[data-step="${nextName}"]`); 1677 if (nextStep && !nextStep.classList.contains('is-active')) { 1678 nextStep.classList.add('is-active'); 1679 const heading = nextStep.querySelector('.fr-inline-sched__q'); 1680 if (heading) heading.scrollIntoView({ behavior: 'smooth', block: 'center' }); 1681 } 1682 } 1683 } 1684 }); 1685 inlineInput.addEventListener('input', () => { 1686 inlineFlag.value = ''; 1687 var z = document.getElementById('inline-scheduler-address-zip'); 1688 var c = document.getElementById('inline-scheduler-address-city'); 1689 if (z) z.value = ''; 1690 if (c) c.value = ''; 1691 }); 1692 } 1693 1694 // --- Quote-request modal address autocomplete (free 2nd opinion form) --- 1695 const quoteInput = document.getElementById('quote-request-address-input'); 1696 if (quoteInput && window.google && google.maps) { 1697 const autocomplete = new google.maps.places.Autocomplete(quoteInput, { 1698 types: ['address'], 1699 componentRestrictions: { 'country': 'us' }, 1700 fields: ['formatted_address'] 1701 }); 1702 autocomplete.addListener('place_changed', () => { 1703 const place = autocomplete.getPlace(); 1704 if (place && place.formatted_address) { 1705 selectedFlag.value = 'true'; 1706 } 1707 }); 1708 quoteInput.addEventListener('input', () => { selectedFlag.value = ''; }); 1709 } 1710} 1711</script>
1711 1712 1713 1714 1715
1716<script> 1717(function() { 1718 var badges = document.querySelectorAll('[data-fr-hours-badge]'); 1719 if (!badges.length) return; 1720 function refresh() { 1721 var fmt = new Intl.DateTimeFormat('en-US', { 1722 timeZone: 'America/Chicago', 1723 weekday: 'short', 1724 hour: 'numeric', 1725 minute: 'numeric', 1726 hour12: false 1727 }); 1728 var parts = {}; 1729 fmt.formatToParts(new Date()).forEach(function(p) { parts[p.type] = p.value; }); 1730 var day = parts.weekday; 1731 var minutes = (parseInt(parts.hour, 10) % 24) * 60 + parseInt(parts.minute, 10); 1732 var open = ['Mon','Tue','Wed','Thu','Fri','Sat'].indexOf(day) !== -1 1733 && minutes >= 7 * 60 && minutes < 19 * 60; 1734 var openHtml = 'OPEN NOW · Mon–Sat 7am–7pm'; 1735 var closedHtml = 'CLOSED — Open Mon–Sat 7am–7pm'; 1736 badges.forEach(function(badge) { 1737 var statusEl = badge.querySelector('[data-fr-hours-status]'); 1738 if (!statusEl) return; 1739 statusEl.innerHTML = open ? openHtml : closedHtml; 1740 badge.classList.toggle('is-closed', !open); 1741 }); 1742 } 1743 refresh(); 1744 setInterval(refresh, 60 * 1000); 1745})(); 1746 1747// FAQ accordion â clicking one open item closes the others in the same group. 1748document.addEventListener('DOMContentLoaded', function() { 1749 document.querySelectorAll('[data-fr-faq-accordion]').forEach(function(group) { 1750 var items = group.querySelectorAll('details.fr-faq-item'); 1751 items.forEach(function(item) { 1752 item.addEventListener('toggle', function() { 1753 if (item.open) { 1754 items.forEach(function(other) { 1755 if (other !== item) other.open = false; 1756 }); 1757 } 1758 }); 1759 }); 1760 }); 1761}); 1762</script>
1762 1763 1764
1765<script> 1766document.addEventListener('DOMContentLoaded', function() { 1767 if (window.location.hash === '#schedule-online') { 1768 const schedulerModal = document.getElementById('scheduler-modal'); 1769 if (schedulerModal) schedulerModal.style.display = 'flex'; 1770 } 1771}); 1772</script>
vendor: 1 bytes, line 1772
1772
1773<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAzZTC4W2dxCPGXQc1o1dWAhooP86wjDYc&libraries=places&callback=initAutocomplete"></script>
1773 1774 1775<!-- Whitelisted phone numbers â swap visible phone links to the source-tracked 1776call-tracking number when the visitor's cookie matches a whitelisted number, 1777otherwise default to the main line. updatePhoneLinks() is defined in blog.js 1778(loaded with `defer`), so this call must wait for DOMContentLoaded â by then 1779all deferred scripts have executed and the function is defined. -->
1780<script type='text/javascript'> 1781document.addEventListener('DOMContentLoaded', function() { 1782 const whitelistedNumbers = [4792820003, 4793268236, 4793268255, 4793268239, 4793268240, 4793268245, 4793268247, 4793268250, 4793268248, 4793268251, 4793268252, 4793268253, 4793268254, 4793268256, 4793268257, 4793268258, 4793268259, 4793268260, 4793268262, 4793268264, 4793268517, 4793268518, 4793268636, 4792798231, 4792087666, 4792352329, 4792352347, 4793231590, 4793439974, 4792087520, 4792068196, 4792629561, 4792629675, 4792352892, 4792356299, 4792354278, 4792354695, 4792629766, 4792629748, 4792620593, 1783 4792354761]; 1784 const defaultNumber = '4792820003'; 1785 1786 const commonOptions = { 1787 whitelistedNumbers: whitelistedNumbers, 1788 defaultNumber: defaultNumber 1789 }; 1790 1791 updatePhoneLinks('.number_link', commonOptions); // changes link and text 1792 updatePhoneLinks('.number_html', { ...commonOptions, setInnerHTML: false }); // changes link only 1793}); 1794</script>
1794 1795 1796<!-- phone_click GTM tracking. Single delegated listener on every tel: link. 1797 Fires once per click (de-duped within 1.5s to ignore double-taps). Pushes 1798 trade + issue_type derived from data-fr-page so value-based bidding can 1799 weight calls from high-value service pages (AC install, panel upgrade) 1800 above low-value ones (drain clear). -->
1801<script> 1802(function() { 1803 // Map of page url_name (data-fr-page) â derived booking context. 1804 // Used to assign a value estimate to phone_click events. Pages not in 1805 // this map fall through to trade='unknown' â DEFAULT lookup value. 1806 var PAGE_CONTEXT = { 1807 // HVAC 1808 ac_repair: { trade: 'hvac', issue_type: 'repair' }, 1809 ac_install: { trade: 'hvac', issue_type: 'install' }, 1810 ac_maintenance: { trade: 'hvac', issue_type: 'maintenance' }, 1811 furnace_repair: { trade: 'hvac', issue_type: 'repair' }, 1812 furnace_install: { trade: 'hvac', issue_type: 'install' }, 1813 minisplit_install: { trade: 'hvac', issue_type: 'install' }, 1814 hvac_inspections: { trade: 'hvac', issue_type: 'repair' }, 1815 duct_sealing: { trade: 'hvac', issue_type: 'install' }, 1816 iaq: { trade: 'hvac', issue_type: 'repair' }, 1817 // Plumbing 1818 plumbing: { trade: 'plumbing', issue_type: 'repair' }, 1819 water_heater_install: { trade: 'plumbing', issue_type: 'install' }, 1820 water_heater_repair: { trade: 'plumbing', issue_type: 'repair' }, 1821 drain_cleaning: { trade: 'plumbing', issue_type: 'repair' }, 1822 emergency_plumbing: { trade: 'plumbing', issue_type: 'repair' }, 1823 garbage_disposal: { trade: 'plumbing', issue_type: 'repair' }, 1824 sewer_line_repair: { trade: 'plumbing', issue_type: 'repair' }, 1825 leak_repair: { trade: 'plumbing', issue_type: 'repair' }, 1826 water_filtration: { trade: 'plumbing', issue_type: 'install' }, 1827 // Electrical 1828 electrical: { trade: 'electrical', issue_type: 'repair' }, 1829 panel_upgrade: { trade: 'electrical', issue_type: 'install' }, 1830 outlet_installation: { trade: 'electrical', issue_type: 'repair' }, 1831 ev_charger_install: { trade: 'electrical', issue_type: 'install' } 1832 // Non-trade pages (index, financing, autopilot, careers, terms, 1833 // privacy, accessibility, service_guarantee, free_second_opinion, 1834 // pricing) intentionally omitted â they get trade='unknown' â 1835 // DEFAULT lookup value. 1836 }; 1837 1838 // Infer where on the page the tel: link sits. Pure CSS-class heuristic so 1839 // we don't have to label every anchor in every template. Stable enough 1840 // for GA4 funnel slicing (hero vs. footer vs. mobile_strip vs. ...). 1841 function inferLinkLocation(anchor) { 1842 if (anchor.dataset.frPhoneLocation) return anchor.dataset.frPhoneLocation; 1843 var el = anchor; 1844 for (var i = 0; el && i < 12; i++, el = el.parentElement) { 1845 var cls = el.classList; 1846 if (!cls) continue; 1847 if (cls.contains('fr-schedule-strip')) return 'mobile_strip'; 1848 if (cls.contains('fr-hero-ctas') || cls.contains('fr-hero-text')) return 'hero'; 1849 if (cls.contains('fr-header')) return 'header'; 1850 if (cls.contains('fr-footer')) return 'footer'; 1851 if (cls.contains('fr-mobile-drawer__panel')) return 'mobile_drawer'; 1852 if (cls.contains('fr-faq')) return 'faq'; 1853 if (cls.contains('fr-section--blue')) return 'timeline'; 1854 if (cls.contains('fr-why')) return 'why_block'; 1855 if (cls.contains('fr-financing')) return 'financing_callout'; 1856 if (cls.contains('fr-other-services')) return 'other_services'; 1857 if (cls.contains('fr-reviews')) return 'reviews'; 1858 if (cls.contains('fr-article')) return 'article'; 1859 } 1860 return 'unknown'; 1861 } 1862 1863 // Hours helpers are defined globally by base.html (window.frChicagoNow / 1864 // frIsAfterHoursCentral / frIsClosedCentral). They read window.FR_HOURS, 1865 // which is rendered from backoffice/hours.py â single source of truth. 1866 var isAfterHoursCentral = window.frIsAfterHoursCentral || function() { return false; }; 1867 var isClosedCentral = window.frIsClosedCentral || function() { return false; }; 1868 1869 function randId() { 1870 if (window.crypto && crypto.randomUUID) return crypto.randomUUID(); 1871 // Fallback for very old browsers 1872 return 'pc_' + Math.random().toString(36).slice(2) + Date.now().toString(36); 1873 } 1874 1875 // Compute the pre-weight estimated value for a given page slug. Used both 1876 // to update the session-max store on page load AND to compare candidates 1877 // at click time. Returns 0 when frEstimateLeadValue isn't loaded yet. 1878 function pageValueFor(slug) { 1879 var c = PAGE_CONTEXT[slug] || { trade: 'unknown', issue_type: 'unknown' }; 1880 return (typeof frEstimateLeadValue === 'function') 1881 ? frEstimateLeadValue(c.trade, c.issue_type) 1882 : 0; 1883 } 1884 1885 // Session-max attribution. Real users often land on a high-value page 1886 // (e.g. /services/ac-install via Google Ads) and then wander to a lower- 1887 // value page (/financing, /autopilot) before tapping the phone link. We 1888 // want bidding credit to go to the highest-intent page they s
1888aw, not 1889 // their last hop. Stored in sessionStorage so it resets cleanly on a new 1890 // visit. Shape: { slug, trade, issue_type, value }. 1891 var SESSION_MAX_KEY = 'fr_session_max_value'; 1892 function readSessionMax() { 1893 try { 1894 var raw = sessionStorage.getItem(SESSION_MAX_KEY); 1895 return raw ? JSON.parse(raw) : null; 1896 } catch (e) { return null; } 1897 } 1898 function writeSessionMax(obj) { 1899 try { sessionStorage.setItem(SESSION_MAX_KEY, JSON.stringify(obj)); } 1900 catch (e) { /* private mode / storage quota â silently ignore */ } 1901 } 1902 (function bumpSessionMaxFromCurrentPage() { 1903 var slug = document.body.dataset.frPage || 'unknown'; 1904 var ctx = PAGE_CONTEXT[slug] || { trade: 'unknown', issue_type: 'unknown' }; 1905 var v = pageValueFor(slug); 1906 var prev = readSessionMax(); 1907 if (!prev || v > (prev.value || 0)) { 1908 writeSessionMax({ slug: slug, trade: ctx.trade, issue_type: ctx.issue_type, value: v }); 1909 } 1910 })(); 1911 1912 var pageLoadedAt = Date.now(); 1913 var lastClickAt = 0; // de-dupe rapid double-taps 1914 1915 document.addEventListener('click', function(e) { 1916 // Walk up from the click target to find the closest tel: anchor 1917 // (clicks often land on a nested <span> or <svg> inside the link). 1918 var target = e.target; 1919 var anchor = null; 1920 while (target && target !== document.body) { 1921 if (target.tagName === 'A' && target.getAttribute('href') && target.getAttribute('href').indexOf('tel:') === 0) { 1922 anchor = target; 1923 break; 1924 } 1925 target = target.parentElement; 1926 } 1927 if (!anchor) return; 1928 1929 // De-dupe double-taps within 1.5s on the same anchor. 1930 var now = Date.now(); 1931 if (now - lastClickAt < 1500) return; 1932 lastClickAt = now; 1933 1934 var pageSlug = document.body.dataset.frPage || 'unknown'; 1935 var ctx = PAGE_CONTEXT[pageSlug] || { trade: 'unknown', issue_type: 'unknown' }; 1936 var clickPageValue = pageValueFor(pageSlug); 1937 1938 // Pick the higher-value context: current click page vs. the highest- 1939 // value page we've seen in this session. If the user landed on AC 1940 // install ($5,000) and tapped the call link from /financing ($300), 1941 // we credit the bid signal to AC install. 1942 var sessionMax = readSessionMax(); 1943 var attributedSlug = pageSlug; 1944 var attributedCtx = ctx; 1945 var attributedValue = clickPageValue; 1946 if (sessionMax && (sessionMax.value || 0) > clickPageValue) { 1947 attributedSlug = sessionMax.slug || 'unknown'; 1948 attributedCtx = { trade: sessionMax.trade || 'unknown', issue_type: sessionMax.issue_type || 'unknown' }; 1949 attributedValue = sessionMax.value || 0; 1950 } 1951 1952 var weight = (window.FR_LEAD_VALUES && window.FR_LEAD_VALUES.phone_intent_weight) || 0.1; 1953 var partialValue = Math.round(attributedValue * weight); 1954 var isSessionMaxPage = (attributedSlug === pageSlug); 1955 var clickId = randId(); 1956 var phoneNumber = (anchor.getAttribute('href') || '').replace('tel:', ''); 1957 var linkLocation = inferLinkLocation(anchor); 1958 var afterHours = isAfterHoursCentral(); 1959 var closed = isClosedCentral(); 1960 var timeOnPage = Math.round((now - pageLoadedAt) / 1000); 1961 1962 // GTM event for GA4 / Google Ads value-based bidding. 1963 // `trade` / `issue_type` describe the ATTRIBUTED page (session max). 1964 // `click_page_template` / `click_page_trade` / `click_page_issue_type` 1965 // describe where the click physically happened. Same when the user 1966 // never left the high-value page; different when they wandered. 1967 window.dataLayer = window.dataLayer || []; 1968 window.dataLayer.push({ 1969 event: 'phone_click', 1970 page_path: location.pathname, 1971 page_template: attributedSlug, 1972 click_page_template: pageSlug, 1973 click_page_trade: ctx.trade, 1974 click_page_issue_type: ctx.issue_type, 1975 link_location: linkLocation, 1976 phone_number: phoneNumber, 1977 trade: attributedCtx.trade, 1978 issue_type: attributedCtx.issue_type, 1979 is_session_max_page: isSessionMaxPage, 1980 is_after_hours: afterHours, 1981 is_closed: closed, 1982 time_on_page_seconds: timeOnPage, 1983 phone_click_id: clickId, 1984 value: partialValue, 1985 currency: 'USD' 1986 }); 1987 1988 // Server-side log so the match_phone_clicks command can pair this 1989 // click against an incoming RingCentral call (no CallRail needed). 1990 // Use sendBeacon when available â fire-and-forget, survives page 1991 // unload (which happens immediately on iOS when the dialer opens). 1992 // Falls back to fetch with keepalive on older browsers. 1993 try { 1994 // Read attribution from cookies/localStorage if fr-attribution.js 1995 // populated them; otherwise from URL params on this nav. 1996 function _read(name) { 1997 try { 1998 var v = (window.localStorage && localStorage.getItem('fr_' + name)) || ''; 1999 if (v) return v; 2000 } catch (e) {} 2001 var m = document.cookie.match('(?:^|; )' + name + '=([^;]+)'); 2002 if (m) return decodeURIComponent(m[1]); 2003 var qs = new URLSearchParams(location.search); 2004 return qs.get(name) || ''; 2005 } 2006 var payload = { 2007 phone_click_id: clickId, 2008 page_path: location.pathname, 2009 // page_template reflects the ATTRIBUTED page (session max). 2010 // click_page_template records where the click actually fired. 2011 page_template: attributedSlug, 2012 click_page_template: pageSlug, 2013 link_location: linkLocation, 2014 phone_number: phoneNumber, 2015 trade: attributedCtx.trade, 2016 issue_type: attributedCtx.issue_type, 2017 is_session_max_page: isSessionMaxPage, 2018 is_after_hours: afterHours, 2019 is_closed: closed, 2020 time_on_page_seconds: timeOnPage, 2021 value: partialValue, 2022 gclid: _read('gclid'), 2023 fbclid: _read('fbclid'), 2024 msclkid: _read('msclkid'), 2025 utm_source: _read('utm_source'), 2026 utm_medium: _read('utm_medium'), 2027 utm_campaign: _read('utm_campaign'),
2028 utm_content: _read('utm_content'), 2029 utm_term: _read('utm_term'), 2030 referrer: document.referrer || '' 2031 }; 2032 var body = JSON.stringify(payload); 2033 2034 // Fire the same click at both systems. 2035 // 2036 // Backoffice is same-origin and unchanged. FranklinOS is a 2037 // different application on a different domain, and while it 2038 // mirrors ServiceTitan both need the data â sending to one and 2039 // cutting the other over later would leave a hole in whichever 2040 // was not receiving on the day somebody looked. 2041 // 2042 // Content type is the whole trick on the cross-origin one. 2043 // 'text/plain' is one of the three a browser will send without a 2044 // CORS preflight, and a preflight is fatal here: iOS opens the 2045 // dialer and tears this page down in the same instant, so a 2046 // beacon needing a round trip before the real request is a beacon 2047 // that never leaves. The body is still JSON; only the header is 2048 // the shape CORS wants to see. 2049 function post(url, type, sameOrigin) { 2050 var sent = false; 2051 if (navigator.sendBeacon) { 2052 try { 2053 sent = navigator.sendBeacon( 2054 url, new Blob([body], { type: type })); 2055 } catch (e) { sent = false; } 2056 } 2057 if (!sent && window.fetch) { 2058 // keepalive, so the request outlives the page. Without it 2059 // the dialer opening cancels it and the tap is lost â 2060 // which is every tap on an iPhone. 2061 fetch(url, { 2062 method: 'POST', 2063 body: body, 2064 headers: { 'Content-Type': type }, 2065 keepalive: true, 2066 credentials: sameOrigin ? 'same-origin' : 'omit' 2067 }).catch(function() {}); 2068 } 2069 } 2070 2071 post('https://www.franklinos.net/webhooks/phone-click', 2072 'text/plain', false); 2073 } catch (e) { /* never block the dialer */ } 2074 2075 // Don't preventDefault â let the dialer open as normal. 2076 }, true); // capture phase so we win against any future per-link handlers 2077})(); 2078</script>
2078 2079 2080<!-- Header navigation behaviors: services dropdown + mobile drawer -->
2081<script> 2082(function() { 2083 // ---- Services dropdown ---- 2084 // Opens on hover (desktop) and click (touch / keyboard). 2085 // A small close delay lets the cursor cross the gap between the toggle 2086 // and the dropdown panel without the menu vanishing. 2087 var HOVER_CLOSE_DELAY = 180; 2088 var hoverSupported = window.matchMedia('(hover: hover) and (pointer: fine)').matches; 2089 2090 document.querySelectorAll('[data-fr-dropdown]').forEach(function(wrap) { 2091 var toggle = wrap.querySelector('[data-fr-dropdown-toggle]'); 2092 if (!toggle) return; 2093 2094 var closeTimer = null; 2095 function open() { 2096 if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } 2097 wrap.classList.add('is-open'); 2098 toggle.setAttribute('aria-expanded', 'true'); 2099 } 2100 function close() { 2101 wrap.classList.remove('is-open'); 2102 toggle.setAttribute('aria-expanded', 'false'); 2103 } 2104 function scheduleClose() { 2105 if (closeTimer) clearTimeout(closeTimer); 2106 closeTimer = setTimeout(close, HOVER_CLOSE_DELAY); 2107 } 2108 2109 // Click toggle (works for touch + keyboard). 2110 toggle.addEventListener('click', function(e) { 2111 e.preventDefault(); 2112 if (wrap.classList.contains('is-open')) close(); else open(); 2113 }); 2114 2115 // Hover open/close (desktop pointer only). 2116 if (hoverSupported) { 2117 wrap.addEventListener('mouseenter', open); 2118 wrap.addEventListener('mouseleave', scheduleClose); 2119 } 2120 2121 // Keyboard focus inside the menu keeps it open. 2122 wrap.addEventListener('focusin', open); 2123 wrap.addEventListener('focusout', function(e) { 2124 // If focus leaves the wrap entirely, close. 2125 if (!wrap.contains(e.relatedTarget)) scheduleClose(); 2126 }); 2127 2128 // Click outside closes 2129 document.addEventListener('click', function(e) { 2130 if (!wrap.contains(e.target)) close(); 2131 }); 2132 // Escape closes 2133 document.addEventListener('keydown', function(e) { 2134 if (e.key === 'Escape') close(); 2135 }); 2136 }); 2137 2138 // ---- Scroll-elevation on the header ---- 2139 var header = document.querySelector('.fr-header'); 2140 if (header) { 2141 var onScroll = function() { 2142 if (window.scrollY > 4) header.classList.add('is-scrolled'); 2143 else header.classList.remove('is-scrolled'); 2144 }; 2145 window.addEventListener('scroll', onScroll, { passive: true }); 2146 onScroll(); 2147 } 2148 2149 // ---- Mobile drawer ---- 2150 var drawer = document.getElementById('fr-mobile-drawer'); 2151 var menuBtn = document.getElementById('fr-menu-toggle'); 2152 if (drawer && menuBtn) { 2153 function openDrawer() { 2154 drawer.classList.add('is-open'); 2155 drawer.setAttribute('aria-hidden', 'false'); 2156 menuBtn.setAttribute('aria-expanded', 'true'); 2157 document.body.style.overflow = 'hidden'; 2158 } 2159 function closeDrawer() { 2160 drawer.classList.remove('is-open'); 2161 drawer.setAttribute('aria-hidden', 'true'); 2162 menuBtn.setAttribute('aria-expanded', 'false'); 2163 document.body.style.overflow = ''; 2164 } 2165 menuBtn.addEventListener('click', openDrawer); 2166 drawer.querySelectorAll('[data-fr-drawer-close]').forEach(function(el) { 2167 el.addEventListener('click', closeDrawer); 2168 }); 2169 drawer.querySelectorAll('[data-fr-drawer-close-on-click]').forEach(function(el) { 2170 el.addEventListener('click', closeDrawer); 2171 }); 2172 document.addEventListener('keydown', function(e) { 2173 if (e.key === 'Escape' && drawer.classList.contains('is-open')) closeDrawer(); 2174 }); 2175 } 2176})(); 2177</script>
2177 2178 2179 2180
2181<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4572914ab8ccf03',t:'MTc5MTE0ODA5MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
2181</body> 2182</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.