# Florida Contractor Directory & Leads Scraper (DBPR) (`fried_calamaries/florida-contractor-directory-leads-scraper`) Actor

Scrape every licensed Florida contractor in a county from the official DBPR registry — name, license, status, expiration, address — paginated and ready to export.

- **URL**: https://apify.com/fried\_calamaries/florida-contractor-directory-leads-scraper.md
- **Developed by:** [ByteMe](https://apify.com/fried_calamaries) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.002 / contractor records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Florida Contractor Directory & Leads Scraper (DBPR)

### Pain points

- The DBPR 'Verify a Licensee' portal shows 10 results per page — exporting a full county roster of thousands of contractors by hand is impractical.
- There is no bulk CSV export on the DBPR portal; you can only look up one page at a time.
- Building a county-level contractor contact list or lead database from DBPR requires automating hundreds of pagination clicks.

### What we solve

- Pages through the entire DBPR county + license-type roster automatically — no manual clicking.
- Returns every licensed contractor in a county: name, license number, type, status, expiration, and address.
- Discovery Mode lists all 67+ Florida counties in under 10 seconds so you always know the exact county name to use.

### Summary

Export every licensed Florida contractor in any county straight from the official DBPR registry. Pick a county (e.g. Hillsborough, Miami-Dade, Orange), a board and license type, and the actor pages through the entire roster — returning business name, license number, type, status, expiration date, city, and address for each licensee. Discovery Mode lists all available county options in seconds. Built for lead generation, outreach list building, subcontractor vetting, and compliance monitoring at county scale.

### Who it's for

- Sales & BD reps building county-level contractor outreach lists
- Roofing, HVAC, and specialty trade suppliers prospecting for new accounts
- General contractors and developers finding certified subs in a county
- Compliance and risk teams monitoring contractor license status at scale
- Market researchers auditing contractor density and license types by county

### How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

```json
{
  "county": "Hillsborough",
  "board": "06",
  "licenseType": "0605",
  "maxResults": 500
}
````

See **Inputs** below for every available field.

### What you get

One row per record:

| Field | Description |
|---|---|
| `state` | Always 'FL' |
| `license_number` | DBPR license number (class prefix + digits, e.g. CGC1234567) |
| `business_name` | Licensed business or individual licensee name |
| `license_type` | DBPR license/board classification (e.g. Certified General Contractor) |
| `status` | License status (e.g. Current,Active or Null and Void) |
| `expiration_date` | License expiration date as shown on DBPR |
| `county` | Florida county from the scrape filter |
| `city` | Licensee city from the main address |
| `address` | Street address (main address) |
| `zip_code` | ZIP code |
| `matched_by` | Always 'county\_directory' in Scrape Mode |
| `source_url` | Link to the official DBPR license record |

Sample:

```json
{
  "state": "FL",
  "license_number": "CGC1511234",
  "business_name": "TAMPA BAY CONSTRUCTION LLC",
  "person_name": null,
  "license_type": "Certified General Contractor",
  "status": "Current,Active",
  "issue_date": null,
  "expiration_date": "08/31/2026",
  "city": "TAMPA",
  "county": "Hillsborough",
  "address": "1234 KENNEDY BLVD",
  "zip_code": "33602",
  "phone": null,
  "bond_amount": null,
  "bond_company": null,
  "insurance_company": null,
  "matched_by": "county_directory",
  "source_url": "https://www.myfloridalicense.com/LicenseDetail.asp?SID=&id=ABCDEF123456"
}
```

### Inputs

| Field | Required | Type | Default | Description |
|---|---|---|---|---|
| `listCountiesOnly` | no | boolean | `false` | When true, the actor returns all available Florida counties from the DBPR portal and exits immediately (< 10 seconds, no charge). Use this to discover the exact county name to pass into Scrape Mode. |
| `county` | no | string | `"Hillsborough"` | The Florida county to scrape — full name (e.g. 'Hillsborough') or the DBPR numeric code (e.g. '39'). Required in Scrape Mode. Run with listCountiesOnly=true to see all available county names. |
| `board` | no | string | `"06"` | DBPR board code to filter by. Default '06' = Construction Industry (the main contractor board covering General, Building, Residential, and specialty contractors). Contact DBPR or run Discovery Mode to find codes for other boards. |
| `licenseType` | no | string | `"0605"` | DBPR license type code within the selected board. Default '0605' = Certified General Contractor (Board 06). Use '0600' for all license types within the board (if supported by the portal). |
| `maxResults` | no | integer | `500` | Hard cap on the number of contractor records returned. A county + license type can have thousands of results; set lower for testing. Default 500. |
| `proxyConfiguration` | no | object | `{"useApifyProxy": false}` | Optional. The DBPR portal is usually reachable directly from Apify's datacenter IPs. Enable a proxy (e.g. residential) only if a run is blocked or served a challenge page. |

### Pricing (Pay Per Event)

You pay per result (`dataset-item`) — **no charge for empty runs**. Example: **500 contractor records** at *$0.002/result* ≈ **$1.00**.

Illustrative — the final per-result price is set at publish time. Apify platform usage (compute) is billed separately per your plan. Discovery Mode (listCountiesOnly=true) returns county names only and is not charged.

### Use cases

- Lead list building — export all certified general contractors in a county into a CRM or outreach sequence.
- Subcontractor prospecting — find every licensed electrical or plumbing contractor in a target county for bidding.
- Competitor and market analysis — count active vs expired licenses by county to gauge market saturation.
- Compliance monitoring — pull the full county roster periodically and flag any status changes.
- Territory planning — compare contractor density across counties before opening a new branch or territory.

### Why this actor

- Data straight from the official Florida DBPR registry — authoritative, not a stale third-party copy.
- Discovery Mode lists all 67+ county options in seconds so you never have to guess the county name.
- Handles full county rosters of 8,000+ records via automatic pagination — no manual page-clicking needed.
- Pay per record; no charge for discovery runs or empty results.
- Pairs with the sibling Florida Contractor License Lookup actor for single-license detail enrichment.

### Limitations & updates

Covers the Florida DBPR 'Verify a Licensee' portal only. Each run scrapes one county + one board + one license type combination; run multiple times to cover additional license types. Data reflects the live DBPR registry and changes as it updates. Phone, bond, and insurance fields are included in the schema for suite consistency but DBPR does not publish them — they will be null. The issue-date field (detail page) is not fetched in directory mode to keep runs fast; use the sibling Florida Contractor License Lookup actor for full detail enrichment.

### FAQ

**Where does the data come from?**

The official Florida DBPR 'Verify a Licensee' portal (wl11.asp) — public contractor license data sourced directly from the state registry.

**How do I find the right county name?**

Run the actor once with listCountiesOnly=true. It returns all available county names and their DBPR codes in under 10 seconds at no charge.

**What board and license type should I use?**

The defaults (board '06' / licenseType '0605') cover Certified General Contractors under the Construction Industry board — the largest category. Set licenseType to another code (e.g. '0610' for Certified Building Contractor) to target a different trade. DBPR board and license type codes are documented on the DBPR website.

**How many records can I get per run?**

Hillsborough County alone has 8,000+ Certified General Contractors. The actor paginates automatically; set maxResults to control the cap. For very large counties, split across license types to stay within run time limits.

**How am I charged?**

Pay per record in Scrape Mode. Discovery Mode (listCountiesOnly=true) is not charged.

**How current is the data?**

It reflects the live DBPR registry at scrape time. DBPR updates license status in real time.

**Does this include phone numbers?**

No — DBPR does not publish phone numbers on the Verify a Licensee portal. Enrich with a contact-data provider after export.

### Which actor to choose

Part of the Florida DBPR contractor data suite — pick the one that fits your goal:

- **Florida Contractor License Lookup & Verify (DBPR)** — You have a specific license number or contractor name and want the full verified detail record — type, status, expiration, county, address (DBPR).
- **California Contractor License Lookup & Verify (CSLB)** — You need a California contractor verified — by license number, business, or owner/personnel name (CSLB).
- **Texas Contractor Directory & Leads Scraper (TDLR)** — You want the same county-scoped directory for Texas contractors (TDLR).
- **Multi-State Contractor & Trade License Lookup** — You need contractor data across multiple states in one run.

# Actor input Schema

## `listCountiesOnly` (type: `boolean`):

When true, the actor returns all available Florida counties from the DBPR portal and exits immediately (< 10 seconds, no charge). Use this to discover the exact county name to pass into Scrape Mode.

## `county` (type: `string`):

The Florida county to scrape — full name (e.g. 'Hillsborough') or the DBPR numeric code (e.g. '39'). Required in Scrape Mode. Run with listCountiesOnly=true to see all available county names.

## `board` (type: `string`):

DBPR board code to filter by. Default '06' = Construction Industry (the main contractor board covering General, Building, Residential, and specialty contractors). Contact DBPR or run Discovery Mode to find codes for other boards.

## `licenseType` (type: `string`):

DBPR license type code within the selected board. Default '0605' = Certified General Contractor (Board 06). Use '0600' for all license types within the board (if supported by the portal).

## `maxResults` (type: `integer`):

Hard cap on the number of contractor records returned. A county + license type can have thousands of results; set lower for testing. Default 500.

## `proxyConfiguration` (type: `object`):

Optional. The DBPR portal is usually reachable directly from Apify's datacenter IPs. Enable a proxy (e.g. residential) only if a run is blocked or served a challenge page.

## Actor input object example

```json
{
  "listCountiesOnly": false,
  "county": "Hillsborough",
  "board": "06",
  "licenseType": "0605",
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One row per licensed contractor in the requested county — name, license, status, expiration, city, and address.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "county": "Hillsborough"
};

// Run the Actor and wait for it to finish
const run = await client.actor("fried_calamaries/florida-contractor-directory-leads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "county": "Hillsborough" }

# Run the Actor and wait for it to finish
run = client.actor("fried_calamaries/florida-contractor-directory-leads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "county": "Hillsborough"
}' |
apify call fried_calamaries/florida-contractor-directory-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fried_calamaries/florida-contractor-directory-leads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Florida Contractor Directory & Leads Scraper (DBPR)",
        "description": "Scrape every licensed Florida contractor in a county from the official DBPR registry — name, license, status, expiration, address — paginated and ready to export.",
        "version": "0.0",
        "x-build-id": "6kzc9YscAgIG50Sbi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fried_calamaries~florida-contractor-directory-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fried_calamaries-florida-contractor-directory-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fried_calamaries~florida-contractor-directory-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fried_calamaries-florida-contractor-directory-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fried_calamaries~florida-contractor-directory-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fried_calamaries-florida-contractor-directory-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "listCountiesOnly": {
                        "title": "List counties only (Discovery Mode)",
                        "type": "boolean",
                        "description": "When true, the actor returns all available Florida counties from the DBPR portal and exits immediately (< 10 seconds, no charge). Use this to discover the exact county name to pass into Scrape Mode.",
                        "default": false
                    },
                    "county": {
                        "title": "County",
                        "type": "string",
                        "description": "The Florida county to scrape — full name (e.g. 'Hillsborough') or the DBPR numeric code (e.g. '39'). Required in Scrape Mode. Run with listCountiesOnly=true to see all available county names."
                    },
                    "board": {
                        "title": "Board / license category code",
                        "type": "string",
                        "description": "DBPR board code to filter by. Default '06' = Construction Industry (the main contractor board covering General, Building, Residential, and specialty contractors). Contact DBPR or run Discovery Mode to find codes for other boards.",
                        "default": "06"
                    },
                    "licenseType": {
                        "title": "License type code",
                        "type": "string",
                        "description": "DBPR license type code within the selected board. Default '0605' = Certified General Contractor (Board 06). Use '0600' for all license types within the board (if supported by the portal).",
                        "default": "0605"
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Hard cap on the number of contractor records returned. A county + license type can have thousands of results; set lower for testing. Default 500.",
                        "default": 500
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. The DBPR portal is usually reachable directly from Apify's datacenter IPs. Enable a proxy (e.g. residential) only if a run is blocked or served a challenge page.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
