← Health board

WVCLB

West Virginia Contractor License Lookup & Leads Scraper (WVCLB)

Look up any West Virginia contractor licence by number or name, or export every current WVCLB licence statewide (17,495 on 2026-10-12) with phone, mailing address, county, classifications and expiry.

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

Verification

97%golden-diff success
35canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
license_numberstring|null
business_namestring|null
dba_namestring|null
phonestring|null
addressstring|null
citystring|null
address_statestring|null
zip_codestring|null
countystring|null
classificationstring|null
classificationsarray|null
expiration_datestring|null
matched_bystring|null
statusstring|null
license_typestring|null
statestring|null
noticestring|null
notice_typestring|null
source_urlstring|null

Sample row

{
  "license_number": "WV042229",
  "business_name": "ACME VENTURES COMPANY LLC",
  "dba_name": "ALMOST HEAVEN CUSTOM BUILDERS",
  "phone": "(304) 539-8230",
  "address": "PO BOX 217",
  "city": "PEYTONA",
  "address_state": "WV",
  "zip_code": "25154-0217",
  "county": "BOONE",
  "classification": "GENERAL BUILDING; SPECIALTY; DEMOLITION; SEPTIC & SEWER SYSTEMS; RESIDENTIAL POOLS (ABOVE GROUND)",
  "classifications": [
    "GENERAL BUILDING",
    "SPECIALTY",
    "DEMOLITION",
    "SEPTIC & SEWER SYSTEMS",
    "RESIDENTIAL POOLS (ABOVE GROUND)"
  ],
  "expiration_date": "2027-10-29",
  "matched_by": "export",
  "status": null,
  "license_type": "Contractor License",
  "state": "WV",
  "source_url": "https://wvclboard.wv.gov/verify/"
}

Inputs

FieldTypeReqDefaultDescription
mode string no "auto" auto (default): a licence number or name below runs a lookup, none runs an export. lookup: find licences by WV licence number or company / DBA name. export: current licences by the filters below (county, city, classification, expiry), names and numbers ignored.
query string no — A WVCLB licence number ('WV038157', or just '38157'), or part of a company or DBA name ('Almost Heaven'). Names match anywhere in the company name and in the DBA. Leave empty to run an export instead.
queries array no [] Several lookups in ONE run, one per line. Combined with the field above if you fill both.
county string no — A West Virginia county ('Kanawha', 'Berkeley County'), or 'Out of State' / 'International' for the board's non-WV licences. A value that is not one of these is dropped and logged.
counties array no [] Several counties in ONE export.
classification string no — A WVCLB classification name or a word from one: 'roofing', 'hvac', 'electrical', 'general building', 'siding'. An exact name matches only itself ('electrical' does not also take SIGN INSTALLATION (NO ELECTRICAL)). A value that matches none of the board's 63 classifications is dropped and logged.
classifications array no [] Several classifications in ONE export, e.g. roofing and siding.
licenseTypes array no [] Same as Classifications (WVCLB's licence types are its classifications): names like 'ROOFING' or words like 'roofing', 'hvac', 'general building'.
licenseType string no — One licence type; same as Classification.
city string no — Mailing-address city, exact match ignoring case and punctuation, e.g. 'Charleston' (which does not include South Charleston).
cities array no [] Several cities in ONE export.
westVirginiaAddressesOnly boolean no false Out-of-state contractors hold WV licences: 7,967 of 17,495 (45.5%, 2026-10-12) have a mailing address outside West Virginia. Tick to drop them.
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 lookups.
expiresBefore string no — Only licences expiring on or before this date (YYYY-MM-DD).
maxResults integer no 500 EXPORT: cap on licences for the WHOLE run — your spend control (17,495 licences statewide on 2026-10-12; set 100000 to take everything that matches). LOOKUP: cap per name or number (default 50).
proxyConfiguration object no {"useApifyProxy":false} Not needed: the board's search answers Apify's own IPs (measured 2026-10-12). Leave it off unless a run reports that the board refused it.

Pricing

Pay per result (dataset-item) — no charge for empty runs.
Example: 64 Kanawha County roofing contractors at $0.004/result ≈ $0.26.

FAQ

Where does the data come from?

From the West Virginia Contractor Licensing Board's public contractor search (wvclboard.wv.gov/verify/), queried live on every run. Nothing is cached: each row is what the board's search returned at run time.

How many licences are there?

17,495 on 2026-10-12. Largest counties: Kanawha 802, Berkeley 654, Monongalia 648, Harrison 446, Raleigh 445, Cabell 442. 7,832 carry the board's OUT OF STATE county. Most common classifications after Specialty: General Building 5,388, Residential 2,876, Electrical 2,283, HVAC 1,634, Plumbing 1,431, Roofing 1,224.

Lookup or export — which do I use?

Lookup when you have licence numbers or names: fill 'License number or name' (or the batch list). Names match anywhere in the company name and in the DBA, and both are searched. Export when you want a list: leave that field empty and set filters. 'Mode' can force one or the other (lookup, export); the default, auto, decides by whether you gave names or numbers.

Can I list licences that are about to expire?

Yes: set 'Expires on or after' and 'Expires on or before' (dates like 2027-01-31), alone or with a county, city or classification. Every row carries the board's expiry date, so the window works on exports and lookups alike.

Does it include expired or revoked licences?

No. The board's search lists current licences only (17,494 of the 17,495 on 2026-10-12 expired later than that day), and it publishes no status field, so the status column is always empty. A licence that is not in the search returns no row.

How do I name a classification?

By its name or a word from it: 'roofing', 'hvac', 'electrical', 'general building', 'finished carpentry'. An exact name matches only itself, so 'electrical' does not also return Sign Installation (No Electrical); a word like 'sign' matches every class containing it. A value that matches none of the 63 classes is dropped and logged.

Does it include out-of-state contractors?

Yes: 7,967 of the 17,495 licences (45.5%) have a mailing address outside West Virginia, most often Ohio (1,638), Pennsylvania (1,549), Virginia (993) and Maryland (880). Tick 'West Virginia mailing addresses only' to drop them, or use the county 'Out of State' to get only them.

How am I charged?

$0.004 per licence returned. The default export returns 500 licences ($2.00); Kanawha County roofing contractors were 64 ($0.26) on 2026-10-12. Rows explaining an outage or an unrecognised filter are free.

Guides & use cases

Related actors