# Licensee Search Florida Scraper (`automation-lab/florida-adjuster-license-search`) Actor

Search official Florida DFS adjuster licenses, status, appointments, and public contact records.

- **URL**: https://apify.com/automation-lab/florida-adjuster-license-search.md
- **Developed by:** [Stas Persiianenko](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

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Licensee Search Florida Scraper

Search the official Florida Department of Financial Services (DFS) public licensee service and export adjuster records as structured JSON. This **licensee search Florida** Actor supports name, Florida license number, NPN, email, firm, location, status, resident-status, and appointment-based filters.

Each enriched result can include public licensee identity, business and mailing contact data, National Producer Number, continuing-education status, valid and invalid licenses, active and inactive company appointments, and a regulator source link.

### What does this Actor do?

The Actor automates the public workflow at `licenseesearch.fldfs.com`.

It can:

- search the official Florida DFS public service;
- limit results to individual adjusters, adjusting firms, or both categories;
- search by person name, firm, email, Florida license number, or NPN;
- filter by business city, state, or Florida DFS county code;
- select valid, invalid, or both license-status groups;
- find licensees reported without a qualifying appointment;
- paginate beyond the first 20 search results;
- enrich each search row with the official detail record;
- save normalized results to the default Apify dataset.

The Actor does not infer license status from third-party data. It preserves the status, license, appointment, and continuing-education values shown by Florida DFS at retrieval time.

### Who is it for?

**Insurance compliance teams** can verify adjuster licensing and appointments during onboarding or periodic reviews.

**Carriers and adjusting firms** can prepare review lists by city, resident status, or missing qualifying appointment.

**Credentialing teams** can look up a specific Florida license number or NPN and retain the official record URL.

**Data engineers** can schedule recurring runs and send normalized results to a warehouse, spreadsheet, webhook, or comparison pipeline.

**Investigators and due-diligence analysts** can inspect public identity, contact, license, and appointment context without manually opening each detail page.

### Why use this Actor?

The public Florida DFS interface is designed for interactive searches. The Actor turns that interface into a repeatable dataset while keeping requests bounded and session-aware.

Key benefits include:

- official regulator source data;
- adjuster-specific category filtering;
- automatic search pagination;
- optional detail-page enrichment;
- stable field names for downstream workflows;
- direct links back to every source record;
- configurable result limits for low-cost checks or larger reviews.

No proxy is enabled or billed by this Actor. It uses the public SSR search with a coherent cookie and CSRF session.

### What Florida DFS data is extracted?

| Field | Meaning |
| --- | --- |
| `licenseeId` | Stable identifier used by the Florida DFS detail URL |
| `licenseNumber` | Florida license number |
| `name` | Public individual or adjusting-firm name |
| `businessAddress` | Public business street address |
| `mailingAddress` | Public mailing address from the detail page |
| `city`, `state`, `postalCode` | Parsed business location |
| `county` | County shown by Florida DFS |
| `email`, `phone` | Public contact values shown by Florida DFS |
| `npn` | National Producer Number |
| `ceDueDate` | Continuing-education due date as displayed |
| `continuingEducationStatus` | Continuing-education status |
| `ceHoursRequired`, `ceHoursCompleted` | CE hour counts when available |
| `validLicenses` | Valid license types, issue dates, and qualifying-appointment flags |
| `invalidLicenses` | Invalid license types, issue dates, and statuses |
| `activeAppointments` | Active company appointment rows |
| `inactiveAppointments` | Inactive company appointment rows |
| `hasQualifyingAppointment` | Whether a valid license has a qualifying appointment |
| `sourceUrl` | Official Florida DFS detail-record URL |
| `retrievedAt` | ISO timestamp for the retrieval |

Fields can be `null` or empty when Florida DFS does not publish that value for a record. Search-only runs (`fetchDetails: false`) intentionally leave detail-only fields empty.

### Getting started

1. Open the Actor input page in Apify Console.
2. Enter at least one person, firm, license, NPN, email, city, state, or county filter.
3. Keep `licenseCategory` set to `adjuster`, or select adjusting firms/both.
4. Choose the desired license status.
5. Leave detail enrichment enabled for licenses, appointments, NPN, CE, and contact fields.
6. Set a bounded `maxItems` value.
7. Click **Start**.
8. Open the **Dataset** tab to inspect, download, or integrate the results.

A safe first run is:

```json
{
  "lastName": "Smith",
  "licenseCategory": "adjuster",
  "licenseStatus": "both",
  "fetchDetails": true,
  "maxItems": 10
}
```

### Input parameters

| Input | Type | Default | Description |
| --- | --- | --- | --- |
| `firstName` | string | — | Individual first name, at least 3 characters |
| `lastName` | string | `Smith` prefill | Individual last name, at least 3 characters |
| `middleName` | string | — | Individual middle name, at least 3 characters |
| `firmName` | string | — | Adjusting-firm name contains filter |
| `email` | string | — | Public email contains filter |
| `licenseNumber` | string | — | Exact Florida license number, up to 7 characters |
| `npn` | string | — | Exact NPN, up to 9 digits |
| `city` | string | — | Business city, at least 3 characters |
| `state` | string | — | Two-letter business state code |
| `countyCode` | string | — | Two-digit county code used by Florida DFS |
| `residentStatus` | enum | — | `resident` or `nonResident` |
| `licenseStatus` | enum | `both` | `valid`, `invalid`, or `both` |
| `licenseCategory` | enum | `adjuster` | `adjuster`, `adjustingFirm`, or `both` |
| `onlyNoQualifyingAppointment` | boolean | `false` | Use the official missing-appointment search filter |
| `fetchDetails` | boolean | `true` | Fetch NPN, contact, CE, licenses, and appointments |
| `maxItems` | integer | `10` | Save 1–10,000 unique licensees |

Florida DFS requires at least three characters for its person-name, firm-name, email, and city text filters. The Actor validates those constraints before making source requests.

### Search examples

#### Verify one Florida adjuster license

```json
{
  "licenseNumber": "W108368",
  "licenseCategory": "adjuster",
  "licenseStatus": "both",
  "fetchDetails": true,
  "maxItems": 1
}
```

#### Search adjusting firms

```json
{
  "firmName": "Claims",
  "licenseCategory": "adjustingFirm",
  "licenseStatus": "valid",
  "fetchDetails": true,
  "maxItems": 25
}
```

#### Build an appointment review list

```json
{
  "city": "Miami",
  "state": "FL",
  "licenseCategory": "adjuster",
  "licenseStatus": "valid",
  "onlyNoQualifyingAppointment": true,
  "fetchDetails": true,
  "maxItems": 100
}
```

### Output example

A current enriched result has this shape (public contact values are replaced here):

```json
{
  "licenseeId": "1265542",
  "licenseNumber": "W108368",
  "name": "SMITH ALLMAN, SHEA N",
  "businessAddress": "2153 WHITENERS FARM RD LINCOLNTON, NC 28092",
  "mailingAddress": "2153 WHITENERS FARM RD LINCOLNTON, NC 28092",
  "city": "LINCOLNTON",
  "state": "NC",
  "postalCode": "28092",
  "county": null,
  "email": "public-contact@example.org",
  "phone": "(000) 000-0000",
  "npn": "16618181",
  "ceDueDate": "10/31/2026",
  "continuingEducationStatus": "Compliant",
  "ceHoursRequired": 0,
  "ceHoursCompleted": 0,
  "validLicenses": [
    {
      "type": "NON-RES ADJUSTER - ALL LINES (0720)",
      "issueDate": "8/17/2012",
      "status": "VALID",
      "qualifyingAppointment": true
    }
  ],
  "invalidLicenses": [],
  "activeAppointments": [],
  "inactiveAppointments": [],
  "hasQualifyingAppointment": true,
  "sourceUrl": "https://licenseesearch.fldfs.com/Licensee/1265542",
  "retrievedAt": "2026-08-17T06:00:00.000Z"
}
```

The default dataset supports JSON, JSONL, CSV, Excel, XML, and RSS exports through Apify.

### How much does it cost to verify Florida adjuster licenses?

This Actor uses pay-per-event pricing:

- one `start` event is charged when a run begins;
- one `item` event is charged for each unique licensee saved;
- detail enrichment is included in the item event and is not charged separately;
- empty, duplicate, or failed records are not charged as items.

The one-time start fee is **$0.005**. Current item prices are:

| Tier | Price per saved licensee |
| --- | ---: |
| FREE | $0.00874 |
| BRONZE | $0.0076 |
| SILVER | $0.005928 |
| GOLD | $0.00456 |
| PLATINUM | $0.00304 |
| DIAMOND | $0.002128 |

At BRONZE, a run saving 1 record costs **$0.0126**, 10 records cost **$0.081**, and 100 records cost **$0.765**. Detail enrichment is included. Runtime and public-source availability can affect the final number of records, so set `maxItems` to the number your workflow actually needs.

### Scheduling compliance checks

Use an Apify schedule to run the same filtered search daily, weekly, or monthly. Store each run's dataset ID, then compare stable keys such as `licenseeId` and `licenseNumber`.

Useful change signals include:

- a valid license moving to the invalid list;
- `hasQualifyingAppointment` changing;
- an active appointment appearing or disappearing;
- a CE status or due date changing;
- a public business location changing.

The Actor returns current public source state. It does not maintain historical snapshots or send change alerts by itself; Apify schedules, webhooks, and your downstream system provide that workflow.

### Export and integration patterns

**Spreadsheet review:** export the dataset as CSV or Excel for a one-time credential review.

**Data warehouse:** call the dataset API after each scheduled run and upsert by `licenseeId`.

**Onboarding automation:** run an exact license-number or NPN lookup from an internal workflow and retain `sourceUrl` as evidence.

**Appointment monitoring:** filter for no qualifying appointment, then compare subsequent datasets.

**Webhook pipeline:** attach an Apify run-succeeded webhook and send the dataset URL to Make, Zapier, n8n, or your own service.

### Use the Actor through the API

Replace `APIFY_TOKEN` with your token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~florida-adjuster-license-search/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"licenseNumber":"W108368","maxItems":1}'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/florida-adjuster-license-search').call({
  lastName: 'Smith',
  licenseCategory: 'adjuster',
  fetchDetails: true,
  maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/florida-adjuster-license-search').call(
    run_input={
        'city': 'Miami',
        'state': 'FL',
        'onlyNoQualifyingAppointment': True,
        'maxItems': 25,
    }
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/florida-adjuster-license-search"
```

#### Claude Desktop, Cursor, and VS Code setup

Use this equivalent JSON configuration in Claude Desktop, Cursor, or VS Code:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/florida-adjuster-license-search"
    }
  }
}
```

Example prompts:

- “Verify Florida adjuster license W108368 and summarize its current licenses and appointments.”
- “Find up to 50 valid adjusters in Miami that have no qualifying appointment and return a review table.”
- “Search Florida DFS for adjusters named Smith and save the official source URLs.”

### Performance and cost tips

- Use an exact license number or NPN when verifying one person.
- Keep `maxItems` close to the number you need.
- Set `fetchDetails: false` only when search-row identity, address, and email are sufficient.
- Detail enrichment runs with bounded concurrency to avoid overwhelming the public service.
- Search pages contain 20 records; the Actor requests additional pages only as needed.
- Avoid broad state-only searches with a large limit unless your workflow requires them.

### Limits and source behavior

Florida DFS controls the public service and can change HTML, session rules, filters, or availability without notice.

The Actor:

- does not bypass authentication or CAPTCHA;
- does not use private credentials;
- does not guarantee that every public record contains email, phone, county, NPN, CE, or appointment values;
- does not claim that a public record is a legal certification;
- does not include enforcement orders from separate Florida systems;
- does not provide historical changes unless you schedule and retain multiple runs;
- stops with a failed run when the source returns an unrecognized error page instead of silently returning an empty success.

For a naturally empty valid search, the run succeeds with zero item charges.

### Responsible use and legality

The Actor accesses public professional-license information. Public availability does not remove your obligations.

Use the data for lawful credential verification, compliance, due diligence, and analysis. Follow applicable privacy, employment, insurance, consumer-reporting, records-retention, and contractual rules. Do not use public contact information for harassment, unlawful discrimination, or unsolicited messaging that violates applicable law.

Confirm consequential decisions with Florida DFS or the appropriate regulator. `sourceUrl` is included so reviewers can inspect the current official record.

### Troubleshooting

**The Actor says a text filter is too short.**

Florida DFS requires at least three characters for name, firm, email, and city text filters. Use a longer value or an exact license/NPN filter.

**The run returns no records.**

Check the selected category and status. A license may be in the adjusting-firm category rather than individual adjuster, or may only appear when status is `both`.

**Detail fields are empty.**

Confirm `fetchDetails` is `true`. Some records genuinely omit public contact, CE, or appointment values.

**The run fails with a Florida DFS response error.**

Inspect the run log and retry later if the public service is temporarily unavailable. Do not repeatedly launch identical runs during a source outage.

**The result limit is reached.**

Increase `maxItems` within the 10,000-item input maximum or narrow the filters for a more targeted compliance list.

### Related Automation Lab Actors

- [Texas Insurance License Lookup](https://apify.com/automation-lab/texas-insurance-license-lookup) — official Texas insurance agent, adjuster, agency, appointment, and relationship datasets.
- [Florida DBPR License Verification Scraper](https://apify.com/automation-lab/florida-dbpr-license-verification-scraper) — Florida DBPR professional-license records outside the DFS insurance workflow.

Choose this Actor specifically for Florida DFS insurance adjusters and adjusting firms.

### FAQ

#### Is this the official Florida DFS website?

No. This is an independent Apify Actor that retrieves public records from the official source and links every result back to it.

#### Can it search agents or other insurance categories?

This product intentionally supports the DFS `Adjuster` and `Adjusting Firm` categories. It does not claim broad coverage of every license category.

#### Does it include active and inactive appointments?

Yes, when `fetchDetails` is enabled and Florida DFS publishes appointment rows for the licensee.

#### Does it verify continuing education?

It returns the public CE status, due date, and hour counts shown on the detail record. Treat those values as source data, not independent certification.

#### Can it monitor changes automatically?

Schedule recurring Actor runs and compare retained datasets. The Actor retrieves current records but does not itself maintain history or send alerts.

#### Does it need a proxy?

No proxy is enabled by default. The current implementation uses direct public HTTP requests with a coherent DFS session.

#### Are detail pages charged separately?

No. A saved enriched licensee is covered by one `item` event; there is no separate detail event.

# Actor input Schema

## `firstName` (type: `string`):

Individual first name (minimum 3 characters).

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

Individual last name (minimum 3 characters).

## `middleName` (type: `string`):

Individual middle name (minimum 3 characters).

## `firmName` (type: `string`):

Find adjusting firms whose name contains this value.

## `email` (type: `string`):

Find licensees whose public email contains this value.

## `licenseNumber` (type: `string`):

Exact Florida DFS license number, up to 7 letters or digits.

## `npn` (type: `string`):

Exact NPN, up to 9 digits.

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

Business city filter (minimum 3 characters).

## `state` (type: `string`):

Two-letter business state code, such as FL.

## `countyCode` (type: `string`):

Two-digit county code used by the Florida DFS search form.

## `residentStatus` (type: `string`):

Optionally limit records to resident or non-resident licensees.

## `licenseStatus` (type: `string`):

Return valid, invalid, or both license-status groups.

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

Search individual adjusters, adjusting firms, or both official DFS categories.

## `onlyNoQualifyingAppointment` (type: `boolean`):

Return only licensees that have no qualifying appointment according to Florida DFS.

## `fetchDetails` (type: `boolean`):

Enrich each search row with NPN, contact, CE, license, and appointment details.

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

Maximum number of unique licensee records to save.

## Actor input object example

```json
{
  "lastName": "Smith",
  "licenseStatus": "both",
  "licenseCategory": "adjuster",
  "onlyNoQualifyingAppointment": false,
  "fetchDetails": true,
  "maxItems": 10
}
```

# Actor output Schema

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

Default dataset view containing normalized Florida DFS licensee records.

# 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-adjuster-license-search").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-adjuster-license-search").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-adjuster-license-search --silent --output-dataset

```

## MCP server setup

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

```

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/WDNMVICsiJavfrtgY/builds/2Ff5jfqh4PIdbXOY3/openapi.json
