Florida Contractor License Lookup (DBPR) — Bulk Verification avatar

Florida Contractor License Lookup (DBPR) — Bulk Verification

Pricing

from $4.00 / 1,000 license records

Go to Apify Store
Florida Contractor License Lookup (DBPR) — Bulk Verification

Florida Contractor License Lookup (DBPR) — Bulk Verification

Extract Florida professional license records (contractors, electricians, cosmetologists, home inspectors, and more) from official DBPR public data. Filter by license type, county, city, status, and expiration date. Pay per record.

Pricing

from $4.00 / 1,000 license records

Rating

0.0

(0)

Developer

Steven Carleton

Steven Carleton

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

3

Monthly active users

4 days ago

Last modified

Share

Florida Contractor License Lookup, Verification & Monitoring (DBPR)

Three jobs, one Actor, official state data. Pull every active Florida contractor (roofer, plumber, electrician, home inspector, cosmetologist...) in a county as a clean spreadsheet. Verify a list of license numbers you already hold. Or put those licenses on watch and get told the day one lapses, is suspended, or is renewed.

Data comes straight from the Florida DBPR's official public-records extract files. No login, no API key, no HTML scraping, no captchas - and nothing to break when DBPR redesigns a page.

ModeWhat it doesPriced by
search (default)Every license matching your filters: trade, county, city, status, expiration window, nameper record returned
verifyExactly one result per license number you list: full status, or "not in extract"per license number looked up
monitorOn a Schedule: only what changed since the last scan across your watch setper scan + per watched license, plus per change reported

Try it for 10 cents

Set maxResults to 25 and run a search. Records cost $0.004 each, so a 25-record look is $0.10. Check the output, then raise the cap.

What one record looks like

Real output from a live run, trimmed to the fields most people check first:

{
"licenseNumber": "EC0000382",
"licenseTypeName": "Certified Electrical Contractor",
"licenseeName": "BENNETT, BRADY J",
"dbaName": "BRADY BENNETT & ASSOCIATES INC",
"city": "JACKSONVILLE",
"countyName": "Duval",
"primaryStatus": "Current",
"secondaryStatus": "Active",
"expirationDate": "2028-08-31"
}

Every record carries the full field set below, in JSON, CSV, or Excel.

Search: bulk lists at $4 per 1,000

{
"profession": "construction",
"licenseTypes": ["CGC"],
"counties": ["Palm Beach"],
"status": "current-active",
"expiresBefore": "2026-12-31",
"maxResults": 5000
}
What you pullRecordsCost
A look before buying25$0.10
One trade in one county1,000$4.00
A capped county-wide contractor list5,000$20.00 max

maxResults is a hard ceiling for search mode: a search run can never cost more than maxResults x $0.004, and you only pay for records actually returned. Monitor mode is priced differently and is not bounded by this line - see What monitoring costs below. Leave licenseTypes, counties and cities empty for a statewide, all-type pull.

Verify: check the licenses you already have

Before you bind a policy, extend trade credit, or let a sub on site, confirm the license is current and active - in one run, for as many numbers as you like (raise maxResults to match: it caps how many results are returned, and anything above it is neither returned nor charged - the run warns you when that happens):

{
"mode": "verify",
"profession": "construction",
"licenseNumbers": ["CGC058548", "CCC1330911", "CFC1425030"]
}

You get exactly one result per number. Found licenses come back as the full record plus verificationStatus: "found" and a plain isCurrentActive true/false. Numbers that are not in DBPR's extract come back as verificationStatus: "not-in-extract" - and because DBPR drops null & void, delinquent and involuntarily inactive licenses from these files, absence is itself the answer: that license is not currently valid.

Priced per license number looked up (found or not), at a fraction of what a verification API charges per lookup. 200 subcontractors verified in one run costs a few dollars, not a few hundred.

Monitor: put licenses on watch (the part most people miss)

Run the Actor in monitor mode on an Apify Schedule and it becomes a compliance watchdog. Each scan compares the fresh DBPR extract against the baseline saved by the previous run and reports only what changed:

changeTypeMeaning
status-changedPrimary/secondary status flipped - e.g. Current to Suspended, Active to Inactive
renewedExpiration date moved forward (license was renewed)
expiring-soonLicense entered your expiringWithinDays window (once per expiration date; includes daysUntilExpiration)
new-licenseA license newly matches your filters (new licensee in a county/trade) or newly appears on your watch list
removed-from-extractLicense vanished from the DBPR file - DBPR drops null & void, delinquent and involuntarily inactive licenses, so a disappearance is usually exactly the event you are watching for

