← Health board

MSBOC

Mississippi Contractor License Lookup & Leads Scraper (MSBOC)

Export every Mississippi State Board of Contractors licence — statewide or by county, classification, city or ZIP — with phone, street address, classifications, expiry date and officers.

100%golden-diff pass
Run it on Apify → verified nightly

Verification

100%golden-diff success
40canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
business_namestring|null
license_numberstring|null
license_typestring|null
statusstring|null
classificationsarray|null
qualifying_namesarray|null
officersarray|null
issue_datestring|null
expiration_datestring|null
addressstring|null
citystring|null
address_statestring|null
zip_codestring|null
countystring|null
phonestring|null
faxstring|null
minoritystring|null
statestring|null
contractor_idstring|null
details_statusstring|null
matched_bystring|null
requested_countystring|null
requested_classificationstring|null
noticestring|null
notice_typestring|null
source_urlstring|null

Sample row

{
  "business_name": "LEFLORE CONSTRUCTION LLC",
  "license_number": "19113-MC",
  "license_type": "Commercial",
  "status": "Licensed - Active",
  "classifications": [
    "BUILDING CONSTRUCTION",
    "ELECTRICAL WORK",
    "HIGHWAY, STREET AND BRIDGE CONSTRUCTION",
    "MECHANICAL WORK"
  ],
  "qualifying_names": [
    "MARCO LEFLORE"
  ],
  "officers": [
    "KERRY LEFLORE (PRESIDENT)",
    "MARCO LEFLORE (VICE-PRESIDENT)"
  ],
  "issue_date": "09/07/2011",
  "expiration_date": "09/29/2027",
  "phone": "601-214-0125",
  "address": "4670 MCWILLIE DRIVE",
  "city": "JACKSON",
  "address_state": "MS",
  "zip_code": "39206",
  "county": "Hinds",
  "state": "MS",
  "minority": "Yes",
  "details_status": "ok",
  "source_url": "https://search.msboc.us/Detail.cfm?ContractorID=22467&ContractorType=Commercial&varDataSource=BOC"
}

Inputs

FieldTypeReqDefaultDescription
status string no "active" Which licences to export. 'Active' is every currently licensed contractor (13,186 on 2026-10-07). 'Expired' is the lapsed list (24,033), useful for win-back or compliance checks.
licenseType string no "any" Commercial (Board of Contractors commercial licences) or Residential (residential builders, remodelers and trades). 'Any' returns both.
classification string no — An MSBOC classification by code or name, e.g. 'E' (Electrical Work), 'S123' (Residential Roofing), 'Building Construction', 'Residential Builder'. An exact class name picks that class; otherwise every class with a word starting with what you typed is searched ('roof' finds both Residential ROOFING and Commercial ROOFING,SHEETMETAL AND SIDING). Leave empty for every classification. A value that matches no class is dropped (logged), never searched as 'all'.
classifications array no [] Several classifications in ONE run. Combined with 'Classification' if you fill both. A licence returned by two searches is returned (and billed) once.
county string no — Mississippi county, e.g. 'Hinds', 'DeSoto County', 'harrison'. MSBOC assigns the county from the ZIP of the licensee's address, so out-of-state firms are not under any county. Leave empty for the whole state.
counties array no [] Several counties in ONE run, e.g. Hinds, Madison and Rankin. Combined with 'County' if you fill both.
city string no — City of the licensee's address. MSBOC matches the start of the city name ('JACK' matches JACKSON).
cities array no [] Several cities in ONE run.
zipCode string no — A 5-digit ZIP code of the licensee's address.
zipCodes array no [] Several 5-digit ZIP codes in ONE run. Anything that is not 5 digits is dropped (logged).
businessName string no — Part of the company name, e.g. 'ELECTRIC' or 'Smith'. MSBOC matches it anywhere in the name.
businessNames array no [] Several company-name searches in ONE run.
includeDetails boolean no true Fetch each licence's MSBOC detail page to add its classifications, qualifying names, officers, first-issue and expiry dates, fax, minority flag and (for Mississippi addresses) county. Turn off for a faster export of name, licence number, address and phone only. Same price either way.
maxResults integer no 500 Cap on licences returned PER search (each county x classification x city x ZIP x name combination), so adding a county never truncates the ones after it. The whole active roster is about 13,200; set 100000 to take everything a search matches.
proxyConfiguration object no {"useApifyProxy":false} Optional. MSBOC answers direct requests; enable a proxy only if runs come back with a 'blocked' notice.

Pricing

Pay per result (dataset-item) — no charge for empty runs.
Example: 13186 every active Mississippi contractor licence at $0.004/result ≈ $52.74.

FAQ

Where does the data come from?

From the Mississippi State Board of Contractors' public search at search.msboc.us — the results list and each licence's detail page.

How many licences are there?

Counted on MSBOC's search 2026-10-07: 13,186 active (8,043 commercial, 5,143 residential), 24,033 expired, 541 inactive, 1,096 unlicensed, 65 revoked and 24 suspended. 7,397 of the active licensees have a Mississippi address.

Does it return email addresses?

No. MSBOC does not publish email on its search or detail pages, so no row carries one. You get phone, street address, and with details on, fax, officers and qualifying names.

What does 'Include classifications, dates and officers' do?

It fetches each licence's MSBOC detail page, which is the only place classifications, first-issue and expiry dates, officers, fax, the minority flag and the county appear. It is on by default and the price is the same either way; turn it off for a faster export of name, licence, address and phone. If a detail page cannot be read, the row is still returned with details_status 'failed'.

Why is county empty on some rows?

MSBOC assigns a county from the ZIP of a Mississippi address, so out-of-state firms have none. When you search by county, every row carries the county you searched.

How do I name a classification?

By MSBOC code ('E', 'S123', 'B') or by name ('Electrical Work', 'Residential Builder'). An exact name picks that class; otherwise every class with a word starting with what you typed is searched ('roof' finds both roofing classes). The code 'B' is Building Construction on commercial licences and Residential Builder on residential ones, so it searches both unless you set the licence type.

How am I charged?

One event per licence returned ($0.004). A row explaining a source problem or an unusable input is free. maxResults caps each search, so the default run of 500 licences costs $2.00 and the whole active roster costs about $52.74.

Guides & use cases

Related actors