# Florida Insurance Producer License Search (`automation-lab/florida-dfs-insurance-producer-license-list`) Actor

Search public Florida DFS producer licensees by surname and category; export license numbers, business addresses, detail status, appointments and official links.

- **URL**: https://apify.com/automation-lab/florida-dfs-insurance-producer-license-list.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.14 / 1,000 item extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 insurance producer licenses from DFS

Search public Florida DFS insurance producer license records by surname and choose the Health, Life & Annuity, or Property & Casualty category. Export licensee names, license numbers, public addresses, official record links, and—when detail enrichment is enabled—public license status and appointments. Each run is a current snapshot, not a change-detection service.

### Who is it for?

Compliance teams checking a roster of Florida insurance producers, insurance agencies reconciling onboarding records, and operations analysts building a periodically refreshed spreadsheet can use a surname-and-category search. The source is the [Florida DFS public licensee search](https://licenseesearch.fldfs.com/), not Florida DBPR or the adjuster license category.

### Why use this Actor?

It applies a regulator-side producer category and surname filter, follows search pagination up to your maximum, deduplicates by DFS licensee ID, and links back to the regulator's detail page. Optional detail mode includes each public license and appointment as structured arrays. No account, personal cookies, or browser interaction is required while the public DFS search is accessible.

### Getting started

1. Enter a surname of at least three letters, such as `Smith`.
2. Pick Property & Casualty, Life & Annuity, or Health. Set status to valid, invalid, or both.
3. Keep **Fetch license and appointment details** on for compliance review, or turn it off for a faster list.
4. Set the maximum number of licensees, then run the Actor.
5. Download the default dataset as JSON, CSV, or Excel, and follow `sourceUrl` for confirmation before an important decision.

### Input parameters

| Parameter | Purpose | Default |
| --- | --- | --- |
| `lastName` | Required DFS surname search; 3–80 letters, spaces, apostrophes, periods or hyphens | none |
| `category` | `propertyCasualty`, `lifeAnnuity`, or `health` | `propertyCasualty` |
| `status` | DFS search status: `both`, `valid`, or `invalid` | `both` |
| `includeDetails` | Fetch regulator detail pages for licenses and appointments | `true` |
| `maxItems` | Stop at this many distinct licensees, 1–1000 | `10` |

A surname search can match many people. Narrow the maximum to the records you need; this Actor does not accept a state-wide unfiltered crawl or private licensee data.

### Output fields

Each default dataset item contains `licenseeId`, `name`, `licenseNumber`, `category`, `businessAddress`, `location`, `email`, `status`, `licenses`, `appointments`, `sourceUrl`, and `retrievedAt`. When `includeDetails=false`, `status` is null and the two arrays are empty: this does **not** mean there are no licenses or appointments. Addresses and email may be absent on a source record.

The `licenses` array contains type, issue date, status and qualifying appointment when available. The `appointments` array contains publicly shown active/inactive section, company, issue date, and expiration date. `status` is derived from the available detail license rows and is not a regulator-issued certificate of good standing for every category held by a person. Review the official record for a decision.

### Example result

A local Florida DFS query for `Smith` and Property & Casualty returned a detail record for licensee ID `1265542`, license number `W108368`, with two license rows and two appointment rows. Its official record is `https://licenseesearch.fldfs.com/Licensee/1265542`. The public name and address are in the downloadable dataset; details can change over time.

### How much does it cost to export Florida producer licenses?

The Actor charges one `start` event per run and one `item` event for each licensee emitted. Detail enrichment is included in the item event, with no separate appointment or detail fee. Your Apify pricing tier determines the item price. Check the Actor's current Pricing tab for the applicable tier and final total before launching a large run; for example, five records incur one start event and five item events, and a no-match run incurs only a start event. Apify platform usage may be billed separately depending on your plan. Any publisher revenue or payout figures are estimates and may be reduced by refunds, fraud, disputes, taxes, corrections, and clawbacks.

### Export and integrations

Export the dataset from the Apify Console as CSV, JSON, or Excel. Schedule a run with the same surname/category to create successive snapshots, and compare `licenseeId`, `licenseNumber`, `status`, `licenses` and `appointments` in your own database, Sheets automation, or ETL. This Actor does not itself alert, diff, or monitor changes between runs.

### API example: cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~florida-dfs-insurance-producer-license-list/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"lastName":"Smith","category":"propertyCasualty","maxItems":5}'
```

Use an environment variable for the token in production rather than committing it to source control.

### API example: JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/florida-dfs-insurance-producer-license-list').call({
  lastName: 'Smith', category: 'propertyCasualty', maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API example: Python

```python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/florida-dfs-insurance-producer-license-list').call(
    run_input={'lastName': 'Smith', 'category': 'propertyCasualty', 'maxItems': 5}
)
print(client.dataset(run['defaultDatasetId']).list_items().items)
```

### MCP use

Add the Apify MCP endpoint to Claude Code:

```bash
claude mcp add --transport http apify \
  'https://mcp.apify.com?tools=automation-lab/florida-dfs-insurance-producer-license-list'
