{"id":177,"date":"2026-09-11T01:47:21","date_gmt":"2026-09-11T05:47:21","guid":{"rendered":"https:\/\/passcontractorexam.com\/articles\/?p=177"},"modified":"2026-10-19T01:02:40","modified_gmt":"2026-10-19T05:02:40","slug":"palm-beach-contractors-license","status":"publish","type":"post","link":"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/","title":{"rendered":"Palm Beach Contractors License: 31 Trades, County or State"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>A Palm Beach contractors license is a county certificate of competency, and the county currently certifies 31 categories: eight construction trades and 23 specialty trades. Twenty nine of those let you contract. The other route is a state license, which works in every Florida county and skips the local exam entirely.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"palm-beach-contractors-license\" data-minutes=\"19\">\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\/palm-beach-contractors-license\/#audio\",\"name\":\"Palm Beach Contractors License: 31 Trades, County or State, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 19 October 2026.\",\"contentUrl\":\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-audio-202610191032.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT18M51S\",\"uploadDate\":\"2026-10-19\",\"inLanguage\":\"en-US\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Palm Beach Contractors License: 31 Trades, County or State\",\"startOffset\":0,\"endOffset\":34},{\"@type\":\"Clip\",\"name\":\"What is a Palm Beach contractors license, legally speaking?\",\"startOffset\":34,\"endOffset\":74,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#what-is-a-palm-beach-contractors-license-legally-speaking\"},{\"@type\":\"Clip\",\"name\":\"Which of the 31 categories does your work fall into?\",\"startOffset\":74,\"endOffset\":244,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#which-of-the-31-categories-does-your-work-fall-into\"},{\"@type\":\"Clip\",\"name\":\"County certificate or state license: which one do you actually need?\",\"startOffset\":244,\"endOffset\":442,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#county-certificate-or-state-license-which-one-do-you-actuall\"},{\"@type\":\"Clip\",\"name\":\"What does it cost, and how long does it take?\",\"startOffset\":442,\"endOffset\":650,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#what-does-it-cost-and-how-long-does-it-take\"},{\"@type\":\"Clip\",\"name\":\"When does a Palm Beach certificate expire?\",\"startOffset\":650,\"endOffset\":837,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#when-does-a-palm-beach-certificate-expire\"},{\"@type\":\"Clip\",\"name\":\"Did the 2021 state law end county specialty licensing?\",\"startOffset\":837,\"endOffset\":971,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#did-the-2021-state-law-end-county-specialty-licensing\"},{\"@type\":\"Clip\",\"name\":\"What do people who have sat these exams actually report?\",\"startOffset\":971,\"endOffset\":1131,\"url\":\"https:\/\/passcontractorexam.com\/articles\/palm-beach-contractors-license\/#what-do-people-who-have-sat-these-exams-actually-report\"}],\"contentSize\":\"7.9 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 19 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\/palm-beach-contractors-license-audio-202610191032.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: Palm Beach Contractors License: 31 Trades, County or State\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Palm Beach Contractors License: 31 Trades, County or State<\/a><\/li>\n<li data-start=\"33.62\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"33.62\" aria-label=\"Play from: What is a Palm Beach contractors license, legally speaking?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:34<\/span><a href=\"#what-is-a-palm-beach-contractors-license-legally-speaking\">What is a Palm Beach contractors license, legally speaking?<\/a><\/li>\n<li data-start=\"73.92\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"73.92\" aria-label=\"Play from: Which of the 31 categories does your work fall into?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:14<\/span><a href=\"#which-of-the-31-categories-does-your-work-fall-into\">Which of the 31 categories does your work fall into?<\/a><\/li>\n<li data-start=\"244.1\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"244.1\" aria-label=\"Play from: County certificate or state license: which one do you actually need?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:04<\/span><a href=\"#county-certificate-or-state-license-which-one-do-you-actuall\">County certificate or state license: which one do you actually need?<\/a><\/li>\n<li data-start=\"442.04\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"442.04\" aria-label=\"Play from: What does it cost, and how long does it take?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:22<\/span><a href=\"#what-does-it-cost-and-how-long-does-it-take\">What does it cost, and how long does it take?<\/a><\/li>\n<li data-start=\"650.06\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"650.06\" aria-label=\"Play from: When does a Palm Beach certificate expire?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">10:50<\/span><a href=\"#when-does-a-palm-beach-certificate-expire\">When does a Palm Beach certificate expire?<\/a><\/li>\n<li data-start=\"837.4\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"837.4\" aria-label=\"Play from: Did the 2021 state law end county specialty licensing?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">13:57<\/span><a href=\"#did-the-2021-state-law-end-county-specialty-licensing\">Did the 2021 state law end county specialty licensing?<\/a><\/li>\n<li data-start=\"971.26\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"971.26\" aria-label=\"Play from: What do people who have sat these exams actually report?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">16:11<\/span><a href=\"#what-do-people-who-have-sat-these-exams-actually-report\">What do people who have sat these exams actually report?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 19 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\",\"palmbeachcontractorslice\",48],[4.04,\"p\",\"apalmbeachcontractorslic\",145],[15.44,\"p\",\"twentynineofthoseletyouc\",31],[17.6,\"p\",\"theotherrouteisastatelic\",86],[23.4,\"p\",\"onthispageabreakdownofth\",131],[33.62,\"h\",\"whatisapalmbeachcontract\",49],[37.62,\"p\",\"itisacertificateofcompet\",114],[45.02,\"p\",\"mostcountylicensinginflo\",50],[48.46,\"p\",\"palmbeachrunsonchapter67\",147],[60.14,\"p\",\"thepracticaleffectissimp\",26],[62.02,\"p\",\"holdthecertificateandyou\",82],[67.62,\"p\",\"stepoutsidethecountyline\",99],[73.92,\"h\",\"whichofthe31categoriesdo\",42],[76.96,\"p\",\"eightofthecategoriesarec\",41],[79.48,\"p\",\"twoofthoseeightjourneyma\",153],[90.96,\"p\",\"thatleaves29categoriesyo\",50],[94.2,\"t\",\"general\",133],[106.52,\"t\",\"building\",84],[114.04,\"t\",\"residential\",94],[123.36,\"t\",\"electrical\",87],[133.68,\"t\",\"plumbing\",92],[142.6,\"t\",\"harvheatingairconditioni\",102],[155.0,\"t\",\"journeymanelectrical\",122],[165.24,\"t\",\"journeymanplumber\",115],[174.24,\"p\",\"theother23arespecialtyca\",105],[182.48,\"p\",\"theyarealuminiumspecialt\",363],[207.96,\"p\",\"pickingbetweenthemiswher\",109],[215.32,\"p\",\"lowvoltageandirrigationb\",40],[219.4,\"p\",\"afencecontractorcanwrite\",77],[224.52,\"p\",\"analuminiumspecialtiesco\",101],[231.68,\"p\",\"ifyourworkstraddlestwoca\",80],[237.2,\"p\",\"thatsamecategoryquestion\",87],[244.1,\"h\",\"countycertificateorstate\",56],[247.74,\"p\",\"thisdecisionmattersmoret\",34],[249.62,\"p\",\"undersection4891058ofthe\",181],[263.98,\"p\",\"aregisteredcontractorhas\",93],[270.98,\"p\",\"whetheraregistrationreac\",177],[282.18,\"t\",\"whereitworks\",106],[289.9,\"t\",\"whoexaminesyou\",128],[300.14,\"t\",\"applicationfee\",132],[313.9,\"t\",\"approvalstep\",139],[325.7,\"t\",\"renewaldeadline\",115],[338.02,\"t\",\"specialtytradesavailable\",116],[347.78,\"p\",\"ifyouplantoworkonlyinone\",73],[353.18,\"p\",\"butifyouwanttoworkacross\",85],[358.98,\"p\",\"thedbprexaminationapplic\",225],[378.82,\"p\",\"thelicenseapplicationfee\",106],[393.02,\"p\",\"whetherastatelicenseemus\",84],[398.94,\"p\",\"thecountycontractorcerti\",102],[406.7,\"p\",\"theboardsrulesandregulat\",120],[416.66,\"p\",\"thestatutesideswiththefe\",196],[432.78,\"p\",\"thereisnosecondexameithe\",28],[434.58,\"p\",\"askcontractorregulations\",102],[442.04,\"h\",\"whatdoesitcostandhowlong\",34],[444.44,\"p\",\"theapplicationfeeis450fo\",92],[453.68,\"p\",\"thefeescheduleintheboard\",155],[466.8,\"p\",\"withdrawinwritingatleast\",82],[472.12,\"p\",\"bedeniedfornotmeetingthe\",53],[475.48,\"p\",\"theexamsnowcomefirst\",20],[477.0,\"p\",\"thecountysexaminformatio\",159],[488.64,\"p\",\"contractorssittwoexamsbu\",75],[496.56,\"p\",\"journeymensitonlythetrad\",29],[499.72,\"p\",\"everyexammustbetakeninpa\",136],[509.2,\"p\",\"theexamfeeiscommonlyquot\",116],[518.24,\"p\",\"thetimingisimportant\",20],[519.56,\"p\",\"thecountyfaqsaysacomplet\",111],[527.32,\"p\",\"theboardmeetsonthefourth\",132],[536.36,\"p\",\"the2026calendarprintedin\",148],[548.28,\"p\",\"thefaqputsthewholeproces\",37],[552.12,\"p\",\"iftheboardasksformorepap\",131],[562.0,\"p\",\"creditischeckedtoo\",18],[563.36,\"p\",\"aficoscoreof660orhigherm\",184],[580.12,\"p\",\"thecreditreportsarevalid\",60],[585.12,\"p\",\"thereisalsoamoneytesttha\",39],[587.8,\"p\",\"thefinancialstatementint\",160],[598.04,\"p\",\"therestcanbefixedassets\",23],[599.84,\"t\",\"generalbuildingandreside\",80],[609.24,\"t\",\"carpentrydemolitionelect\",157],[625.08,\"t\",\"marine\",55],[633.16,\"t\",\"allotherspecialtytrades\",72],[642.28,\"p\",\"missthefirstfridayandyou\",34],[645.28,\"p\",\"missitinoctoberandwithno\",53],[650.06,\"h\",\"whendoesapalmbeachcertif\",35],[651.78,\"p\",\"everythingexpireson30sep\",109],[660.26,\"p\",\"countycontractorsrenewbi\",42],[663.94,\"p\",\"journeymenlimitedjourney\",64],[669.14,\"p\",\"statelicenseesreenrolwit\",45],[672.14,\"p\",\"renewalcardsgooutinlatej\",40],[675.3,\"p\",\"theoddandevenpatterncome\",170],[686.74,\"t\",\"countycertifiedcontracto\",122],[702.26,\"t\",\"journeymanorlimitedjourn\",125],[717.26,\"t\",\"statelicenseeenrolledwit\",132],[731.54,\"t\",\"thestatelicenseitself\",123],[745.02,\"p\",\"so2026wasajourneymanyear\",61],[751.78,\"p\",\"ifyouholdacontractorcert\",53],[756.74,\"p\",\"thecountycontinuingeduca\",194],[771.54,\"p\",\"journeymenandtechnicians\",35],[774.38,\"p\",\"thehoursarethesame14thes\",157],[786.06,\"p\",\"missedthedate\",13],[787.54,\"p\",\"thecardisnotgoneyet\",19],[789.3,\"p\",\"underthecountysspecialac\",197],[804.82,\"p\",\"thefeescheduleintheboard\",204],[822.7,\"p\",\"countingeachmonthafterse\",87],[831.54,\"p\",\"ringcontractorregulation\",92],[837.4,\"h\",\"didthe2021statelawendcou\",45],[841.44,\"p\",\"partlyandthecountylistst\",47],[844.64,\"p\",\"section4891174oftheflori\",260],[866.6,\"p\",\"localgovernmentscouldkee\",133],[877.24,\"p\",\"lookatwhatpalmbeachdid\",22],[879.68,\"p\",\"itsstandardsforcertified\",84],[887.08,\"p\",\"thedbprshottopicspagesay\",232],[910.84,\"p\",\"colliercountyansweredbyd\",65],[916.4,\"p\",\"palmbeachchangedless\",20],[918.04,\"p\",\"thesamestandardsnowcarve\",172],[929.76,\"p\",\"plasteringthoughisstillc\",161],[943.44,\"p\",\"wearenotgoingtotellyouth\",119],[952.6,\"p\",\"wewilltellyoutoringcontr\",83],[962.2,\"p\",\"forcontrastthecountyatth\",128],[971.26,\"h\",\"whatdopeoplewhohavesatth\",46],[974.38,\"p\",\"palmbeachspecificaccount\",148],[984.82,\"p\",\"acrossonercontractorthre\",86],[994.58,\"p\",\"theoriginalposterfiveyea\",95],[1001.94,\"p\",\"theirdiagnosiswastimerat\",99],[1010.02,\"p\",\"areplierthesamedayputitm\",125],[1017.38,\"p\",\"acommenteron15and17april\",186],[1033.42,\"p\",\"theysuggestedacommunityc\",62],[1037.54,\"p\",\"acontractorholdingnortha\",144],[1046.9,\"p\",\"acommentaddedon26august2\",124],[1059.78,\"p\",\"theaccountsagreewiththeo\",90],[1065.86,\"p\",\"theyagreetheseareopenboo\",53],[1069.22,\"p\",\"theydisagreewiththeideat\",98],[1076.1,\"p\",\"wheretheysplitiswhethery\",47],[1078.94,\"p\",\"ourpieceonwhatopenbookac\",64],[1083.46,\"p\",\"thereisaharderrecordonth\",41],[1086.06,\"p\",\"thebetterbusinessbureauf\",131],[1096.18,\"p\",\"thecomplaintsrunfrommayt\",123],[1108.58,\"p\",\"onedated19november2024co\",104],[1118.02,\"p\",\"thecompanyclosedinmay202\",136],[1127.26,\"p\",\"buythebooks\",11],[1128.62,\"p\",\"besloweraboutbuyingtheco\",28]];\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: a breakdown of the 31 license categories, a table comparing county and state licenses, renewal schedules, and a step by step application checklist.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"palm-beach-contractors-license\" data-category=\"Licensing\" data-list=\"1\">\n<style>.msq,.msq-hook,.msq-box,.msq-end,.msq-tool{--msq-accent:#24405E;--msq-accent-text:#FFFFFF;--msq-line:#D9D3C7;--msq-warn:#C4540E;--msq-muted:#4C5561;--msq-tint:#F3F1EC;--msq-base:#FFFFFF}\n.msq{margin:1.25em 0 1.75em}\n.msq-hook{border-left:3px solid var(--msq-accent);padding:6px 14px;color:var(--msq-muted);font-size:.97em}\n.msq-box{background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px;padding:0}\n.msq-box>summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:700;color:var(--msq-accent)}\n.msq-box>summary::-webkit-details-marker{display:none}\n.msq-box>summary::before{content:\"+\";display:inline-block;width:1.1em;font-weight:800}\n.msq-box[open]>summary::before{content:\"\\00d7\"}\n.msq-body{padding:2px 18px 18px}\n.msq-intro{margin:0 0 12px;font-size:.95em;color:var(--msq-muted)}\n.msq-list{margin:0;padding:0;list-style:none}\n.msq-q{margin:0 0 18px;padding:0}\n.msq-question{font-weight:700;margin:0 0 8px}\n.msq-options{display:flex;flex-direction:column;gap:8px}\n.msq-opt{text-align:left;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;padding:10px 12px;font:inherit;font-size:.95em;color:inherit;cursor:pointer;line-height:1.35}\n.msq-opt:hover{border-color:var(--msq-accent)}\n.msq-opt[disabled]{cursor:default}\n.msq-opt.is-right{border-color:var(--msq-accent);background:var(--msq-line);font-weight:700}\n.msq-opt.is-wrong{border-color:var(--msq-warn);color:var(--msq-warn)}\n.msq-explain{margin:8px 0 0;font-size:.92em;padding:10px 12px;border-left:3px solid var(--msq-accent);background:var(--msq-base);border-radius:0 8px 8px 0}\n.msq-explain[hidden]{display:none}\n.msq-verdict{font-weight:700}\n.msq-result{margin-top:14px;padding:14px 16px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:10px}\n.msq-result[hidden]{display:none}\n.msq-result h3{margin:0 0 6px;font-size:1.1em}\n.msq-result p{margin:0 0 8px}\n.msq-jump{margin:0 0 8px;padding-left:1.2em}\n.msq-form{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.msq-form input[type=email]{flex:1 1 220px;padding:10px 12px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-btn{background:var(--msq-accent);color:var(--msq-accent-text);border:0;border-radius:8px;padding:11px 18px;font:inherit;font-weight:700;cursor:pointer}\n.msq-btn:hover{filter:brightness(.92)}\n.msq-btn[disabled]{opacity:.7;cursor:default}\n.msq-no{font-size:.9em;color:var(--msq-muted);margin-left:4px}\n.msq-privacy{margin:6px 0 0;font-size:.82em;color:var(--msq-muted);flex-basis:100%}\n.msq-hp{position:absolute;left:-5000px;width:1px;height:1px;overflow:hidden}\n.msq-msg{margin:8px 0 0;font-size:.92em}\n.msq-end{margin:1.5em 0;padding:18px;border:1px solid var(--msq-accent);border-radius:12px;text-align:center;background:var(--msq-tint)}\n.msq-end p{margin:0 0 12px}\n.msq-end .msq-body{text-align:left;padding:16px 0 0}\n.msq-end .msq-start-test[hidden]{display:none}\n.msq-tool{margin:1.5em 0;padding:18px 20px;background:var(--msq-tint);border:1px solid var(--msq-line);border-radius:12px}\n.msq-tool h3{margin:0 0 6px;font-size:1.15em}\n.msq-tool p{margin:0 0 10px}\n.msq-tool .msq-note{font-size:.85em;color:var(--msq-muted);margin:10px 0 0}\n.msq-check label{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--msq-line);cursor:pointer;line-height:1.4}\n.msq-check label:last-of-type{border-bottom:0}\n.msq-check input{margin-top:5px;flex:0 0 auto;width:18px;height:18px;accent-color:var(--msq-accent)}\n.msq-check-count{font-weight:700;margin:10px 0 0}\n.msq-verdict-box{margin:12px 0 0;padding:10px 14px;border-radius:8px;background:var(--msq-base);border-left:3px solid var(--msq-warn)}\n.msq-verdict-box[hidden]{display:none}\n.msq-calc{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}\n.msq-calc label{display:flex;flex-direction:column;gap:4px;font-size:.92em}\n.msq-calc input,.msq-calc select{padding:8px 10px;border:1px solid var(--msq-muted);border-radius:8px;font:inherit;background:#fff}\n.msq-calc-out{grid-column:1 \/ -1;margin-top:6px;padding:12px 14px;background:var(--msq-base);border-radius:8px;border:1px solid var(--msq-line)}\n.msq-calc-out strong{font-size:1.15em}\n.msq-choose label{display:block;padding:9px 12px;margin:0 0 8px;background:var(--msq-base);border:1px solid var(--msq-line);border-radius:8px;cursor:pointer}\n.msq-choose input{margin-right:8px;accent-color:var(--msq-accent)}\n.msq-choice-result{margin-top:10px;padding:12px 14px;background:var(--msq-base);border-left:3px solid var(--msq-accent);border-radius:0 8px 8px 0}\n.msq-choice-result[hidden]{display:none}\n@media (max-width:600px){.msq-calc{grid-template-columns:1fr}}\nh2.wp-block-heading[id]{scroll-margin-top:24px}<\/style>\n<noscript><style>.msq-explain{display:block !important}<\/style><\/noscript>\n<details class=\"msq-box\">\n<summary>Think you already know this? Five questions, one minute.<\/summary>\n<div class=\"msq-body\">\n<p class=\"msq-intro\">Every answer is on this page. Answer from what you know now; the page fills in the rest.<\/p>\n<ol class=\"msq-list\">\n<li class=\"msq-q\" data-q=\"1\" data-answer=\"b\" data-title=\"What is a Palm Beach contractors license, legally speaking?\" data-section=\"#what-is-a-palm-beach-contractors-license-legally-speaking\">\n<p class=\"msq-question\">1. What legal authority allows Palm Beach County to keep its wide trade list while other counties trim theirs?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">A local county ordinance<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">A Special Act of the Laws of Florida<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">A federal commerce regulation<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Palm Beach County operates under <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/Forms\/standards.pdf\" target=\"_blank\" rel=\"noopener\">Chapter 67-1876, a Special Act of the Laws of Florida<\/a>, which provides its unusual licensing authority. <a class=\"msq-section\" href=\"#what-is-a-palm-beach-contractors-license-legally-speaking\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"c\" data-title=\"Which of the 31 categories does your work fall into?\" data-section=\"#which-of-the-31-categories-does-your-work-fall-into\">\n<p class=\"msq-question\">2. Which two construction trade categories licensed by the county do not allow you to contract?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">General and building contractor<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Residential and HARV contractor<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Journeyman electrical and journeyman plumber<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Journeyman electrical and journeyman plumber cards are not contracting licenses, and holders must work under a master. <a class=\"msq-section\" href=\"#which-of-the-31-categories-does-your-work-fall-into\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"a\" data-title=\"County certificate or state license: which one do you actually need?\" data-section=\"#county-certificate-or-state-license-which-one-do-you-actuall\">\n<p class=\"msq-question\">3. What is the main geographical difference between a county certificate and a state license?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">A county certificate works only in Palm Beach, while a state license works statewide.<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">A county certificate works across South Florida, while a state license works nationwide.<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">A county certificate works statewide, while a state license works only in Palm Beach.<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Under <a href=\"https:\/\/www.flsenate.gov\/laws\/statutes\/2024\/489.105\" target=\"_blank\" rel=\"noopener\">section 489.105(8) of the Florida Statutes<\/a>, a certified state contractor can work in any Florida jurisdiction, whereas a county certificate only works locally. <a class=\"msq-section\" href=\"#county-certificate-or-state-license-which-one-do-you-actuall\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"When does a Palm Beach certificate expire?\" data-section=\"#when-does-a-palm-beach-certificate-expire\">\n<p class=\"msq-question\">4. How often and in what years do county certified contractors renew their active certificates?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Every year on August 31<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Biennially in odd numbered years by September 30<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Biennially in even numbered years by September 30<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>County certified contractors renew in odd years by September 30, and must complete 14 hours of continuing education as detailed in the <a href=\"https:\/\/discover.pbc.gov\/pzb\/PDF\/Continuing-Education-Requirement.pdf\" target=\"_blank\" rel=\"noopener\">county continuing education notice<\/a>. <a class=\"msq-section\" href=\"#when-does-a-palm-beach-certificate-expire\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"a\" data-title=\"Did the 2021 state law end county specialty licensing?\" data-section=\"#did-the-2021-state-law-end-county-specialty-licensing\">\n<p class=\"msq-question\">5. Which statute limits local governments from requiring licenses for trades like painting or flooring?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Section 489.117(4) of the Florida Statutes<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Chapter 67-1876 of the Special Acts<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">The Florida Building Code Section 500<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span><a href=\"https:\/\/www.flsenate.gov\/laws\/statutes\/2024\/489.117\" target=\"_blank\" rel=\"noopener\">Section 489.117(4) of the Florida Statutes<\/a> prohibits local governments from licensing scopes that do not correspond to state categories, listing painting and flooring as examples. <a class=\"msq-section\" href=\"#did-the-2021-state-law-end-county-specialty-licensing\">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) { var skipFirst = box.hasAttribute('data-default-open'); box.addEventListener('toggle', function(){ if (!box.open) { return; } if (skipFirst) { skipFirst = false; return; } 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=\"what-is-a-palm-beach-contractors-license-legally-speaking\">What is a Palm Beach contractors license, legally speaking?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It is a certificate of competency issued by the Construction Industry Licensing Board of Palm Beach County, and its authority is unusual. Most county licensing in Florida runs on a county ordinance. Palm Beach runs on <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/Forms\/standards.pdf\" rel=\"nofollow noopener\" target=\"_blank\">Chapter 67-1876, a Special Act of the Laws of Florida<\/a>, as amended, which is part of why the county has kept a wide trade list while other counties have trimmed theirs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical effect is simple. Hold the certificate and you can advertise, bid and contract in that trade inside Palm Beach County. Step outside the county line and it stops working, which is the whole argument for the state route further down this page.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-of-the-31-categories-does-your-work-fall-into\">Which of the 31 categories does your work fall into?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eight of the categories are construction trades. Two of those eight, journeyman electrical and journeyman plumber, are not contracting licences at all: the county is explicit that a journeyman works under a master and may not contract. That leaves 29 categories you can actually run a business on.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Category<\/th><th>Experience required<\/th><th>Can you contract?<\/th><\/tr><\/thead><tbody><tr><td>General<\/td><td>5 years supervisory, or 1 year as a licensed building contractor, or 2 as residential<\/td><td>Yes, unlimited height and area<\/td><\/tr><tr><td>Building<\/td><td>4 years supervisory<\/td><td>Yes, up to three storeys or 36 feet<\/td><\/tr><tr><td>Residential<\/td><td>3 years supervisory<\/td><td>Yes, one to three family homes, two storeys<\/td><\/tr><tr><td>Electrical<\/td><td>7 years, 4 as a journeyman in a supervisory capacity<\/td><td>Yes<\/td><\/tr><tr><td>Plumbing<\/td><td>7 years, 4 as a journeyman plumber in a supervisory capacity<\/td><td>Yes<\/td><\/tr><tr><td>HARV (heating, air conditioning, refrigeration, ventilation)<\/td><td>7 years supervisory<\/td><td>Yes<\/td><\/tr><tr><td>Journeyman electrical<\/td><td>4 year apprenticeship, or 6 years practical work<\/td><td>No, works under a master electrician<\/td><\/tr><tr><td>Journeyman plumber<\/td><td>3 year apprenticeship, or 4 years practical work<\/td><td>No, works under a master plumber<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Source: Standards for Certified Categories, Palm Beach County CILB, updated 1 July 2025.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The other 23 are specialty categories, each needing three years of experience with at least eighteen months of it supervisory. They are aluminium specialties, carpentry, concrete forming and placing, demolition, drywall, fence, garage doors, glass and glazing, gunite, hurricane shutter and awning, irrigation sprinkler, low voltage, marine, masonry, plastering, rescreener and screen repair, roofing, sign contractor electrical, structural steel erection, swimming pool construction, swimming pool maintenance and repair, underground utilities, and window and door.<\/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\/palm-beach-contractors-license-2.jpg\" alt=\"Crew finishing a concrete slab, work a Palm Beach contractors license covers under the concrete category\" class=\"wp-image-175\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-2.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-2-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-2-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-2-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-element-caption\">Concrete forming and placing is one of 23 specialty categories.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Picking between them is where people lose time, because the boundaries are drawn by voltage and by scope, not by what the job is called. Low voltage and irrigation both stop at 98 volts. A fence contractor can write the electrical work into the contract but has to subcontract it. An aluminium specialties contractor can build a screen enclosure and pour the slab under it, but may not touch a roof truss. If your work straddles two categories, read the scope wording before you pay for an exam, not after. That same category question opens every county process, including the <a href=\"https:\/\/passcontractorexam.com\/articles\/pasco-county-contractors-license\/\">Pasco County registration route<\/a>.<\/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\/10\/palm-beach-contractors-license-chart.png\" alt=\"Bar chart showing years of experience required for six Palm Beach County construction trades\" class=\"wp-image-581\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-chart.png 1600w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-chart-300x169.png 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-chart-1024x576.png 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-chart-768x432.png 768w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/palm-beach-contractors-license-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Based on the Standards for Certified Categories from the Palm Beach County CILB<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"county-certificate-or-state-license-which-one-do-you-actuall\">County certificate or state license: which one do you actually need?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This decision matters more than the exam. Under <a href=\"https:\/\/www.flsenate.gov\/laws\/statutes\/2026\/489.105\" rel=\"nofollow noopener\" target=\"_blank\">section 489.105(8) of the Florida Statutes<\/a>, a certified contractor holds a certificate from the state and may contract in any jurisdiction in Florida without meeting that jurisdiction\u2019s competency requirements. A registered contractor has met the local requirements and may contract only where that registration applies. Whether a registration reaches past county lines, and when it can be grandfathered into a state certificate, is set out in our <a href=\"https:\/\/passcontractorexam.com\/articles\/registered-vs-certified-contractor-florida\/\">registered versus certified contractor decision table and grandfathering checklist<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th>Palm Beach certificate of competency<\/th><th>State license from the DBPR<\/th><\/tr><\/thead><tbody><tr><td>Where it works<\/td><td>Palm Beach County only<\/td><td>Every county in Florida<\/td><\/tr><tr><td>Who examines you<\/td><td>The county board, tested by Prov or GITS<\/td><td>The state, through its own vendor<\/td><\/tr><tr><td>Application fee<\/td><td>$450 for contractors, $100 for journeymen<\/td><td>Set by state rule, varies by category<\/td><\/tr><tr><td>Approval step<\/td><td>Board meeting, usually the fourth Monday<\/td><td>Department review, board referral if flagged<\/td><\/tr><tr><td>Renewal deadline<\/td><td>30 September, every two years<\/td><td>31 August, every two years<\/td><\/tr><tr><td>Specialty trades available<\/td><td>23 county categories<\/td><td>State categories only<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Sources: Palm Beach County contractor certification FAQ and Florida Statutes chapter 489.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you plan to work only in one county, a <strong>local license<\/strong> may be cheaper and cover more trades. But if you want to work across Florida, a <strong>state license<\/strong> is the better choice, and its numbers are fixed too. The <a href=\"https:\/\/www2.myfloridalicense.com\/servop\/testing\/documents\/exam_applic_pack.pdf\" rel=\"nofollow noopener\" target=\"_blank\">DBPR examination application pack<\/a> charges $135 to Professional Testing for each registration, then Pearson VUE&#8217;s fee per part: $80 for Business and Finance and $40 each for Contract Administration and Project Management, so a first sitting of all three parts comes to <strong>$295<\/strong>. The license application fee is then $245 or $145 under <a href=\"https:\/\/www.law.cornell.edu\/regulations\/florida\/Fla-Admin-Code-Ann-R-61G4-12-009\" rel=\"nofollow noopener\" target=\"_blank\">rule 61G4-12.009<\/a>, depending on where in the two year licensing cycle you apply.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whether a state licensee must also enrol with the county is where the county&#8217;s own documents disagree. The <a href=\"https:\/\/discover.pbc.gov\/pzb\/FAQPages\/Contractors-Certification.aspx\" rel=\"nofollow noopener\" target=\"_blank\">county contractor certification FAQ<\/a> still describes a <strong>$50 enrollment fee<\/strong> for state contractors, renewed in even years. The board&#8217;s <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/PDF\/rulesandregs.pdf\" rel=\"nofollow noopener\" target=\"_blank\">rules and regulations<\/a>, dated 25 April 2022, list the Enhanced Countywide Enrollment Program in the fee schedule as &#8220;preempted by State&#8221;. The statute sides with the fee schedule: <a href=\"https:\/\/www.flsenate.gov\/laws\/statutes\/2026\/489.113\" rel=\"nofollow noopener\" target=\"_blank\">section 489.113(4)(a) of the 2026 Florida Statutes<\/a> says a certificate holder is required only to show a current certificate and pay the occupational license and building permit fees other people pay. There is <strong>no second exam<\/strong> either way. Ask Contractor Regulations before paying an enrollment fee; insurance and a business tax receipt are separate questions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-it-cost-and-how-long-does-it-take\">What does it cost, and how long does it take?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The application fee is <strong>$450 for a contractor license<\/strong> and <strong>$100 for a journeyman license<\/strong>, and it is paid in two halves. The fee schedule in the board&#8217;s <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/PDF\/rulesandregs.pdf\" rel=\"nofollow noopener\" target=\"_blank\">rules and regulations<\/a> splits the contractor fee into a $225 application review fee and a $225 completion fee, and the county emails you when the first $225 is due. Withdraw in writing at least two business days before your board meeting and you get half of it back. Be denied for not meeting the criteria and the review fee is gone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The exams now come first. The county&#8217;s <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/Forms\/exam_info_book_list.pdf\" rel=\"nofollow noopener\" target=\"_blank\">exam information sheet, revised 5 November 2025<\/a>, says you must pass before you apply: an application without proof of a passing score is incomplete and is not scheduled for the board. Contractors sit two exams, <strong>Business and Law<\/strong> and their <strong>trade exam<\/strong>, and need at least <strong>75% on each<\/strong>. Journeymen sit only the trade exam. Every exam must be taken in Palm Beach County through one of the two approved agencies, Prov or GITS, and the same sheet says a passing result stays valid indefinitely. The exam fee is commonly quoted at <strong>$80 per exam<\/strong>, but the vendor bulletin carrying that figure no longer loads, so confirm the price when you book.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The timing is important. The <a href=\"https:\/\/discover.pbc.gov\/pzb\/FAQPages\/Contractors-Certification.aspx\" rel=\"nofollow noopener\" target=\"_blank\">county FAQ<\/a> says a complete application must be filed by <strong>the first Friday of the month<\/strong> to be considered at that month&#8217;s board meeting. The board meets on the fourth Monday, holidays permitting, with the application workshop at 1 p.m. and the public meeting at 2 p.m., and it holds <strong>no meeting in November<\/strong>. The 2026 calendar printed in the <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/Forms\/CoC_App_Form.pdf\" rel=\"nofollow noopener\" target=\"_blank\">certificate of competency application package<\/a> puts the last two meetings of the year on 26 October and, pulled early for the holidays, 14 December.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The FAQ puts the whole process at <strong>30 to 90 days<\/strong>. If the board asks for more paperwork you have 45 days to supply it, and once approved you have 13 months to finish the remaining steps before the approval lapses. Credit is checked too. A FICO score of <strong>660 or higher<\/strong> meets the requirement, a score between <strong>580 and 659<\/strong> means passing a 14 hour financial responsibility course approved by the state board, and below 580 the application is administratively denied. The credit reports are valid for only 90 days, so order them last, not first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also a money test that most guides skip. The financial statement in the application must show a business net worth at or above a minimum set by trade, and at least half of it has to be cash on the closing balance of a current bank statement. The rest can be fixed assets.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Trade<\/th><th>Minimum business net worth<\/th><th>Of which cash, at least<\/th><\/tr><\/thead><tbody><tr><td>General, building and residential<\/td><td>$20,000<\/td><td>$10,000<\/td><\/tr><tr><td>Carpentry, demolition, electrical, HARV, plumbing, roofing, structural steel, swimming pool construction, underground utilities<\/td><td>$10,000<\/td><td>$5,000<\/td><\/tr><tr><td>Marine<\/td><td>$5,000<\/td><td>$2,500<\/td><\/tr><tr><td>All other specialty trades<\/td><td>$2,500<\/td><td>$1,250<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Source: net worth guideline per trade in the Palm Beach County certificate of competency application instructions, read 19 October 2026. The cash column applies the 50 percent rule.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Miss the first Friday and you wait a month. Miss it in October and, with no November meeting, plan on December.<\/strong><\/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\/palm-beach-contractors-license-3.jpg\" alt=\"Welder joining a steel beam on site, a structural steel category under the Palm Beach contractors license\" class=\"wp-image-176\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-3.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-3-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-3-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/palm-beach-contractors-license-3-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-element-caption\">Structural steel erection is one of the county&#8217;s own specialty categories.<\/figcaption><\/figure>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"palm-beach-licensing-checklist\" data-verb=\" completed\">\n<h3>Palm Beach County Contractor Application Checklist<\/h3>\n<p>Follow these steps to submit your application and pass your exams in Palm Beach County.<\/p>\n<label><input type=\"checkbox\">Select your trade category and verify the exact experience requirements<\/label>\n<label><input type=\"checkbox\">Complete a financial responsibility course if your credit score is between 580 and 659<\/label>\n<label><input type=\"checkbox\">Submit your completed application by 4 p.m. on the first Friday of the month<\/label>\n<label><input type=\"checkbox\">Pay the required application fee ($450 for contractors or $100 for journeymen)<\/label>\n<label><input type=\"checkbox\">Await the board review at the monthly meeting, usually held on the fourth Monday<\/label>\n<label><input type=\"checkbox\">Prepare for the timed, open book exams using the official reference books<\/label>\n<label><input type=\"checkbox\">Pass both the Business and Law and trade exams with a score of 75 percent or higher<\/label>\n<p class=\"msq-check-count\"><\/p>\n<p class=\"msq-note\">Ticks are saved on this device only.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-does-a-palm-beach-certificate-expire\">When does a Palm Beach certificate expire?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Everything expires on 30 September, but not everyone expires in the same year, and this is where generic licensing pages get it wrong. County contractors renew biennially in odd years. Journeymen, limited journeymen and limited contractors renew in even years. State licensees re-enrol with the county in even years. Renewal cards go out in late July or early August. The odd and even pattern comes from county documents whose worked examples are years old, so read the year printed on your own renewal card and confirm it with Contractor Regulations before the month turns.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Who you are<\/th><th>Renewal year<\/th><th>Deadline<\/th><th>14 hours of continuing education?<\/th><\/tr><\/thead><tbody><tr><td>County certified contractor<\/td><td>Odd years, so 2027 next<\/td><td>30 September<\/td><td>Yes, if renewing as active<\/td><\/tr><tr><td>Journeyman or limited journeyman<\/td><td>Even years, so 2026<\/td><td>30 September<\/td><td>No, excluded by the CILB rule<\/td><\/tr><tr><td>State licensee enrolled with the county<\/td><td>Even years, so 2026<\/td><td>30 September<\/td><td>Handled under the state cycle<\/td><\/tr><tr><td>The state license itself<\/td><td>Even years for certified, odd for registered<\/td><td>31 August<\/td><td>Yes, 14 hours<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Sources: Palm Beach County contractor certification FAQ and the county continuing education notice.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So 2026 was a journeyman year, and its deadline passed on 30 September 2026. If you hold a contractor certificate, yours is 30 September 2027. The <a href=\"https:\/\/discover.pbc.gov\/pzb\/PDF\/Continuing-Education-Requirement.pdf\" rel=\"nofollow noopener\" target=\"_blank\">county continuing education notice<\/a> puts the 14 hour requirement on county contractors renewing as active or reactivating an inactive certificate, taken from a CILB approved provider, effective with the September 2019 renewal. Journeymen and technicians are excluded. The hours are the same 14 the state asks for, so holding both licences does not mean doing the work twice: our breakdown of <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-continuing-education\/\">Florida contractor continuing education<\/a> covers which courses count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Missed the date? The card is not gone yet. Under the county&#8217;s <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/PDF\/SpecialAct_Ordinance_for_Website.pdf\" rel=\"nofollow noopener\" target=\"_blank\">Special Act<\/a>, a certificate that lapses for non renewal can be restored within 180 days after 30 September by paying the renewal fee plus late fees, and after that, until the next 30 September, a restoration fee applies on top. The fee schedule in the board&#8217;s <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/PDF\/rulesandregs.pdf\" rel=\"nofollow noopener\" target=\"_blank\">rules and regulations<\/a> sets renewal at <strong>$250<\/strong> for an active contractor certificate, $150 inactive and <strong>$50<\/strong> for a journeyman, with late renewal accruing every month at $25 for contractors and $5 for journeymen and technicians. Counting each month after September, a journeyman who renews in January pays $50 plus four months at $5, or $70. Ring Contractor Regulations for the exact figure, because the schedule does not say how a part month is counted.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"did-the-2021-state-law-end-county-specialty-licensing\">Did the 2021 state law end county specialty licensing?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Partly, and the county list still carries the scar tissue. <a href=\"https:\/\/www.flsenate.gov\/laws\/statutes\/2026\/489.117\" rel=\"nofollow noopener\" target=\"_blank\">Section 489.117(4) of the Florida Statutes<\/a> says a local government may not require a license for a job scope that does not substantially correspond to a state contractor category, and it names examples: painting, flooring, cabinetry, handyman services, pressure washing, caulking, stuccoing and plastering among them. Local governments could keep licensing veneer, gutters, siding, soffit, fascia and fence installation only where the requirement existed before 1 January 2021.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Look at what Palm Beach did. Its <a href=\"https:\/\/discover.pbc.gov\/pzb\/CodeCompliance\/Forms\/standards.pdf\" rel=\"nofollow noopener\" target=\"_blank\">Standards for Certified Categories<\/a> carry the date 1 July 2025, the day the state deadline arrived. The DBPR&#8217;s <a href=\"https:\/\/www2.myfloridalicense.com\/construction-industry\/hot-topics\/\" rel=\"nofollow noopener\" target=\"_blank\">hot topics page<\/a> says SB 1142 (2024) extended all local specialty contractor licensing until June 30, 2025, and that from July 1, 2025 local governments may only license specialty types that substantially correspond to the state board&#8217;s, or that section 489.117 lets them keep. <a href=\"https:\/\/colliercountyfl.qscend.com\/311\/knowledgebase\/article\/192284\" rel=\"nofollow noopener\" target=\"_blank\">Collier County<\/a> answered by dropping 24 local specialty licenses on that date. Palm Beach changed less. The same standards now carve gutters on single family dwellings out of the aluminum specialties scope, which reads exactly like a response to the statute, and fence survived, as the grandfather clause allows. Plastering, though, is still county specialty number 15, its scope unrevised since June 2014, and that scope covers plaster and stucco, while plastering and stuccoing are both on the statute&#8217;s list. We are not going to tell you the county is wrong, because it licenses under a Special Act and scope wording turns on detail a web page cannot settle. We will tell you to ring Contractor Regulations on 561-233-5525 and ask before you pay $450 for that one. For contrast, the county at the other end of the state trimmed hard: a <a href=\"https:\/\/passcontractorexam.com\/articles\/hillsborough-county-contractor-license\/\" target=\"_blank\" rel=\"noopener\">Hillsborough County contractor license<\/a> now covers just eight local specialty trades.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-people-who-have-sat-these-exams-actually-report\">What do people who have sat these exams actually report?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Palm Beach specific accounts are thin on the ground, so what follows is testimony about the Florida exams generally rather than evidence, and the county paper is a different paper. Across one r\/Contractor thread from 14 April 2026 carrying 44 comments, we read five first hand accounts.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The original poster, five years running jobs and crews, reported being caught out by the business and finance paper. Their diagnosis was time rather than content: open book only helps if you know where things live (<a href=\"https:\/\/www.reddit.com\/r\/Contractor\/comments\/1slcbud\/finally_getting_my_florida_gc_license_after_years\/\" rel=\"nofollow noopener\" target=\"_blank\">r\/Contractor, April 2026<\/a>).<\/li>\n\n\n\n<li>A replier the same day put it more bluntly, saying the time crunch is what gets everyone and that knowing the books matters more than knowing the content.<\/li>\n\n\n\n<li>A commenter on 15 and 17 April 2026 passed after taking a class and listed tactics: move on if a question takes more than a minute, tab the books by trade section, and expect blueprint reading to carry only a small share of the marks. They suggested a community college class rather than a commercial course.<\/li>\n\n\n\n<li>A contractor holding North and South Carolina licences said they had heard Florida was the hardest and found the tables of contents and indexes were what actually mattered.<\/li>\n\n\n\n<li>A comment added on 26 August 2026 repeated the navigation point and then named a prep company, so read that one as an advertisement as much as an account.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The accounts agree with the official guidance on one point and quietly contradict the marketing on another. They agree these are open book papers, which the county confirms. They disagree with the idea that the exam is mainly a knowledge test, and not one of the five said the content was too hard. Where they split is whether you need to buy a course at all. Our piece on <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-open-book\/\">what open book actually changes<\/a> is built around the same finding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is a harder record on the spending question. The Better Business Bureau file for Contractor Campus, Inc., a Florida contractor exam prep company, holds <a href=\"https:\/\/www.bbb.org\/us\/fl\/fort-myers\/profile\/business-school\/contractor-campus-inc-0653-90277956\/complaints\" rel=\"nofollow noopener\" target=\"_blank\">27 complaints over three years, 25 of them unanswered<\/a>. The complaints run from May to November 2024 and describe students losing access to courses they had paid for, in amounts from about $1,300 to over $3,000. One dated 19 November 2024 concerns a Florida glass and glazing course, which is one of the 23 Palm Beach specialty categories. The company closed in May 2024, and a competitor issued <a href=\"https:\/\/www.pr.com\/press-release\/911812\" rel=\"nofollow noopener\" target=\"_blank\">a press release offering to take on the stranded students<\/a>, which corroborates the closure from the other side. Buy the books. Be slower about buying the course.<\/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 Palm Beach County contractor exam open book?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes. The county exams are delivered by computer and are timed and open book, covering business and law plus your construction trade. You need a minimum grade of 75 percent on both parts. Open book is not a discount, because the clock runs while you search.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I use a Palm Beach certificate of competency in Broward or Miami Dade?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. A county certificate works inside the county that issued it. Some counties operate reciprocity, which needs a letter from the county that sponsored your original exam plus a fresh application to the county you are moving into. A state license avoids the question entirely.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How many trades does Palm Beach County license?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Thirty one categories as of the standards document updated on 1 July 2025: eight construction trades and 23 specialty trades. Higher counts circulating online appear to come from older lists, and two of the eight are journeyman categories that do not permit contracting.<\/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 for a Palm Beach journeyman card?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No. The county says the CILB rule excludes journeymen and technicians from the 14 hour requirement. County contractors renewing an active certificate do need the 14 hours from an approved provider, and the certificate is attached to the online portal renewal.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What happens if my application misses the first Friday deadline?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It rolls to the next board meeting rather than the next week, because applications are scheduled monthly. The board does not meet in November at all, so an application that misses the October deadline can sit until December. The county puts the full process at 30 to 90 days.<\/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 state licensed contractor need anything from Palm Beach County?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>You do not need a county certificate. The county FAQ still describes a $50 enrollment fee for state licensees, but the board\u2019s 2022 fee schedule marks that program as preempted by the state, so ask Contractor Regulations before paying. Insurance and a business tax receipt are separate requirements.<\/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\"><strong>What changed on 19 October 2026:<\/strong> the month with no board meeting is corrected from September to November and the processing time from 30 to 45 days to the county&#8217;s 30 to 90; the exam must now be passed before you apply; the $450 fee is shown as two $225 halves; credit score thresholds, a net worth table by trade, late renewal fees and the 180 day restoration window are added; the county enrollment fee is set against section 489.113(4)(a); the July 1, 2025 local licensing change is added; statute links now point to the 2026 Florida Statutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Rules and fees change without notice. This page was last rechecked on 19 October 2026 against the Palm Beach County standards dated 1 July 2025, the county exam sheet of 5 November 2025, the board&#8217;s rules and regulations of 25 April 2022, the county FAQ and the 2026 Florida Statutes. We are independent and not affiliated with, endorsed by or approved by the Florida DBPR or Palm Beach County. If you hit something different, tell us in the comments.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Palm Beach County certifies 31 contractor categories under its own Special Act. Which one covers your work, what it costs, when it renews, and when the state license is the better buy.<\/p>\n","protected":false},"author":1,"featured_media":188,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Palm Beach Contractors License: 31 Trades, County or State","rank_math_description":"A Palm Beach contractors license covers 31 county categories, not 49. Here is the current list, the fees, the renewal dates and the state alternative.","rank_math_focus_keyword":"palm beach contractors license","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-177","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\/177","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=177"}],"version-history":[{"count":14,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":696,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/177\/revisions\/696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media\/188"}],"wp:attachment":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media?parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/categories?post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/tags?post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}