Why Roofing Has the Most Complex Licensing Landscape of Any Trade
Electrical, plumbing, and HVAC licensing are complex but follow predictable patterns: most states have a dedicated licensing board, a defined exam, and a tiered credential structure. Roofing is categorically different. There is no national standard. There is no consistent state-level framework. Individual states have independently decided whether roofing is a specialty trade requiring its own license, a subset of general contracting covered by a GC license, or essentially unregulated at the state level - with only local jurisdictions filling the gap.
This fragmentation exists because roofing sits at an intersection of trades that states have historically categorized differently. Some states treat roofing as structural work (covered by GC licensing). Others treat it as a specialty trade in its own right. A few states passed roofing-specific licensing laws only after high-profile contractor fraud scandals following major storm events. The result is a map where adjacent states can have radically different requirements, and where a contractor who is fully licensed in one state may have zero credential requirements when crossing the border.
For platforms operating nationally, this creates a verification problem with no single answer. The logic for "is this roofing contractor licensed?" must branch differently based on the state where the work occurs - and in some states, based on the city or county.
Three Categories of State Roofing Regulation
Category 1 - Dedicated Roofing License Required
These states have created a specific roofing contractor credential - separate from a general contractor license - that is required before a company can legally contract for roofing work. Florida is the clearest example, with its CCC (Certified Roofing Contractor) license issued by the DBPR. Louisiana, Maryland, and Oregon also fall here. These states typically require a written exam covering roofing-specific knowledge, a bond specific to roofing contractor activity, and separate insurance minimums.
Category 2 - GC License Covers Roofing
These states have a general contractor licensing structure that encompasses roofing as a subset. A licensed GC in these states can perform roofing work without an additional credential. However, platforms and insurers cannot simply check "is there a GC license?" - they also need to confirm the GC license covers the scope (some states have specialty classifications within the GC license that do or do not include roofing), and that the license is active and bonded at appropriate levels for a roofing job.
Category 3 - Minimal State Regulation
These states - including Texas at the state level, and several others - have little to no state-level roofing contractor licensing. This does not mean work is unregulated; it means the regulatory gap is filled (inconsistently) by local jurisdictions, county permitting offices, and municipal licensing boards. In these states, the absence of a state license record does not mean the contractor is unqualified - but it also means the state database cannot serve as your verification source.
Top 15 States by Contractor Volume: Roofing License Requirements
| State | Requirement Type | Licensing Authority | License Name / Code | Key Notes |
|---|---|---|---|---|
| Florida | Dedicated roofing license required | DBPR - Construction Industry Licensing Board (CILB) | Certified Roofing Contractor (CCC), Registered Roofing Contractor (CCC-R) | Strictest in the U.S. Requires exam, $300K liability, $25K workers comp. CCC is statewide; CCC-R is locally registered only. |
| California | C-39 classification under GC system | Contractors State License Board (CSLB) | C-39 Roofing Contractor | C-39 is a standalone specialty classification. A GC (B license) can perform roofing only if it is not the primary scope of work. |
| Texas | No state roofing license | No state agency for roofers | N/A statewide | Some cities require local registration (San Antonio, Austin). Harris County and Dallas County have local requirements. Hailstorm belt = high fraud risk. |
| New York | Home Improvement Contractor registration for residential; local licensing in NYC | NYS Dept of State (HIC registration), NYC Dept of Consumer Affairs | HIC Registration, NYC Home Improvement Contractor License | NYC requires a separate Home Improvement Contractor license. Upstate NY is covered only by HIC registration - not a full license with exam. |
| Georgia | State license for contractors above $2,500 in residential work | Georgia State Licensing Board for Residential and General Contractors | Residential/Light Commercial Contractor (RLCC), General Contractor | No roofing-specific license; roofing is covered under RLCC or GC. License required only above the $2,500 threshold. |
| Illinois | No statewide roofing license | No state agency | N/A statewide | Chicago requires a Roofing Contractor license (City of Chicago BACP). Cook County and other municipalities vary. State has no registration program. |
| Arizona | ROC specialty license | Arizona Registrar of Contractors (ROC) | CR-42 Roofing (residential), C-42 Roofing (commercial) | CR-42 and C-42 are both required in their respective scopes. GC (B-1/A) does not automatically cover roofing work as primary scope. |
| North Carolina | State licensing for projects over $30,000 | NC Licensing Board for General Contractors | General Contractor License (Limited, Intermediate, Unlimited) | No roofing-specific license. GC license covers roofing above the threshold. Below $30K = no state license required. |
| Virginia | Class A/B/C contractor license | Virginia Department of Professional and Occupational Regulation (DPOR) | Class A, B, or C Contractor License - roofing specialty (Specialty Code 17) | Class C covers projects up to $10K, Class B up to $120K, Class A unlimited. Roofing is a recognized specialty within the contractor license classification system. |
| Louisiana | State roofing contractor license | Louisiana State Licensing Board for Contractors (LSLBC) | Roofing Contractor (Specialty License, Classification 67) | Separate specialty license required. Projects over $50K require a licensed commercial contractor. License requires financial statement and exam. |
| Maryland | Home Improvement Contractor license | Maryland Home Improvement Commission (MHIC) | MHIC License - all home improvement including roofing | Roofing is explicitly covered under MHIC licensing for residential work. No separate roofing classification - one license covers the trade. |
| Colorado | No statewide roofing license | No state agency | N/A statewide | Denver requires a Roofing Contractor license (Denver Community Planning and Development). Colorado Springs has local requirements. Very high storm volume - elevated fraud risk. |
| Ohio | No statewide roofing license | No state agency | N/A statewide | Several municipalities license roofers (Columbus, Cleveland, Cincinnati). No state-level program. Contractors must register business entity with Secretary of State. |
| Washington | Specialty contractor registration | Washington Dept of Labor and Industries (L&I) | Specialty Contractor Registration - Roofing (Classification Code 0910) | Registration is not the same as licensing - no exam required. But bond and insurance requirements apply. Unregistered roofing contractors face significant penalties. |
| Nevada | ROC specialty classification | Nevada State Contractors Board (NSCB) | C-15 Roofing and Siding Contractor | C-15 is required for roofing as the primary scope. Trade exam required. Bond minimum $50K. Active license lookup available through NSCB online portal. |
Florida: The Most Rigorous Roofing Licensing Regime in the Country
Florida's roofing contractor licensing stands apart from every other state because it was designed specifically to address the catastrophic failure of unlicensed roofing work exposed by Hurricane Andrew in 1992 and further stress-tested by subsequent hurricane seasons. The result is a licensing system that has genuine teeth.
The DBPR Construction Industry Licensing Board issues two types of roofing contractor credentials. The Certified Roofing Contractor (CCC prefix) is a statewide license that allows the holder to pull permits and contract for roofing work anywhere in Florida. The Registered Roofing Contractor (also CCC-R prefix in some legacy issuances) is registered with a specific local jurisdiction and only authorized within that jurisdiction's permit boundaries - a crucial distinction that platforms frequently miss when they see an active CCC license without examining its scope.
To obtain a Florida CCC license, applicants must pass a two-part exam covering roofing knowledge and business and finance, demonstrate a minimum of 4 years of experience in the trade, provide a financial statement showing minimum net worth, and maintain a $300,000 general liability insurance policy plus workers' compensation coverage. The license renews biennially, and the DBPR online verification portal is updated daily - making it one of the more reliable state databases for real-time verification.
For API verification purposes, a Florida roofing lookup returns:
{
"contractor_id": "cv_7741029",
"business_name": "Suncoast Roofing Solutions Inc",
"state": "FL",
"license_number": "CCC1334821",
"license_type": "CCC_ROOFING_FL",
"status": "active",
"issued_date": "2019-09-10",
"expiration_date": "2026-08-31",
"classifications": ["roofing_contractor_certified"],
"scope": ["residential", "commercial"],
"jurisdiction": "STATE",
"insurance": {
"general_liability": {
"status": "active",
"minimum_met": true,
"amount": 300000
},
"workers_comp": {
"status": "active"
}
},
"bond": {
"status": "active",
"amount": 0,
"notes": "Florida CCC does not require a separate bond - insurance satisfies the financial responsibility requirement"
},
"qualifier_license": null
}
Note that Florida CCC licenses do not have a separate bond requirement - the liability insurance policy serves that function. The qualifier_license field is null for Florida roofing because the CCC license is issued directly to the qualifying individual who then associates their license with the business entity, rather than the business holding a separate license with a named qualifier. This is the reverse of the Texas electrical contractor model.
Texas: The No-State-License Problem and the Storm Chaser Reality
Texas is the most significant problem state for roofing contractor verification, for two compounding reasons. First, TDLR does not issue roofing contractor licenses. There is no state-level credential to verify. Second, Texas sits in the most active hail and wind corridor in North America - the so-called "Hail Alley" from the Texas Panhandle through the DFW Metroplex to Houston - generating roughly 1 in 4 of all U.S. residential roofing insurance claims by volume.
The combination of no state licensing and enormous storm volume makes Texas the preferred operating territory for "storm chasers" - out-of-state roofing contractors who follow severe weather events, knock on doors in affected neighborhoods within 48 hours of a storm, collect insurance assignment agreements, and either perform poor-quality work or disappear entirely. Many storm chasers are not licensed in any state. Some operate using fictitious company names. Some collect the insurance check and never return.
For platforms and insurers operating in Texas, the verification strategy must shift from state license lookup to alternative signals:
- Local jurisdiction registration - San Antonio requires roofing contractors to register with the Development Services Department. Austin requires a license through the Development Services Department. Check local permit records where available.
- Business entity verification - Texas Secretary of State business registration confirms the company is a real legal entity with a registered agent. A company that cannot be verified in SOS records is a significant red flag.
- Insurance certificate verification - Texas requires workers' compensation coverage for most construction activity. Verifying a current COI directly with the insurer (not just accepting a PDF) is critical.
- Time in business - Storm chasers typically operate under company names less than 2 years old. A company incorporated weeks after a major storm event warrants additional scrutiny.
The ContractorVerify API returns a state_license_required field in the response that flags whether the state requires a license for the trade. In Texas for roofing, this field returns false with a notes value indicating the applicable local jurisdiction requirements. This prevents your platform from flagging a legitimate Texas roofer as unverified simply because there is no state record - while still surfacing the local verification requirements.
California: The C-39 Classification and Why a B License Is Not Enough
California uses the CSLB specialty classification system, and C-39 is the dedicated roofing contractor classification. A company holding a C-39 license can contract for roofing work as its primary scope anywhere in California. A company holding only a Class B (General Building Contractor) license can perform roofing only when it is a minor component of a larger project - CSLB interprets this as roofing not being the "primary trade" of the contract.
This creates a verification pitfall for platforms and insurers that check only for "a valid CSLB license." A GC with a B license can legally manage a full home renovation that includes a new roof as part of a larger scope. But if you are dispatching a contractor specifically to replace a roof - or processing an insurance claim where the entire scope of work is roofing - a B license without a C-39 is legally insufficient for that specific contract.
In the ContractorVerify API for California contractors, the classifications array will show ["C39_ROOFING"] for a valid roofing contractor and ["B_GENERAL"] for a GC. Your platform logic must require "C39_ROOFING" to be present in the classifications array when approving a contractor for a roofing-primary job.
The Unlicensed Roofer Problem: Who Gets Hurt
Understanding the severity of the unlicensed roofer problem requires understanding who bears the consequences when an unlicensed contractor does substandard work or defaults on a job.
In states with active licensing requirements, work performed by an unlicensed contractor may be grounds for voiding the homeowner's property insurance claim. Insurers in Florida, California, and Louisiana have successfully denied claims on the basis that the original roofing work or repair was performed by an unlicensed contractor. The homeowner, who may have in good faith paid a contractor who appeared legitimate, ends up holding the loss.
For platforms that dispatched the contractor, the liability exposure is substantial. Several court cases have found platforms partially liable for dispatching unlicensed contractors when the platform held itself out as providing verified, qualified contractors. The "we just connect buyers and sellers" defense has been specifically rejected in cases where the platform's marketing emphasized contractor vetting.
Insurance Underwriting: Why Roofing License Verification Is a Policy Condition
Property insurance underwriters have developed specific roofing contractor verification requirements because roofing claims are the single largest category of property loss in states with significant storm exposure. Insurers face two distinct verification needs:
At Policy Issuance
When a homeowner applies for a new policy or files a statement about recent roof work, underwriters in states like Florida and Louisiana verify whether work on the roof was performed by a licensed contractor. An unlicensed installation or repair affects the risk profile of the property - not because the work is necessarily substandard, but because there is no licensed contractor of record to hold accountable if defects appear, and because the insurance assignment process (where the contractor deals directly with the insurer) is only legally valid when the contractor is licensed.
At Claims Processing
When a claim involves roofing work, insurers verify that the contractor recommended by the adjuster or the contractor retained by the homeowner holds an active, appropriately classified license. Florida's Assignment of Benefits (AOB) laws specifically restrict the practice to licensed contractors, making license verification a prerequisite for processing certain claim types. Insurance automation platforms building claim workflow tools need the API to return the license status and classification in real time at the moment the contractor is nominated on a claim.
Home Service Marketplace Liability for Dispatching Unlicensed Roofers
For home service platforms, the liability calculus for roofing is different from most other trades because of the value involved and the frequency of state-level fraud enforcement. A bad electrical job might cost a few thousand dollars to remediate. A bad roofing job on a 2,500-square-foot house can involve $15,000 to $30,000 or more in replacement cost.
Platforms that match homeowners with roofers - especially in storm-affected markets - face increasing regulatory attention. Several state attorneys general have targeted platforms that advertised contractor vetting but failed to actually verify licenses. Florida, Texas, and Louisiana have all seen enforcement activity in this space. A platform's best defense is a documented verification process using a real-time data source - not a checkbox during contractor signup that relies on self-reported information.
Red Flags in Roofing License Verification
Beyond a simple active/expired check, several patterns in API responses should trigger additional scrutiny:
Suspended License With Recent Reinstatement History
A license that has been suspended and reinstated more than once in a 5-year period suggests a contractor with a pattern of bond lapses, insurance gaps, or disciplinary issues. The API history array, where available, surfaces prior suspension events with dates and reasons.
Classification Mismatch for Project Scope
A contractor whose API record shows "classifications": ["roofing_residential"] being dispatched for a commercial flat roof replacement has a classification gap. Many roofing licenses distinguish steep-slope residential applications from low-slope commercial membrane systems. These require different knowledge, different materials, and often different bond amounts.
Missing Bond Where Required
Arizona (C-42, CR-42), Nevada (C-15), and Louisiana (Classification 67) all require bonds as part of the roofing contractor license. An active license without a matching active bond record is an incomplete credential. The bond.status field in the API response should be treated as a required active check in these states, not an optional field.
Jurisdictional Mismatch
A New York contractor with only a NYC Home Improvement Contractor license attempting to work in Nassau County, or a Florida contractor with a Registered (locally registered) rather than Certified (statewide) license attempting to work outside their registered jurisdiction - both are valid credentials presented outside their authorized scope. The jurisdiction field in the API response is the key indicator.
Post-Storm Company Formation Date
While the API does not flag this automatically, the business entity formation date relative to recent major storm events in the area is a meaningful signal. Storm chaser operations often incorporate new entities after a storm to limit accountability for prior work. Platforms in high-storm markets should compare the contractor's business registration date against the FEMA disaster declaration history for the area.
How the ContractorVerify API Handles Roofing Classification Lookup
Roofing contractor lookups in the ContractorVerify API use a two-step resolution process. When you submit a contractor lookup with trade: "roofing" alongside the state and business name or license number, the API first determines which regulatory regime applies to that state - dedicated roofing license, GC-covers-roofing, or minimal-regulation. It then queries the appropriate source database and maps the raw license record to a normalized response structure.
In states with dedicated roofing licenses (Florida, California C-39, Arizona C-42, Louisiana Classification 67, Nevada C-15), the API returns a complete license record with classification codes, scope array, bond status, and expiration dates.
In states where a GC license covers roofing (North Carolina, Virginia, Georgia), the API returns the GC license record with a roofing_covered boolean field and the relevant specialty classification code if one exists.
In minimal-regulation states (Texas, Illinois, Colorado, Ohio), the API returns a state_license_required: false response with a structured local_requirements array listing the municipalities within the state that have their own licensing programs and the data sources for each. This allows platforms to implement state-aware branching logic without hardcoding state-specific rules in their application layer.
> Verify Contractor Licenses Automatically_
The ContractorVerify API normalizes roofing contractor records across all 50 states - dedicated license, GC classification, or local-only requirement - into a single structured response. Stop managing state-specific lookup logic manually. One API call, every state, real-time data.
Join the Waitlist