Florida Contractor License Lookup (DBPR) — Bulk Verification
Pricing
from $2.00 / 1,000 license records
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 $2.00 / 1,000 license records
Rating
0.0
(0)
Developer
Steven Carleton
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
4
Monthly active users
6 days ago
Last modified
Categories
Share
Florida DBPR License Records Scraper — Contractor & Professional License Data
Get every active Florida contractor (or roofer, plumber, electrician, home inspector, cosmetologist…) in a county as a clean spreadsheet — with license status and expiration date — in about a minute. Or point it at a list of licenses you already care about and get an alert the day one of them lapses.
Data comes straight from the Florida DBPR's official public-records extract files. No login, no API key, no HTML scraping, no captchas.
See real records for 5 cents before you commit
Set maxResults to 25 and run it once. You are charged $0.002 per license record — so a 25-record look costs $0.05, and a run that matches nothing costs only Apify's fraction-of-a-cent start event. Look at the output, confirm it is the shape you need, then raise the cap.
What one record actually 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.
What a real job costs
Pricing is $2.00 per 1,000 license records ($0.002 each), charged only on records actually returned. Note: this rises to $4.00 per 1,000 on 26 August 2026. Runs before that date bill at the current rate:
| What you pull | Records | Cost |
|---|---|---|
| A look at the output before buying | 25 | $0.05 |
| A single trade in one county | 1,000 | $2.00 |
| A capped county-wide contractor list | 5,000 | $10.00 maximum |
maxResults is a hard ceiling, so a run can never cost more than maxResults × $0.002. If your filters only match 800 licenses, you pay $1.60 — not the cap.
Set-and-forget license monitoring (the part most people miss)
Run the Actor in monitor mode on an Apify Schedule and it stops being a one-off extractor and becomes a compliance watchdog. Each run compares the fresh DBPR extract against the baseline saved by the previous run and returns only what changed:
changeType | Meaning |
|---|---|
status-changed | Primary/secondary status flipped — e.g. Current → Suspended, Active → Inactive |
renewed | Expiration date moved forward (license was renewed) |
expiring-soon | License entered your expiringWithinDays window (alerted once per expiration date; includes daysUntilExpiration) |
new-license | A license newly matches your filters (new licensee in a county/trade) or newly appears on your watch list |
removed-from-extract | License vanished from the DBPR file — DBPR drops null & void, delinquent, and involuntarily inactive licenses, so a disappearance is usually exactly the event you're watching for |
Every change record contains the full license record plus changeType, changes (before/after values), and detectedAt.
Because you pay per record returned, a quiet run costs almost nothing — zero per-record charges, just roughly a cent of compute to scan the extract. You only pay real money when something actually changed. Monitoring 500 subcontractors on a weekly schedule costs a few cents a month in weeks where nothing happens.
Monitor either an explicit watch list:
{"mode": "monitor","profession": "construction","licenseNumbers": ["CGC058548", "CCC1330911", "CFC1425030"],"alertOnStatusChange": true,"expiringWithinDays": 90}
(an explicit licenseNumbers list overrides the other filters, so a watched license keeps being tracked even after it stops being Current + Active)
…or a filter set — e.g. "every certified general contractor in Palm Beach County":
{"mode": "monitor","profession": "construction","licenseTypes": ["CGC"],"counties": ["Palm Beach"],"status": "current-active","expiringWithinDays": 60}
How to set it up on a Schedule (2 minutes)
- 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
expiringWithinDayswindow) — from then on, only changes. - Go to 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.
- Optional: add an integration on the Actor — email, Slack, or a webhook — so a non-empty dataset pings you. Point it at runs of this Actor and check the dataset item count.
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:
| Field | Example |
|---|---|
licenseNumber | CGC058548 |
licenseType / licenseTypeName | CGC / Certified General Contractor |
licenseeName | AALDERINK, JAMES |
dbaName | Qualified business / DBA name |
addressLine1..3, city, state, zip | Mailing address of record |
countyCode / countyName | 60 / Palm Beach |
primaryStatus / secondaryStatus | Current / Active |
originalLicenseDate | 1980-01-03 |
statusEffectiveDate | 2010-09-29 |
expirationDate | 2028-08-31 |
notes | e.g. CE Exempt |
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
Use cases
- Lead generation — build county-level lists of active contractors for insurance, building materials, SaaS, CE courses, or financial products. Combine with
expiresBeforeto target licensees whose renewal is coming up. - License verification at scale — verify that subcontractors, vendors, or marketplace signups hold a current, active Florida license.
- Market sizing & analytics — count active roofers per county, track new licensees, analyze contractor density.
- Compliance & risk — flag partners whose license is expiring, inactive, suspended, or on probation.
- Recruiting — source licensed professionals by trade and region.
How to use it
{"profession": "construction","licenseTypes": ["CGC"],"counties": ["Palm Beach"],"status": "current-active","expiresBefore": "2026-12-31","maxResults": 5000}
Leave licenseTypes, counties, and cities empty for statewide, all-type pulls. maxResults caps the run — you are only charged for records actually returned.
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 — and there is no scraping layer to break when DBPR redesigns a page.
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 result: $0.002 per license record ($2.00 per 1,000), rising to $0.004 ($4.00 per 1,000) on 26 August 2026. You are charged per record actually returned, plus Apify's small platform events: a fraction-of-a-cent Actor start event and $0.00001 per dataset item — about 0.5% on top of the per-record price. No subscription; a run that finds nothing costs only the fraction-of-a-cent start event.
FAQ
How current is the data? DBPR regenerates most extract files daily or weekly. Schedule the Actor weekly to keep your lists fresh.
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.