← Use cases

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

The public search form on the source portal
the source portal — the official search. One record at a time.

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"
}
FieldExample valueMeaning
business_nameMODERN ROOFING SOLUTIONSFirm on the licence (DBPR’s DBA name); the qualifier’s own name when no firm is listed
person_nameAARONS, PIERRE GILBERTLicensed qualifier (DBPR’s Primary name), as DBPR writes it (LAST, FIRST MIDDLE)
license_numberCCC1328938DBPR licence number (one row per licence)
license_codeCCCCCC or RC
license_typeCertified Roofing ContractorCertified Roofing Contractor or Registered Roofing Contractor
statusCurrent, ActiveDBPR 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