Every change record contains the full license record plus changeType, changes (before/after values) and detectedAt.

Watch an explicit list (a watched license keeps being tracked even after it stops being Current + Active):

{
"mode": "monitor",
"profession": "construction",
"licenseNumbers": ["CGC058548", "CCC1330911", "CFC1425030"],
"alertOnStatusChange": true,
"expiringWithinDays": 90
}

...or a filter set - every certified general contractor in Palm Beach County, including new ones as they are licensed:

{
"mode": "monitor",
"profession": "construction",
"licenseTypes": ["CGC"],
"counties": ["Palm Beach"],
"status": "current-active",
"expiringWithinDays": 60
}

What monitoring costs

Monitoring is priced for the watching, not just the news: a small per-scan fee, a fraction of a cent per watched license per scan, and the normal $0.004 per change record reported. Exact event prices are on the Pricing tab.

Two things to know before you start, because a fraction of a cent adds up. The per-license fee is charged for every license in the watch set on every scan, whether or not anything changed - that is what you are buying. A watch set defined by a filter can be very large: the ceiling is 300,000 licenses, and at that size a single scan costs about $150. Size the watch set deliberately; a named list of license numbers is cheap, a statewide filter is not. The first run is charged too - it downloads the extract and saves the baseline, so it bills the scan fee and the per-license fee like any other scan.

Worked examples at those prices:

Watch setCadenceRoughly
300 subcontractorsdaily~$20 / month
300 subcontractorsweekly~$3 / month
One trade in one county (~5,000 licenses)weekly~$13 / month
One trade in one county (~5,000 licenses)daily~$90 / month

Compare that with a compliance platform subscription or a per-lookup verification API: one scan re-checks your entire watch list for about the price of a single API lookup elsewhere. Set maxResults to cap how many change records a single scan may return; anything above the cap stays pending and is reported on the next scan.

