LBGC
Alabama Contractor License Lookup & Verify (LBGC)
Verify an Alabama general contractor by license number or name, or export the whole LBGC roster by county, classification, status, city or ZIP — with phone, address and expiry.
Verification
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
state | string|null |
license_number | string|null |
business_name | string|null |
person_name | string|null |
license_type | string|null |
status | string|null |
issue_date | string|null |
expiration_date | string|null |
city | string|null |
county | string|null |
address | string|null |
zip_code | string|null |
phone | string|null |
bond_amount | string|null |
bond_company | string|null |
insurance_company | string|null |
address_state | string|null |
fax | string|null |
bid_limit | string|null |
classification_codes | array|null |
extension_date | string|null |
matched_by | string|null |
source_url | string|null |
Sample row
{
"state": "AL",
"license_number": "8",
"business_name": "DUNN CONSTRUCTION CO INC",
"license_type": "BC: BUILDING CONSTRUCTION, H/RR: HEAVY AND RAILROAD, HS: HIGHWAYS AND STREETS, MU: MUNICIPAL AND UTILITY",
"city": "BIRMINGHAM",
"phone": "(205) 592-3866",
"address": "P O BOX 11967",
"zip_code": "35202",
"expiration_date": "9/30/2026",
"matched_by": "business_name",
"source_url": "https://licensesearch.alabama.gov/genconbd/Details/2"
} Inputs
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
mode | string | no | "auto" | auto (default): a licence number or name below runs a lookup, none runs an export. lookup: find licences by AL LBGC licence number or business name. export: the LBGC roster narrowed by the filters below (county, classification, status, city, ZIP, expiry), names and numbers ignored. |
query | string | no | "CONSTRUCTION" | An Alabama LBGC general-contractor license number (exact) or a business name (substring). The board publishes a numeric license number; anything non-numeric is treated as a name search. Leave this and 'Search query (batch)' empty to export the whole LBGC roster instead, narrowed by the filters below. |
queries | array | no | ["CONSTRUCTION"] | Look up many in ONE run instead of starting a run per lookup. Takes the same values as 'Search query'. Combined with 'Search query' if you fill both, and duplicates are removed. Billing is unchanged: you are charged per record returned, not per entry submitted. |
classification | string | no | — | Statewide export only. An LBGC classification code (BC, BCU4, MU, H/RR, HS, E, M, D, SP, EV, SC, ADM, REP, SUBCONTRACTOR, or a '-S' subclassification such as BC-S) matched exactly, or a word from the classification description, e.g. 'roofing', 'plumbing', 'electrical'. Empty = every classification. An unrecognised value is ignored with a log line; if nothing you gave is recognised, the run returns a free row saying so instead of the whole state. |
classifications | array | no | [] | Several classifications in ONE run (a licensee matching any of them is returned once). Combined with 'Classification' if you fill both. |
licenseTypes | array | no | [] | Same as Classifications (LBGC's licence types are its classifications): codes like BC, MU, E, or words like 'roofing', 'plumbing'. |
counties | array | no | [] | Alabama counties, e.g. Jefferson, Mobile. LBGC publishes no county, so it is derived from the mailing ZIP (or city) with Census data; each row's county_method says how. Licensees with an out-of-state mailing address have no county. |
status | string | no | — | Statewide export only: active (default; includes licences LBGC lists as extended past their expiry), inactive, or all. |
statuses | array | no | [] | Several statuses in ONE run. Combined with 'Licence status' if you fill both. |
addressState | string | no | — | Statewide export only. Two-letter state of the licensee's mailing address, e.g. AL for Alabama-based firms. LBGC licenses many out-of-state contractors (4,222 of 8,993 licensees had an Alabama address on 2026-10-09), so leave empty for every licensee. |
addressStates | array | no | [] | Several mailing-address states in ONE run. Combined with 'Mailing-address state' if you fill both. |
city | string | no | — | Statewide export only. Mailing-address city, exact match ignoring case and punctuation. LBGC publishes no county, so filter by city or ZIP. |
cities | array | no | [] | Several cities in ONE run. Combined with 'City' if you fill both. |
zip | string | no | — | Statewide export only. Mailing-address ZIP, 5 digits (a ZIP+4 is matched on its first 5). |
zips | array | no | [] | Several ZIPs in ONE run. Combined with 'ZIP code' if you fill both. |
inStateOnly | boolean | no | false | Only licensees with an Alabama mailing address (same as Mailing-address state AL). LBGC licenses many out-of-state firms. |
expiresAfter | string | no | — | Only licences expiring on or after this date (YYYY-MM-DD). With 'Expires on or before' it lists licences due for renewal in a window. Works on exports and on lookups with detail pages. |
expiresBefore | string | no | — | Only licences expiring on or before this date (YYYY-MM-DD). |
maxResults | integer | no | — | With a search query: cap on matches PER QUERY (default 50), so a batch cannot silently return only the first rows overall and read as 'no match'; with detail pages on, each match costs one page fetch. Statewide export: cap for the whole run (default 500, a spend control). The full roster is 8,993 licensees (measured 2026-10-09), so 100000 returns everything that matches; the run log states how many matched when the cap cuts it short. |
includeDetails | boolean | no | true | Search queries only: fetch each match's detail page to add address, ZIP, and expiration date. Disable for a faster, roster-only run. The statewide export reads LBGC's roster file, which already carries address, ZIP, phone, fax, bid limit and expiry, so no detail pages are fetched there. |
proxyConfiguration | object | no | {"useApifyProxy":false} | Optional. The Alabama LBGC site is reachable directly; a proxy is not needed. |
Pricing
Pay per result (dataset-item) — no charge for empty runs.
Example: 100 verified license records at $0.004/result ≈ $0.40.
FAQ
Where does the data come from?
The official Alabama Licensing Board for General Contractors (LBGC) public license-search registry — public, authoritative commercial general-contractor license data.
What can I search by?
An LBGC license number (exact match, e.g. 4510 or S-53030) or a business name (case-insensitive substring). Both return the matching licenses from the board's roster. Leave the search empty to export the roster instead, filtered by county, classification, status, mailing state, city, ZIP or expiry date.
How big is a full export?
Measured 2026-10-09: 8,993 licensees, 8,917 of them active, and 4,172 of the active ones with an Alabama mailing address. An export defaults to active licences and 500 rows; set maxResults to 100000 for everything, or status to 'all' to include the 76 inactive licences. LBGC publishes no county, so narrow by city or ZIP.
What fields do I get?
License number, business name, specialty classification, city, phone, street address, ZIP, and license expiration date. A search gets address, ZIP and expiration from each licensee's detail page; an export reads them from LBGC's roster file and adds status, fax, bid limit, classification codes and mailing state.
How am I charged?
Pay-per-result — per license match returned. No charge for searches with no results.
Is this personal data?
It's public professional-license data (business and license records as the LBGC publishes them); we add no personal/PII enrichment.
How current is it?
It reflects the LBGC's live license-search roster at run time, so results are as current as the board's published data.
Guides & use cases
Related actors