PageSourceSearch

https://www.getfranklin.com/services/ac-install

html getfranklin.com collected 2026-10-04 21:08:11 UTC 131,836 bytes, 2,182 lines download raw bytes

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&ndash;$15,000+, and <strong>the contractor you pick matters as much as the equipment &mdash; on the same unit, quotes can swing $3,000&ndash;$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 &mdash; every rebate you qualify for, and a flat-rate price before any work begins. No AC right now? Tell us when you book &mdash; we prioritize customers who are completely down. We&rsquo;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 &middot; Mon&ndash;Sat 7am&ndash;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 &middot; 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 &middot; 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&rsquo;s currently outside our standard business hours.</legend>
726            <p class="fr-inline-sched__note">We&rsquo;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&rsquo;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&rsquo;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, &amp; 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 &rarr;</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&ndash;Fri, 7am&ndash;5pm), our team will reach out to confirm your booking within a few minutes.<br><br>
782                <strong>After hours</strong> (Mon&ndash;Fri 5pm&ndash;7pm, or Saturday 7am&ndash;7pm), our on-call dispatcher will follow up shortly if you selected emergency service; otherwise we&rsquo;ll be in touch first thing the next business day.<br><br>
783                <strong>Overnight or on Sunday</strong>, we&rsquo;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 &mdash; 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 &mdash; <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&ndash;$15k+ depending on size, efficiency, ductwork, and the contractor installing it. Franklin offers free in-home replacement quotes &mdash; 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&ndash;$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 &ldquo;50% rule&rdquo; 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&ndash;18 years; builder-grade units sometimes only make it 10&ndash;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&rsquo;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 &mdash; quotes are free, so the only cost is an hour of your time. If you&rsquo;ve already got one and it feels off, we&rsquo;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 &mdash; 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&ndash;50% versus a gas furnace. They also unlock the largest utility rebates available ($1,500&ndash;$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> &mdash; refrigerant charge, airflow, static pressure, electrical, condensate, gas pressure, and more &mdash; 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 &amp; 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&nbsp;$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&nbsp;$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&nbsp;$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&rsquo;t include sales tax, and rates shift a bit over time &mdash; 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&rsquo;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&rsquo;ll explain what&rsquo;s going on in plain English, walk you through your options without pressure, and treat your house like it&rsquo;s their own. It&rsquo;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&rsquo;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&rsquo;s going on &mdash; 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&rsquo;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 &mdash; 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 &mdash; 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 &middot; 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 &rarr;
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&rsquo;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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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">&rarr;</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&ndash;3 business days of you approving the quote. For emergency no-cool situations, we&rsquo;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&ndash;$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 &mdash; Trane and Daikin equipment respectively, two of the largest manufacturers in the industry. Both start in the same price range, so the choice isn&rsquo;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 &mdash; that&rsquo;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&rsquo;ll quote whichever fits your home, and we&rsquo;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 &mdash; 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 &mdash; 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 &mdash; 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 &middot; 5.0 ★ &middot; 1,361 reviews</span>
1275                <h2 class="fr-footer-cta-title">Need service? We&rsquo;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&ndash;Sat</strong> &middot; 7am &ndash; 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&#160;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>&copy; 2026 Franklin AC, Plumbing &amp; Electrical. All rights reserved.</span>
1364            <span class="fr-footer-licenses">AR HVAC #0003484 &middot; AR Electrical #RM-1111 &middot; 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">&times;</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 &rarr;</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&rsquo;s currently outside our standard business hours.</h2>
1480                        <p class="emergency-fee-note">We&rsquo;re happy to help you right away! Emergency after-hours service is fully available &mdash; just note that there&rsquo;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&rsquo;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">&larr; Back</button>
1496                    <button type="button" class="next-btn">Next &rarr;</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">&larr; Back</button>
1547                    <button type="button" class="next-btn">Next &rarr;</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">&larr; Back</button>
1568                    <button type="submit" id="book-appointment-btn">Submit &rarr;</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&ndash;Fri, 7am&ndash;5pm), our team will reach out to confirm your booking within a few minutes.<br><br>
1578                        <strong>After hours</strong> (Mon&ndash;Fri 5pm&ndash;7pm, or Saturday 7am&ndash;7pm), our on-call dispatcher will follow up shortly if you selected emergency service; otherwise we&rsquo;ll be in touch first thing the next business day.<br><br>
1579                        <strong>Overnight or on Sunday</strong>, we&rsquo;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 &middot; Mon&ndash;Sat 7am&ndash;7pm';
1735        var closedHtml = 'CLOSED &mdash; Open Mon&ndash;Sat 7am&ndash;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.