← Use cases

Use case

Export Every West Virginia Roofing Contractor (WVCLB)

Every current WVCLB licence with the Roofing classification, with phone, mailing address, county and expiry date.

Say you run marketing for a building-products distributor with a yard in Parkersburg, and next spring’s plan is to sell shingles and gutter coil to every roofer in West Virginia, not just the ones your reps already know. You need the full list once, with phone numbers, and then a way to spot the new licensees each month so the list doesn’t rot.

The state licenses these contractors through the WV Contractor Licensing Board, so the list exists. Getting it out of the board’s search is the problem.

The manual way, and what it costs

The public search form on the source portal
the source portal — the official search. One record at a time.

The board’s search at wvclboard.wv.gov/verify/ is free and current. If you want to check that one roofer’s licence hasn’t expired before you extend credit, search the name there and you’re done.

Building a statewide roofer list there doesn’t work. Roofing is a sub-class of Specialty, and Specialty is on 17,377 of the board’s 17,495 licences (2026-10-12), so the classification menu has no roofing option and filtering on Specialty barely narrows anything. Results come 20 to a page with no export. Even one county is a page-through-and-copy job, and a statewide list also has to catch the 372 roofing licences held by firms with a mailing address out of state.

The faster way

West Virginia Roofing Contractor Directory & Leads (WVCLB) does the same search once and hands back every row at once.

{
  "maxResults": 100000
}

No county, no city: you want the whole state. maxResults of 100,000 is there so the default cap of 500 doesn’t cut the list off at under half; it returned all 1,224 roofing licences on 2026-10-14 for $2.45. The out-of-state firms stay in on purpose, since a contractor based in Ohio (110 of them) or Virginia (64) who holds a West Virginia licence may still buy from a West Virginia yard. If they don’t belong on your list, add "westVirginiaAddressesOnly": true. Expect about 4 minutes, because the actor has to read every current licence to find the roofers.

What comes back

{
  "license_number": "WV000232",
  "business_name": "HARRIS BROTHERS ROOFING COMPANY",
  "dba_name": null,
  "phone": "(304) 343-5566",
  "address": "1533 HANSFORD STREET",
  "city": "CHARLESTON",
  "address_state": "WV",
  "zip_code": "25311-1917",
  "county": "KANAWHA",
  "classification": "GENERAL BUILDING; HVAC; PLUMBING; SPECIALTY; ROOFING",
  "classifications": [
    "GENERAL BUILDING",
    "HVAC",
    "PLUMBING",
    "SPECIALTY",
    "ROOFING"
  ],
  "expiration_date": "2027-08-02",
  "matched_by": "export",
  "status": null,
  "license_type": "Contractor License",
  "state": "WV",
  "source_url": "https://wvclboard.wv.gov/verify/"
}
FieldExample valueMeaning
license_numberWV000232WVCLB licence number, e.g. WV000232
business_nameHARRIS BROTHERS ROOFING COMPANYLicensed company (or sole proprietor)
dba_name—Doing-business-as name, when filed
phone(304) 343-5566Business phone as the board lists it
address1533 HANSFORD STREETMailing street address (can be a PO box)
cityCHARLESTONMailing city

phone is what makes this a call list, and all 1,224 rows had one. county lets you hand each rep their own territory: Kanawha 64, Monongalia 54, Wood 48, Berkeley 45. But license_number closes the loop on the monthly part of the job. It’s the board’s stable id (WV000232 in the sample), so next month’s export compared against this one shows exactly which numbers are new.

What you’d do with it

Export to CSV, import into your CRM keyed on license_number, and split by county for the reps. Then filter the classifications list for Siding or Gutters: Harris Brothers in the sample also lists General Building, HVAC and Plumbing, and the roofers who already do gutters are the ones to pitch gutter coil first. Schedule the same input monthly; new licence numbers go to the reps as new accounts, and numbers that disappear have dropped off the board’s current list.

Worth knowing

Current licences only. The board’s search does not list expired, revoked or lapsed licences, and it publishes no status, issue date, owner or qualifier name, so status is always empty and you can’t tell a lapsed roofer from one who never held a licence. There’s no email, because the board publishes none. Addresses are mailing addresses and 221 of the 1,224 are PO boxes, so a city filter finds where a contractor’s mail goes, not where they work. And the statewide run reads all 17,538 current licences to find the roofers, which is why it takes about 4 minutes when a single county (Kanawha, 13 s) takes seconds.


Run it yourself: How to run West Virginia Roofing Contractor Directory & Leads (WVCLB) walks the whole thing step by step.

When you only need one territory: the guide’s example input runs Kanawha County alone, 64 licences for $0.13, in 13 seconds.

When your yard also ships to Illinois: the Illinois Roofing Contractor Directory & Leads Scraper (IDFPR) exports IDFPR’s roofing licences by county, with city and ZIP but no phone.

Last updated 2026-10-14