Setting it up on a Schedule (2 minutes)

  1. Configure the input above in the Actor's Input tab and run it once. The first run saves a baseline (and reports any licenses already inside your expiringWithinDays window). From then on, only changes. This seed run is billed like any other scan - scan fee plus the per-watched-license fee - so check the size of your watch set before you run it.
  2. Schedules in the Apify Console, Create new, pick a cadence (daily or weekly matches DBPR's refresh cycle), Add Actor, select this Actor - the schedule copies your saved input.
  3. Optional: add an integration - email, Slack, or a webhook - so a non-empty dataset pings you.

Baselines are stored in the fl-dbpr-license-monitor key-value store in your account. Run several independent monitors side by side by giving each Schedule its own monitorStateKey (e.g. "subs-watchlist", "palmbeach-cgc"). Use one baseline per profession. To reset a monitor, delete its record from that store or pick a new monitorStateKey.

Full field list

One result per license record:

FieldExample
licenseNumberCGC058548
licenseType / licenseTypeNameCGC / Certified General Contractor
licenseeNameAALDERINK, JAMES
dbaNameQualified business / DBA name
addressLine1..3, city, state, zipMailing address of record
countyCode / countyName60 / Palm Beach
primaryStatus / secondaryStatusCurrent / Active
originalLicenseDate1980-01-03
statusEffectiveDate2010-09-29
expirationDate2028-08-31
notese.g. CE Exempt

Verify-mode results add verificationStatus, isCurrentActive and verifiedAt; monitor-mode results add changeType, changes and detectedAt.

Supported professions

  • Construction contractors (CILB) - general (CGC), building (CBC), residential (CRC), roofing (CCC), plumbing (CFC), HVAC (CAC), mechanical (CMC), pool (CPC), underground utility (CUC), all registered (RG/RB/RR/...) and specialty types
  • Electrical contractors (ECLB) - EC / ER / ES
  • Home inspectors (HI)
  • Mold-related services - assessors & remediators
  • Cosmetology - cosmetologists, salons, specialists
  • Barbers & barbershops
  • Veterinary medicine
  • Architecture & interior design

Who uses it

  • Insurance & surety - verify a contractor's license before binding; watch the book for suspensions and lapses.
  • General contractors & developers - keep every subcontractor's license on watch; get told 60-90 days before one expires.
  • Building-material suppliers & lenders - verify before extending trade credit; monitor the accounts you carry.
  • Lead generation - county-level lists of active contractors for CE courses, SaaS, insurance and financial products; expiresBefore targets licensees whose renewal is coming up; a filter-set monitor delivers new licensees as they appear.
  • Marketplaces & recruiters - verify signups hold a current, active Florida license; source licensed pros by trade and region.
  • Market sizing - count active roofers per county, track new licensees, analyze contractor density.

For AI agents (MCP, x402, Skyfire)

Actor ID: cblu/florida-license-records-scraper · Pricing: pay-per-event, license-record at $0.004 per Florida DBPR license record · Permissions: limited · Standby: off. No Apify account is needed to run it: agents can pay per run with x402 (USDC) or Skyfire, or use a prepaid Apify token.

Typical agent tasks this Actor answers in one call:

  • verify a Florida contractor license number with DBPR and return whether it is current and active
  • check if a Florida roofer, electrician, plumber, general contractor or home inspector license is valid
  • list active certified general contractors (CGC) or electrical contractors in a county or city
  • find Florida licenses expiring before a given date
  • monitor a list of Florida license numbers and report suspensions, lapses and renewals

Minimal call — 25 current, active electrical contractors in Duval County — costs about $0.100:

{
"profession": "electrical-contractors",
"counties": [
"Duval"
],
"status": "current-active",
"maxResults": 25
}

To check licenses you already hold, pass mode: "verify" with licenseNumbers; one row comes back per number (found, or 'not in extract'). Search-mode rows carry licenseNumber, primaryStatus, secondaryStatus and expirationDate.

How to call it without an Apify account:

  1. Via the Apify MCP server — connect to https://mcp.apify.com?payment=x402 (or ?payment=skyfire), search for florida license records scraper with the search-actors tool, then call cblu/florida-license-records-scraper with the JSON above. The tool result is the dataset: one JSON object per Florida DBPR license record.
  2. Via REST with a prepaid token — buy a token with x402 (Base or Solana) or MPP at https://agi.apify.com/protocols/x402/prepaid-tokens?amount=1&currency=usd ($1 minimum, expires in 14 days), then POST https://api.apify.com/v2/acts/cblu~florida-license-records-scraper/run-sync-get-dataset-items with header Authorization: Bearer <token> and the JSON above as the body. The response body is the array of license records.

Budget rule for search and verify modes: a run can never cost more than maxResults x the per-result price plus a $0.00005 start event, and you are charged only for records actually returned. A run that matches nothing costs $0.00005. Set maxResults to your budget / the per-result price. Monitor mode is not bounded by that line - from 2026-10-07 it also bills a per-scan fee and a per-watched-license fee on every scan, including the first, so a large filter-defined watch set can cost far more than maxResults implies. Check the Pricing tab and set the run's maximum-charge limit before scheduling a monitor. Official public data; no login, no captcha, no HTML scraping — the same call returns the same shape every time.

Data source & freshness

Records come from the Florida Department of Business & Professional Regulation's free public-records extract files (myfloridalicense.com), which DBPR refreshes on a daily/weekly cadence. This is public information published by the State of Florida under its public-records obligations. Excluded from DBPR extracts: null & void, delinquent, and involuntarily inactive records.

Because the Actor reads the state's official extract files rather than driving a search form, it is fast and does not miss records.

Note on fairness: phone numbers and emails are not included because DBPR does not publish them in these files; any actor claiming otherwise is scraping a different, slower source or fabricating data.

Pricing

Pay per event, no subscription:

  • Search: $0.004 per license record returned ($4.00 per 1,000).
  • Verify: one event per license number looked up - see the Pricing tab for the current rate.
  • Monitor: one scan event per run, one watched-license event per license in the watch set per scan, and $0.004 per change record reported - see the Pricing tab.

Plus Apify's small platform events: a fraction-of-a-cent Actor start event and $0.00001 per dataset item. maxResults caps every run.

FAQ

How current is the data? DBPR regenerates most extract files daily or weekly. A daily or weekly schedule keeps a monitor aligned with the source.

Can I verify licenses from several boards at once? One profession per run (it selects the source file). Run one verify per board, or one monitor baseline per profession.

Can I get all ~500,000 cosmetology licenses? Yes - set maxResults high and let it stream. Runs are memory-safe because the file is processed as a stream. For pulls this large, check the maximum-charge setting on the run so the platform does not stop it early.

A profession you need is missing? Open an issue on the Actor's Issues tab - adding another DBPR board is usually a same-week change.