{"id":368,"date":"2026-09-25T01:24:01","date_gmt":"2026-09-25T05:24:01","guid":{"rendered":"https:\/\/passcontractorexam.com\/articles\/?p=368"},"modified":"2026-10-03T03:30:41","modified_gmt":"2026-10-03T07:30:41","slug":"florida-hvac-license-practice-test","status":"publish","type":"post","link":"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/","title":{"rendered":"Florida HVAC License Practice Test: 80 or 130 Questions"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>No <strong>Florida HVAC license practice test<\/strong> is the state exam, and none of the sellers publishes the specification to judge one against. Florida&#8217;s own rule does: Class B trade knowledge is 80 scored questions in 5 hours, Class A is 130 in 7.5, both open book, 70 percent to pass.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"florida-hvac-license-practice-test\" data-minutes=\"12\">\n<style>.msq-audio{margin:1.25em 0 1.75em;padding:16px 18px;background:#F3F1EC;border:1px solid #D9D3C7;border-radius:12px}\n.msq-audio-lead{margin:0 0 8px;font-size:.95em}.msq-audio audio{width:100%;margin:0 0 12px;display:block}\n.msq-toc-title{margin:0 0 6px;font-weight:700}.msq-toc ol{margin:0;padding:0;list-style:none}\n.msq-toc li{display:flex;gap:10px;align-items:center;padding:6px 6px;border-bottom:1px solid #D9D3C7;border-radius:8px}\n.msq-toc li:last-child{border-bottom:0}.msq-toc li.is-active{background:#fff}\n.msq-toc-play{flex:0 0 auto;width:30px;height:30px;border-radius:50%;border:0;background:#24405E;color:#fff;font:inherit;font-size:.72em;line-height:30px;padding:0;cursor:pointer}\n.msq-toc-play.is-playing{background:#C4540E}\n.msq-toc-time{flex:0 0 auto;min-width:3.1em;font-variant-numeric:tabular-nums;color:#4C5561;font-size:.9em}\n.msq-toc a{color:#1B1F24;text-decoration:none;line-height:1.35}.msq-toc li.is-active a{font-weight:700;color:#24405E}\n.msq-audio-note{margin:10px 0 0;font-size:.82em;color:#4C5561}\nh2.wp-block-heading[id]{scroll-margin-top:24px}\n.msq-hplay{display:inline-block;vertical-align:middle;width:26px;height:26px;margin:0 0 0 10px;border-radius:50%;border:0;background:#24405E;cursor:pointer;padding:0;position:relative;top:-2px}\n.msq-hplay::before{content:'\u25b6\ufe0e';display:block;color:#fff;font-size:11px;line-height:26px;text-align:center}\n.msq-hplay.is-playing{background:#C4540E}.msq-hplay.is-playing::before{content:'\u2016';font-size:13px;font-weight:700}\n.msq-bar{position:fixed;left:0;right:0;bottom:0;z-index:9000;display:flex;align-items:center;gap:10px;padding:8px 12px;padding-bottom:calc(8px + env(safe-area-inset-bottom));background:#FFFFFF;border-top:1px solid #D9D3C7;box-shadow:0 -4px 16px rgba(0,0,0,.08);font-size:.92em;color:#1B1F24;transition:transform .2s ease}\n.msq-bar.is-hidden{transform:translateY(130%)}\n.msq-bar-play{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:999px;background:#24405E;color:#fff;font:inherit;font-weight:700;padding:8px 14px 8px 12px;cursor:pointer;white-space:nowrap}\n.msq-bar-play.is-playing{background:#C4540E}\n.msq-bar-icon::before{content:'\u25b6\ufe0e';font-size:12px}.msq-bar-play.is-playing .msq-bar-icon::before{content:'\u2016';font-size:14px;font-weight:700}\n.msq-bar-chapter{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.msq-bar-time{flex:0 0 auto;font-variant-numeric:tabular-nums;color:#4C5561;font-size:.9em}\n.msq-bar-rate,.msq-bar-close{flex:0 0 auto;border:1px solid #D9D3C7;background:#fff;color:#1B1F24;font:inherit;font-size:.85em;line-height:1;border-radius:8px;padding:7px 9px;cursor:pointer}\n.msq-bar-close::before{content:'\u2715'}\n.msq-bar.msq-bar-pill{left:auto;right:14px;bottom:14px;padding:6px;padding-bottom:6px;border:1px solid #D9D3C7;border-radius:999px;box-shadow:0 6px 20px rgba(0,0,0,.15)}\n.msq-bar.msq-bar-pill .msq-bar-chapter,.msq-bar.msq-bar-pill .msq-bar-time,.msq-bar.msq-bar-pill .msq-bar-rate{display:none}\nbody.msq-has-bar{padding-bottom:76px}\n@media (max-width:600px){.msq-bar-time{display:none}.msq-bar{gap:8px;padding-left:10px;padding-right:10px}}\n.msq-s.msq-now{background:#F3F1EC;box-shadow:0 2px 0 #24405E;border-radius:2px}\ntr.msq-now td,tr.msq-now th{background:#F3F1EC;box-shadow:inset 0 -2px 0 #24405E}\n@media (hover:hover){.msq-s,tr[data-i]{cursor:pointer}.msq-s:hover{background:#F3F1EC}}<\/style>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"AudioObject\",\"@id\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#audio\",\"name\":\"Florida HVAC License Practice Test: 80 or 130 Questions, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 25 September 2026.\",\"contentUrl\":\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-audio-202609251536.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT12M18S\",\"uploadDate\":\"2026-09-25\",\"inLanguage\":\"en-US\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Florida HVAC License Practice Test: 80 or 130 Questions\",\"startOffset\":0,\"endOffset\":60},{\"@type\":\"Clip\",\"name\":\"What does the Florida HVAC trade exam actually look like?\",\"startOffset\":60,\"endOffset\":176,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#what-does-the-florida-hvac-trade-exam-actually-look-like\"},{\"@type\":\"Clip\",\"name\":\"How are the questions divided across subjects?\",\"startOffset\":176,\"endOffset\":293,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#how-are-the-questions-divided-across-subjects\"},{\"@type\":\"Clip\",\"name\":\"Which books are the questions written from?\",\"startOffset\":293,\"endOffset\":452,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#which-books-are-the-questions-written-from\"},{\"@type\":\"Clip\",\"name\":\"Can a closed book, untimed practice test prepare you for this?\",\"startOffset\":452,\"endOffset\":514,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#can-a-closed-book-untimed-practice-test-prepare-you-for-this\"},{\"@type\":\"Clip\",\"name\":\"What do the products ranking for this phrase actually promise?\",\"startOffset\":514,\"endOffset\":611,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#what-do-the-products-ranking-for-this-phrase-actually-promis\"},{\"@type\":\"Clip\",\"name\":\"What does the public complaint record show about prep products?\",\"startOffset\":611,\"endOffset\":738,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-hvac-license-practice-test\/#what-does-the-public-complaint-record-show-about-prep-produc\"}],\"contentSize\":\"5.2 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 12 minutes. A synthetic voice reads the article and announces each section title as it begins; tables are read row by row and the questions at the end are left out.<\/p>\n<audio class=\"msq-audio-player\" controls preload=\"metadata\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-audio-202609251536.mp3\"><\/audio>\n<nav class=\"msq-toc\" aria-label=\"In this article\"><p class=\"msq-toc-title\">In this article<\/p>\n<ol>\n<li data-start=\"0.0\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"0.0\" aria-label=\"Play from: Florida HVAC License Practice Test: 80 or 130 Questions\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Florida HVAC License Practice Test: 80 or 130 Questions<\/a><\/li>\n<li data-start=\"60.5\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"60.5\" aria-label=\"Play from: What does the Florida HVAC trade exam actually look like?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:00<\/span><a href=\"#what-does-the-florida-hvac-trade-exam-actually-look-like\">What does the Florida HVAC trade exam actually look like?<\/a><\/li>\n<li data-start=\"176.44\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"176.44\" aria-label=\"Play from: How are the questions divided across subjects?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">2:56<\/span><a href=\"#how-are-the-questions-divided-across-subjects\">How are the questions divided across subjects?<\/a><\/li>\n<li data-start=\"292.62\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"292.62\" aria-label=\"Play from: Which books are the questions written from?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:53<\/span><a href=\"#which-books-are-the-questions-written-from\">Which books are the questions written from?<\/a><\/li>\n<li data-start=\"452.04\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"452.04\" aria-label=\"Play from: Can a closed book, untimed practice test prepare you for this?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:32<\/span><a href=\"#can-a-closed-book-untimed-practice-test-prepare-you-for-this\">Can a closed book, untimed practice test prepare you for this?<\/a><\/li>\n<li data-start=\"513.9\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"513.9\" aria-label=\"Play from: What do the products ranking for this phrase actually promise?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">8:34<\/span><a href=\"#what-do-the-products-ranking-for-this-phrase-actually-promis\">What do the products ranking for this phrase actually promise?<\/a><\/li>\n<li data-start=\"611.24\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"611.24\" aria-label=\"Play from: What does the public complaint record show about prep products?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">10:11<\/span><a href=\"#what-does-the-public-complaint-record-show-about-prep-produc\">What does the public complaint record show about prep products?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 25 September 2026 from the article as published that day. Press a chapter to jump there; the highlighted line is what is playing. A play button sits beside every section heading, and once you scroll past this player a bar at the bottom of the screen keeps the controls in reach. Tap or click any sentence to hear the reading start from there.<\/p>\n<script>var MSQ_SENT = [[0.0,\"h\",\"floridahvaclicensepracti\",46],[4.68,\"p\",\"nofloridahvaclicenseprac\",107],[12.64,\"p\",\"floridasownruledoesclass\",108],[24.4,\"p\",\"onthispagethescoredquest\",247],[43.4,\"p\",\"everyresultonpageonefort\",125],[51.48,\"p\",\"thestatepublishesitinful\",47],[54.76,\"p\",\"readatsourceon25septembe\",37],[60.5,\"h\",\"whatdoesthefloridahvactr\",47],[63.46,\"p\",\"airconditioningisadivisi\",201],[79.18,\"p\",\"botharecomputerbasedatpe\",64],[85.22,\"p\",\"theregistrationinstructi\",130],[94.38,\"t\",\"businessandfinancebothcl\",122],[110.54,\"t\",\"classatradeknowledge\",113],[123.38,\"t\",\"classbtradeknowledge\",111],[136.5,\"p\",\"thosearescoredquestionsw\",76],[141.46,\"p\",\"thebookletsaysanexaminat\",180],[153.5,\"p\",\"sopaceyourselfagainstthe\",57],[156.66,\"p\",\"twonumbersbelonginthedec\",50],[159.66,\"p\",\"the135registrationtoprof\",165],[176.44,\"h\",\"howarethequestionsdivide\",39],[179.24,\"p\",\"theweightingisnotatrades\",58],[183.68,\"p\",\"itsitsinrule61g416001sub\",120],[197.88,\"p\",\"onthe80scoredclassbquest\",28],[201.36,\"p\",\"installationofrefrigerat\",66],[207.4,\"p\",\"installationofrefrigerat\",72],[213.52,\"p\",\"maintenanceserviceofrefr\",63],[219.08,\"p\",\"preinstallation12percent\",31],[222.08,\"p\",\"maintenanceanalysisofref\",63],[228.12,\"p\",\"safetyandequipment10perc\",33],[230.48,\"p\",\"sheetmetalducts9percenta\",29],[234.36,\"p\",\"energymanagement5percent\",30],[237.08,\"p\",\"indoorairquality4percent\",30],[240.2,\"p\",\"classacoversthesameninea\",277],[263.28,\"p\",\"thedatedcheckthatmakesth\",406],[292.62,\"h\",\"whichbooksarethequestion\",36],[294.26,\"p\",\"ashortlistfixedforacalen\",58],[298.94,\"p\",\"theairbreferencelistvali\",419],[328.94,\"p\",\"anarchitectsscaleaswell\",23],[330.58,\"p\",\"ourguidetotheapprovedboo\",50],[333.74,\"p\",\"theconditionsattachedtot\",82],[339.7,\"p\",\"onecopyofeachreference\",22],[341.62,\"p\",\"originaleditionsexceptth\",148],[353.66,\"p\",\"underliningwithpenorhigh\",109],[360.34,\"p\",\"permanentlyattachedtabsw\",90],[366.38,\"p\",\"calculatorsmustbesilenth\",85],[373.14,\"t\",\"osha29cfr1926r46\",64],[386.42,\"t\",\"nfpa90bwarmairheatingr72\",48],[396.3,\"t\",\"energyefficientbuildingc\",72],[406.02,\"t\",\"floridabuildingcodemecha\",82],[418.7,\"p\",\"thatisthetrapnopracticet\",86],[424.42,\"p\",\"dbprreissuesthelistevery\",94],[432.54,\"p\",\"bothrefusedautomatedacce\",79],[440.7,\"p\",\"downloadthecurrentonefro\",146],[452.04,\"h\",\"canaclosedbookuntimedpra\",50],[456.56,\"p\",\"workthepublishednumbersa\",43],[459.64,\"p\",\"fivehoursis300minutesand\",81],[466.08,\"p\",\"classagets450minutesfor1\",45],[472.16,\"p\",\"businessandfinanceallows\",52],[477.6,\"p\",\"holdback20minutesforflag\",99],[485.32,\"p\",\"thathastocoverreadingthe\",125],[493.52,\"p\",\"itisanavigationtestinakn\",42],[497.28,\"p\",\"aquestionansweredfrommem\",110],[504.12,\"p\",\"workedwiththeactualbooks\",108],[513.9,\"h\",\"whatdotheproductsranking\",52],[518.58,\"t\",\"openexamprepfreeflhvacpr\",132],[537.54,\"t\",\"preppoolclassbpracticete\",162],[555.74,\"t\",\"1examprepairbpracticeque\",161],[575.1,\"p\",\"thefreeoneistheonlyoneof\",108],[582.5,\"p\",\"noneofthemmaylawfullysho\",174],[594.5,\"p\",\"nodbprpublicationwecould\",139],[603.82,\"p\",\"abannerguaranteeingapass\",95],[611.24,\"h\",\"whatdoesthepubliccomplai\",53],[614.4,\"p\",\"oneriskhasnothingtodowit\",83],[619.88,\"p\",\"thebetterbusinessbureauc\",159],[632.4,\"p\",\"bbbrecords27complaintsin\",123],[640.92,\"p\",\"wereadthetwentycomplaint\",92],[649.04,\"p\",\"whatpeoplereportnotwhati\",31],[651.8,\"p\",\"onesaystheypaid2284inlat\",151],[665.4,\"p\",\"onesaystheypaid599on11ma\",120],[677.8,\"p\",\"onesaysamoneybackguarant\",94],[683.84,\"p\",\"anotherhadboughtunlimite\",74],[688.28,\"p\",\"cuttingagainstthepattern\",122],[699.76,\"p\",\"everycomplaintwereadisma\",190],[715.04,\"p\",\"whatthepatternagreeswith\",74],[720.04,\"p\",\"thespecificationandthere\",129],[728.6,\"p\",\"judgeanyproductagainstth\",145]];\n(function(){\n  function init(){\n  var root = document.querySelector('.msq-audio'); if (!root) { return; }\n  var audio = root.querySelector('audio'), items = Array.prototype.slice.call(root.querySelectorAll('.msq-toc li'));\n  var starts = items.map(function(li){ return parseFloat(li.getAttribute('data-start')) || 0; });\n  var names = items.map(function(li){ return li.querySelector('a').textContent; });\n  var anchors = items.map(function(li){ var h = li.querySelector('a').getAttribute('href') || ''; return (h.charAt(0) === '#' && h !== '#top') ? document.getElementById(h.slice(1)) : null; });\n  var article = root.getAttribute('data-article') || location.pathname, minutes = root.getAttribute('data-minutes') || '';\n  var marks = {}, started = false, pausedAt = -1, closed = false, ended = false;\n  var RATES = [1, 1.25, 1.5], rate = 1;\n  try { var saved = parseFloat(localStorage.getItem('msq-audio-rate')); if (RATES.indexOf(saved) >= 0) { rate = saved; } } catch (e) {}\n  audio.playbackRate = rate;\n  function track(name, extra){ try { if (typeof gtag === 'function') { var p = { article: article }; for (var k in extra) { p[k] = extra[k]; } gtag('event', name, p); } } catch (e) {} }\n  function current(){ var t = audio.currentTime, idx = 0; for (var i = 0; starts.length > i; i += 1) { if (t + 0.25 >= starts[i]) { idx = i; } } return idx; }\n  function onScreen(){\n    var line = window.innerHeight \/ 3, idx = 0;\n    for (var i = 0; anchors.length > i; i += 1) { var el = anchors[i]; if (el && line >= el.getBoundingClientRect().top) { idx = i; } }\n    return idx;\n  }\n  function fmt(s){ s = Math.max(0, Math.round(s || 0)); var m = Math.floor(s \/ 60), r = s % 60; return m + ':' + (10 > r ? '0' : '') + r; }\n  function play(from, source){\n    if (from !== null) { audio.currentTime = from; }\n    var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n    track(from === null ? 'audio_resume' : 'audio_chapter', { chapter: names[current()], start: Math.round(audio.currentTime), source: source });\n  }\n  var hbtns = anchors.map(function(el, i){\n    if (!el) { return null; }\n    var b = document.createElement('button'); b.type = 'button'; b.className = 'msq-hplay'; b.setAttribute('aria-label', 'Play this section: ' + names[i]);\n    b.addEventListener('click', function(){\n      if (!audio.paused && current() === i) { audio.pause(); track('audio_pause', { source: 'heading' }); return; }\n      play(starts[i], 'heading');\n    });\n    el.appendChild(b); return b;\n  });\n  var bar = document.createElement('div'); bar.className = 'msq-bar msq-bar-pill is-hidden'; bar.setAttribute('role', 'region'); bar.setAttribute('aria-label', 'Audio player');\n  var playBtn = document.createElement('button'); playBtn.type = 'button'; playBtn.className = 'msq-bar-play';\n  var icon = document.createElement('span'); icon.className = 'msq-bar-icon'; icon.setAttribute('aria-hidden', 'true');\n  var label = document.createElement('span'); label.className = 'msq-bar-label';\n  playBtn.appendChild(icon); playBtn.appendChild(label);\n  var chap = document.createElement('span'); chap.className = 'msq-bar-chapter';\n  var clock = document.createElement('span'); clock.className = 'msq-bar-time';\n  var rateBtn = document.createElement('button'); rateBtn.type = 'button'; rateBtn.className = 'msq-bar-rate'; rateBtn.setAttribute('aria-label', 'Playback speed');\n  var closeBtn = document.createElement('button'); closeBtn.type = 'button'; closeBtn.className = 'msq-bar-close'; closeBtn.setAttribute('aria-label', 'Close the audio bar');\n  bar.appendChild(playBtn); bar.appendChild(chap); bar.appendChild(clock); bar.appendChild(rateBtn); bar.appendChild(closeBtn);\n  document.body.appendChild(bar);\n  function showRate(){ rateBtn.textContent = (rate === 1 ? '1' : String(rate)) + 'x'; }\n  showRate();\n  rateBtn.addEventListener('click', function(){\n    rate = RATES[(RATES.indexOf(rate) + 1) % RATES.length]; audio.playbackRate = rate; showRate();\n    try { localStorage.setItem('msq-audio-rate', String(rate)); } catch (e) {}\n    track('audio_rate', { rate: rate });\n  });\n  closeBtn.addEventListener('click', function(){\n    closed = true; if (!audio.paused) { audio.pause(); } paint(); track('audio_bar_close', {});\n  });\n  function mode(){\n    if (!audio.paused) { return 'pause'; }\n    if (ended) { return 'again'; }\n    if (!started) { return 'listen'; }\n    return (pausedAt === onScreen()) ? 'resume' : 'section';\n  }\n  playBtn.addEventListener('click', function(){\n    var m = mode();\n    if (m === 'pause') { audio.pause(); track('audio_pause', { source: 'bar' }); return; }\n    if (m === 'again') { ended = false; play(0, 'bar'); return; }\n    if (m === 'resume') { play(null, 'bar'); return; }\n    play(starts[onScreen()], 'bar');\n  });\n  function paint(){\n    var idx = current(), playing = !audio.paused, m = mode();\n    items.forEach(function(li, i){\n      var on = (i === idx) && playing, b = li.querySelector('.msq-toc-play'), a = li.querySelector('a');\n      li.classList.toggle('is-active', on); b.classList.toggle('is-playing', on);\n      b.textContent = on ? '\u2016' : '\u25b6\ufe0e';\n      b.setAttribute('aria-label', (on ? 'Pause: ' : 'Play from: ') + a.textContent);\n    });\n    hbtns.forEach(function(b, i){ if (b) { var on = (i === idx) && playing; b.classList.toggle('is-playing', on); b.setAttribute('aria-label', (on ? 'Pause this section: ' : 'Play this section: ') + names[i]); } });\n    playBtn.classList.toggle('is-playing', playing);\n    label.textContent = m === 'pause' ? 'Pause' : m === 'again' ? 'Play again' : m === 'resume' ? 'Resume' : m === 'section' ? 'Play this section' : 'Listen, ' + minutes + ' min';\n    playBtn.setAttribute('aria-label', label.textContent);\n    chap.textContent = started ? names[(playing || m === 'resume') ? idx : onScreen()] : '';\n    clock.textContent = started ? fmt(audio.currentTime) + ' \/ ' + fmt(audio.duration) : '';\n    bar.classList.toggle('msq-bar-pill', !started);\n    var show = !closed && (started || 0 > root.getBoundingClientRect().bottom);\n    bar.classList.toggle('is-hidden', !show);\n    document.body.classList.toggle('msq-has-bar', show);\n  }\n  root.addEventListener('click', function(e){\n    var b = e.target.closest ? e.target.closest('.msq-toc-play') : null; if (!b) { return; }\n    var li = b.parentNode, s = parseFloat(b.getAttribute('data-start')) || 0;\n    if (!audio.paused && current() === items.indexOf(li)) { audio.pause(); track('audio_pause', { source: 'index' }); return; }\n    play(s, 'index');\n  });\n  audio.addEventListener('play', function(){ ended = false; closed = false; if (!started) { started = true; track('audio_play', { minutes: Math.round((audio.duration || 0) \/ 60) }); } paint(); });\n  audio.addEventListener('pause', function(){ pausedAt = current(); paint(); });\n  audio.addEventListener('timeupdate', function(){\n    paint();\n    if (audio.duration > 0) {\n      var pct = Math.floor(audio.currentTime \/ audio.duration * 100);\n      [25, 50, 75].forEach(function(m){ if (pct >= m && !marks[m]) { marks[m] = true; track('audio_progress', { percent: m }); } });\n    }\n  });\n  audio.addEventListener('ended', function(){ ended = true; track('audio_complete', {}); paint(); });\n  var ticking = false;\n  function onScroll(){ if (ticking) { return; } ticking = true; setTimeout(function(){ ticking = false; paint(); }, 80); }\n  window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll);\n  paint();\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }\n})();\n\n(function(){\n  function start(){\n    var root = document.querySelector('.msq-audio'), audio = root ? root.querySelector('audio') : null;\n    var map = (typeof MSQ_SENT !== 'undefined') ? MSQ_SENT : [];\n    if (!root || !audio || !map.length) { return; }\n    var scope = root.closest('main') || root.closest('article') || root.closest('.entry-content') || document.body;\n    var SKIP = '.msq-audio,.msq,.msq-tool,.msq-end,.msq-bar,script,style,noscript,figcaption,#rank-math-faq,.rank-math-block,nav,header,footer';\n    function norm(s){ return s.toLowerCase().replace(\/[^a-z0-9]+\/g, ''); }\n    var nodes = [], stream = '', walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT, null), n;\n    while ((n = walker.nextNode())) {\n      var el = n.parentElement; if (!el || el.closest(SKIP)) { continue; }\n      var raw = n.nodeValue, keep = [], norms = '';\n      for (var i = 0; raw.length > i; i += 1) { var c = raw.charAt(i).toLowerCase(); if (\/[a-z0-9]\/.test(c)) { keep.push(i); norms += c; } }\n      if (!norms) { continue; }\n      nodes.push({ node: n, a: stream.length, b: stream.length + norms.length, keep: keep });\n      stream += norms;\n    }\n    var segs = [], cursor = 0, lastRow = null;\n    map.forEach(function(m, idx){\n      var kind = m[1], f = m[2], len = m[3];\n      if (kind === 't') {\n        var rows = scope.querySelectorAll('tr'), after = !lastRow;\n        for (var r = 0; rows.length > r; r += 1) {\n          var tr = rows[r];\n          if (!after) { if (tr === lastRow) { after = true; } continue; }\n          var cell = tr.querySelector('td,th');\n          if (cell && norm(cell.textContent).indexOf(f) === 0) { tr.setAttribute('data-i', idx); lastRow = tr; break; }\n        }\n        return;\n      }\n      var p = stream.indexOf(f, cursor); if (0 > p) { return; }\n      segs.push({ i: idx, a: p, b: Math.min(p + len, stream.length) }); cursor = p + len;\n    });\n    var si = 0;\n    nodes.forEach(function(nd){\n      var frag = document.createDocumentFragment(), raw = nd.node.nodeValue, rawPos = 0, any = false;\n      for (var k = si; segs.length > k; k += 1) {\n        var sg = segs[k]; if (sg.a >= nd.b) { break; } if (nd.a >= sg.b) { continue; }\n        var s = Math.max(sg.a, nd.a), e = Math.min(sg.b, nd.b);\n        var rs = nd.keep[s - nd.a], re2 = nd.keep[e - nd.a - 1] + 1;\n        if (rs > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos, rs))); }\n        var span = document.createElement('span'); span.className = 'msq-s'; span.setAttribute('data-i', sg.i); span.textContent = raw.slice(rs, re2);\n        frag.appendChild(span); rawPos = re2; any = true;\n        if (sg.b > nd.b) { break; }\n      }\n      while (segs.length > si && nd.b >= segs[si].b) { si += 1; }\n      if (!any) { return; }\n      if (raw.length > rawPos) { frag.appendChild(document.createTextNode(raw.slice(rawPos))); }\n      nd.node.parentNode.replaceChild(frag, nd.node);\n    });\n    var starts = map.map(function(m){ return m[0]; }), curIdx = -1, lastUser = 0, timer = null, autoUntil = 0, dragging = false;\n    function idxAt(t){ var lo = 0, hi = starts.length; while (hi > lo + 1) { var mid = (lo + hi) >> 1; if (t + 0.15 >= starts[mid]) { lo = mid; } else { hi = mid; } } return (t + 0.15 >= starts[0]) ? lo : -1; }\n    function setNow(i){\n      if (i === curIdx) { return; }\n      Array.prototype.forEach.call(scope.querySelectorAll('.msq-now'), function(el){ el.classList.remove('msq-now'); });\n      curIdx = i; if (0 > i) { return; }\n      var els = scope.querySelectorAll('[data-i=\"' + i + '\"]'); if (!els.length) { return; }\n      Array.prototype.forEach.call(els, function(el){ el.classList.add('msq-now'); });\n      var r = els[0].getBoundingClientRect(), now = Date.now();\n      if (!dragging && now > lastUser + 2500 && (80 > r.top || r.bottom > window.innerHeight - 140)) {\n        var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n        autoUntil = now + (reduce ? 400 : 1600);\n        els[0].scrollIntoView({ block: 'center', behavior: reduce ? 'auto' : 'smooth' });\n      }\n    }\n    function tick(){ if (!audio.paused) { setNow(idxAt(audio.currentTime)); } }\n    function userScrolled(){ lastUser = Date.now(); }\n    ['wheel', 'touchmove', 'keydown'].forEach(function(ev){ window.addEventListener(ev, userScrolled, { passive: true }); });\n    window.addEventListener('scroll', function(){ if (Date.now() > autoUntil) { userScrolled(); } }, { passive: true });\n    window.addEventListener('mousedown', function(e){ if (e.clientX >= document.documentElement.clientWidth) { dragging = true; userScrolled(); } }, { passive: true });\n    window.addEventListener('mouseup', function(){ if (dragging) { dragging = false; userScrolled(); } }, { passive: true });\n    audio.addEventListener('play', function(){ if (timer) { clearInterval(timer); } timer = setInterval(tick, 150); tick(); });\n    audio.addEventListener('pause', function(){ if (timer) { clearInterval(timer); timer = null; } });\n    scope.addEventListener('click', function(e){\n      if (e.target.closest('a, button, input, select, textarea, label, summary, .msq, .msq-tool, .msq-end, .msq-audio, .msq-bar')) { return; }\n      var sel = window.getSelection ? String(window.getSelection()) : '';\n      if (sel && sel.trim()) { return; }\n      var el = e.target.closest('[data-i]'); if (!el) { return; }\n      var i = parseInt(el.getAttribute('data-i'), 10); if (isNaN(i)) { return; }\n      if (!audio.paused && i === curIdx) { return; }\n      lastUser = Date.now();\n      audio.currentTime = starts[i];\n      var p = audio.play(); if (p && p.catch) { p.catch(function(){}); }\n      try { if (typeof gtag === 'function') { gtag('event', 'audio_chapter', { article: location.pathname, source: 'sentence', start: Math.round(starts[i]) }); } } catch (err) {}\n    });\n    audio.addEventListener('seeked', tick);\n    audio.addEventListener('ended', function(){ setNow(-1); });\n  }\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start); } else { start(); }\n})();<\/script>\n<\/div>\n\n\n\n<p class=\"msq-hook wp-block-paragraph\">On this page: the scored question counts and time limits from the DBPR candidate information booklet, the subject weighting straight out of Rule 61G4-16.001, the Air B book list with the editions that changed between two years, the worked pace figure, and twenty dated complaints from the public record.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"florida-hvac-license-practice-test\" data-category=\"Florida contractor licensing\" data-list=\"1\">\n<style>.msq,.msq-hook,.msq-box,.msq-end,.msq-tool{--msq-accent:#24405E;--msq-accent-text:#FFFFFF;--msq-line:#D9D3C7;--msq-warn:#C4540E;--msq-muted:#4C5561;--msq-tint:#F3F1EC;--msq-base:#FFFFFF}\n.msq{margin:1.25em 0 1.75em}\n.msq-hook{border-left:3px solid var(--msq-accent);padding:6px 14px;color:var(--msq-muted);font-size:.97em}\n.msq-box{background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px;padding:0}\n.msq-box>summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:700;color:var(--msq-accent)}\n.msq-box>summary::-webkit-details-marker{display:none}\n.msq-box>summary::before{content:\"+\";display:inline-block;width:1.1em;font-weight:800}\n.msq-box[open]>summary::before{content:\"\\00d7\"}\n.msq-body{padding:2px 18px 18px}\n.msq-intro{margin:0 0 12px;font-size:.95em;color:var(--msq-muted)}\n.msq-list{margin:0;padding:0;list-style:none}\n.msq-q{margin:0 0 18px;padding:0}\n.msq-question{font-weight:700;margin:0 0 8px}\n.msq-options{display:flex;flex-direction:column;gap:8px}\n.msq-opt{text-align:left;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;padding:10px 12px;font:inherit;font-size:.95em;color:inherit;cursor:pointer;line-height:1.35}\n.msq-opt:hover{border-color:var(--msq-accent)}\n.msq-opt[disabled]{cursor:default}\n.msq-opt.is-right{border-color:var(--msq-accent);background:var(--msq-line);font-weight:700}\n.msq-opt.is-wrong{border-color:var(--msq-warn);color:var(--msq-warn)}\n.msq-explain{margin:8px 0 0;font-size:.92em;padding:10px 12px;border-left:3px solid var(--msq-accent);background:var(--msq-base);border-radius:0 8px 8px 0}\n.msq-explain[hidden]{display:none}\n.msq-verdict{font-weight:700}\n.msq-result{margin-top:14px;padding:14px 16px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:10px}\n.msq-result[hidden]{display:none}\n.msq-result h3{margin:0 0 6px;font-size:1.1em}\n.msq-result p{margin:0 0 8px}\n.msq-jump{margin:0 0 8px;padding-left:1.2em}\n.msq-form{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.msq-form input[type=email]{flex:1 1 220px;padding:10px 12px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-btn{background:var(--msq-accent);color:var(--msq-accent-text);border:0;border-radius:8px;padding:11px 18px;font:inherit;font-weight:700;cursor:pointer}\n.msq-btn:hover{filter:brightness(.92)}\n.msq-btn[disabled]{opacity:.7;cursor:default}\n.msq-no{font-size:.9em;color:var(--msq-muted);margin-left:4px}\n.msq-privacy{margin:6px 0 0;font-size:.82em;color:var(--msq-muted);flex-basis:100%}\n.msq-hp{position:absolute;left:-5000px;width:1px;height:1px;overflow:hidden}\n.msq-msg{margin:8px 0 0;font-size:.92em}\n.msq-end{margin:1.5em 0;padding:18px;border:1px solid var(--msq-accent);border-radius:12px;text-align:center;background:var(--msq-tint)}\n.msq-end p{margin:0 0 12px}\n.msq-end .msq-body{text-align:left;padding:16px 0 0}\n.msq-end .msq-start-test[hidden]{display:none}\n.msq-tool{margin:1.5em 0;padding:18px 20px;background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px}\n.msq-tool h3{margin:0 0 6px;font-size:1.15em}\n.msq-tool p{margin:0 0 10px}\n.msq-tool .msq-note{font-size:.85em;color:var(--msq-muted);margin:10px 0 0}\n.msq-check label{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--msq-line);cursor:pointer;line-height:1.4}\n.msq-check label:last-of-type{border-bottom:0}\n.msq-check input{margin-top:5px;flex:0 0 auto;width:18px;height:18px;accent-color:var(--msq-accent)}\n.msq-check-count{font-weight:700;margin:10px 0 0}\n.msq-verdict-box{margin:12px 0 0;padding:10px 14px;border-radius:8px;background:var(--msq-base);border-left:3px solid var(--msq-warn)}\n.msq-verdict-box[hidden]{display:none}\n.msq-calc{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}\n.msq-calc label{display:flex;flex-direction:column;gap:4px;font-size:.92em}\n.msq-calc input,.msq-calc select{padding:8px 10px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-calc-out{grid-column:1 \/ -1;margin-top:6px;padding:12px 14px;background:var(--msq-base);border-radius:8px;border:1px solid var(--msq-line)}\n.msq-calc-out strong{font-size:1.15em}\n.msq-choose label{display:block;padding:9px 12px;margin:0 0 8px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;cursor:pointer}\n.msq-choose input{margin-right:8px;accent-color:var(--msq-accent)}\n.msq-choice-result{margin-top:10px;padding:12px 14px;background:var(--msq-base);border-left:3px solid var(--msq-accent);border-radius:0 8px 8px 0}\n.msq-choice-result[hidden]{display:none}\n@media (max-width:600px){.msq-calc{grid-template-columns:1fr}}\nh2.wp-block-heading[id]{scroll-margin-top:24px}<\/style>\n<noscript><style>.msq-explain{display:block !important}<\/style><\/noscript>\n<details class=\"msq-box\">\n<summary>Think you already know this? Five questions, one minute.<\/summary>\n<div class=\"msq-body\">\n<p class=\"msq-intro\">Every answer is on this page. Answer from what you know now; the page fills in the rest.<\/p>\n<ol class=\"msq-list\">\n<li class=\"msq-q\" data-q=\"1\" data-answer=\"b\" data-title=\"What does the Florida HVAC trade exam actually look like?\" data-section=\"#what-does-the-florida-hvac-trade-exam-actually-look-like\">\n<p class=\"msq-question\">1. How many scored questions are on the Class B air conditioning trade knowledge exam?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">65<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">80<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">130<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Eighty scored questions in five hours for Class B, and 130 in seven and a half for Class A, per the <a href=\"https:\/\/web.archive.org\/web\/20240614045833\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/const_cib.pdf\" target=\"_blank\" rel=\"noopener\">DBPR candidate information booklet<\/a>. Pilot questions are extra and are not counted. <a class=\"msq-section\" href=\"#what-does-the-florida-hvac-trade-exam-actually-look-like\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"b\" data-title=\"How are the questions divided across subjects?\" data-section=\"#how-are-the-questions-divided-across-subjects\">\n<p class=\"msq-question\">2. Which content area carries the largest share of the Class B trade exam?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Sheet metal ducts<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Installation of refrigeration and HVAC systems<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Energy management<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Installation of refrigeration and HVAC systems is 22 percent, about 18 of the 80 questions, against 9 percent for sheet metal ducts and 5 percent for energy management, under <a href=\"https:\/\/www.flrules.org\/gateway\/ruleno.asp?id=61G4-16.001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-16.001(6)<\/a>. <a class=\"msq-section\" href=\"#how-are-the-questions-divided-across-subjects\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"b\" data-title=\"Which books are the questions written from?\" data-section=\"#which-books-are-the-questions-written-from\">\n<p class=\"msq-question\">3. Which of these may a candidate bring into the examination room?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Post it flags marking the key pages<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Permanently attached tabs carrying chapter or page headings<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Handwritten notes in the margins<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/web.archive.org\/web\/20250822221920\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/Air%20B%20CBT%20Reference%20List%20-%20odd.pdf\" target=\"_blank\" rel=\"noopener\">Air B reference list<\/a> allows permanently attached tabs and underlining or highlighting, and refuses removable tabs and handwritten or typewritten notes. <a class=\"msq-section\" href=\"#which-books-are-the-questions-written-from\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"Can a closed book, untimed practice test prepare you for this?\" data-section=\"#can-a-closed-book-untimed-practice-test-prepare-you-for-this\">\n<p class=\"msq-question\">4. How much time does the published specification leave per scored question on the Class B paper?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">About 2 minutes<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">About 3 minutes 45 seconds<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">About 6 minutes<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Three hundred minutes divided by 80 scored questions is 3 minutes 45 seconds, from the counts in the <a href=\"https:\/\/web.archive.org\/web\/20240614045833\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/const_cib.pdf\" target=\"_blank\" rel=\"noopener\">candidate information booklet<\/a>. That has to cover finding the page as well as answering. <a class=\"msq-section\" href=\"#can-a-closed-book-untimed-practice-test-prepare-you-for-this\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"What do the products ranking for this phrase actually promise?\" data-section=\"#what-do-the-products-ranking-for-this-phrase-actually-promis\">\n<p class=\"msq-question\">5. What score does a Florida construction certification examination require?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">65 percent<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">70 percent<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">75 percent<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/www.flrules.org\/gateway\/ruleno.asp?id=61G4-16.001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-16.001(37)<\/a> sets the passing score at no less than 70 percent on each required test, so 56 of 80 on the Class B paper. <a class=\"msq-section\" href=\"#what-do-the-products-ranking-for-this-phrase-actually-promis\">Read the section<\/a><\/p>\n<\/li>\n<\/ol>\n<div class=\"msq-result\" hidden><\/div>\n<\/div>\n<\/details>\n<script>(function(){\n  if (window.__msqInit) { return; }\n  window.__msqInit = true;\n  var root = document.getElementById('ms-quiz');\n  if (!root) { return; }\n  var meta = { slug: root.getAttribute('data-slug'), category: root.getAttribute('data-category'),\n               list: root.getAttribute('data-list') || '1' };\n  function qs(el, s){ return el.querySelector(s); }\n  function qsa(el, s){ return Array.prototype.slice.call(el.querySelectorAll(s)); }\n  function track(name, params){\n    try { if (typeof gtag === 'function') { var p = params || {}; p.article = meta.slug; gtag('event', name, p); } } catch (e) {}\n  }\n  function jumpList(missed){\n    if (!missed.length) { return ''; }\n    return '<ul class=\"msq-jump\">' + missed.map(function(q){\n      return '<li><a href=\"' + q.getAttribute('data-section') + '\">' + q.getAttribute('data-title') + '<\/a><\/li>';\n    }).join('') + '<\/ul>';\n  }\n  function emailForm(){\n    return '<div class=\"msq-sub\"><p><strong>Get the next one.<\/strong> We publish new articles on ' + meta.category\n      + ' most weeks and recheck this page on Sundays. Email me when a new article goes up or this page changes.<\/p>'\n      + '<form class=\"msq-form\" method=\"post\" action=\"\/mail\/form.php\" novalidate>'\n      + '<input type=\"hidden\" name=\"list\" value=\"' + meta.list + '\">'\n      + '<input type=\"hidden\" name=\"name\" value=\"\">'\n      + '<label class=\"msq-hp\" aria-hidden=\"true\">Leave this empty<input type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/label>'\n      + '<input type=\"email\" name=\"email\" placeholder=\"you@example.com\" required aria-label=\"Email address\" autocomplete=\"email\">'\n      + '<button type=\"submit\" class=\"msq-btn\">Email me the updates<\/button>'\n      + '<a href=\"#\" class=\"msq-no\">No thanks<\/a>'\n      + '<p class=\"msq-privacy\">We store your email and this page\\'s topic, nothing else. Unsubscribe any time.<\/p>'\n      + '<\/form><p class=\"msq-msg\" aria-live=\"polite\"><\/p><\/div>';\n  }\n  \/* The autoresponder always answers 200 with its own page. A \".msg.err\" box means the\n     address was rejected, \"You're subscribed\" means accepted, and a redirect only happens\n     after a successful subscribe. Same reading as the landing pages on the other sites. *\/\n  function sendForm(form){\n    return fetch(form.getAttribute('action'), { method: 'POST', body: new FormData(form), credentials: 'same-origin', redirect: 'manual' })\n      .then(function(res){\n        if (res.type === 'opaqueredirect') { return { status: 'ok' }; }\n        if (res.status === 404) { return { status: 'notlive' }; }\n        if (!res.ok) { throw new Error('HTTP ' + res.status); }\n        return res.text().then(function(t){\n          var doc = new DOMParser().parseFromString(t, 'text\/html');\n          var err = doc.querySelector('.msg.err');\n          if (err) {\n            var m = err.textContent.trim();\n            if (\/something went wrong\/i.test(m)) { throw new Error(m); }\n            return { status: 'rejected', message: m };\n          }\n          if (\/you.re subscribed\/i.test(doc.body.textContent)) { return { status: 'ok' }; }\n          return { status: 'unknown' };\n        });\n      });\n  }\n  function wireForm(sub){\n    var form = qs(sub, '.msq-form'), msg = qs(sub, '.msq-msg');\n    qs(form, '.msq-no').addEventListener('click', function(e){\n      e.preventDefault();\n      sub.innerHTML = '<p class=\"msq-msg\">No problem. The Sunday refresh keeps this page current either way.<\/p>';\n      track('quiz_email', { result: 'declined' });\n    });\n    form.addEventListener('submit', function(e){\n      e.preventDefault();\n      var input = qs(form, 'input[name=email]'), btn = qs(form, '.msq-btn');\n      var email = input.value.trim(); input.value = email;\n      if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { msg.textContent = 'That email does not look right.'; return; }\n      btn.disabled = true; btn.textContent = 'Sending';\n      function reset(){ btn.disabled = false; btn.textContent = 'Email me the updates'; }\n      sendForm(form).then(function(r){\n        if (r.status === 'ok' || r.status === 'unknown') {\n          sub.innerHTML = '<p class=\"msq-msg\"><strong>Done.<\/strong> We will email you when the next article on ' + meta.category\n            + ' goes up and when this page changes. If a confirmation email arrives, click it.<\/p>';\n          track('quiz_email', { result: r.status });\n          if (r.status === 'ok') { track('generate_lead', { method: 'quiz' }); }\n        } else if (r.status === 'notlive') {\n          msg.textContent = 'Sign up is not switched on yet for this site. Nothing was stored.'; reset();\n          track('quiz_email', { result: 'notlive' });\n        } else {\n          msg.textContent = r.message || 'Please check the email address and try again.'; reset();\n          track('quiz_email', { result: 'rejected' });\n        }\n      }).catch(function(){\n        msg.textContent = 'Could not reach the sign up service just now. Nothing was stored.'; reset();\n        track('quiz_email', { result: 'error' });\n      });\n    });\n  }\n  function finish(container, mode, score, total, missed){\n    var result = qs(container, '.msq-result');\n    track('quiz_complete', { mode: mode, score: score, total: total });\n    var h;\n    if (mode === 'pre') {\n      h = '<h3>You knew ' + score + ' of ' + total + ' before reading.<\/h3>';\n      h += (score === total) ? '<p>All of them. Read on anyway; the sections below carry the detail behind each answer.<\/p>'\n                             : '<p>The rest is below. Jump straight to what you missed:<\/p>' + jumpList(missed);\n      try { sessionStorage.setItem('msq-pre-' + meta.slug, String(score)); } catch (e) {}\n    } else {\n      var pre = null;\n      try { pre = sessionStorage.getItem('msq-pre-' + meta.slug); } catch (e) {}\n      h = '<h3>You got ' + score + ' of ' + total + '.<\/h3>';\n      if (pre !== null) { h += '<p>Before reading you had ' + pre + ' of ' + total + '.<\/p>'; }\n      if (missed.length) { h += '<p>Worth a second look:<\/p>' + jumpList(missed); }\n      h += emailForm();\n    }\n    result.innerHTML = h; result.hidden = false;\n    if (mode !== 'pre') { wireForm(qs(result, '.msq-sub')); }\n    result.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  }\n  function setup(container, mode){\n    var qEls = qsa(container, '.msq-q'), answered = 0, score = 0, missed = [];\n    qEls.forEach(function(q){\n      var answer = q.getAttribute('data-answer'), opts = qsa(q, '.msq-opt'), explain = qs(q, '.msq-explain');\n      q.removeAttribute('data-done'); explain.hidden = true; qs(explain, '.msq-verdict').textContent = '';\n      opts.forEach(function(b){ b.disabled = false; b.classList.remove('is-right', 'is-wrong'); });\n      opts.forEach(function(b){\n        b.addEventListener('click', function(){\n          if (q.getAttribute('data-done')) { return; }\n          q.setAttribute('data-done', '1');\n          var ok = b.getAttribute('data-opt') === answer;\n          opts.forEach(function(o){ o.disabled = true; if (o.getAttribute('data-opt') === answer) { o.classList.add('is-right'); } });\n          if (ok) { score += 1; } else { b.classList.add('is-wrong'); missed.push(q); }\n          qs(explain, '.msq-verdict').textContent = ok ? 'Right. ' : 'Not quite. ';\n          explain.hidden = false;\n          answered += 1;\n          track('quiz_answer', { mode: mode, question: q.getAttribute('data-q'), correct: ok ? 1 : 0 });\n          if (answered === qEls.length) { finish(container, mode, score, qEls.length, missed); }\n        });\n      });\n    });\n  }\n  var box = qs(root, '.msq-box');\n  setup(root, 'pre');\n  if (box) { box.addEventListener('toggle', function(){ if (box.open) { track('quiz_open', { mode: 'pre' }); } }); }\n  \/* The end block sits far below this script, so it does not exist yet while this runs\n     during parsing. A delegated listener finds it at click time. *\/\n  document.addEventListener('click', function(e){\n    var startBtn = (e.target && e.target.closest) ? e.target.closest('.msq-start-test') : null;\n    if (!startBtn) { return; }\n    var end = startBtn.closest('.msq-end');\n    if (!end) { return; }\n    var mount = qs(end, '.msq-mount');\n    var clone = qs(root, '.msq-body').cloneNode(true);\n    var intro = qs(clone, '.msq-intro');\n    if (intro) { intro.textContent = 'The same five questions, now that you have read the page.'; }\n    var res = qs(clone, '.msq-result'); if (res) { res.hidden = true; res.innerHTML = ''; }\n    mount.innerHTML = ''; mount.appendChild(clone);\n    setup(mount, 'test');\n    startBtn.hidden = true;\n    track('quiz_open', { mode: 'test' });\n    mount.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    var first = qs(mount, '.msq-opt'); if (first) { first.focus({ preventScroll: true }); }\n  });\n  \/* Shared tool behaviour: checklists remember their ticks on this device, and a chooser\n     shows the result for the option picked. Calculators carry their own small script. *\/\n  function initTools(){\n    qsa(document, '.msq-check').forEach(function(box){\n      var key = 'msq-check-' + meta.slug + '-' + (box.getAttribute('data-id') || 'x');\n      var boxes = qsa(box, 'input[type=checkbox]'), count = qs(box, '.msq-check-count');\n      var yes = qs(box, '.msq-verdict-yes'), no = qs(box, '.msq-verdict-no');\n      var saved = {};\n      try { saved = JSON.parse(localStorage.getItem(key) || '{}'); } catch (e) {}\n      boxes.forEach(function(cb, i){ if (saved[i]) { cb.checked = true; } });\n      function refresh(){\n        var n = boxes.filter(function(cb){ return cb.checked; }).length, state = {};\n        boxes.forEach(function(cb, i){ if (cb.checked) { state[i] = 1; } });\n        try { localStorage.setItem(key, JSON.stringify(state)); } catch (e) {}\n        if (count) { count.textContent = n + ' of ' + boxes.length + (box.getAttribute('data-verb') || ' done'); }\n        if (yes && no) { yes.hidden = n === 0; no.hidden = n !== 0; }\n      }\n      boxes.forEach(function(cb){ cb.addEventListener('change', function(){ refresh(); track('tool_check', { tool: box.getAttribute('data-id') }); }); });\n      refresh();\n    });\n    qsa(document, '.msq-choose').forEach(function(box){\n      var results = qsa(box, '.msq-choice-result');\n      qsa(box, 'input[type=radio]').forEach(function(r){\n        r.addEventListener('change', function(){\n          results.forEach(function(el){ el.hidden = el.getAttribute('data-for') !== r.value; });\n          track('tool_choose', { tool: box.getAttribute('data-id'), choice: r.value });\n        });\n      });\n    });\n  }\n  \/\/ read progress: how far down the article the reader has scrolled, fired once per quarter\n  (function(){\n    var art = root.closest('article') || root.parentNode, fired = {};\n    function check(){\n      var top = art.getBoundingClientRect().top + window.pageYOffset, h = art.offsetHeight || 1;\n      var seen = (window.pageYOffset + window.innerHeight - top) \/ h * 100;\n      [25, 50, 75, 100].forEach(function(m){ if (seen >= m && !fired[m]) { fired[m] = true; track('read_progress', { percent: m }); } });\n    }\n    window.addEventListener('scroll', check, { passive: true }); window.addEventListener('load', check);\n  })();\n  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTools); } else { initTools(); }\n})();<\/script>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Every result on page one for this phrase sells or gates a practice test, and none of them prints the specification the practice test is meant to resemble. The state publishes it in full and charges nothing for it. Read at source on 25 September 2026, here it is.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-the-florida-hvac-trade-exam-actually-look-like\">What does the Florida HVAC trade exam actually look like?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Air conditioning is a Division II category, so there are two papers rather than three: Business and Finance, which every category sits, and one trade knowledge paper for your class, depending on whether you apply as <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-air-conditioning-contractor-license\/\">a Class A or a Class B contractor<\/a>. Both are computer based at Pearson VUE, available daily, and both are <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-open-book\/\">open book<\/a>. The <a href=\"https:\/\/www.floridaexam.com\/sites\/default\/files\/2024-12\/exam_instructions.pdf\" target=\"_blank\" rel=\"noopener\">registration instructions published by Professional Testing<\/a> put it plainly: all examinations are open book and consist of multiple choice questions. For how that compares with the three paper Division I route, <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-format\/\">our guide to the Florida contractor exam format<\/a> lays out the scored questions and hours for every licence side by side.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Part<\/th><th>Scored questions<\/th><th>Time allowed<\/th><th>Per scored question<\/th><th>70 percent means<\/th><\/tr><\/thead><tbody><tr><td>Business and Finance, both classes<\/td><td>120<\/td><td>6.5 hours<\/td><td>3 minutes 15 seconds<\/td><td>84 correct<\/td><\/tr><tr><td>Class A trade knowledge<\/td><td>130<\/td><td>7.5 hours<\/td><td>3 minutes 28 seconds<\/td><td>91 correct<\/td><\/tr><tr><td>Class B trade knowledge<\/td><td>80<\/td><td>5 hours<\/td><td>3 minutes 45 seconds<\/td><td>56 correct<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Counts and time limits from the DBPR candidate information booklet, <a href=\"https:\/\/web.archive.org\/web\/20240614045833\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/const_cib.pdf\" target=\"_blank\" rel=\"noopener\">copy archived 14 June 2024<\/a>. Pass mark from <a href=\"https:\/\/www.flrules.org\/gateway\/ruleno.asp?id=61G4-16.001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-16.001(37), Florida Administrative Code<\/a>.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Those are scored questions, which is why they look smaller than the counts on most prep pages. The booklet says an examination may contain a small number of experimental pilot test questions, that they are not identified, that they are not counted when computing scores, and that additional time is given for them. So pace yourself against the scored count, not a bigger delivered one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two numbers belong in the decision before anything is spent. The $135 registration to <a href=\"https:\/\/www.floridaexam.com\/\" target=\"_blank\" rel=\"noopener\">Professional Testing, Inc.<\/a> and the $80 a part Pearson VUE collects are non refundable, and <a href=\"https:\/\/www.flrules.org\/gateway\/ruleno.asp?id=61G4-16.009\" target=\"_blank\" rel=\"noopener\">under Rule 61G4-16.009<\/a> every part has to be passed within four years of your first attempt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/reference-books-for-florida-hvac-license-practice-test.jpg\" alt=\"Tabbed reference manuals open on a table for Florida HVAC license practice test study\" class=\"wp-image-366\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/reference-books-for-florida-hvac-license-practice-test.jpg 1376w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/reference-books-for-florida-hvac-license-practice-test-300x167.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/reference-books-for-florida-hvac-license-practice-test-1024x572.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/reference-books-for-florida-hvac-license-practice-test-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Permanently attached tabs are allowed in the room. Post it flags and anything removable are not.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-are-the-questions-divided-across-subjects\">How are the questions divided across subjects?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The weighting is not a trade secret or a prep company&#8217;s reconstruction. It sits in <a href=\"https:\/\/www.flrules.org\/gateway\/ruleno.asp?id=61G4-16.001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-16.001<\/a>, subsection (5) for Class A and (6) for Class B, with subsection (36) allowing every figure to move by plus or minus three percent. On the 80 scored Class B questions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Installation of refrigeration and HVAC systems, 22 percent, about 18 questions<\/li>\n\n\n<li>Installation of refrigeration and HVAC equipment and components, 14 percent, about 11<\/li>\n\n\n<li>Maintenance service of refrigeration and HVAC systems, 14 percent, about 11<\/li>\n\n\n<li>Pre installation, 12 percent, about 10<\/li>\n\n\n<li>Maintenance analysis of refrigeration and HVAC systems, 10 percent, about 8<\/li>\n\n\n<li>Safety and equipment, 10 percent, about 8<\/li>\n\n\n<li>Sheet metal ducts, 9 percent, about 7<\/li>\n\n\n<li>Energy management, 5 percent, about 4<\/li>\n\n\n<li>Indoor air quality, 4 percent, about 3<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Class A covers the same nine areas with a point or two moved: pre installation 14 percent instead of 12, installation of systems 23 instead of 22, maintenance analysis and safety 9 each instead of 10, indoor air quality 3 instead of 4. Across 130 questions, installation of systems is still the largest block on either paper, near 30 questions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The dated check that makes those figures worth trusting: DBPR&#8217;s own <a href=\"https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/air_b_eci.pdf\" target=\"_blank\" rel=\"noopener\">Class B examination content information<\/a>, revised for August 2017, lists the same nine areas at the same nine percentages as the rule amended in December 2024, and <a href=\"https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/air_a_eci.pdf\" target=\"_blank\" rel=\"noopener\">the Air A document<\/a> does the same for Class A. Subsection (35), for window and door installation contractors, still lists the content areas for plaster and lath, so check your own category against your own content document rather than assuming a rule has been proofread.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart.png\" alt=\"Bar chart of Class B subject weighting behind any florida hvac license practice test\" class=\"wp-image-370\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart.png 1600w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart-300x169.png 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart-1024x576.png 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart-768x432.png 768w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-hvac-license-practice-test-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">The nine content areas and their percentages as set by Rule 61G4-16.001(6), Florida Administrative Code, effective 16 December 2024. Subsection (36) allows each figure to move by plus or minus three percent.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-books-are-the-questions-written-from\">Which books are the questions written from?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A short list, fixed for a calendar year and published per licence class. The <a href=\"https:\/\/web.archive.org\/web\/20250822221920\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/Air%20B%20CBT%20Reference%20List%20-%20odd.pdf\" target=\"_blank\" rel=\"noopener\">Air B reference list<\/a> valid January to December 2025, the most recent version that would load for us, names fifteen titles: a refrigeration troubleshooting handbook, OSHA 29 CFR 1926, the ABC Contractors Manual, the Pipefitters Handbook, NFPA 90A, 90B and 96, three SMACNA duct and energy documents, Refrigeration and Air Conditioning Technology 9th edition, a Trane Ductulator, Energy Efficient Building Construction in Florida, and the Florida Building Code Mechanical and Energy Conservation volumes. An architect&#8217;s scale as well. Our <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-approved-books\/\">guide to the approved books<\/a> covers the other categories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The conditions attached to those books are where practice at home and practice in the room diverge. One copy of each reference. Original editions, except the titles marked as available as PDF, and a printed PDF must be bound with a ring binder, brads, a snap binder, a spiral notebook or screw posts, never staples. Underlining with pen or highlighter is allowed; handwritten and typewritten notes are not, and existing ones have to be blacked out. Permanently attached tabs with chapter or page headings are fine, while Post it flags are refused at the door. Calculators must be silent, hand held, battery operated, nonprinting and without an alphabetic keypad.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Reference on the Air B list<\/th><th>2024 list<\/th><th>2025 list<\/th><\/tr><\/thead><tbody><tr><td>OSHA 29 CFR 1926 (R46)<\/td><td>July 1, 2023 edition<\/td><td>July 1, 2024 edition<\/td><\/tr><tr><td>NFPA 90B, warm air heating (R72)<\/td><td>2021<\/td><td>2024<\/td><\/tr><tr><td>Energy Efficient Building Construction in Florida (R140)<\/td><td>2024<\/td><td>2023<\/td><\/tr><tr><td>Florida Building Code, Mechanical and Energy Conservation (R202, R252)<\/td><td>2023<\/td><td>2023<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The same class one year apart: <a href=\"https:\/\/web.archive.org\/web\/20250621173423\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/Air%20B%20CBT%20Reference%20List%20-%20Even.pdf\" target=\"_blank\" rel=\"noopener\">the even year list valid through 2024<\/a> against <a href=\"https:\/\/web.archive.org\/web\/20250822221920\/https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/Air%20B%20CBT%20Reference%20List%20-%20odd.pdf\" target=\"_blank\" rel=\"noopener\">the odd year list valid through 2025<\/a>. Two editions moved forward, one is printed differently in each and we could not resolve which applies now.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">That is the trap no practice test protects you from, and the reason we keep <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-edition-trap\/\">a whole page on the edition trap<\/a>. DBPR reissues the list every calendar year as two files, odd year and even year, overwriting the same two addresses. Both refused automated access from here on 25 September 2026, so no 2026 edition is quoted above. Download the current one from the <a href=\"https:\/\/www2.myfloridalicense.com\/examination-information\/construction-examinations\/\" target=\"_blank\" rel=\"noopener\">DBPR construction examinations<\/a> pages before buying a book or a question bank, because a confident answer out of last year&#8217;s code is still wrong.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1376\" height=\"768\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/taking-online-florida-hvac-license-practice-test.jpg\" alt=\"A candidate working through a Florida HVAC license practice test at the kitchen table\" class=\"wp-image-367\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/taking-online-florida-hvac-license-practice-test.jpg 1376w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/taking-online-florida-hvac-license-practice-test-300x167.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/taking-online-florida-hvac-license-practice-test-1024x572.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/taking-online-florida-hvac-license-practice-test-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Worked against a clock with the books open, a practice question trains the skill being scored.<\/figcaption><\/figure>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"pce-ac-books\" data-verb=\" done\">\n<h3>Reference list check, before you pay for anything<\/h3>\n<p>Built from the Air B reference list valid through 2025 and the candidate information booklet. Confirm each against the current list for your class and your test year, not against this page.<\/p>\n<label><input type=\"checkbox\">Downloaded the reference list for your class and the calendar year of your test date, from the DBPR construction examinations pages<\/label>\n<label><input type=\"checkbox\">Checked the edition or year printed beside every title, because several move from one list to the next<\/label>\n<label><input type=\"checkbox\">One copy of each reference only, and original editions except the titles marked as available as PDF<\/label>\n<label><input type=\"checkbox\">Every printed PDF bound with a ring binder, brads, a snap binder, a spiral notebook or screw posts, never staples<\/label>\n<label><input type=\"checkbox\">Removable tabs and Post it flags taken out, permanent tabs with chapter or page headings left in<\/label>\n<label><input type=\"checkbox\">Handwritten and typewritten notes blacked out or removed from every book<\/label>\n<label><input type=\"checkbox\">A silent, hand held, battery operated, nonprinting calculator without an alphabetic keypad<\/label>\n<label><input type=\"checkbox\">An architect&#8217;s scale with quarter inch and eighth inch faces packed for the trade paper<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">A preparation list built from published documents. Nothing here reproduces an exam question or predicts a result. Ticks are saved on this device only.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"can-a-closed-book-untimed-practice-test-prepare-you-for-this\">Can a closed book, untimed practice test prepare you for this?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Work the published numbers and the answer falls out. Five hours is 300 minutes, and 300 divided by 80 scored questions is 3 minutes 45 seconds a question. Class A gets 450 minutes for 130, or 3 minutes 28 seconds. <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-business-and-finance-exam\/\">Business and Finance<\/a> allows 390 for 120, or 3 minutes 15 seconds. Hold back 20 minutes for flagged questions on the Class B paper and the working budget becomes 3 minutes 30 seconds each.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That has to cover reading the question, deciding which of fifteen books the answer lives in, finding the page, and doing whatever arithmetic waits there. It is a navigation test in a knowledge test&#8217;s jacket. A question answered from memory in forty seconds with nothing on the desk trains recall, the one skill the real paper does not measure. Worked with the actual books, tabbed, against a clock, the same question trains the thing being scored, and that change costs nothing.<\/p>\n\n\n\n<div class=\"msq-tool\" id=\"pce-ac-pace\">\n<h3>Exam day pace planner<\/h3>\n<p>Runs the published scored question count and time limit for your part, with whatever you want to hold back for a second pass. It contains no exam questions and predicts nothing about your result.<\/p>\n<div class=\"msq-calc\">\n<label>Which part<select name=\"part\"><option value=\"b\">Class B trade knowledge, 80 questions in 5 hours<\/option><option value=\"a\">Class A trade knowledge, 130 questions in 7.5 hours<\/option><option value=\"f\">Business and Finance, 120 questions in 6.5 hours<\/option><\/select><\/label>\n<label>Minutes held back for flagged questions<input type=\"number\" name=\"reserve\" value=\"20\" min=\"0\" max=\"120\" step=\"5\"><\/label>\n<div class=\"msq-calc-out\"><button type=\"button\" class=\"msq-btn\" id=\"pce-ac-pace-go\">Work it out<\/button>\n<div id=\"pce-ac-pace-out\" style=\"margin-top:10px;overflow-x:auto\"><\/div><\/div>\n<\/div>\n<p class=\"msq-note\">Counts and time limits from the DBPR candidate information booklet. Worked in your browser, nothing is stored or sent.<\/p>\n<\/div>\n<script>\n(function(){\n  var root = document.getElementById('pce-ac-pace'); if (!root) { return; }\n  var parts = {b:{n:80,m:300,name:'Class B trade knowledge'}, a:{n:130,m:450,name:'Class A trade knowledge'}, f:{n:120,m:390,name:'Business and Finance'}};\n  var out = document.getElementById('pce-ac-pace-out');\n  function mmss(x){ var s = Math.round(x * 60); var m = Math.floor(s \/ 60); var r = s - m * 60; return m + ' min ' + (r > 9 ? r : '0' + r) + ' s'; }\n  document.getElementById('pce-ac-pace-go').addEventListener('click', function(){\n    var sel = root.querySelector('[name=\"part\"]'), res = parseFloat(root.querySelector('[name=\"reserve\"]').value);\n    var p = parts[sel ? sel.value : 'b'] || parts.b;\n    if (!(res > 0)) { res = 0; }\n    if (res > p.m - 60) { res = p.m - 60; }\n    var work = p.m - res, per = work \/ p.n;\n    var rows = '', h = 1;\n    while (work > h * 60) { rows += '<tr><td>After ' + h + (h > 1 ? ' hours' : ' hour') + '<\/td><td>' + Math.floor(h * 60 \/ per) + ' of ' + p.n + '<\/td><\/tr>'; h = h + 1; }\n    out.innerHTML = '<p><strong>' + p.name + ':<\/strong> ' + mmss(per) + ' a scored question, working ' + Math.round(work) + ' of the ' + p.m + ' minutes allowed and holding ' + Math.round(res) + ' back.<\/p>' +\n      '<table><thead><tr><th>Checkpoint<\/th><th>Questions answered<\/th><\/tr><\/thead><tbody>' + rows + '<\/tbody><\/table>' +\n      '<p class=\"msq-note\">Pilot questions are not scored and the booklet says additional time is given for them, so this runs on the scored count.<\/p>';\n    try { if (typeof gtag === 'function') { gtag('event', 'tool_use', { tool: 'pce-ac-pace' }); } } catch (e) {}\n  });\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-the-products-ranking-for-this-phrase-actually-promis\">What do the products ranking for this phrase actually promise?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Product<\/th><th>Price<\/th><th>Questions<\/th><th>Names the approved books<\/th><th>Prints the real spec<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/open-exam-prep.com\/practice\/fl-hvac-contractor\" target=\"_blank\" rel=\"nofollow noopener\">OpenExamPrep free FL HVAC practice<\/a><\/td><td>Free<\/td><td>194 plus, not timed<\/td><td>No<\/td><td>Yes: 130 in 7.5 hours, 80 in 5, 70 percent<\/td><\/tr><tr><td><a href=\"https:\/\/www.preppool.com\/test-prep\/florida-class-b-air-conditioning-practice-test\/\" target=\"_blank\" rel=\"nofollow noopener\">PrepPool Class B practice test<\/a><\/td><td>$39.99<\/td><td>750, timing not stated<\/td><td>No, it says to learn your permitted books<\/td><td>Yes: 80 questions, 5 hours, 70 percent<\/td><\/tr><tr><td><a href=\"https:\/\/1examprep.com\/products\/florida-air-b-contractor-online-practice-questions\" target=\"_blank\" rel=\"nofollow noopener\">1 Exam Prep Air B practice questions<\/a><\/td><td>$79.99, listed from $129.99<\/td><td>Count not stated, an image mentions timed practice<\/td><td>Yes, fifteen titles<\/td><td>No<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">What three products ranking for this phrase say about themselves, read 25 September 2026. The claims are theirs, and none is endorsed here.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The free one is the only one of the three that prints the specification, which says something about what the paid pages optimise for. None of them may lawfully show you a real question, and neither may this page: DBPR publishes the content outline and the book list, never the questions, which is why <a href=\"https:\/\/passcontractorexam.com\/articles\/contractor-practice-test\/\">our own diagnostic sticks to the shape of the exam<\/a>. No DBPR publication we could reach gives a pass rate for either air conditioning paper, so a percentage on a sales page is the seller&#8217;s arithmetic about its own customers. A banner guaranteeing a pass is a promise about you, written by somebody who has never watched you work a Ductulator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-the-public-complaint-record-show-about-prep-produc\">What does the public complaint record show about prep products?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One risk has nothing to do with question quality: a practice test is access to somebody else&#8217;s website. The <a href=\"https:\/\/www.bbb.org\/us\/fl\/fort-myers\/profile\/business-school\/contractor-campus-inc-0653-90277956\/complaints\" target=\"_blank\" rel=\"nofollow noopener\">Better Business Bureau complaint file<\/a> on Contractor Campus, Inc., a Fort Myers exam prep school that sold HVAC, electrical, plumbing and general contractor packages, shows what that can cost. BBB records 27 complaints in its three year window, none closed in the last twelve months, the business not accredited and the company out of business. We read the twenty complaints BBB publishes across the first two of three pages, dated 15 May to 19 November 2024. What people report, not what is proven:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>One says they paid $2,284 in late January 2024 for books plus online training, waited months for an application to clear, and found in June that the site carrying the sample tests was down.<\/li>\n\n\n<li>One says they paid $599 on 11 March 2024 for courses, lectures, practice tests and quizzes until they passed, and lost access to all of it two months in.<\/li>\n\n\n<li>One says a money back guarantee on passing came with the package, less than a month before the company disappeared. Another had bought unlimited practice tests for a colleague sitting the following week.<\/li>\n\n\n<li>Cutting against the pattern, one says they spent over $3,000, about $1,300 of it on courses, and were not upset about the books, because the books still work.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Every complaint we read is marked unanswered or unpursuable, so the company&#8217;s side is not on the record, BBB says the published text may not represent every complaint filed, and a complaint is one party&#8217;s account rather than a finding. What the pattern agrees with is what the state&#8217;s own paperwork implies without meaning to. The specification and the reference list are free and stay published, the books sit on your shelf, and the part that can vanish before your test date is a login. Judge any product against the table at the top of this page, and if it will not say which edition of the Florida Building Code Mechanical its answers came from, that is your answer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frequently-asked-questions\">Frequently asked questions<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-q-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Are there official Florida HVAC practice questions?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. DBPR publishes the examination content outline and the approved reference list for each class, never the questions, and candidates are not permitted to reproduce them. Any question bank you buy was written by the seller from the same public reference books.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How many correct answers do I need to pass?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Seventy percent of the scored questions on each part, under Rule 61G4-16.001(37). That is 56 of 80 on the Class B trade paper, 91 of 130 on Class A, and 84 of 120 on Business and Finance.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">If I fail one part, do I have to sit both again?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. You retake only the part you failed, and a passed part stands. Everything has to be passed within four years of your first attempt, after which all previous scores are treated as invalid, and a retake application must reach the vendor at least 30 days before the sitting.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What does it cost to sit the two Class B exams?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>A $135 registration fee to Professional Testing, plus $80 each collected by Pearson VUE for Business and Finance and for trade knowledge, so $295 in total. Fees are non refundable and non transferable, and failing to appear forfeits them.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I skip the trade knowledge exam altogether?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>In one case. Since 1 July 2020, a candidate holding a baccalaureate degree in building construction from an accredited four year college with a grade point average of 3.0 or higher is exempt from the trade knowledge part and sits Business and Finance only.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I bring a printed PDF of a reference book?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Only for the titles the reference list marks as available as PDF, and only bound: a ring binder, brads, a snap binder, a spiral notebook or screw posts. Stapled printouts are refused, as are photocopies without prior written authorisation.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"msq-end\" id=\"ms-quiz-end\">\n<p><strong>Finished the page?<\/strong> The same five questions from the top, to see what stuck.<\/p>\n<button type=\"button\" class=\"msq-btn msq-start-test\">Test Your Understanding of This Article<\/button>\n<div class=\"msq-mount\"><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Rules and fees change without notice. This page was verified on the date shown and is rechecked on the weekly refresh. If you hit something different, tell us in the comments.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The published specification for Florida&#8217;s air conditioning trade exams, question counts, time limits, subject weightings and the approved book list, set against what the practice tests ranking for the phrase actually claim.<\/p>\n","protected":false},"author":1,"featured_media":365,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Florida HVAC License Practice Test: 80 or 130 Questions","rank_math_description":"No Florida HVAC license practice test is the real exam. The state publishes the spec to judge one against: 80 scored questions in 5 hours, or 130 in 7.5.","rank_math_focus_keyword":"florida hvac license practice test","rank_math_canonical_url":"","rank_math_breadcrumb_title":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"","rank_math_pillar_content":"","rank_math_robots":[],"rank_math_advanced_robots":[]},"categories":[3],"tags":[],"class_list":["post-368","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-exam-prep"],"_links":{"self":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/comments?post=368"}],"version-history":[{"count":8,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/368\/revisions"}],"predecessor-version":[{"id":500,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/368\/revisions\/500"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media\/365"}],"wp:attachment":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media?parent=368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/categories?post=368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/tags?post=368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}