```

Claude Desktop, Cursor, and VS Code MCP clients can use the following HTTP MCP server configuration (follow your client's configuration location and authentication prompts):

```json
{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/florida-dfs-insurance-producer-license-list"}}}
```

Example prompts showing MCP usage:

- “Use the Florida DFS producer Actor to search Life & Annuity licenses for Williams; include five appointment-enriched records.”
- “Using the Apify MCP tool, export five Smith Property & Casualty licensees without detail enrichment and give me the DFS record links.”

Confirm any findings against the linked regulator record.

### Legality and responsible use

Only public information shown by the Florida DFS search is extracted. Respect the source's terms, privacy obligations, and applicable insurance/consumer-data law. Do not use this dataset as the sole basis for licensing or employment decisions. Results are snapshots; source availability, search semantics, and detail fields can change. The supported category choices deliberately exclude adjusters, agencies, and other DFS classes. The result limit caps emitted records; it is not an assertion that a surname has only that many matches.

### FAQ and troubleshooting

**Why is the dataset empty?** DFS may have no matches for that surname/category/status. Try a different supported category or status and inspect the DFS search directly. An upstream challenge or unexpected response fails the run rather than silently producing an empty success.

**Why are license/appointment arrays empty?** Confirm `includeDetails=true` and check the linked DFS detail. The regulator may show no public rows for that person. With `includeDetails=false`, arrays are intentionally empty and detail-derived status is null.

**Why does a person appear in several license types?** A DFS licensee can hold multiple licenses. The result is one row per licensee ID, with nested license and appointment data, not a separate row per license.

### Related Actor

For Florida DFS adjuster categories rather than the producer categories offered here, use [Florida Adjuster License Search](https://apify.com/automation-lab/florida-adjuster-license-search). Neither product substitutes for direct regulator confirmation.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/florida-dfs-insurance-producer-license-list/changelog.md

# Actor input Schema

## `lastName` (type: `string`):

Search surname, at least three letters (for example, Smith).

## `category` (type: `string`):

Choose a Florida DFS producer category; adjusters are not included.

## `status` (type: `string`):

Filter the DFS search to valid, invalid, or both statuses.

## `includeDetails` (type: `boolean`):

Open each DFS detail page to return license types, status and publicly available appointments.

## `maxItems` (type: `integer`):

Stop after at most this many distinct public licensee records.

## Actor input object example

```json
{
  "lastName": "Smith",
  "category": "propertyCasualty",
  "status": "both",
  "includeDetails": true,
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

View the normalized Florida DFS producer licensees from this run.

# 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 = {
    "lastName": "Smith"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/florida-dfs-insurance-producer-license-list").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 = { "lastName": "Smith" }

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/florida-dfs-insurance-producer-license-list").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 '{
  "lastName": "Smith"
}' |
apify call automation-lab/florida-dfs-insurance-producer-license-list --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/florida-dfs-insurance-producer-license-list"
        }
    }
}
```

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/dxu4Rsu3VQ8qFuNO9/builds/KNFoZFjX328TAy2s4/openapi.json
