{"id":134,"date":"2026-09-06T00:55:33","date_gmt":"2026-09-06T04:55:33","guid":{"rendered":"https:\/\/passcontractorexam.com\/articles\/?p=134"},"modified":"2026-10-07T01:11:20","modified_gmt":"2026-10-07T05:11:20","slug":"florida-contractor-continuing-education","status":"publish","type":"post","link":"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/","title":{"rendered":"Florida Contractor Continuing Education Hours and Deadlines"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Florida contractor continuing education is 14 hours per two year renewal cycle for certified and registered contractors. Five single hour topics are required of everyone, with extra hours tied to your license category. Certified licenses renew by 31 August in even numbered years, registered licenses in odd numbered years.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"florida-contractor-continuing-education\" 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-contractor-continuing-education\/#audio\",\"name\":\"Florida Contractor Continuing Education Hours and Deadlines, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 7 October 2026.\",\"contentUrl\":\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/florida-contractor-continuing-education-audio-202610071041.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT11M43S\",\"uploadDate\":\"2026-10-07\",\"inLanguage\":\"en-US\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Florida Contractor Continuing Education Hours and Deadlines\",\"startOffset\":0,\"endOffset\":42},{\"@type\":\"Clip\",\"name\":\"How many hours does Florida actually require?\",\"startOffset\":42,\"endOffset\":105,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#how-many-hours-does-florida-actually-require\"},{\"@type\":\"Clip\",\"name\":\"Which hours are mandatory and which are yours to pick?\",\"startOffset\":105,\"endOffset\":239,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#which-hours-are-mandatory-and-which-are-yours-to-pick\"},{\"@type\":\"Clip\",\"name\":\"When is your renewal actually due?\",\"startOffset\":239,\"endOffset\":300,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#when-is-your-renewal-actually-due\"},{\"@type\":\"Clip\",\"name\":\"What does renewal cost, and what does being late cost?\",\"startOffset\":300,\"endOffset\":407,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#what-does-renewal-cost-and-what-does-being-late-cost\"},{\"@type\":\"Clip\",\"name\":\"What happens if you miss the deadline entirely?\",\"startOffset\":407,\"endOffset\":479,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#what-happens-if-you-miss-the-deadline-entirely\"},{\"@type\":\"Clip\",\"name\":\"Do you need all 14 hours on your first renewal?\",\"startOffset\":479,\"endOffset\":522,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#do-you-need-all-14-hours-on-your-first-renewal\"},{\"@type\":\"Clip\",\"name\":\"What is the stucco hour, and does it apply to you yet?\",\"startOffset\":522,\"endOffset\":578,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#what-is-the-stucco-hour-and-does-it-apply-to-you-yet\"},{\"@type\":\"Clip\",\"name\":\"Which courses count, and can you do all of them online?\",\"startOffset\":578,\"endOffset\":619,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#which-courses-count-and-can-you-do-all-of-them-online\"},{\"@type\":\"Clip\",\"name\":\"How do you check what the state has actually recorded?\",\"startOffset\":619,\"endOffset\":703,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/#how-do-you-check-what-the-state-has-actually-recorded\"}],\"contentSize\":\"4.9 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\/10\/florida-contractor-continuing-education-audio-202610071041.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 Contractor Continuing Education Hours and Deadlines\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Florida Contractor Continuing Education Hours and Deadlines<\/a><\/li>\n<li data-start=\"42.46\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"42.46\" aria-label=\"Play from: How many hours does Florida actually require?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:42<\/span><a href=\"#how-many-hours-does-florida-actually-require\">How many hours does Florida actually require?<\/a><\/li>\n<li data-start=\"104.92\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"104.92\" aria-label=\"Play from: Which hours are mandatory and which are yours to pick?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:45<\/span><a href=\"#which-hours-are-mandatory-and-which-are-yours-to-pick\">Which hours are mandatory and which are yours to pick?<\/a><\/li>\n<li data-start=\"238.7\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"238.7\" aria-label=\"Play from: When is your renewal actually due?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">3:59<\/span><a href=\"#when-is-your-renewal-actually-due\">When is your renewal actually due?<\/a><\/li>\n<li data-start=\"300.04\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"300.04\" aria-label=\"Play from: What does renewal cost, and what does being late cost?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">5:00<\/span><a href=\"#what-does-renewal-cost-and-what-does-being-late-cost\">What does renewal cost, and what does being late cost?<\/a><\/li>\n<li data-start=\"407.42\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"407.42\" aria-label=\"Play from: What happens if you miss the deadline entirely?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">6:47<\/span><a href=\"#what-happens-if-you-miss-the-deadline-entirely\">What happens if you miss the deadline entirely?<\/a><\/li>\n<li data-start=\"479.24\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"479.24\" aria-label=\"Play from: Do you need all 14 hours on your first renewal?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:59<\/span><a href=\"#do-you-need-all-14-hours-on-your-first-renewal\">Do you need all 14 hours on your first renewal?<\/a><\/li>\n<li data-start=\"522.34\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"522.34\" aria-label=\"Play from: What is the stucco hour, and does it apply to you yet?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">8:42<\/span><a href=\"#what-is-the-stucco-hour-and-does-it-apply-to-you-yet\">What is the stucco hour, and does it apply to you yet?<\/a><\/li>\n<li data-start=\"578.08\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"578.08\" aria-label=\"Play from: Which courses count, and can you do all of them online?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:38<\/span><a href=\"#which-courses-count-and-can-you-do-all-of-them-online\">Which courses count, and can you do all of them online?<\/a><\/li>\n<li data-start=\"618.54\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"618.54\" aria-label=\"Play from: How do you check what the state has actually recorded?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">10:19<\/span><a href=\"#how-do-you-check-what-the-state-has-actually-recorded\">How do you check what the state has actually recorded?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 7 October 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\",\"floridacontractorcontinu\",53],[3.64,\"p\",\"floridacontractorcontinu\",103],[11.08,\"p\",\"fivesinglehourtopicsarer\",80],[16.16,\"p\",\"certifiedlicensesrenewby\",87],[23.16,\"p\",\"onthispagetheruletextbeh\",243],[42.46,\"h\",\"howmanyhoursdoesfloridaa\",38],[45.02,\"p\",\"fourteen\",8],[45.7,\"p\",\"rule61g418001oftheflorid\",156],[58.58,\"p\",\"not14ayear\",10],[59.7,\"p\",\"fourteenacrosstwoyearswh\",95],[66.22,\"p\",\"therulewaslastamendedwit\",77],[74.5,\"p\",\"thehourscomeintwopiles\",22],[76.86,\"p\",\"somearesinglehourtopicst\",42],[79.38,\"p\",\"therestyouchoose\",16],[80.94,\"p\",\"providerssellthewholethi\",140],[89.26,\"p\",\"knowingwhatisinsideitsti\",95],[95.82,\"p\",\"ifyouarenotlicensedyetan\",122],[104.92,\"h\",\"whichhoursaremandatoryan\",44],[107.96,\"p\",\"fivetopicsapplytoeveryon\",60],[111.88,\"p\",\"therestdependonwhatyourl\",42],[115.2,\"t\",\"specializedoradvancedmod\",124],[124.52,\"t\",\"workplacesafety\",64],[129.36,\"t\",\"businesspractices\",66],[134.32,\"t\",\"workerscompensation\",68],[140.32,\"t\",\"lawsandrulesregulatingth\",94],[148.96,\"t\",\"windmitigationmethodolog\",107],[159.52,\"t\",\"poolandspaelectricalrequ\",101],[166.96,\"t\",\"cementitiouscladdingstuc\",120],[180.04,\"t\",\"everythingelseelective\",66],[186.84,\"p\",\"countitupandageneralcont\",73],[192.76,\"p\",\"theremainderisgenuinelyo\",27],[194.6,\"p\",\"nobodyatthedepartmentisg\",150],[203.04,\"p\",\"thereisalsoaroutealmostn\",63],[208.04,\"p\",\"thesamerulesaysthatofthe\",249],[227.76,\"p\",\"theruletextdoesnottietho\",116],[238.7,\"h\",\"whenisyourrenewalactuall\",28],[240.34,\"p\",\"thisisthequestionpeopleg\",109],[247.82,\"p\",\"certifiedandregisteredco\",74],[253.1,\"t\",\"certified\",98],[266.3,\"t\",\"registered\",98],[280.18,\"p\",\"ifyouholdacertifiedlicen\",47],[283.86,\"p\",\"checkyourownlicenserecor\",104],[290.66,\"p\",\"ifyouholdaregisteredlice\",126],[300.04,\"h\",\"whatdoesrenewalcostandwh\",43],[303.0,\"p\",\"feesaresetbyruleandwehav\",68],[307.24,\"p\",\"rule61g412009setstheacti\",163],[326.24,\"p\",\"addthe5unlicensedactivit\",156],[348.52,\"p\",\"thecaptionunderthetablep\",40],[351.68,\"p\",\"ourbreakdownofeveryflori\",119],[360.24,\"p\",\"confirmtheamountonyourow\",50],[363.92,\"t\",\"activeindividual\",36],[368.84,\"t\",\"activeindividualplusqual\",57],[375.52,\"t\",\"activelate\",30],[380.84,\"t\",\"activelateplusqualifiedb\",51],[387.84,\"t\",\"inactivestatusrenewal\",40],[392.12,\"t\",\"reactivatinganinactiveli\",49],[397.92,\"p\",\"thelatepenaltyissmalleno\",73],[402.88,\"p\",\"thepenaltythatactuallyco\",56],[407.42,\"h\",\"whathappensifyoumissthed\",39],[410.42,\"p\",\"missing31augustdoesnotde\",48],[414.3,\"p\",\"undersection455271ofthe2\",118],[425.94,\"p\",\"adelinquentlicenseemustf\",87],[432.58,\"p\",\"failuretodosorendersthel\",82],[437.94,\"p\",\"readthatlastpartcarefull\",62],[442.3,\"p\",\"nobodysendsafinalwarning\",24],[443.94,\"p\",\"thetwoyearwindowsimplycl\",54],[448.06,\"p\",\"thestatutedoesallowthede\",208],[462.54,\"p\",\"workingwhileunlicensedis\",64],[466.82,\"p\",\"ifyouareinthegapandwonde\",164],[479.24,\"h\",\"doyouneedall14hoursonyou\",37],[481.52,\"p\",\"noandthiscatchesoutpeopl\",38],[485.08,\"p\",\"therulesaysapersonisnotr\",118],[493.32,\"p\",\"wherethelicensewasobtain\",121],[501.28,\"p\",\"soanewcertificateholderd\",115],[508.52,\"p\",\"ifyouarestillontheothers\",188],[522.34,\"h\",\"whatisthestuccohouranddo\",41],[525.42,\"p\",\"theboardamendedtheruleto\",173],[537.14,\"p\",\"itisnotanextrahourontopo\",47],[542.14,\"p\",\"enforcementisphasedthede\",234],[562.18,\"p\",\"whichmeansthatifacoursep\",121],[569.18,\"p\",\"coursesalsohavetobeevalu\",133],[578.08,\"h\",\"whichcoursescountandcany\",43],[580.64,\"p\",\"onlycoursesfromaprovider\",110],[588.44,\"p\",\"thedepartmentsconstructi\",150],[600.88,\"p\",\"acoursewithnoapprovalnum\",67],[605.68,\"p\",\"onlinecountsinfull\",18],[606.76,\"p\",\"therulecountsclassroomor\",92],[613.4,\"p\",\"theonlypartofthecycletha\",75],[618.54,\"h\",\"howdoyoucheckwhatthestat\",44],[621.54,\"p\",\"providersreportcompletio\",100],[628.06,\"p\",\"thelawgivesthemfarlonger\",24],[629.7,\"p\",\"section4552178ofthe2026f\",210],[647.9,\"p\",\"afastproviderisacourtesy\",101],[656.78,\"p\",\"keepyourowncertificatesa\",224],[672.78,\"p\",\"licenseesnotincompliance\",129],[681.46,\"p\",\"thatisthemechanism\",18],[682.58,\"p\",\"itisnotdramaticanditisno\",99],[689.42,\"p\",\"ifapartofthelicensingpro\",183]];\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 rule text behind the 14 hours, which single hour topics are pinned and which are yours, why certified and registered licences renew in different years, what a missed 31 August actually sets in motion, the first renewal discount nobody mentions, and when the stucco hour reaches you.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"florida-contractor-continuing-education\" 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=\"How many hours does Florida actually require?\" data-section=\"#how-many-hours-does-florida-actually-require\">\n<p class=\"msq-question\">1. How many hours does rule 61G4-18.001 require, and over what period?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">14 hours a year<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">At least 14 classroom or interactive distance learning hours per two year renewal cycle<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">40 hours over five years<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/www.law.cornell.edu\/regulations\/florida\/Fla-Admin-Code-Ann-R-61G4-18-001\" target=\"_blank\" rel=\"noopener\">The rule<\/a> puts it at under an hour a month across the cycle, which is why treating it as an annual emergency is optional. The bundle providers sell is usually the right buy; knowing what is inside it still matters. <a class=\"msq-section\" href=\"#how-many-hours-does-florida-actually-require\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"b\" data-title=\"Which hours are mandatory and which are yours to pick?\" data-section=\"#which-hours-are-mandatory-and-which-are-yours-to-pick\">\n<p class=\"msq-question\">2. Which single hour topics apply to everyone holding a construction industry licence?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Only workplace safety<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">The advanced module, workplace safety, business practices, workers compensation, and laws and rules; wind mitigation, pool and spa electrical and the stucco hour depend on category<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">None are mandatory<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Count it up and a general contractor is looking at six or seven prescribed hours out of 14. The remainder is genuinely open, and nobody at the department is grading your taste. <a class=\"msq-section\" href=\"#which-hours-are-mandatory-and-which-are-yours-to-pick\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"b\" data-title=\"When is your renewal actually due?\" data-section=\"#when-is-your-renewal-actually-due\">\n<p class=\"msq-question\">3. When do certified and registered licences renew?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Both every 31 August<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Certified by 31 August of even numbered years, next 31 August 2028; registered by 31 August of odd numbered years, next 31 August 2027<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">On the anniversary of issue<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Certified and registered contractors sit on opposite halves of the same two year rhythm. If you hold a certified licence the deadline just passed: check your licence record rather than your memory of what you did in July. <a class=\"msq-section\" href=\"#when-is-your-renewal-actually-due\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"What happens if you miss the deadline entirely?\" data-section=\"#what-happens-if-you-miss-the-deadline-entirely\">\n<p class=\"msq-question\">4. Under section 455.271, what happens after a missed deadline?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">The licence is deleted that night<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">It becomes delinquent in the following cycle; fail to apply for active or inactive status during that cycle and it becomes void without further action<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Nothing<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/www.flsenate.gov\/Laws\/Statutes\/2018\/455.271\" target=\"_blank\" rel=\"noopener\">Section 455.271<\/a> does allow the department, at its discretion, to reinstate a void licence where the holder failed to comply because of illness or economic hardship, with an application, the fees and all outstanding education. Nobody sends a final warning. <a class=\"msq-section\" href=\"#what-happens-if-you-miss-the-deadline-entirely\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"Do you need all 14 hours on your first renewal?\" data-section=\"#do-you-need-all-14-hours-on-your-first-renewal\">\n<p class=\"msq-question\">5. What does a new certificateholder owe at the first renewal?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Always 14 hours<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Nothing for the year the licence is first issued; seven hours if the licence was obtained more than 12 months before the biennial period ends<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">28 hours<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The stucco hour works the same way in reverse: it comes out of the 14 rather than on top, and enforcement is reported to begin with registered licences expiring 31 August 2027 and certified licences expiring 31 August 2028. Check your expiration date before a provider tells you that you are already short. <a class=\"msq-section\" href=\"#do-you-need-all-14-hours-on-your-first-renewal\">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<h2 class=\"wp-block-heading\" id=\"how-many-hours-does-florida-actually-require\">How many hours does Florida actually require?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fourteen. <a href=\"https:\/\/www.law.cornell.edu\/regulations\/florida\/Fla-Admin-Code-Ann-R-61G4-18-001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-18.001 of the Florida Administrative Code<\/a> puts it at &#8220;at least 14 classroom or interactive distance learning hours&#8221; for every certificateholder and registrant, per renewal cycle. Not 14 a year. Fourteen across two years, which is under an hour a month, which is why treating it as an annual emergency is optional. The rule was last amended with effect from 26 June 2023, and we reread its text on 7 October 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The hours come in two piles. Some are single hour topics the board names for you. The rest you choose. Providers sell the whole thing as one flat priced bundle because a bundle is easier to advertise than a matrix, and for most contractors the bundle really is the right buy. Knowing what is inside it still matters, because the mandatory list is where the category specific surprises live. If you are not licensed yet and landed here early, the route in is covered separately in our guide to <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-general-contractor-license\/\">getting a general contractor license in Florida<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"627\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-2.jpg\" alt=\"Blank monthly calendar page marking the 31 August contractor license renewal deadline\" class=\"wp-image-132\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-2.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-2-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-2-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-2-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-block-image__caption\">Certified licenses renew in even years, registered licenses in odd years.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-hours-are-mandatory-and-which-are-yours-to-pick\">Which hours are mandatory and which are yours to pick?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Five topics apply to everyone holding a construction industry license. The rest depend on what your license lets you build.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Required hour<\/th><th>Who it applies to<\/th><\/tr><\/thead><tbody><tr><td>Specialized or advanced module approved by the board or the Florida Building Commission<\/td><td>All certificateholders and registrants<\/td><\/tr><tr><td>Workplace safety<\/td><td>All certificateholders and registrants<\/td><\/tr><tr><td>Business practices<\/td><td>All certificateholders and registrants<\/td><\/tr><tr><td>Workers&#8217; compensation<\/td><td>All certificateholders and registrants<\/td><\/tr><tr><td>Laws and rules regulating the construction industry<\/td><td>All certificateholders and registrants<\/td><\/tr><tr><td>Wind mitigation methodologies<\/td><td>General, building, residential, roofing, specialty structure, glass and glazing<\/td><\/tr><tr><td>Pool and spa electrical requirements<\/td><td>Commercial and residential pool and spa, and servicing specialty<\/td><\/tr><tr><td>Cementitious cladding, stucco, plastering and lath<\/td><td>General, building, residential and specialty structure, phased in, see below<\/td><\/tr><tr><td>Everything else, elective<\/td><td>Whatever you actually want to learn<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-block-table__caption\">Mandatory continuing education topics under Rule 61G4-18.001.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Count it up and a general contractor is looking at six or seven prescribed hours out of 14. The remainder is genuinely open. Nobody at the department is grading your taste, so this is the one part of the cycle where you can pick something you will use on Monday rather than something you will forget by Tuesday.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also a route almost no course page mentions, because nobody sells it. The same rule says that of the 14 hours, &#8220;up to four (4) hours of credit may be earned by attending a meeting of the Board wherein disciplinary cases are considered.&#8221; Four hours of watching other contractors explain themselves to the board is, for some people, the most memorable continuing education on offer. The rule text does not tie those hours to any of the named single hour topics, so treat them as elective and plan the mandatory five around them.<\/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-contractor-continuing-education-chart.png\" alt=\"Chart of Florida contractor continuing education hours: five mandatory single hour topics, one wind mitigation hour, one stucco hour phased in, seven elective.\" class=\"wp-image-311\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-chart.png 1600w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-chart-300x169.png 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-chart-1024x576.png 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-chart-768x432.png 768w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">The 14 hours for a general contractor under rule 61G4-18.001, once the stucco hour applies. Other categories swap the wind mitigation hour for pool and spa electrical or nothing at all.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-is-your-renewal-actually-due\">When is your renewal actually due?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the question people get wrong, and they get it wrong in a specific way: they assume everyone in the trade renews at the same time. Certified and registered contractors are on opposite halves of the same two year rhythm.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>License type<\/th><th>Renews by<\/th><th>Most recent deadline<\/th><th>Next deadline<\/th><\/tr><\/thead><tbody><tr><td>Certified<\/td><td>31 August of even numbered years<\/td><td>31 August 2026<\/td><td>31 August 2028<\/td><\/tr><tr><td>Registered<\/td><td>31 August of odd numbered years<\/td><td>31 August 2025<\/td><td>31 August 2027<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-block-table__caption\">Renewal cycles for Florida construction industry licenses.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you hold a certified license, the deadline just passed. Check your own license record rather than your memory of what you did in July, because the record is what the department acts on. If you hold a registered license, your next deadline is 31 August 2027 and you have time to spread the hours out instead of buying them in a panic on the 30th.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-renewal-cost-and-what-does-being-late-cost\">What does renewal cost, and what does being late cost?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fees are set by rule, and we have now checked every line of the table below against it. <a href=\"https:\/\/www.law.cornell.edu\/regulations\/florida\/Fla-Admin-Code-Ann-R-61G4-12-009\" target=\"_blank\" rel=\"noopener\">Rule 61G4-12.009<\/a> sets the active biennial renewal at $200, inactive renewal at $50, the delinquency fee at $25, each qualified business at $50 and reactivating an inactive licence at a $100 application fee. Add the $5 unlicensed activity fee charged at each renewal and the commonly quoted figures fall out exactly: $205, $255, $230, $280 and $55, with $305 for reactivation being $100 plus a $200 renewal plus $5. The caption under the table predates that check. Our breakdown of <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/\">every Florida contractor licence renewal fee line with its citation<\/a> shows why the $209 you will see elsewhere is not in the rule. Confirm the amount on your own renewal notice before you pay.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Renewal<\/th><th>Commonly quoted fee<\/th><\/tr><\/thead><tbody><tr><td>Active, individual<\/td><td>$205<\/td><\/tr><tr><td>Active, individual plus qualified business<\/td><td>$255<\/td><\/tr><tr><td>Active, late<\/td><td>$230<\/td><\/tr><tr><td>Active, late, plus qualified business<\/td><td>$280<\/td><\/tr><tr><td>Inactive status renewal<\/td><td>$55<\/td><\/tr><tr><td>Reactivating an inactive license<\/td><td>$305<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-block-table__caption\">Figures reported by license services, not confirmed against an official fee schedule.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The late penalty is small enough that some contractors treat it as a convenience charge. The penalty that actually costs money is the one in the next section.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"627\" src=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-3.jpg\" alt=\"Construction contractor in a hard hat and high visibility jacket working on site equipment\" class=\"wp-image-133\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-3.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-3-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-3-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-continuing-education-3-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-block-image__caption\">The elective hours are the ones you can actually use on site.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-happens-if-you-miss-the-deadline-entirely\">What happens if you miss the deadline entirely?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Missing 31 August does not delete your license that night. Under <a href=\"https:\/\/www.flsenate.gov\/Laws\/Statutes\/2026\/455.271\" target=\"_blank\" rel=\"noopener\">section 455.271 of the 2026 Florida Statutes<\/a>, failing to renew before expiration makes the license delinquent in the cycle that follows. A delinquent licensee must file a complete application for active or inactive status during that cycle. Failure to do so renders the license void without any further action by the board or the department.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Read that last part carefully, because it is the sentence that ends careers. Nobody sends a final warning. The two year window simply closes and the license stops existing. The statute does allow the department, at its discretion, to reinstate a void license where the holder failed to comply because of illness or economic hardship, and that route requires an application, the fees, and all outstanding continuing education.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Working while unlicensed is a separate problem with separate consequences. If you are in the gap and wondering what you can still legally take on, we have written up <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-handyman-requirements\/\">what Florida lets you do without a contractor license<\/a>, and the honest answer is narrower than most people expect.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"do-you-need-all-14-hours-on-your-first-renewal\">Do you need all 14 hours on your first renewal?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No, and this catches out people who just passed. The rule says a person is not required to complete continuing education for the year in which the certificate or registration is first issued. Where the license was obtained more than 12 months before the biennial period ends, seven hours are required for that first renewal rather than 14.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So a new certificateholder does somewhere between zero and seven hours before the first renewal, depending on when the license was issued. If you are still on the other side of that, working through the exams, the thing worth knowing first is that <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-open-book\/\">the Florida contractor exam is open book<\/a>, which changes how you should prepare far more than any course sales page suggests.<\/p>\n\n\n\n<div class=\"msq-tool\" id=\"ms-cycle\">\n<h3>Where you sit in the cycle<\/h3>\n<p>Pick the licence type and enter the date it was issued. The tool gives the next 31 August deadline, the days left, and whether the first renewal discount in the rule applies.<\/p>\n<div class=\"msq-calc\">\n<label>Licence type<select id=\"cy-type\"><option value=\"certified\">Certified, renews in even numbered years<\/option><option value=\"registered\">Registered, renews in odd numbered years<\/option><\/select><\/label>\n<label>Date the licence was issued<input type=\"date\" id=\"cy-issued\"><\/label>\n<div class=\"msq-calc-out\" id=\"cy-out\"><\/div>\n<\/div>\n<p class=\"msq-note\">Arithmetic from the renewal calendar and rule 61G4-18.001 as this page reads them. Your licence record at the department is what counts; check it before you pay.<\/p>\n<\/div>\n<script>\n(function(){\n  var t = document.getElementById('cy-type'), iss = document.getElementById('cy-issued'), out = document.getElementById('cy-out');\n  if (!out) { return; }\n  function aug31(y){ return new Date(y, 7, 31, 23, 59, 59); }\n  function fmt(d){ return d.toLocaleDateString('en-GB', { day: 'numeric', month: 'long', year: 'numeric' }); }\n  function run(){\n    var today = new Date(), parity = t.value === 'registered' ? 1 : 0, y = today.getFullYear();\n    if (y % 2 !== parity) { y += 1; }\n    if (today > aug31(y)) { y += 2; }\n    var next = aug31(y), prev = aug31(y - 2), days = Math.ceil((next - today) \/ 86400000);\n    var msg = '<strong>Next deadline: ' + fmt(next) + ', ' + days + ' days away.<\/strong> ', issued = null;\n    if (iss.value) { issued = new Date(iss.value + 'T12:00:00'); }\n    if (issued && issued > prev) {\n      var more = (next - issued) > 365.25 * 86400000;\n      msg += 'Issued inside the current cycle, so this is a first renewal: ' + (more ? 'the licence was obtained more than 12 months before the period ends, so seven hours are required rather than 14.' : 'the rule does not require continuing education for the year in which the licence was first issued.');\n    } else {\n      msg += issued ? 'Not a first renewal: the full 14 hours, with the mandatory single hour topics inside them.' : 'Add the issue date to see whether the first renewal discount applies.';\n      msg += ' If ' + fmt(prev) + ' passed without a renewal, section 455.271 applies: delinquent in this cycle, and void without further action unless an application for active or inactive status is filed by ' + fmt(next) + '.';\n    }\n    out.innerHTML = msg;\n    try { if (typeof gtag === 'function') { gtag('event', 'tool_calc', { tool: 'ce-cycle', article: 'florida-contractor-continuing-education' }); } } catch (e) {}\n  }\n  t.addEventListener('change', run); iss.addEventListener('change', run); iss.addEventListener('input', run);\n  run();\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-the-stucco-hour-and-does-it-apply-to-you-yet\">What is the stucco hour, and does it apply to you yet?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The board amended the rule to add one hour on cementitious cladding, stucco, plastering and lath application and repair methodologies for general, building, residential and specialty structure contractors. It is not an extra hour on top of the 14, it comes out of the 14. Enforcement is phased: the department says it begins for registered licenses expiring 31 August 2027 and for certified licenses expiring 31 August 2028, which we checked again on 7 October 2026, and the <a href=\"https:\/\/www2.myfloridalicense.com\/construction-industry\/hot-topics\/\" target=\"_blank\" rel=\"noopener\">department construction industry notices<\/a> are where that phasing is published.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Which means that if a course provider is telling you today that you are already short an hour, check your expiration date before you reach for a card. Courses also have to be evaluated and approved for that specific credit before the hour counts, so a general stucco course is not automatically the required one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-courses-count-and-can-you-do-all-of-them-online\">Which courses count, and can you do all of them online?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Only courses from a provider approved by the board count, and the named single hour topics need a course approved for that exact topic. The department&#8217;s <a href=\"https:\/\/www2.myfloridalicense.com\/construction-industry\/faqs\/\" target=\"_blank\" rel=\"noopener\">construction industry FAQ<\/a> points to its Find a CE Course search for this, and it answers the online question too: providers marked &#8220;C \/ I&#8221; or &#8220;I&#8221; are approved to teach online. A course with no approval number for your topic is just reading, however good it is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Online counts in full. The rule counts &#8220;classroom or interactive distance learning hours&#8221;, which is how the big 14 hour bundles are sold. The only part of the cycle that needs you in a room is the optional board meeting route above.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-check-what-the-state-has-actually-recorded\">How do you check what the state has actually recorded?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Providers report completions electronically, and you will often see that quoted as within 48 hours of the course ending. The law gives them far longer. <a href=\"https:\/\/www.flsenate.gov\/Laws\/Statutes\/2026\/455.2178\" target=\"_blank\" rel=\"noopener\">Section 455.2178 of the 2026 Florida Statutes<\/a> says completion &#8220;must be submitted to the department electronically no later than 30 calendar days&#8221; after the course, tightening to 10 business days once you are inside the 30 days before the renewal deadline. A fast provider is a courtesy, not a guarantee, so a course finished on 25 August can still be legally unreported on 31 August. Keep your own certificates, and look at your license record before you pay the renewal rather than after, because what the department holds is what counts and a missing hour found in July is an inconvenience while the same missing hour found on 1 September is a delinquency.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Licensees not in compliance with the continuing education requirements by the expiration date of their license face non renewal or disciplinary action. That is the mechanism. It is not dramatic and it is not personal, which is exactly why it catches good contractors who were busy building things. If a part of the licensing process has already gone sideways for you, our piece on <a href=\"https:\/\/passcontractorexam.com\/articles\/failed-florida-contractor-exam\/\">what to do after failing part of the Florida contractor exam<\/a> takes the same view: the recovery path is usually shorter than the panic suggests.<\/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 \">Can I take all 14 hours online?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The rule counts classroom or interactive distance learning hours, so approved online courses count toward the requirement. What matters is that the course and the provider are approved for the specific credit you need, particularly for the named single hour topics.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does my license go void the moment I miss 31 August?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. Under section 455.271, missing the deadline makes the license delinquent in the following cycle. It becomes void only if you fail to apply for active or inactive status before that cycle ends, which gives you roughly two years, not two days.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do extra hours carry over to the next cycle?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The rule sets the requirement per renewal cycle and does not describe banking hours forward. Plan on hours being spent in the cycle you take them, and confirm with your provider before buying more than you need.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do I need continuing education if my license is inactive?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Inactive status renewal is commonly reported as not requiring the active continuing education hours, with the outstanding education required when you reactivate. This is the point to check your own record, because inactive and delinquent are different things and only one of them is a choice you made.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Who tells the department that I did the hours?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The course provider submits your completion electronically, commonly quoted at within 48 hours. Keep the certificates anyway. A provider that has closed, changed systems or simply not filed yet is your problem to prove, not theirs.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does a qualified business need its own continuing education?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The requirement in the rule sits on certificateholders and registrants, which means on people rather than on the business entity. The qualifying agent carries the hours. Renewing while you qualify a business is commonly quoted at a higher fee, but not at more hours.<\/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. The rule, statute and fee lines on this page were rechecked against their sources on 7 October 2026. If you hit something different, tell us in the comments.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fourteen hours, five mandatory topics, and two different 31 August deadlines depending on whether your license is certified or registered.<\/p>\n","protected":false},"author":1,"featured_media":131,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Florida Contractor Continuing Education Hours and Deadlines","rank_math_description":"Florida contractor continuing education is 14 hours per two year cycle, with five required topics and a 31 August deadline set by your license type.","rank_math_focus_keyword":"florida contractor continuing education","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":[4],"tags":[],"class_list":["post-134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-licensing"],"_links":{"self":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/134","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=134"}],"version-history":[{"count":8,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":554,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/134\/revisions\/554"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media\/131"}],"wp:attachment":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}