{"id":129,"date":"2026-09-05T08:50:30","date_gmt":"2026-09-05T12:50:30","guid":{"rendered":"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/"},"modified":"2026-10-14T01:25:02","modified_gmt":"2026-10-14T05:25:02","slug":"miami-dade-contractor-registration","status":"publish","type":"post","link":"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/","title":{"rendered":"Miami Dade Contractor Registration: What the County Requires"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Miami Dade contractor registration depends on the license you already hold. A state certified contractor registers with the county voluntarily and for free, with no county exam. A state registered contractor, or anyone in a trade only the county licenses, such as fence, drywall or painting, first needs a county certificate of competency and its exam.<\/strong><\/p>\n\n\n\n<div class=\"msq-audio\" data-article=\"miami-dade-contractor-registration\" data-minutes=\"21\">\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\/miami-dade-contractor-registration\/#audio\",\"name\":\"Miami Dade Contractor Registration: What the County Requires, read aloud\",\"description\":\"Synthetic voice reading of the article, recorded 14 October 2026.\",\"contentUrl\":\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-audio-202610141054.mp3\",\"encodingFormat\":\"audio\/mpeg\",\"duration\":\"PT20M57S\",\"uploadDate\":\"2026-10-14\",\"inLanguage\":\"en-US\",\"isAccessibleForFree\":true,\"mainEntityOfPage\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/\",\"hasPart\":[{\"@type\":\"Clip\",\"name\":\"Miami Dade Contractor Registration: What the County Requires\",\"startOffset\":0,\"endOffset\":67},{\"@type\":\"Clip\",\"name\":\"Does Miami Dade really run its own contractor licensing?\",\"startOffset\":67,\"endOffset\":156,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#does-miami-dade-really-run-its-own-contractor-licensing\"},{\"@type\":\"Clip\",\"name\":\"Do I need a Miami Dade certificate if I hold a state certified license?\",\"startOffset\":156,\"endOffset\":293,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#do-i-need-a-miami-dade-certificate-if-i-hold-a-state-certifi\"},{\"@type\":\"Clip\",\"name\":\"What if my license is state registered rather than certified?\",\"startOffset\":293,\"endOffset\":449,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#what-if-my-license-is-state-registered-rather-than-certified\"},{\"@type\":\"Clip\",\"name\":\"Which trades does Miami Dade license that the state does not?\",\"startOffset\":449,\"endOffset\":517,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#which-trades-does-miami-dade-license-that-the-state-does-not\"},{\"@type\":\"Clip\",\"name\":\"What does a Miami Dade certificate cost and what does it take to get one?\",\"startOffset\":517,\"endOffset\":743,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#what-does-a-miami-dade-certificate-cost-and-what-does-it-tak\"},{\"@type\":\"Clip\",\"name\":\"How do you book the county exam, and how is it different from the state one?\",\"startOffset\":743,\"endOffset\":1019,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#how-do-you-book-the-county-exam-and-how-is-it-different\"},{\"@type\":\"Clip\",\"name\":\"What do the cities inside Miami Dade ask for on top?\",\"startOffset\":1019,\"endOffset\":1093,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#what-do-the-cities-inside-miami-dade-ask-for-on-top\"},{\"@type\":\"Clip\",\"name\":\"What has changed since this was first published?\",\"startOffset\":1093,\"endOffset\":1190,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#what-has-changed-since-this-was-first-published\"},{\"@type\":\"Clip\",\"name\":\"What could not be verified for this article?\",\"startOffset\":1190,\"endOffset\":1257,\"url\":\"https:\/\/passcontractorexam.com\/articles\/miami-dade-contractor-registration\/#what-could-not-be-verified-for-this-article\"}],\"contentSize\":\"8.8 MB\"}<\/script>\n<p class=\"msq-audio-lead\"><strong>Listen to this article<\/strong>, about 21 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\/miami-dade-contractor-registration-audio-202610141054.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: Miami Dade Contractor Registration: What the County Requires\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">0:00<\/span><a href=\"#top\">Miami Dade Contractor Registration: What the County Requires<\/a><\/li>\n<li data-start=\"66.54\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"66.54\" aria-label=\"Play from: Does Miami Dade really run its own contractor licensing?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">1:07<\/span><a href=\"#does-miami-dade-really-run-its-own-contractor-licensing\">Does Miami Dade really run its own contractor licensing?<\/a><\/li>\n<li data-start=\"155.72\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"155.72\" aria-label=\"Play from: Do I need a Miami Dade certificate if I hold a state certified license?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">2:36<\/span><a href=\"#do-i-need-a-miami-dade-certificate-if-i-hold-a-state-certifi\">Do I need a Miami Dade certificate if I hold a state certified license?<\/a><\/li>\n<li data-start=\"293.22\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"293.22\" aria-label=\"Play from: What if my license is state registered rather than certified?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">4:53<\/span><a href=\"#what-if-my-license-is-state-registered-rather-than-certified\">What if my license is state registered rather than certified?<\/a><\/li>\n<li data-start=\"449.12\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"449.12\" aria-label=\"Play from: Which trades does Miami Dade license that the state does not?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">7:29<\/span><a href=\"#which-trades-does-miami-dade-license-that-the-state-does-not\">Which trades does Miami Dade license that the state does not?<\/a><\/li>\n<li data-start=\"517.38\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"517.38\" aria-label=\"Play from: What does a Miami Dade certificate cost and what does it take to get one?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">8:37<\/span><a href=\"#what-does-a-miami-dade-certificate-cost-and-what-does-it-tak\">What does a Miami Dade certificate cost and what does it take to get one?<\/a><\/li>\n<li data-start=\"742.76\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"742.76\" aria-label=\"Play from: How do you book the county exam, and how is it different from the state one?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">12:23<\/span><a href=\"#how-do-you-book-the-county-exam-and-how-is-it-different\">How do you book the county exam, and how is it different from the state one?<\/a><\/li>\n<li data-start=\"1018.54\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"1018.54\" aria-label=\"Play from: What do the cities inside Miami Dade ask for on top?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">16:59<\/span><a href=\"#what-do-the-cities-inside-miami-dade-ask-for-on-top\">What do the cities inside Miami Dade ask for on top?<\/a><\/li>\n<li data-start=\"1093.4\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"1093.4\" aria-label=\"Play from: What has changed since this was first published?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">18:13<\/span><a href=\"#what-has-changed-since-this-was-first-published\">What has changed since this was first published?<\/a><\/li>\n<li data-start=\"1190.38\"><button type=\"button\" class=\"msq-toc-play\" data-start=\"1190.38\" aria-label=\"Play from: What could not be verified for this article?\">&#x25B6;&#xFE0E;<\/button><span class=\"msq-toc-time\">19:50<\/span><a href=\"#what-could-not-be-verified-for-this-article\">What could not be verified for this article?<\/a><\/li>\n<\/ol><\/nav>\n<p class=\"msq-audio-note\">Recorded 14 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\",\"miamidadecontractorregis\",52],[4.36,\"p\",\"miamidadecontractorregis\",64],[9.92,\"p\",\"astatecertifiedcontracto\",84],[16.56,\"p\",\"astateregisteredcontract\",141],[27.44,\"p\",\"onthispageabreakdownoflo\",151],[39.64,\"p\",\"mostoffloridahasonelayer\",45],[42.28,\"p\",\"miamidadehastwoandithash\",152],[53.12,\"p\",\"peoplearrivewithafreshst\",157],[62.52,\"p\",\"bothstoriesaretrueandbot\",37],[66.54,\"h\",\"doesmiamidadereallyrunit\",47],[70.42,\"p\",\"itdoes\",6],[71.02,\"p\",\"chapter10ofthemiamidadec\",210],[86.9,\"p\",\"thecertificatesareissued\",198],[102.02,\"p\",\"thecountyscontractorlice\",135],[112.62,\"p\",\"withinthosesitdozensofcl\",109],[121.3,\"p\",\"itevenhasitsownvocabular\",118],[129.78,\"p\",\"thecountycodealsosaystha\",126],[143.3,\"p\",\"sothetwolayersarenotalte\",32],[146.02,\"p\",\"acountycertificateleadst\",83],[151.74,\"p\",\"whichdirectionyoutraveld\",54],[155.72,\"h\",\"doineedamiamidadecertifi\",57],[159.48,\"p\",\"noandthisiswherethepopul\",50],[164.52,\"p\",\"section4891134aoftheflor\",245],[185.2,\"p\",\"nolocalexamnolocalcertif\",41],[189.04,\"p\",\"miamidadeagreesinwriting\",24],[191.04,\"p\",\"itsvoluntaryregistration\",247],[209.52,\"p\",\"theformsaysincapitallett\",61],[214.88,\"p\",\"itasksforacopyofthequali\",237],[238.32,\"p\",\"whybotherwithavoluntaryf\",27],[240.68,\"p\",\"becauseonceyouareintheco\",130],[248.92,\"p\",\"voluntaryinlawclosetocom\",41],[252.72,\"p\",\"theonepaiditemisthelocal\",85],[259.2,\"p\",\"section205065oftheflorid\",284],[283.8,\"p\",\"keepapermanentofficeorbr\",105],[293.22,\"h\",\"whatifmylicenseisstatere\",51],[297.22,\"p\",\"thenthecountycertificate\",54],[301.22,\"p\",\"section489117oftheflorid\",210],[318.22,\"p\",\"toberegisteredinthefirst\",111],[325.74,\"p\",\"inmiamidadethatmeansactq\",106],[335.54,\"p\",\"thistrapcatchespeoplefro\",39],[338.1,\"p\",\"abrowardregisteredcontra\",108],[346.9,\"p\",\"andamiamidadecertificate\",152],[356.58,\"p\",\"ifyouwantalicensethattra\",137],[364.02,\"t\",\"statecertifiedpassedthes\",252],[384.94,\"t\",\"stateregisteredbuiltonal\",230],[406.1,\"t\",\"miamidadecertificatehold\",231],[427.7,\"t\",\"workinginatradethestated\",213],[449.12,\"h\",\"whichtradesdoesmiamidade\",50],[452.08,\"p\",\"quiteafewandthisisthepar\",81],[457.08,\"p\",\"thecountysbuildingspecia\",77],[462.04,\"p\",\"someoverlapwithstatecate\",93],[469.64,\"p\",\"othershavenostateequival\",152],[480.96,\"p\",\"apassonthecountyexamis70\",87],[487.76,\"p\",\"paintingistheclearestexa\",28],[489.72,\"p\",\"inmostoffloridaapaintern\",121],[498.44,\"p\",\"inmiamidadepaintingandwa\",55],[503.32,\"p\",\"ithappenstobeoneofthecat\",180],[517.38,\"h\",\"whatdoesamiamidadecertif\",58],[521.22,\"p\",\"thefiguresbelowaretheone\",77],[526.62,\"p\",\"theyareapplicationfees\",22],[527.98,\"p\",\"therenewalfeeappearsonno\",67],[532.74,\"t\",\"journeymanapplicationand\",72],[540.7,\"t\",\"masterpersonalcertificat\",69],[548.38,\"t\",\"masterbusinesscertificat\",103],[558.62,\"t\",\"buildingspecialtyapplica\",102],[567.9,\"t\",\"voluntaryregistrationsta\",84],[576.98,\"t\",\"journeymanexperience\",113],[586.38,\"t\",\"journeymanpassmark\",68],[593.38,\"t\",\"masterandspecialtypassma\",67],[600.1,\"t\",\"continuingeducationperre\",65],[607.1,\"p\",\"themasterrouteneedstwoye\",142],[617.06,\"p\",\"apersonalcertificatecome\",95],[623.94,\"p\",\"insuranceproofisdueafter\",58],[627.26,\"p\",\"twofeebreaksarewrittenon\",57],[630.9,\"p\",\"theinitialapplicationfee\",189],[645.18,\"p\",\"thepenaltyrunstheotherwa\",182],[658.3,\"p\",\"thecountysrenewalpagesay\",197],[672.3,\"p\",\"onegenuinelynicetouchaqu\",143],[683.62,\"p\",\"anearlierversionofthispa\",98],[691.82,\"p\",\"recheckedon14october2026\",229],[710.42,\"p\",\"sothedateisgonefromthisp\",27],[713.02,\"p\",\"whattherenewalpagedoessa\",166],[726.86,\"p\",\"yourownexpirydateisprint\",79],[731.9,\"p\",\"thecountyrenewalsitsalon\",139],[742.76,\"h\",\"howdoyoubookthecountyexa\",59],[746.4,\"p\",\"applicationsgotocontract\",114],[756.68,\"p\",\"thecountyofferstheformsa\",82],[763.56,\"p\",\"accordingtothecountyscon\",133],[772.88,\"p\",\"examsrunseveraltimesamon\",118],[781.52,\"p\",\"theexamsarewrittenanddel\",127],[789.6,\"p\",\"theprovcandidateinformat\",153],[806.4,\"p\",\"italsosayswithoutsofteni\",121],[814.68,\"p\",\"thecountydoessogettheexa\",64],[818.64,\"t\",\"whorunsit\",203],[842.12,\"t\",\"businessexam\",223],[864.6,\"t\",\"passmark\",145],[880.12,\"t\",\"markingyourbooks\",185],[898.08,\"t\",\"whatisbannedinthebook\",195],[916.72,\"t\",\"sittingitagain\",222],[941.88,\"t\",\"seeingwhatyougotwrong\",155],[957.28,\"p\",\"thebusinessexamrowistheo\",43],[960.52,\"p\",\"thecountysbusinessproced\",205],[976.32,\"p\",\"afloridacandidatewhohasa\",99],[983.04,\"p\",\"thestatesideoftheretaker\",123],[995.2,\"p\",\"onesmallhonestyprizegoes\",37],[997.76,\"p\",\"itsaysplainlythatbuyings\",98],[1005.84,\"p\",\"thatisstillmorecandidtha\",74],[1010.36,\"p\",\"theprovdocumentsarethene\",113],[1018.54,\"h\",\"whatdothecitiesinsidemia\",41],[1022.02,\"p\",\"thecountycertificateorst\",92],[1028.74,\"p\",\"thecitiesruntheirownperm\",87],[1035.14,\"p\",\"southmiamitotakeonepubli\",349],[1056.22,\"p\",\"homesteadpublishesaregis\",98],[1063.46,\"p\",\"expectaversionofthisinev\",47],[1067.18,\"p\",\"noneofitisanexamandnoneo\",142],[1076.14,\"p\",\"ifyourambitionsincludeth\",245],[1093.4,\"h\",\"whathaschangedsincethisw\",40],[1095.88,\"p\",\"asofseptember2026thecoun\",281],[1120.84,\"p\",\"newlyconfirmedon27septem\",180],[1138.24,\"p\",\"stillunconfirmedon27sept\",122],[1148.48,\"p\",\"contractorlicensingpubli\",97],[1160.28,\"p\",\"correctedon14october2026\",149],[1172.96,\"p\",\"addedthesamedaythecounty\",199],[1190.38,\"h\",\"whatcouldnotbeverifiedfo\",36],[1192.38,\"p\",\"thetwolayerstructurethef\",226],[1210.3,\"p\",\"thosepartsaresolid\",18],[1211.66,\"p\",\"threethingsarelesscertai\",25],[1213.14,\"p\",\"therenewalfeeindollarsap\",57],[1216.98,\"p\",\"theinsuranceminimumsforc\",320],[1244.1,\"p\",\"andthecountyexamformatsa\",164]];\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 local contractor registration fees, a comparison table of state and county license requirements, and a step by step checklist for voluntary registration.<\/p>\n\n\n\n<div class=\"msq\" id=\"ms-quiz\" data-slug=\"miami-dade-contractor-registration\" 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=\"Does Miami Dade really run its own contractor licensing?\" data-section=\"#does-miami-dade-really-run-its-own-contractor-licensing\">\n<p class=\"msq-question\">1. Which local body in Miami Dade County is responsible for issuing contractor certificates of competency?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 1 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">The Miami Dade Building Department<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">The Construction Trades Qualifying Board<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">The Florida Department of Business and Professional Regulation<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>According to the <a href=\"https:\/\/library.municode.com\/fl\/miami_-_dade_county\/codes\/code_of_ordinances?nodeId=PTIIICOOR_CH10CO\" target=\"_blank\" rel=\"noopener\">Miami Dade County Code<\/a>, certificates of competency are issued by the Construction Trades Qualifying Board. <a class=\"msq-section\" href=\"#does-miami-dade-really-run-its-own-contractor-licensing\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"2\" data-answer=\"c\" data-title=\"Do I need a Miami Dade certificate if I hold a state certified license?\" data-section=\"#do-i-need-a-miami-dade-certificate-if-i-hold-a-state-certifi\">\n<p class=\"msq-question\">2. What does the county charge state certified contractors for voluntary registration?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 2 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">A fee of 315 dollars<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">A fee of 150 dollars<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">No fee is required<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/www.miamidade.gov\/building\/library\/forms\/voluntary-registration-app.pdf\" target=\"_blank\" rel=\"noopener\">voluntary registration form for state certified contractors<\/a> explicitly states that no fee is required for this registration. <a class=\"msq-section\" href=\"#do-i-need-a-miami-dade-certificate-if-i-hold-a-state-certifi\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"3\" data-answer=\"a\" data-title=\"What if my license is state registered rather than certified?\" data-section=\"#what-if-my-license-is-state-registered-rather-than-certified\">\n<p class=\"msq-question\">3. What is a major limitation for a contractor who holds only a state registered license?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 3 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">They can only work in the specific counties or districts where they have met local licensing requirements<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">They must pay double the state registration fees every year<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">They are completely barred from pulling permits in unincorporated areas<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>Under <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&amp;URL=0400-0499\/0489\/Sections\/0489.117.html\" target=\"_blank\" rel=\"noopener\">489.117 of the Florida Statutes<\/a>, a registered contractor may work only in the counties, municipalities, or districts where they have complied with local licensing requirements. <a class=\"msq-section\" href=\"#what-if-my-license-is-state-registered-rather-than-certified\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"4\" data-answer=\"b\" data-title=\"Which trades does Miami Dade license that the state does not?\" data-section=\"#which-trades-does-miami-dade-license-that-the-state-does-not\">\n<p class=\"msq-question\">4. Which of the following trades requires a local specialty license in Miami Dade but has no state license equivalent?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 4 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">Roofing<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">Painting and waterproofing<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">Commercial pool construction<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>As shown on the <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1677270526169670\" target=\"_blank\" rel=\"noopener\">building specialty licenses page<\/a>, painting and waterproofing is a licensed specialty in Miami Dade with no state equivalent. <a class=\"msq-section\" href=\"#which-trades-does-miami-dade-license-that-the-state-does-not\">Read the section<\/a><\/p>\n<\/li>\n<li class=\"msq-q\" data-q=\"5\" data-answer=\"b\" data-title=\"What does a Miami Dade certificate cost and what does it take to get one?\" data-section=\"#what-does-a-miami-dade-certificate-cost-and-what-does-it-tak\">\n<p class=\"msq-question\">5. How many hours of continuing education are required per renewal cycle for a Miami Dade contractor certificate?<\/p>\n<div class=\"msq-options\" role=\"group\" aria-label=\"Question 5 options\"><button type=\"button\" class=\"msq-opt\" data-opt=\"a\">14 hours<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"b\">16 hours<\/button><button type=\"button\" class=\"msq-opt\" data-opt=\"c\">24 hours<\/button><\/div>\n<p class=\"msq-explain\" hidden><span class=\"msq-verdict\"><\/span>The <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1552937848034908\" target=\"_blank\" rel=\"noopener\">renewal page<\/a> states that certificate holders must complete 16 hours of continuing education. <a class=\"msq-section\" href=\"#what-does-a-miami-dade-certificate-cost-and-what-does-it-tak\">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<p class=\"wp-block-paragraph\">Most of Florida has one layer of contractor licensing. Miami Dade has two, and it has had them since before the state system existed, which is why the county code still talks about occupational licenses and the county still runs its own exams. People arrive with a fresh state license and are told at the permit counter that they need something else, or arrive with a county certificate and are told it means nothing in Fort Lauderdale. Both stories are true, and both are avoidable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"does-miami-dade-really-run-its-own-contractor-licensing\">Does Miami Dade really run its own contractor licensing?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It does. Chapter 10 of the <a href=\"https:\/\/library.municode.com\/fl\/miami_-_dade_county\/codes\/code_of_ordinances?nodeId=PTIIICOOR_CH10CO\" target=\"_blank\" rel=\"noopener\">Miami Dade County Code<\/a> requires anyone who works at a trade, engages in business or contracts for work as a contractor in the county to hold a certificate of competency in the right classification, and a local license where one is required. The certificates are issued by the Construction Trades Qualifying Board, usually shortened to CTQB, and administered by the Contractor Licensing Section of the Department of Regulatory and Economic Resources, which everyone calls RER.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1677272391446892\" target=\"_blank\" rel=\"noopener\">contractor licensing page<\/a> lists six license types under the board: Building, Building Specialties, Electrical, Maintenance, Mechanical and Plumbing. Within those sit dozens of classifications, each with its own scope of work, its own experience requirement and, for most, its own exam. It even has its own vocabulary: certificate of competency where the state says license, journeyman and master where the state has no such split.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The county code also says that holders of county certificates must be registered with the state under section 489.115 or 489.513 of the Florida Statutes. So the two layers are not alternatives. A county certificate leads to a state registration, and a state certification skips the county exam. Which direction you travel depends on the license you start with.<\/p>\n<\/blockquote>\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\/miami-dade-contractor-registration-2.jpg\" alt=\"Hands signing a registration form beside a laptop, the paperwork for Miami Dade contractor registration\" class=\"wp-image-127\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-2.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-2-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-2-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-2-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-block-image__caption\">For a state certified contractor the county registration form is voluntary, and free.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"do-i-need-a-miami-dade-certificate-if-i-hold-a-state-certifi\">Do I need a Miami Dade certificate if I hold a state certified license?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No, and this is where the popular version of the story is wrong. Section <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&amp;URL=0400-0499\/0489\/Sections\/0489.113.html\" target=\"_blank\" rel=\"noopener\">489.113(4)(a) of the Florida Statutes<\/a> says that a certificate holder who wants to contract anywhere in the state is required only to show the local building official or tax collector evidence of a current certificate, and to pay the same occupational license and permit fees as everyone else. No local exam, no local certificate of competency.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Miami Dade agrees, in writing. Its <a href=\"https:\/\/www.miamidade.gov\/building\/library\/forms\/voluntary-registration-app.pdf\" target=\"_blank\" rel=\"noopener\">voluntary registration form for state certified contractors<\/a> states that although no ordinance or statute mandates registration with the local jurisdiction, RER offers a voluntary process that makes it easier for state contractors working in unincorporated Miami Dade to obtain permits. The form says, in capital letters, that no fee is required for registration. It asks for a copy of the qualifying agent&#8217;s driver&#8217;s license, a copy of the state certified license or temporary authorization letter, and a certificate of insurance for general liability and workers&#8217; compensation, or the exemption, made out to RER at 11805 SW 26 Street, Room 207, Miami 33175.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why bother with a voluntary form? Because once you are in the county system the permit clerk verifies your license and insurance on screen instead of asking for the paperwork on every permit. Voluntary in law, close to compulsory in practice. The one paid item is the local business tax receipt, which the form still calls an occupational license. Section <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&amp;URL=0200-0299\/0205\/Sections\/0205.065.html\" target=\"_blank\" rel=\"noopener\">205.065 of the Florida Statutes<\/a> narrows even that: once a DBPR regulated business has paid the current year&#8217;s business tax where its permanent business location or branch office is, no other county or city may charge it a business tax, or an equivalent registration or regulatory fee, for work done there on a temporary or transitory basis. Keep a permanent office or branch inside Miami Dade, though, and that office is a business location the exemption does not reach.<\/p>\n\n\n\n<div class=\"msq-tool msq-check\" data-id=\"miami-dade-registration-checklist\" data-verb=\" completed\">\n<h3>Voluntary Registration Checklist<\/h3>\n<p>If you are a state certified contractor, complete these steps to register with Miami Dade County and streamline your permitting process.<\/p>\n<label><input type=\"checkbox\">Copy of the qualifying agent&#8217;s driver&#8217;s license<\/label>\n<label><input type=\"checkbox\">Copy of the state certified license or temporary authorization letter<\/label>\n<label><input type=\"checkbox\">Certificate of general liability insurance made out to RER<\/label>\n<label><input type=\"checkbox\">Certificate of workers&#8217; compensation insurance or state exemption<\/label>\n<label><input type=\"checkbox\">Local business tax receipt or proof of exemption from another Florida county<\/label>\n<label><input type=\"checkbox\">Submit the completed registration form and documents to RER<\/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=\"what-if-my-license-is-state-registered-rather-than-certified\">What if my license is state registered rather than certified?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Then the county certificate is not optional, it is the foundation. Section <a href=\"http:\/\/www.leg.state.fl.us\/statutes\/index.cfm?App_mode=Display_Statute&amp;URL=0400-0499\/0489\/Sections\/0489.117.html\" target=\"_blank\" rel=\"noopener\">489.117 of the Florida Statutes<\/a> says a registered contractor may work only in the counties, municipalities or districts where he or she has complied with all local licensing requirements, and only for the type of work covered by the registration. To be registered in the first place you file evidence of having passed the local exam and licensing requirements for the area you want. In Miami Dade that means a CTQB certificate of competency, obtained by the county&#8217;s own exam, then a state registration built on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This trap catches people from both directions. A Broward registered contractor cannot simply cross the county line, because the registration is tied to Broward&#8217;s local license. And a Miami Dade certificate holder who has not filed the state registration is not lawfully contracting either; the county says the result is a restriction of permitting privileges. If you want a license that travels, the certified route through the state exams is the one that does, and we cover it in <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-requirements\/\">the full Florida license requirements checklist<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Your license<\/th><th>Miami Dade certificate needed?<\/th><th>What the county wants to see<\/th><th>Where you can work<\/th><\/tr><\/thead><tbody><tr><td>State certified (passed the state exams)<\/td><td>No. Registration with RER is voluntary and free<\/td><td>State license, driver&#8217;s license, insurance certificate, local business tax receipt<\/td><td>Anywhere in Florida, subject to each local permit office<\/td><\/tr><tr><td>State registered (built on a local license elsewhere)<\/td><td>Yes, through the county&#8217;s own exam and application<\/td><td>CTQB certificate, then a state registration under 489.117<\/td><td>Only where your local licenses are held<\/td><\/tr><tr><td>Miami Dade certificate holder, no state paperwork yet<\/td><td>Already held<\/td><td>State registration under 489.115 or 489.513, or permits are restricted<\/td><td>Miami Dade, plus any jurisdiction that accepts the certificate<\/td><\/tr><tr><td>Working in a trade the state does not license<\/td><td>Yes. The county certificate is the only license<\/td><td>Experience proof, exam where required, insurance, $315 application fee<\/td><td>Miami Dade County<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-trades-does-miami-dade-license-that-the-state-does-not\">Which trades does Miami Dade license that the state does not?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quite a few, and this is the part that surprises contractors moving down from elsewhere in Florida. The county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1677270526169670\" target=\"_blank\" rel=\"noopener\">building specialty licenses page<\/a> lists more than twenty specialty categories. Some overlap with state categories, roofing and swimming pool among them, so a state certified roofer is covered. Others have no state equivalent that we could find: fence, drywall, lathing and plastering, screen enclosure, storm shutter, painting and waterproofing, and door contractors among them. A pass on the county exam is 70 percent, and experience requirements run from one to five years by category.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Painting is the clearest example. In most of Florida a painter needs no contractor license of any kind, which is why it appears in our piece on <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-handyman-requirements\/\">what you can legally do without a license<\/a>. In Miami Dade, painting and waterproofing is a licensed specialty. It happens to be one of the categories that does not require an exam, but it does require an application, proof of experience, insurance and, the page says, 16 hours of continuing education before the certificate is issued.<\/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\/miami-dade-contractor-registration-3.jpg\" alt=\"Worker in gloves cutting drywall on site, a trade Miami Dade licenses that Florida does not\" class=\"wp-image-128\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-3.jpg 1200w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-3-300x157.jpg 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-3-1024x535.jpg 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/09\/miami-dade-contractor-registration-3-768x401.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><figcaption class=\"wp-block-image__caption\">Drywall, fence and painting are licensed specialties in Miami Dade with no state equivalent.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-a-miami-dade-certificate-cost-and-what-does-it-tak\">What does a Miami Dade certificate cost and what does it take to get one?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The figures below are the ones stated on the county&#8217;s own licensing pages on the day of writing. They are application fees. The renewal fee appears on no official page we could reach, so it is not stated here.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Item<\/th><th>Figure<\/th><th>Source<\/th><\/tr><\/thead><tbody><tr><td>Journeyman application and exam<\/td><td>$240<\/td><td>County contractor licensing page<\/td><\/tr><tr><td>Master personal certificate<\/td><td>$315<\/td><td>County contractor licensing page<\/td><\/tr><tr><td>Master business certificate<\/td><td>$315 in addition to the personal certificate<\/td><td>County contractor licensing page<\/td><\/tr><tr><td>Building specialty application<\/td><td>$315, due when the application is submitted<\/td><td>County building specialty page<\/td><\/tr><tr><td>Voluntary registration, state certified contractor<\/td><td>No fee<\/td><td>County registration form<\/td><\/tr><tr><td>Journeyman experience<\/td><td>Three years in the trade, or equivalent education for up to half<\/td><td>County contractor licensing page<\/td><\/tr><tr><td>Journeyman pass mark<\/td><td>75 percent<\/td><td>County contractor licensing page<\/td><\/tr><tr><td>Master and specialty pass mark<\/td><td>70 percent<\/td><td>County licensing pages<\/td><\/tr><tr><td>Continuing education per renewal<\/td><td>16 hours<\/td><td>County renewal page<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The master route needs two years as a journeyman plus two years of prior field experience, or six years of specialised training, or registration as a professional engineer. A personal certificate comes first; only then can you qualify a business, for which the county wants a credit report. Insurance proof is due after board approval, not with the application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two fee breaks are written on the county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1677272391446892\" target=\"_blank\" rel=\"noopener\">contractor licensing page<\/a>. The initial application fee is waived for an honorably discharged veteran who applies within 24 months of discharge, and a holder who goes inactive for active military duty pays no renewal fees until six months after discharge. The penalty runs the other way too: a certificate allowed to become null and void is reinstated only with the renewal fees plus eight classroom hours of continuing education for every year it sat involuntarily inactive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1552937848034908\" target=\"_blank\" rel=\"noopener\">renewal page<\/a> says a notice arrives two months before expiry, that each holder needs 16 hours of continuing education, and that business license holders must present current liability and workers&#8217; compensation certificates. One genuinely nice touch: a qualifying agent aged 65 or over who has held the certificate for 20 years with no violations renews at no cost and skips the continuing education. An earlier version of this page repeated a 30 September expiry date that turned up in county documents through search. Rechecked on 14 October 2026, the only county material we could find tying that date to a certificate of competency sits with product approvals: the county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/building\/library\/notices\/competency-certificate.pdf\" target=\"_blank\" rel=\"noopener\">Product Control Division<\/a> issues its own certificates of competency to building product companies, not to contractors. So the date is gone from this page. What the renewal page does say, read on 27 September 2026, is that certificates renew generally every two years, and that no continuing education is due for the term in which a certificate is first issued. Your own expiry date is printed on your certificate and shows in the county&#8217;s contractor search. The county renewal sits alongside the state one if you hold both, and <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-license-renewal\/\">how Florida contractor license renewal works at state level<\/a> covers the other half of that calendar.<\/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\/miami-dade-contractor-registration-chart.png\" alt=\"Bar chart comparing application fees for journeyman and master certificates.\" class=\"wp-image-597\" srcset=\"https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-chart.png 1600w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-chart-300x169.png 300w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-chart-1024x576.png 1024w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-chart-768x432.png 768w, https:\/\/passcontractorexam.com\/articles\/wp-content\/uploads\/2026\/10\/miami-dade-contractor-registration-chart-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-block-image__caption\">Source: Miami Dade County contractor licensing and building specialty pages.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-book-the-county-exam-and-how-is-it-different\">How do you book the county exam, and how is it different from the state one?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Applications go to Contractor Licensing at the Herbert S. Saffir Permitting and Inspection Center, 11805 SW 26 Street, by mail or in person. The county offers the forms as PDFs; its only online services are renewal and the contractor search. According to the county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/service.page?Mduid_service=ser1562964145448942\" target=\"_blank\" rel=\"noopener\">contractor examinations page<\/a>, the board reviews your application first, and only once it approves do you get instructions for booking. Exams run several times a month, the deadline to apply is approximately four weeks before the exam date, and the tests come in English or Spanish.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The exams are written and delivered by Prov, Inc., a private testing company, not by the Professional Testing and Pearson VUE pairing behind the state exams. The <a href=\"https:\/\/www.miamidade.gov\/resources\/economy\/building\/documents\/candidate-information-bulletin.pdf\" target=\"_blank\" rel=\"noopener\">Prov candidate information bulletin<\/a> that the county links to, dated 15 June 2023, has you book at scheduler.provexam.com or on 801 733 4455 and lists 34 Prov testing centres in Florida. It also says, without softening it, that a candidate who sits the wrong test does not get the fee back, and that Prov does not decide which test you need. The county does, so get the exam name from Contractor Licensing before you pay.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Rule<\/th><th>Miami Dade county exam<\/th><th>State certification exam<\/th><th>Sources<\/th><\/tr><\/thead><tbody><tr><td>Who runs it<\/td><td>Prov, Inc., booked online or by phone after the board approves you<\/td><td>Professional Testing approves, Pearson VUE schedules<\/td><td>Prov bulletin, June 2023; DBPR candidate booklet, July 2024<\/td><\/tr><tr><td>Business exam<\/td><td>Business Procedures: 75 questions in 3 hours, about 2.4 minutes each<\/td><td>Business and Finance: 120 scored questions in 6.5 hours, about 3.25 minutes each<\/td><td>Prov exam descriptions, 2022; DBPR candidate booklet<\/td><\/tr><tr><td>Pass mark<\/td><td>70 percent, or 75 percent for journeyman exams<\/td><td>70 percent<\/td><td>County examinations page; DBPR candidate booklet<\/td><\/tr><tr><td>Marking your books<\/td><td>Highlighting, underlining in ink and permanent tabs only<\/td><td>Permanent tabs, highlighting and underlining<\/td><td>Prov bulletin; DBPR 2026 reference lists<\/td><\/tr><tr><td>What is banned in the book<\/td><td>Pencil notes unless the county allows them, movable tabs, Post-it notes, photocopies, study guides<\/td><td>Written notes<\/td><td>Prov bulletin; DBPR 2026 reference lists<\/td><\/tr><tr><td>Sitting it again<\/td><td>Two days between attempts at Prov; the county&#8217;s own rules decide eligibility<\/td><td>No waiting period; the retake application must reach the vendor 30 days before the exam<\/td><td>Prov bulletin; rule 61G4-16.009<\/td><\/tr><tr><td>Seeing what you got wrong<\/td><td>A 90 minute review of missed questions for $80 per exam<\/td><td>Review available; not compared here<\/td><td>Prov bulletin<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The business exam row is the one worth reading twice. The county&#8217;s Business Procedures paper, per the <a href=\"https:\/\/www.miamidade.gov\/building\/library\/notices\/exam-descriptions.pdf\" target=\"_blank\" rel=\"noopener\">Prov exam descriptions<\/a>, gives you less time per question than the state&#8217;s Business and Finance exam, and 5 of its 75 questions come from Chapter 10 of the county code itself, a book no state candidate opens. A Florida candidate who has already tabbed the state references for <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-format\/\">the state exam format<\/a> still has a county book to tab. The state side of the retake row comes from <a href=\"https:\/\/www.flrules.org\/gateway\/ruleNo.asp?id=61G4-16.009\" target=\"_blank\" rel=\"noopener\">rule 61G4-16.009<\/a>, and the state marking rules are set out in <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-contractor-exam-tabs-highlighting-notes\/\">what you can tab, highlight and write in your books<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One small honesty prize goes to the bulletin. It says plainly that buying study materials is not mandatory, then a page later offers its own practice exams at $25 each. That is still more candid than the prep course banner promising nobody passes without it. The Prov documents are the newest the county links to; if the county has issued newer ones, its examinations page is where they will appear.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-do-the-cities-inside-miami-dade-ask-for-on-top\">What do the cities inside Miami Dade ask for on top?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The county certificate or state license gets you past RER, which handles permits in unincorporated Miami Dade. The cities run their own permit counters and their own contractor registration desks, and each has a list. <a href=\"https:\/\/www.somifl.gov\/122\/Contractor-Requirements\" target=\"_blank\" rel=\"noopener\">South Miami<\/a>, to take one published example, asks a state certified contractor for the state license and the county local business tax receipt, asks a county certified contractor for the certificate of competency and the same tax receipt, and asks everyone for a certificate of general liability insurance naming the city as certificate holder, with workers&#8217; compensation on it or a state exemption certificate alongside.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Homestead publishes a registration form of its own, adding a Miami Dade municipal contractor&#8217;s tax receipt to the list. Expect a version of this in every city you pull a permit in. None of it is an exam and none of it is expensive, but it is a morning of paperwork per city, better done before the client is standing on the driveway asking when the work starts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your ambitions include the trades the county licenses under the state categories, <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-general-contractor-license\/\">how to get a Florida general contractor license<\/a> and <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-electrical-contractor-license\/\">the electrical contractor license<\/a> both explain the state exams involved, and <a href=\"https:\/\/passcontractorexam.com\/articles\/florida-roofing-license\/\">the Florida roofing license<\/a> covers the trade Miami Dade weather makes busiest.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-has-changed-since-this-was-first-published\">What has changed since this was first published?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As of September 2026 the county fees are unchanged: $240 for the journeyman application and exam, $315 for the master personal certificate and $315 more for the business certificate, with pass marks of 75 and 70 percent, per the county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1677272391446892\" target=\"_blank\" rel=\"noopener\">contractor licensing page<\/a>, read on 27 September 2026 and matching the figures first published on 5 September.<\/li>\n\n<li>Newly confirmed on 27 September 2026: the $300,000 and $50,000 liability minimums, now traced to a municipal government page rather than prep company sites, and the two year renewal cycle, stated on the county&#8217;s <a href=\"https:\/\/www.miamidade.gov\/global\/license.page?Mduid_license=lic1552937848034908\" target=\"_blank\" rel=\"noopener\">renewal page<\/a>.<\/li>\n\n<li>Still unconfirmed on 27 September 2026: the renewal fee in dollars, which the renewal page asks for without stating, and the certificate expiry date. Contractor Licensing publishes 786 315 2880 as its number, and a phone call settles both faster than any web page does.<\/li>\n\n<li>Corrected on 14 October 2026: the 30 September expiry date was removed, because the only county source for it concerns product approval certificates, not contractor certificates. Added the same day: the county exam route through Prov, Inc. and a rule by rule comparison with the state exam, the veteran fee waiver and reinstatement hours from the county licensing page, and the exact business tax exemption in section 205.065.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-could-not-be-verified-for-this-article\">What could not be verified for this article?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The two layer structure, the free and voluntary status of state certified registration, the fees, pass marks and experience requirements were read from Miami Dade&#8217;s own pages and forms, and the statutory position from sections 489.113 and 489.117 on the Legislature&#8217;s own site. Those parts are solid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three things are less certain. The renewal fee in dollars appears on no official page we could reach. The insurance minimums for county certificate holders, $300,000 per occurrence for bodily injury and $50,000 for property damage, were first found only on prep company sites; since 27 September 2026 they are confirmed on a government page, the <a href=\"https:\/\/www.miamibeachfl.gov\/city-hall\/building\/contractors\/\" target=\"_blank\" rel=\"noopener\">City of Miami Beach contractor requirements<\/a>, which lists them for Miami Dade licensed contractors, though still not on a county page we could reach. And the county exam formats and rules in the comparison table come from Prov documents dated 2022 and June 2023, the newest the county links to, so check the bulletin you receive with your application.<\/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 \">Do I need a Miami Dade license if I have a Florida state contractor license?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>If the state license is certified, no. Under section 489.113(4)(a) you need only show the local building official evidence of your current certificate and pay the ordinary local business tax and permit fees. Miami Dade offers a free voluntary registration with RER to speed up permits. If the state license is registered rather than certified, you need the county certificate of competency first.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What is a Miami Dade certificate of competency?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It is the county&#8217;s own contractor license, issued by the Construction Trades Qualifying Board under Chapter 10 of the county code. It comes in personal and business forms, is limited to the scope of the classification it names, and for most classifications requires the county&#8217;s own exam. Holders must also register with the state under section 489.115 or 489.513.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How much does Miami Dade contractor registration cost?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Voluntary registration of a state certified contractor is free, according to the county&#8217;s own form. County certificates carry application fees of $240 for a journeyman exam and application, $315 for a master personal certificate, a further $315 for a business certificate, and $315 for a building specialty application. The renewal fee is not published on the pages we could reach.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Which trades need a Miami Dade license but no Florida state license?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Fence, drywall, lathing and plastering, screen enclosure, metal awning and storm shutter, painting and waterproofing, door, and garage and industrial door contracting all appear on the county&#8217;s building specialty list and have no state equivalent that we could find. Some, such as painting, need no exam but still need an application, experience, insurance and 16 hours of continuing education before issue.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I use a Broward or Palm Beach certificate in Miami Dade?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Possibly. The county page describes a reciprocity route from Broward and Palm Beach in specific trades, with a 75 percent pass required at journeyman level and 70 percent in the other reciprocal categories. The trades are not listed on the page, so call the Contractor Licensing Section on 786-315-2880 to check yours before relying on it.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-q-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do the cities inside Miami Dade require anything extra?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Yes, paperwork rather than exams. South Miami, for example, asks state certified contractors for the state license and the county local business tax receipt, asks county certified contractors for the certificate of competency and the same receipt, and asks everyone for a liability insurance certificate naming the city, with workers&#8217; compensation or a state exemption. Expect a similar list at every city permit counter.<\/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 regularly. If you hit something different, tell us in the comments.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Miami Dade runs its own contractor licensing next to the state&#8217;s. Who needs a county certificate of competency, who registers for free, what it costs and what the cities add.<\/p>\n","protected":false},"author":1,"featured_media":126,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","rank_math_title":"Miami Dade Contractor Registration: What the County Requires","rank_math_description":"Miami Dade contractor registration is free and voluntary for state certified contractors. Registered licenses and county only trades need a county exam.","rank_math_focus_keyword":"miami dade contractor registration","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-129","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\/129","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=129"}],"version-history":[{"count":6,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/129\/revisions"}],"predecessor-version":[{"id":659,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/posts\/129\/revisions\/659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media\/126"}],"wp:attachment":[{"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/media?parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/categories?post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/passcontractorexam.com\/articles\/wp-json\/wp\/v2\/tags?post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}