Use case
Export Every Active Florida Roofing Contractor (DBPR)
All ~9,700 active DBPR roofing licences (CCC + RC) statewide: firm, qualifier, licence #, status, expiry, address, city, ZIP, county.
Say you run marketing for a roofing-materials distributor that is about to open a second Florida branch, and before you pick the city you want every licensed roofer in the state on one sheet. Not a bought list from last year: the roofers DBPR says are allowed to contract today, with an address you can map by county, so the branch decision rests on a count rather than a guess.
Florida licenses roofers at the state level, so the list exists. On 2026-10-22 it held 9,736 active roofing licences. Getting all of them out at once is the hard part.
The manual way, and what it costs
DBPR’s licence search is free and fine for checking one roofer, or browsing one small county on screen. For a statewide list it works one county and one licence type at a time, 50 results a page: Miami-Dade alone is 89 pages of Certified Roofing results, and roughly half of those rows are exam applicants, null & void or revoked records rather than working roofers. The search also prints a firm and its licensed qualifier as two rows, sorted by name and often pages apart, so a copied list either counts every company twice or loses who holds the licence.
The faster way
Florida Roofing Contractor Directory & Leads (DBPR) runs that search for every county, reads every page, and hands back one row per current licence.
{
"licenseTypes": [
"CCC",
"RC"
],
"statuses": [
"active"
],
"maxResults": 10000
}
No counties means the whole state, which is the point when you have not chosen the branch yet.
licenseTypes keeps both roofing licences: CCC Certified roofers, who may work anywhere in Florida,
and RC Registered roofers, who are limited to the local jurisdictions where they hold a competency
card. statuses: ["active"] keeps only licences DBPR lists as Current (or Current with Probation)
and Active, so nobody on the sheet is barred from contracting. maxResults: 10000 matters most,
because the default is 500 and a statewide run on the default would stop well short. The whole state
is about 140 searches and took 745 seconds on 2026-10-22.
What comes back
{
"state": "FL",
"license_number": "CCC1328938",
"license_code": "CCC",
"license_type": "Certified Roofing Contractor",
"business_name": "MODERN ROOFING SOLUTIONS",
"person_name": "AARONS, PIERRE GILBERT",
"status": "Current, Active",
"expiration_date": "2028-08-31",
"address": "4902 SW 67TH TER",
"po_box": false,
"city": "GAINESVILLE",
"address_state": "FL",
"zip_code": "32608",
"county": "Alachua",
"phone": null,
"matched_by": "dbpr_search",
"source_url": "https://www.myfloridalicense.com/LicenseDetail.asp?SID=&id=3EFD7CF8E8DE7D0716AAB468558E9A60"
}
| Field | Example value | Meaning |
|---|---|---|
business_name | MODERN ROOFING SOLUTIONS | Firm on the licence (DBPR’s DBA name); the qualifier’s own name when no firm is listed |
person_name | AARONS, PIERRE GILBERT | Licensed qualifier (DBPR’s Primary name), as DBPR writes it (LAST, FIRST MIDDLE) |
license_number | CCC1328938 | DBPR licence number (one row per licence) |
license_code | CCC | CCC or RC |
license_type | Certified Roofing Contractor | Certified Roofing Contractor or Registered Roofing Contractor |
status | Current, Active | DBPR status, e.g. ‘Current, Active’, ‘Current with Probation, Active’, ‘Current, Inactive’, ‘Suspended, Active’ |
county is the column that answers the branch question. Pivot on it and you have the size of the
licensed roofer pool everywhere in the state: on 2026-10-22 that was 1,193 in Miami-Dade, 1,023 in
Broward and 655 in Palm Beach. license_code splits each county into CCC and RC (Miami-Dade was 1,165
to 28), and expiration_date tells you which licences come up for renewal soon. business_name and
the address turn the winning county into an account list.
What you’d do with it
Export the dataset to Excel and build a pivot of active roofers by county to pick the branch. Then
filter to that county and its neighbours, split the rows on po_box (a PO box suits a mailer, not a
sales visit), and import the rest into your CRM keyed on license_number. Run the same input again
next quarter and compare licence numbers to see who is new.
Worth knowing
There is no phone number and no email on any row. DBPR’s search shows neither, so this is an address list, not a call list; contact details have to come from somewhere else. The address is DBPR’s main address on file, and about 2% of active rows have no city or ZIP that parses. A statewide run also includes licensees DBPR files as out of state or foreign, so a pivot of the 67 Florida counties will not add up to the statewide total. One qualifier can hold several licences, each a separate row, so dedupe on the firm before counting companies. The actor covers the two roofing licences only, CCC and RC. Counts here were measured on 2026-10-22 and move as DBPR updates its records. The full statewide pull costs about $19.47 at $0.002 a row, plus Apify platform usage.
Run it yourself: How to run Florida Roofing Contractor Directory & Leads (DBPR) walks the whole thing step by step.
When you only need one county: the guide’s Miami-Dade example returns 1,193 rows for about $2.39, a better start if the branch is already chosen.
When your territory crosses into another state: Illinois Roofing Contractor Directory & Leads Scraper (IDFPR) exports Illinois roofing licences by county, with city and ZIP.
Last updated 2026-10-22