{"id":415,"date":"2026-09-26T01:07:29","date_gmt":"2026-09-26T05:07:29","guid":{"rendered":"https:\/\/passcontractorexam.com\/articles\/?p=415"},"modified":"2026-09-28T01:40:59","modified_gmt":"2026-09-28T05:40:59","slug":"florida-contractor-license-renewal","status":"publish","type":"post","link":"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/","title":{"rendered":"Florida Contractor License Renewal: Dates and Real Fees"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Florida contractor license renewal falls on 31 August: even numbered years for certified licences, odd numbered years for registered ones. Board rule 61G4-12.009 puts the active biennial fee at $200, and a separate statute adds $5, which is why the department bills $205. Miss the date and a $25 delinquency fee attaches.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"florida-contractor-license-renewal\" data-minutes=\"14\">\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-license-renewal\/#audio\",\"name\":\"Florida Contractor License Renewal: Dates and Real Fees, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 26 September 2026.\",\"contentUrl\":\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-audio-202609261046.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT14M24S\",\"uploadDate\":\"2026-09-26\",\"inLanguage\":\"en-US\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Florida Contractor License Renewal: Dates and Real Fees\",\"startOffset\":0,\"endOffset\":65},{\"@type\":\"Clip\",\"name\":\"When is the Florida contractor license renewal deadline?\",\"startOffset\":65,\"endOffset\":212,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#when-is-the-florida-contractor-license-renewal-deadline\"},{\"@type\":\"Clip\",\"name\":\"What does renewing actually cost, line by line?\",\"startOffset\":212,\"endOffset\":449,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#what-does-renewing-actually-cost-line-by-line\"},{\"@type\":\"Clip\",\"name\":\"How many continuing education hours does your category need?\",\"startOffset\":449,\"endOffset\":592,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#how-many-continuing-education-hours-does-your-category-need\"},{\"@type\":\"Clip\",\"name\":\"What happens the day after you miss 31 August?\",\"startOffset\":592,\"endOffset\":655,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#what-happens-the-day-after-you-miss-31-august\"},{\"@type\":\"Clip\",\"name\":\"When does a delinquent licence become null and void?\",\"startOffset\":655,\"endOffset\":714,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#when-does-a-delinquent-licence-become-null-and-void\"},{\"@type\":\"Clip\",\"name\":\"Can you get a null and void licence back?\",\"startOffset\":714,\"endOffset\":802,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#can-you-get-a-null-and-void-licence-back\"},{\"@type\":\"Clip\",\"name\":\"Is inactive status better than letting it lapse?\",\"startOffset\":802,\"endOffset\":864,\"url\":\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/#is-inactive-status-better-than-letting-it-lapse\"}],\"contentSize\":\"6.1 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 14 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-contractor-license-renewal-audio-202609261046.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 License Renewal: Dates and Real Fees\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Florida Contractor License Renewal: Dates and Real Fees<\/a><\/li>\n<li data-start=\"65.1\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"65.1\" aria-label=\"Play from: When is the Florida contractor license renewal deadline?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:05<\/span><a href=\"#when-is-the-florida-contractor-license-renewal-deadline\">When is the Florida contractor license renewal deadline?<\/a><\/li>\n<li data-start=\"211.96\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"211.96\" aria-label=\"Play from: What does renewing actually cost, line by line?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">3:32<\/span><a href=\"#what-does-renewing-actually-cost-line-by-line\">What does renewing actually cost, line by line?<\/a><\/li>\n<li data-start=\"448.66\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"448.66\" aria-label=\"Play from: How many continuing education hours does your category need?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:29<\/span><a href=\"#how-many-continuing-education-hours-does-your-category-need\">How many continuing education hours does your category need?<\/a><\/li>\n<li data-start=\"591.6\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"591.6\" aria-label=\"Play from: What happens the day after you miss 31 August?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">9:52<\/span><a href=\"#what-happens-the-day-after-you-miss-31-august\">What happens the day after you miss 31 August?<\/a><\/li>\n<li data-start=\"655.02\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"655.02\" aria-label=\"Play from: When does a delinquent licence become null and void?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">10:55<\/span><a href=\"#when-does-a-delinquent-licence-become-null-and-void\">When does a delinquent licence become null and void?<\/a><\/li>\n<li data-start=\"714.36\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"714.36\" aria-label=\"Play from: Can you get a null and void licence back?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">11:54<\/span><a href=\"#can-you-get-a-null-and-void-licence-back\">Can you get a null and void licence back?<\/a><\/li>\n<li data-start=\"801.9\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"801.9\" aria-label=\"Play from: Is inactive status better than letting it lapse?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">13:22<\/span><a href=\"#is-inactive-status-better-than-letting-it-lapse\">Is inactive status better than letting it lapse?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 26 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\",\"floridacontractorlicense\",47],[4.04,\"p\",\"floridacontractorlicense\",116],[13.12,\"p\",\"boardrule61g412009putsth\",102],[27.12,\"p\",\"missthedateanda25delinqu\",39],[30.8,\"p\",\"onthispageeveryrenewalfe\",182],[42.6,\"p\",\"ifyouholdacertifiedlicen\",92],[48.48,\"p\",\"thispageexistsbecausethe\",268],[65.1,\"h\",\"whenisthefloridacontract\",48],[68.3,\"p\",\"thedepartmentsplitsthetw\",133],[77.18,\"p\",\"itsownanswerpagewhendoir\",185],[92.94,\"p\",\"checked26september2026\",22],[95.82,\"p\",\"sothetwohalvesofthetrade\",46],[98.46,\"p\",\"certifiedcontractorswere\",84],[107.38,\"p\",\"registeredcontractorsren\",61],[114.1,\"p\",\"ifyouareunsurewhichoneyo\",154],[123.98,\"t\",\"renewaldate\",91],[134.7,\"t\",\"mostrecentdeadline\",70],[143.18,\"t\",\"nextdeadline\",55],[151.74,\"t\",\"statutoryceilingontheren\",56],[158.58,\"t\",\"continuingeducation\",68],[165.3,\"t\",\"wherethelicenceletsyouwo\",98],[172.9,\"p\",\"youshouldalsogetareminde\",25],[174.26,\"p\",\"section455273requiresthe\",159],[188.94,\"p\",\"forthecertifiedcyclethat\",70],[198.58,\"p\",\"thecatchisburiedinthewor\",78],[204.74,\"p\",\"alicenseewhomovedandneve\",86],[211.96,\"h\",\"whatdoesrenewingactually\",38],[214.68,\"p\",\"hereiswheretherankingpag\",47],[217.68,\"p\",\"searchthisandyouwillbeto\",58],[224.4,\"p\",\"rule61g412009says200\",20],[230.84,\"p\",\"thegapisnotamysteryandit\",143],[240.52,\"p\",\"everylinebelowcarriesits\",35],[243.0,\"t\",\"biennialrenewalactivesta\",96],[254.92,\"t\",\"unlicensedactivityfee\",98],[267.04,\"t\",\"eachbusinessyouqualify\",90],[281.76,\"t\",\"biennialrenewalinactives\",64],[295.88,\"t\",\"delinquencyfeeaddedafter\",71],[307.32,\"t\",\"changingstatusmidcycle\",100],[321.76,\"p\",\"addthemupforthecasesthat\",227],[338.72,\"p\",\"wecouldnotopenthoseinser\",166],[350.04,\"t\",\"certifiedonepersonrenewe\",53],[360.0,\"t\",\"certifiedonepersonalsoqu\",68],[372.16,\"t\",\"certifiedonepersonrenewe\",66],[384.12,\"t\",\"certifiedqualifyingacomp\",81],[398.68,\"t\",\"goinginactiveinsteadofre\",56],[408.44,\"p\",\"twothingsfalloutofthis\",22],[409.92,\"p\",\"thestatutoryceilingonare\",137],[425.8,\"p\",\"andthe50perqualifyingbus\",119],[436.36,\"p\",\"ifyouqualifytwocompanies\",95],[442.52,\"p\",\"ourguidetowhatyoutakeona\",73],[448.66,\"h\",\"howmanycontinuingeducati\",51],[451.94,\"p\",\"fourteenhourseverycyclea\",50],[456.46,\"p\",\"whatnobodypublishesclear\",79],[462.18,\"p\",\"rule61g418001setsatleast\",150],[476.54,\"p\",\"theversionoftherulecurre\",57],[481.86,\"t\",\"boardorfloridabuildingco\",87],[490.18,\"t\",\"workplacesafety\",48],[496.94,\"t\",\"businesspractices\",50],[502.26,\"t\",\"workerscompensation\",52],[509.14,\"t\",\"lawsandrulesregulatingth\",78],[516.5,\"t\",\"windmitigation\",100],[527.1,\"t\",\"cementitiouscladdingbett\",103],[537.34,\"t\",\"poolelectricalrequiremen\",66],[545.02,\"t\",\"generaltopicstoreach14\",64],[552.62,\"p\",\"readtherighthandcolumnan\",82],[559.14,\"p\",\"acertifiedgeneralbuildin\",140],[569.46,\"p\",\"aplumbingormechanicalcon\",69],[574.54,\"p\",\"apoolcontractorswapsthes\",50],[578.9,\"p\",\"thecoursepackageadvertis\",93],[585.18,\"p\",\"ourguidetochoosingthecon\",85],[591.6,\"h\",\"whathappensthedayafteryo\",37],[595.0,\"p\",\"nothingdramatichappenswh\",48],[598.16,\"p\",\"section4552715providesth\",131],[611.2,\"p\",\"yourstatusinthelicencelo\",134],[620.48,\"p\",\"youarenotlicensed\",17],[621.72,\"p\",\"yousimplyhavenotbeentold\",52],[625.56,\"p\",\"thepracticalconsequencei\",45],[628.4,\"p\",\"adelinquentlicenceisnota\",196],[640.6,\"p\",\"nobodyisgoingtowarnyoufi\",91],[647.24,\"p\",\"whichisafairexpectationr\",96],[655.02,\"h\",\"whendoesadelinquentlicen\",43],[657.94,\"p\",\"attheendofthenextcyclean\",66],[662.02,\"p\",\"section4552716aprovidest\",193],[678.06,\"p\",\"noordernonoticenosignatu\",26],[680.58,\"p\",\"thecyclesimplyendsandthe\",37],[683.38,\"p\",\"foracertifiedcontractorw\",91],[692.98,\"p\",\"donothingbythatdateandth\",42],[696.82,\"p\",\"foraregisteredcontractor\",91],[706.14,\"p\",\"twoyearssoundsgenerousan\",103],[714.36,\"h\",\"canyougetanullandvoidlic\",32],[717.52,\"p\",\"sometimesandrarelyonthet\",40],[720.32,\"p\",\"thedepartmentsownanswert\",195],[733.44,\"p\",\"experiencecreditinsuranc\",44],[736.12,\"p\",\"readon26september2026\",21],[739.52,\"p\",\"thereisoneescapehatchand\",34],[742.04,\"p\",\"section4552716bletsthede\",216],[761.0,\"p\",\"itisdiscretionarydecided\",63],[766.0,\"p\",\"separatelyrule61g412017g\",183],[779.32,\"p\",\"ifyoudoendupbackinanexam\",94],[785.96,\"p\",\"ourguidetohowtheopenbook\",109],[792.76,\"p\",\"retakesarecommonlyreport\",126],[801.9,\"h\",\"isinactivestatusbetterth\",40],[805.18,\"p\",\"yesbyawidemarginifyougen\",47],[808.9,\"p\",\"inactivestatusisarealsta\",76],[814.94,\"p\",\"thefeeis50acycleunder61g\",118],[827.58,\"p\",\"comingbackisachangeofsta\",87],[833.98,\"p\",\"comparethatwiththelapser\",141],[843.98,\"p\",\"thedifferencebetweenthet\",59],[848.82,\"p\",\"itisthecheapestinsurance\",142],[857.82,\"p\",\"ourchecklistofwhatthedep\",95]];\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: every renewal fee line quoted from the board rule with its own citation, the date a delinquent licence becomes void worked out from the statute, and a calculator that runs the schedule against your own licence.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"florida-contractor-license-renewal\" 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=\"When is the Florida contractor license renewal deadline?\" data-section=\"#when-is-the-florida-contractor-license-renewal-deadline\">\n<p class=\"msq-question\">1. A certified Florida contractor licence expires on which date?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">30 June of every odd numbered year<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">31 August of every even numbered year<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">31 December, two years after it was issued<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Certified contractors renew on 31 August of every even numbered year, registered contractors on 31 August of every odd numbered year, per the department&#8217;s own <a href=\"https:\/\/myfloridalicense.custhelp.com\/app\/answers\/detail\/a_id\/1364\/~\/when-do-i-renew-my-construction-contractor-license\" target=\"_blank\" rel=\"noopener\">renewal answer page<\/a>. <a class=\"msq-section\" href=\"#when-is-the-florida-contractor-license-renewal-deadline\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"a\" data-title=\"What does renewing actually cost, line by line?\" data-section=\"#what-does-renewing-actually-cost-line-by-line\">\n<p class=\"msq-question\">2. What does the board&#8217;s fee rule set as the biennial active renewal fee?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">$200<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">$209<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">$295<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">Rule 61G4-12.009(3)(a)<\/a> sets $200, for certification and registration alike. The $205 the department bills is that $200 plus the $5 unlicensed activity fee in <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.2281.html\" target=\"_blank\" rel=\"noopener\">section 455.2281<\/a>. <a class=\"msq-section\" href=\"#what-does-renewing-actually-cost-line-by-line\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"b\" data-title=\"How many continuing education hours does your category need?\" data-section=\"#how-many-continuing-education-hours-does-your-category-need\">\n<p class=\"msq-question\">3. How many continuing education hours does the rule require each renewal cycle?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">7 hours<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">14 hours<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">21 hours<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-18.001\" target=\"_blank\" rel=\"noopener\">Rule 61G4-18.001<\/a> requires at least 14 classroom or interactive distance learning hours per cycle, one hour in each of several named subjects and the balance in general topics. <a class=\"msq-section\" href=\"#how-many-continuing-education-hours-does-your-category-need\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"When does a delinquent licence become null and void?\" data-section=\"#when-does-a-delinquent-licence-become-null-and-void\">\n<p class=\"msq-question\">4. When does a delinquent Florida contractor licence become void?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">The day after it expires<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">At the end of the licensure cycle following expiration<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Only once the board enters an order saying so<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.271.html\" target=\"_blank\" rel=\"noopener\">Section 455.271(6)(a)<\/a> renders the licence void at the expiration of the current licensure cycle, without any further action by the board or the department. <a class=\"msq-section\" href=\"#when-does-a-delinquent-licence-become-null-and-void\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"Is inactive status better than letting it lapse?\" data-section=\"#is-inactive-status-better-than-letting-it-lapse\">\n<p class=\"msq-question\">5. What does the fee rule charge for a biennial renewal on inactive status?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Nothing, an inactive licence does not renew<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">$50<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">The same $200 as an active renewal<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">Rule 61G4-12.009(3)(b)<\/a> sets the inactive biennial renewal at $50. The licence stays alive and the continuing education requirement does not apply while it is inactive. <a class=\"msq-section\" href=\"#is-inactive-status-better-than-letting-it-lapse\">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\">If you hold a certified licence and you are reading this in late September, that first date has already gone past. This page exists because the renewal pages that rank are mostly selling you the continuing education hours, and a page written to sell hours has no reason to tell you what the fee schedule actually says, when your licence stops existing, or that the number almost everyone quotes for the renewal fee is not the number in the rule.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-is-the-florida-contractor-license-renewal-deadline\">When is the Florida contractor license renewal deadline?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The department splits the two licence types across alternating years, which is the single most useful fact about the whole system and the one most often garbled. Its own answer page, <a href=\"https:\/\/myfloridalicense.custhelp.com\/app\/answers\/detail\/a_id\/1364\/~\/when-do-i-renew-my-construction-contractor-license\" target=\"_blank\" rel=\"noopener\">when do I renew my construction contractor license<\/a>, states it plainly: certified contractors renew on 31 August of every even numbered year, registered contractors on 31 August of every odd numbered year. Checked 26 September 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the two halves of the trade are never in the same queue. Certified contractors were due on 31 August 2026 and are now inside the cycle that ends 31 August 2028. Registered contractors renewed in 2025 and are next due on 31 August 2027. If you are unsure which one you hold, our guide to <a href=\"https:\/\/passcontractorexam.com\/articles\/registered-vs-certified-contractor-florida\/\">the difference between a registered and a certified licence<\/a> settles it in a paragraph, and the answer changes your deadline by a whole year.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Certified<\/th><th>Registered<\/th><\/tr><\/thead><tbody><tr><td>Renewal date<\/td><td>31 August of every even numbered year<\/td><td>31 August of every odd numbered year<\/td><\/tr><tr><td>Most recent deadline<\/td><td>31 August 2026, now passed<\/td><td>31 August 2025<\/td><\/tr><tr><td>Next deadline<\/td><td>31 August 2028<\/td><td>31 August 2027<\/td><\/tr><tr><td>Statutory ceiling on the renewal fee<\/td><td>$250<\/td><td>$200<\/td><\/tr><tr><td>Continuing education<\/td><td>14 hours per cycle<\/td><td>14 hours per cycle<\/td><\/tr><tr><td>Where the licence lets you work<\/td><td>The whole state<\/td><td>Only the local jurisdictions that licensed you<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Renewal dates from the department&#8217;s own answer page, read 26 September 2026. Fee ceilings from section 489.109, Florida Statutes.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You should also get a reminder. Section 455.273 requires the department to forward a renewal notification <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.273.html\" target=\"_blank\" rel=\"noopener\">at least 90 days before the end of a licensure cycle<\/a>, sent to your last known address or the email address it has on file. For the certified cycle that just closed, 90 days before 31 August 2026 was 2 June 2026. The catch is buried in the wording: the duty is to send it to the address of record, not to reach you. A licensee who moved and never updated the record has no argument, which is a dull reason to lose a licence.<\/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\/calculating-florida-contractor-license-renewal-fees.jpg\" alt=\"Study materials and calculator set up for calculating florida contractor license renewal fees.\" class=\"wp-image-413\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/calculating-florida-contractor-license-renewal-fees.jpg 1376w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/calculating-florida-contractor-license-renewal-fees-300x167.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/calculating-florida-contractor-license-renewal-fees-1024x572.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/calculating-florida-contractor-license-renewal-fees-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Understanding the exact breakdown of fees prevents surprise expenses during renewal.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-renewing-actually-cost-line-by-line\">What does renewing actually cost, line by line?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here is where the ranking pages and the rule part company. Search this and you will be told, repeatedly, that the renewal fee is $209. Rule 61G4-12.009 says $200. The gap is not a mystery and it is not the rule being out of date; it is that almost nobody quoting a figure has read the fee schedule, so a number copied once has been copied onward. Every line below carries its own citation.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Fee line<\/th><th>Amount<\/th><th>Where it comes from<\/th><\/tr><\/thead><tbody><tr><td>Biennial renewal, active status<\/td><td>$200<\/td><td><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(3)(a)<\/a>, certification and registration alike<\/td><\/tr><tr><td>Unlicensed activity fee<\/td><td>$5<\/td><td><a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.2281.html\" target=\"_blank\" rel=\"noopener\">section 455.2281<\/a>, charged on initial licensure and every renewal<\/td><\/tr><tr><td>Each business you qualify<\/td><td>$50<\/td><td><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(10)(b)<\/a>, matching the flat $50 in <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0489\/Sections\/0489.109.html\" target=\"_blank\" rel=\"noopener\">section 489.109<\/a><\/td><\/tr><tr><td>Biennial renewal, inactive status<\/td><td>$50<\/td><td><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(3)(b)<\/a><\/td><\/tr><tr><td>Delinquency fee, added after the deadline<\/td><td>$25<\/td><td><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(11)(a)<\/a><\/td><\/tr><tr><td>Changing status mid cycle<\/td><td>$50<\/td><td><a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(12)(a)<\/a>, for a request made other than at the start of a cycle<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Fee lines quoted from rule 61G4-12.009, Florida Administrative Code, and section 455.2281, Florida Statutes, read 26 September 2026.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Add them up for the cases that actually occur and the arithmetic lands exactly on the figures the department prints on its own renewal inserts, which are reported as $205 for an active individual, $255 with a qualifying business, and $230 and $280 for the same two after the deadline. We could not open those inserts directly, because <a href=\"https:\/\/www2.myfloridalicense.com\/contractors-licensing\/renewals\/\" target=\"_blank\" rel=\"noopener\">the renewals section of myfloridalicense.com<\/a> refuses every automated request, so treat the insert amounts as reported and the rule amounts as quoted.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>What you are renewing<\/th><th>The sum<\/th><th>Total<\/th><\/tr><\/thead><tbody><tr><td>Certified, one person, renewed on time<\/td><td>$200 plus $5<\/td><td>$205<\/td><\/tr><tr><td>Certified, one person, also qualifying a company<\/td><td>$200 plus $5 plus $50<\/td><td>$255<\/td><\/tr><tr><td>Certified, one person, renewed after 31 August<\/td><td>$200 plus $5 plus $25<\/td><td>$230<\/td><\/tr><tr><td>Certified, qualifying a company, renewed after 31 August<\/td><td>$200 plus $5 plus $50 plus $25<\/td><td>$280<\/td><\/tr><tr><td>Going inactive instead of renewing active<\/td><td>$50 plus $5<\/td><td>$55<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Worked from the fee lines above. The $5 unlicensed activity fee is charged once per licensee, not once per licence line.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two things fall out of this. The statutory ceiling on a registration renewal is $200, set in <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0489\/Sections\/0489.109.html\" target=\"_blank\" rel=\"noopener\">section 489.109<\/a>, so a flat $209 renewal fee could not lawfully be charged to a registered contractor at all. And the $50 per qualifying business is not a board invention to be haggled over: the statute fixes it at $50 for both the application and the renewal. If you qualify two companies you pay it twice, which is worth knowing before you agree to qualify a third for a friend. Our guide to <a href=\"https:\/\/passcontractorexam.com\/articles\/qualifying-agent-florida-contractor-license\/\">what you take on as a qualifying agent<\/a> covers the part that costs more than $50.<\/p>\n\n\n\n<div class=\"msq-tool\" id=\"pce-renew-calc\">\n<h3>Renewal fee and date calculator<\/h3>\n<p>Runs the published fee lines from rule 61G4-12.009 and section 455.2281 against your own licence, and gives the dates the statute produces. It restates the schedule, it does not speak for the department.<\/p>\n<div class=\"msq-calc\">\n<label>Licence type<select name=\"type\"><option value=\"c\">Certified, renews in even numbered years<\/option><option value=\"r\">Registered, renews in odd numbered years<\/option><\/select><\/label>\n<label>Renewing to<select name=\"st\"><option value=\"a\">Active status<\/option><option value=\"i\">Inactive status<\/option><\/select><\/label>\n<label>Businesses you qualify<input type=\"number\" name=\"biz\" value=\"0\" min=\"0\" max=\"5\" step=\"1\"><\/label>\n<label>Where you stand<select name=\"late\"><option value=\"n\">Renewing before the deadline<\/option><option value=\"y\">The deadline has already passed<\/option><\/select><\/label>\n<div class=\"msq-calc-out\"><button type=\"button\" class=\"msq-btn\" id=\"pce-renew-go\">Work it out<\/button>\n<div id=\"pce-renew-out\" style=\"margin-top:10px;overflow-x:auto\"><\/div><\/div>\n<\/div>\n<p class=\"msq-note\">Fee lines from rule 61G4-12.009 and section 455.2281, read 26 September 2026. Worked in your browser, nothing is stored or sent. Check the total against your own renewal notice before you pay it.<\/p>\n<\/div>\n<script>\n(function(){\n  var root = document.getElementById('pce-renew-calc'); if (!root) { return; }\n  var out = document.getElementById('pce-renew-out');\n  function v(n){ var e = root.querySelector('[name=\"' + n + '\"]'); return e ? e.value : ''; }\n  document.getElementById('pce-renew-go').addEventListener('click', function(){\n    var typ = v('type'), st = v('st'), late = v('late') === 'y';\n    var biz = parseInt(v('biz'), 10); if (!(biz > 0)) { biz = 0; } if (biz > 5) { biz = 5; }\n    var base = st === 'i' ? 50 : 200;\n    var total = base + 5;\n    var rows = '<tr><td>Biennial renewal, ' + (st === 'i' ? 'inactive status' : 'active status') + '<\/td><td>$' + base + '<\/td><\/tr>';\n    rows += '<tr><td>Unlicensed activity fee<\/td><td>$5<\/td><\/tr>';\n    if (biz > 0) { rows += '<tr><td>' + biz + ' qualifying ' + (biz > 1 ? 'businesses' : 'business') + ' at $50 each<\/td><td>$' + (biz * 50) + '<\/td><\/tr>'; total = total + biz * 50; }\n    if (late) { rows += '<tr><td>Delinquency fee<\/td><td>$25<\/td><\/tr>'; total = total + 25; }\n    var yr = typ === 'r' ? 2027 : 2028;\n    var msg = late\n      ? 'Your licence is delinquent now. Section 455.271(6)(a) renders it void on 31 August ' + yr + ' if it is not made active or inactive before that date.'\n      : 'Your next renewal falls due on 31 August ' + yr + '.';\n    var ce = st === 'i'\n      ? 'Continuing education is not a condition of an inactive renewal. It becomes one again when you change back to active.'\n      : 'Fourteen continuing education hours are a condition of this renewal, and which subjects are compulsory depends on your category.';\n    out.innerHTML = '<table><thead><tr><th>Line<\/th><th>Amount<\/th><\/tr><\/thead><tbody>' + rows +\n      '<tr><td><strong>Total<\/strong><\/td><td><strong>$' + total + '<\/strong><\/td><\/tr><\/tbody><\/table>' +\n      '<p>' + msg + '<\/p><p class=\"msq-note\">' + ce + '<\/p>';\n    try { if (typeof gtag === 'function') { gtag('event', 'tool_use', { tool: 'pce-renew-calc' }); } } catch (e) {}\n  });\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-many-continuing-education-hours-does-your-category-need\">How many continuing education hours does your category need?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fourteen hours, every cycle, and the courses are the easy part. What nobody publishes clearly is that the required subjects are not the same for every licence. Rule 61G4-18.001 sets <a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-18.001\" target=\"_blank\" rel=\"noopener\">at least 14 classroom or interactive distance learning hours<\/a>, with one hour in each of several named subjects, some of which apply only to particular categories. The version of the rule currently adopted took effect on 26 June 2023.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Subject<\/th><th>Hours<\/th><th>Who it applies to<\/th><\/tr><\/thead><tbody><tr><td>Board or Florida Building Commission approved advanced module<\/td><td>1<\/td><td>Every category<\/td><\/tr><tr><td>Workplace safety<\/td><td>1<\/td><td>Every category<\/td><\/tr><tr><td>Business practices<\/td><td>1<\/td><td>Every category<\/td><\/tr><tr><td>Workers&#8217; compensation<\/td><td>1<\/td><td>Every category<\/td><\/tr><tr><td>Laws and rules regulating the construction industry<\/td><td>1<\/td><td>Every category<\/td><\/tr><tr><td>Wind mitigation<\/td><td>1<\/td><td>General, Building, Residential, Roofing, Specialty Structure, Glass and Glazing<\/td><\/tr><tr><td>Cementitious cladding, better known as stucco<\/td><td>1<\/td><td>General, Building, Residential, Specialty Structure<\/td><\/tr><tr><td>Pool electrical requirements<\/td><td>1<\/td><td>Pool and spa categories<\/td><\/tr><tr><td>General topics, to reach 14<\/td><td>The balance<\/td><td>Every category<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Compiled from the text of rule 61G4-18.001, Florida Administrative Code, read 26 September 2026.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Read the right hand column and the reason the hours never quite add up for everyone becomes obvious. A certified general, building or residential contractor carries seven fixed hours, because wind mitigation and the stucco hour both apply, leaving seven to fill freely. A plumbing or mechanical contractor carries five fixed hours and has nine to spend. A pool contractor swaps the stucco hour for pool electrical. The course package advertised as the complete 14 hours is complete for somebody, and that somebody may not be you. Our guide to <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/\">choosing the continuing education hours<\/a> goes through the providers and what they charge.<\/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\/education-hours-for-florida-contractor-license-renewal.jpg\" alt=\"An electrician studies online courses required for her florida contractor license renewal.\" class=\"wp-image-414\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/education-hours-for-florida-contractor-license-renewal.jpg 1376w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/education-hours-for-florida-contractor-license-renewal-300x167.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/education-hours-for-florida-contractor-license-renewal-1024x572.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/education-hours-for-florida-contractor-license-renewal-768x429.jpg 768w\" sizes=\"auto, (max-width: 1376px) 100vw, 1376px\" \/><figcaption class=\"wp-block-image__caption\">Completing continuing education hours is mandatory for maintaining an active license.<\/figcaption><\/figure>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"pce-ce-subjects\" data-verb=\" booked\">\n<h3>The compulsory continuing education subjects<\/h3>\n<p>One hour in each of these, with the balance of the 14 in general topics. The last three apply only to the categories named beside them.<\/p>\n<label><input type=\"checkbox\">An advanced or specialized module approved by the Florida Building Commission or the Board<\/label>\n<label><input type=\"checkbox\">Workplace safety<\/label>\n<label><input type=\"checkbox\">Business practices<\/label>\n<label><input type=\"checkbox\">Workers&#8217; compensation<\/label>\n<label><input type=\"checkbox\">Laws and rules regulating the construction industry<\/label>\n<label><input type=\"checkbox\">Wind mitigation, if you hold General, Building, Residential, Roofing, Specialty Structure or Glass and Glazing<\/label>\n<label><input type=\"checkbox\">Cementitious cladding or stucco, if you hold General, Building, Residential or Specialty Structure<\/label>\n<label><input type=\"checkbox\">Pool electrical requirements, if you hold a pool or spa category<\/label>\n<label><input type=\"checkbox\">The balance of the 14 hours, in general topics<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">Subjects from rule 61G4-18.001, read 26 September 2026. Confirm the list against the rule for your own category before you book a package. Ticks are saved on this device only.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-happens-the-day-after-you-miss-31-august\">What happens the day after you miss 31 August?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nothing dramatic happens, which is precisely the problem. Section 455.271(5) provides that failure to renew before a licence expires <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.271.html\" target=\"_blank\" rel=\"noopener\">causes the licence to become delinquent in the licence cycle following expiration<\/a>. Your status in the licence lookup changes, a $25 delinquency fee attaches to the renewal, and there is no letter, no hearing and no sudden silence from the permit desk. You are not licensed. You simply have not been told in a way that feels like being told. What each of those status words means, and what a customer sees when they search your number, is set out in our <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-lookup\/\">walkthrough of the Florida contractor license lookup record<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical consequence is the one that costs money. A delinquent licence is not an active licence, so work performed and permits pulled on it are being performed and pulled by an unlicensed contractor, and the department has a <a href=\"https:\/\/www2.myfloridalicense.com\/construction-industry\/faqs\/\" target=\"_blank\" rel=\"noopener\">construction industry enforcement function<\/a> for exactly that. Nobody is going to warn you first because the expectation is that a professional knows their own renewal date. Which is a fair expectation, right up to the point where the renewal notice went to the address you moved out of in 2023.<\/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-license-renewal-chart.png\" alt=\"Timeline of one florida contractor license renewal cycle from the notice to the void date.\" class=\"wp-image-417\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-chart.png 1600w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-chart-300x169.png 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-chart-1024x576.png 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-chart-768x432.png 768w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/florida-contractor-license-renewal-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Dates for the certified cycle that closed on 31 August 2026, worked from sections 455.271 and 455.273, Florida Statutes, and the fee lines in rule 61G4-12.009.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-does-a-delinquent-licence-become-null-and-void\">When does a delinquent licence become null and void?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At the end of the next cycle, and this is a date you can calculate rather than guess. Section 455.271(6)(a) provides that failure by a delinquent licensee to become active or inactive before the expiration of the current licensure cycle <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.271.html\" target=\"_blank\" rel=\"noopener\">renders the licence void without any further action by the board or the department<\/a>. No order, no notice, no signature. The cycle simply ends and the licence is gone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a certified contractor who missed 31 August 2026, the delinquent cycle is the one running to 31 August 2028. Do nothing by that date and the licence is void on it. For a registered contractor who missed 31 August 2025, the void date is 31 August 2027, which is under a year away. Two years sounds generous and is the reason it catches people, because a deadline two years out is a deadline nobody diarises.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"can-you-get-a-null-and-void-licence-back\">Can you get a null and void licence back?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes, and rarely on the terms you would want. The department&#8217;s own answer to <a href=\"https:\/\/myfloridalicense.custhelp.com\/app\/answers\/detail\/a_id\/1384\/~\/can-i-reactivate-my-null-and-void-construction-contractors-license\" target=\"_blank\" rel=\"noopener\">can I reactivate my null and void construction contractor licence<\/a> is blunt: generally you must start the licensure process over, and if you are certified you must retake the state contractor&#8217;s examination. Experience, credit, insurance, the whole application. Read on 26 September 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is one escape hatch, and it is narrow. Section 455.271(6)(b) lets the department reinstate a void licence where it determines the holder failed to comply because of <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&#038;URL=0400-0499\/0455\/Sections\/0455.271.html\" target=\"_blank\" rel=\"noopener\">illness or economic hardship<\/a>, provided the continuing education is completed, the fees are paid and the applicant is otherwise eligible. It is discretionary, decided case by case, and it is not a route you plan around. Separately, <a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.017\" target=\"_blank\" rel=\"noopener\">rule 61G4-12.017<\/a> governs reinstatement after a licence was revoked in a disciplinary case, which is a different situation with its own board appearance and its own requirement to pass the current examination.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you do end up back in an examination room, the good news is that the format has not changed and it is still open book. Our guide to <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-open-book\/\">how the open book exams actually work<\/a> is where to start, and <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-approved-books\/\">the approved reference list<\/a> is what you would be buying again. Retakes are commonly reported at $295, a figure we could not trace to an official publication, so confirm it with the testing vendor before you budget on it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-inactive-status-better-than-letting-it-lapse\">Is inactive status better than letting it lapse?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, by a wide margin, if you genuinely are not going to work. Inactive status is a real status you elect and pay for, not a synonym for ignoring the renewal. The fee is $50 a cycle under <a href=\"https:\/\/flrules.org\/gateway\/ruleNo.asp?id=61G4-12.009\" target=\"_blank\" rel=\"noopener\">61G4-12.009(3)(b)<\/a>, the continuing education requirement does not bite while you are inactive, and the licence stays alive. Coming back is a change of status with the current hours, not a fresh application with a fresh examination.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compare that with the lapse route: nothing paid, nothing done, and at the end of the following cycle the licence is void and a certified holder is back in the examination room. The difference between the two outcomes is $50 and one form, filed on time. It is the cheapest insurance in Florida construction and it is invisible on every page trying to sell you course hours, because a licensee who goes inactive does not buy any. Our checklist of <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-requirements\/\">what the department requires of a licence holder<\/a> covers the paperwork that stays live either way.<\/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 \">Is the Florida contractor license renewal fee $209 or $200?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Rule 61G4-12.009(3)(a) sets the biennial active renewal fee at $200 for certification and registration alike. Section 455.2281 adds a $5 unlicensed activity fee on every renewal, which produces the $205 the department bills. The $209 widely quoted online does not correspond to either figure, and a registration renewal is capped at $200 by statute in any case.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">My licence expired weeks ago. Can I still just renew it?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. A delinquent licence is renewed by completing the continuing education, paying the renewal fee and paying the $25 delinquency fee, at any point before the end of the following cycle. What you cannot do is work in the meantime, because the licence is not active until the renewal is processed.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do the 14 continuing education hours have to be finished before 31 August?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The hours are a condition of renewal, so they need to be complete and reported before the renewal is processed. Providers report completions electronically to the department, and reporting is not instant, so finishing on the last week of August leaves no margin for a provider that is slow or a course that is credited to the wrong licence number.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">I qualify two companies. Do I pay the business fee twice?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. The $50 is a renewal fee for each certification or registration issued to a business organisation, set at $50 in both rule 61G4-12.009(10)(b) and section 489.109. Two companies means two business renewals alongside your own.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does going inactive protect my licence number?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>The licence continues to exist on inactive status, so yes, provided the inactive renewal fee is paid each cycle. A licence that is simply left delinquent is a different matter: once it becomes void the number is not something you reclaim, and a certified holder faces the examination again.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What if I never received a renewal notice?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Section 455.273 obliges the department to forward a notification at least 90 days before the end of a cycle to the last address or email of record. It does not oblige the department to reach you, and non receipt is not treated as a reason the renewal was late. Updating the address of record is the only reliable protection.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-7\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is the renewal deadline ever extended?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Not as a matter of routine. The statutory scheme is built the other way round: the deadline is fixed, lateness is handled by the delinquency fee rather than by an extension, and the only discretionary relief in the statute is the illness or economic hardship reinstatement of an already void licence.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-8\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Does a local competency card renew on the same date?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. A registered licence depends on a local jurisdiction having licensed you, and counties and cities run their own renewal calendars and their own fees. The state renewal on 31 August of odd numbered years is separate from whatever your county requires, and both have to be current.<\/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>Every Florida contractor renewal fee line quoted from the board rule with its citation, the date a delinquent licence becomes void calculated from the statute, and the continuing education hours that change with your category.<\/p>\n","protected":false},"author":1,"featured_media":412,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Florida Contractor License Renewal: Dates and Real Fees","rank_math_description":"Florida contractor license renewal falls on 31 August, even years certified and odd registered. The board rule says $200, not the $209 everyone quotes.","rank_math_focus_keyword":"florida contractor license renewal","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-415","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\/415","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=415"}],"version-history":[{"count":4,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/415\/revisions"}],"predecessor-version":[{"id":449,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/415\/revisions\/449"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media\/412"}],"wp:attachment":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media?parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/categories?post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/tags?post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}