# Florida Contractor Leads + Owner & Tech Stack (`reassuring_minestrone/florida-license-mcp`) Actor

3-in-1 Florida DBPR Contractor Lead Enricher: Extracts active licenses, corporate owners, website, email, phone, and tech stack (ServiceTitan, Jobber, Google/FB Ads pixels) with Lead Opportunity Score.

- **URL**: https://apify.com/reassuring_minestrone/florida-license-mcp.md
- **Developed by:** [BRUNO BISMARCK](https://apify.com/reassuring_minestrone) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 license verifieds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Florida Contractor Leads 3-in-1: DBPR License + Sunbiz Owners + Website & Tech Stack (MCP)

### 🔥 3-IN-1 ENRICHED CONTRACTOR LEADS: OFFICIAL DBPR LICENSE + SUNBIZ OWNER NAMES + WEBSITE, EMAIL & TECH STACK (SERVICETITAN / JOBBER / ADS DETECTION)

**STOP PAYING FOR RAW LICENSE DUMPS.** Other Florida DBPR scrapers give you a license number and a name. This Actor gives you a **ready-to-close sales lead**: the official state license, **the owner's name from Sunbiz**, the company's **website, email, phone and social profiles**, a **diagnosis of its marketing & software stack**, and a **0–100 Lead Opportunity Score** that tells you who to call first.

> ✅ Official Florida DBPR license data (real time) · ✅ Owners, officers & registered agent (Florida Division of Corporations / Sunbiz) · ✅ Website, email, phone & socials · ✅ ServiceTitan, Housecall Pro, Jobber, Calendly, WordPress, Wix, Shopify, Google Ads & Facebook Pixel detection · ✅ Lead Opportunity Score · ✅ MCP server for AI agents

***

### WHY THIS ACTOR BEATS EVERY BASIC DBPR SCRAPER

| | Basic DBPR scrapers | **This Actor (3-in-1)** |
| --- | :---: | :---: |
| License number, type, status, expiration | ✅ | ✅ |
| Exact-city filtering & normalized status (Active / Inactive / Expired) | ❌ | ✅ |
| **Owner / president / managing member name (Sunbiz)** | ❌ | ✅ |
| **Officers, registered agent, incorporation date, corporate status** | ❌ | ✅ |
| **Official website + `hasWebsite` flag** | ❌ | ✅ |
| **Email, phone & social profiles (Facebook, Instagram, LinkedIn, Yelp...)** | ❌ | ✅ |
| **Tech stack: ServiceTitan, Housecall Pro, Jobber, Calendly, WordPress, Wix, Shopify** | ❌ | ✅ |
| **Ad pixel detection: Google Ads & Facebook Pixel** | ❌ | ✅ |
| **Lead Opportunity Score (0–100) with human-readable reasons** | ❌ | ✅ |
| **MCP server for Claude, ChatGPT, Cursor & AI agents** | ❌ | ✅ |

### Who is it for?

#### 🖥️ Web design & SEO agencies

Filter `hasWebsite = false` and get **active, licensed contractors with no website** — plus the owner's name to personalize your pitch. The hottest leads you will ever call.

#### 📣 Paid ads & marketing agencies

Find contractors whose websites have **no Google Ads or Facebook Pixel**: they are not advertising yet (or not tracking it). Pitch them a campaign.

#### 🧰 Field-service software (FSM) sellers

Know who already runs **ServiceTitan, Housecall Pro or Jobber** (competitive displacement) and who has **no online booking at all** (greenfield). Perfect for SaaS SDR teams.

#### 🎯 B2B lead generation agencies & data resellers

Deliver **verified, owner-level contractor leads** for Florida's booming home-services market — roofing, general contractors, HVAC, plumbing, electrical, pool, solar and more.

#### 🛡️ Insurance, lenders & suppliers

Verify the license **and** the legal entity behind it (status, incorporation date, officers) before you bind, lend or extend credit.

#### 🤖 AI assistants & agents

Give your agent a single tool that answers *"Find me licensed roofers in Tampa without a website, with the owner's name"* using live government data.

### What data do you get?

**1. Official DBPR license (myfloridalicense.com)**
`name`, `licenseNumber`, `licenseType`, `status` (Active / Inactive / Expired), `statusRaw`, `expirationDate`, `address`, `city`, `zipCode`, `detailUrl`.

**2. Corporate & owner data (Florida Division of Corporations / Sunbiz records)**
`ownerName`, `officers[]` (name + title), `registeredAgent`, `corporateStatus`, `incorporationDate`, `companyType`, `sunbizDocumentNumber`, `feiNumber`, `principalAddress`, `sunbizUrl`.

**3. Contact, website & tech-stack diagnostics** (`enrichLeads = true`, default)
`website`, `hasWebsite`, `email`, `emails[]`, `phone`, `phones[]`, `socialLinks` (Facebook, Instagram, LinkedIn, Yelp, X/Twitter, YouTube, TikTok), `detectedTechStack[]`, `hasAdPixel`, `hasOnlineBooking`.

**4. Lead scoring**
`leadOpportunityScore` (0–100) and `leadOpportunityReasons[]`.

#### How the Lead Opportunity Score works

| Signal | Points |
| --- | --- |
| Active state license (a real, operating business) | +35 |
| **No website found** | +35 |
| …or website **without Google Ads / Facebook Pixel** | +20 |
| …and website **without online booking / field-service software** | +15 |
| Owner / decision-maker identified | +10 |
| Direct contact found (email or phone) | +10 |
| Young company (incorporated in the last 3 years) | +10 |
| License inactive or expired | capped at 25 |

**100 = active licensed contractor, no website, owner identified** — call them today.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `licenseeName` | string | Company or professional name (optional if category + city are given). |
| `city` | string | Florida city, e.g. `"Miami"`, `"Orlando"`, `"Tampa"`. |
| `licenseCategory` | string | `"Construction"`, `"Electrical"`, `"Real Estate"`... Aliases like `roofing`, `plumber`, `hvac`, `electrician` work. |
| `maxResults` | integer | Leads to return (default `20`). |
| `enrichLeads` | boolean | Website, email, phone, socials, tech stack & score (default `true`). |
| `proxyConfiguration` | object | Apify Proxy for web lookups (recommended, default on). |

```json
{
    "city": "Miami",
    "licenseCategory": "Construction",
    "maxResults": 50,
    "enrichLeads": true
}
```

### Output example

```json
{
    "name": "ACME ROOFING LLC",
    "licenseNumber": "CCC1234567",
    "licenseType": "Certified Roofing Contractor",
    "status": "Active",
    "expirationDate": "2028-08-31",
    "address": "123 NW 1ST ST, MIAMI, FL 33128",
    "city": "MIAMI",
    "ownerName": "JOHN DOE",
    "officers": [{ "name": "JOHN DOE", "title": "MGR" }],
    "registeredAgent": "JOHN DOE",
    "corporateStatus": "Active",
    "incorporationDate": "2023-03-14",
    "sunbizDocumentNumber": "L23000123456",
    "website": null,
    "hasWebsite": false,
    "email": null,
    "phone": null,
    "socialLinks": { "facebook": "https://www.facebook.com/acmeroofingmiami", "instagram": null, "linkedin": null, "yelp": null, "twitter": null, "youtube": null, "tiktok": null },
    "detectedTechStack": [],
    "hasAdPixel": false,
    "hasOnlineBooking": false,
    "leadOpportunityScore": 90,
    "leadOpportunityReasons": [
        "Active state license (+35)",
        "No website found (+35)",
        "Owner / decision-maker identified (+10)",
        "Young company, incorporated in the last 3 years (+10)"
    ]
}
```

*(Illustrative values.)*

### Use it as an MCP server

The Actor runs in **Standby mode** with a **Model Context Protocol** endpoint at `/mcp`:

- **`verify_florida_license`** — find & enrich leads by `licenseeName` or `licenseCategory` + `city` (`enrichLeads` optional).
- **`list_florida_license_categories`** — all DBPR categories (free).

```json
{
    "mcpServers": {
        "florida-contractor-leads": {
            "url": "https://<username>--florida-license-mcp.apify.actor/mcp",
            "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
        }
    }
}
```

**Prompts that just work:**

- *"Find 20 active roofing contractors in Tampa with no website and give me the owners' names."*
- *"Which general contractors in Orlando use ServiceTitan or Jobber?"*
- *"Is ABC Builders licensed in Florida, who owns it and when was it incorporated?"*

### Pricing

**Pay-Per-Event**: one `license-verified` event per **enriched lead** saved to your dataset — see the *Pricing* tab. No results, no charge. Set a **maximum cost per run** and the Actor stops automatically at your budget.

### Data sources & accuracy

- **Licenses**: live from the official Florida DBPR licensee search (myfloridalicense.com).
- **Corporate records**: Florida Department of State, Division of Corporations (Sunbiz) public records. The official search.sunbiz.org site blocks automated access, so records are read from a public mirror of the Division of Corporations data and every lead links back to its official Sunbiz record via `sunbizUrl` (document number).
- **Websites & contacts**: discovered through web search and the company's own website. Matching is conservative (domain/name match) to avoid false positives; when no official site is found, `hasWebsite` is `false`.
- **Tech stack**: detected from public homepage HTML signatures.

### FAQ

**Is this legal?** All data comes from public records and publicly accessible websites. You are responsible for compliant outreach (TCPA, CAN-SPAM, Do-Not-Call, Florida Telemarketing Act).

**Why might a lead have no owner?** Sole proprietors and individuals licensed under their personal name often have no Sunbiz entity; for individuals the licensee is reported as the owner.

**Can I get only license + owner data, faster?** Yes — set `enrichLeads` to `false`.

**Need another CRM/booking platform detected?** Open an issue — we add signatures quickly.

***

*Keywords: Florida contractor leads, home services lead finder Florida, DBPR license lookup with owner name, Sunbiz officer lookup, contractor email list Florida, roofing leads Miami, HVAC contractor leads Florida, contractors without website, ServiceTitan users list, Jobber Housecall Pro detection, Google Ads pixel checker, B2B lead generation contractors, MCP server lead enrichment.*

# Actor input Schema

## `licenseeName` (type: `string`):

Name of the business or licensed professional to verify, e.g. "Lennar", "ABC Roofing" or "John Smith". Leave empty to list all licensees of a category in a city (then both License category and City are required).

## `city` (type: `string`):

Florida city to search in, e.g. "Miami", "Orlando", "Tampa", "Jacksonville". Optional when a licensee name is given.

## `licenseCategory` (type: `string`):

License category (DBPR board), e.g. "Construction", "Electrical", "Real Estate", "Engineers", "Certified Public Accounting", "Home Inspectors", "Mold-Related Services". Common aliases such as "contractor", "roofing", "realtor" or "electrician" are understood.

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

Maximum number of leads to save. You are charged per saved lead.

## `enrichLeads` (type: `boolean`):

Find each company's official website, emails, phones and social profiles, detect its tech stack (ServiceTitan, Housecall Pro, Jobber, Calendly, WordPress, Wix, Shopify, Google Ads Pixel, Facebook Pixel...) and compute a 0-100 lead opportunity score. Sunbiz owners/officers are always included. Disable for faster license + owner data only.

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

Proxy used for web searches and corporate record lookups. Apify Proxy is recommended to avoid search engine rate limits.

## Actor input object example

```json
{
  "city": "Miami",
  "licenseCategory": "Construction",
  "maxResults": 20,
  "enrichLeads": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "licenseeName": "",
    "city": "Miami",
    "licenseCategory": "Construction",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reassuring_minestrone/florida-license-mcp").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 = {
    "licenseeName": "",
    "city": "Miami",
    "licenseCategory": "Construction",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("reassuring_minestrone/florida-license-mcp").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "licenseeName": "",
  "city": "Miami",
  "licenseCategory": "Construction",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call reassuring_minestrone/florida-license-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reassuring_minestrone/florida-license-mcp"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eSDr4t5bzcGiVGuZB/builds/IoEblkqxR26hypKxD/openapi.json
