← Health board

DPOR

Virginia Contractor Directory & Leads Scraper (DPOR)

Every licensed Virginia contractor in a county, city or ZIP, by trade — business name, email, mailing address, licence class, trades and expiry — from DPOR's Board for Contractors licence lists.

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

Verification

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

Output fields

Authoritative field set from the dataset schema.

FieldType
business_namestring|null
individual_namestring|null
emailstring|null
phonestring|null
addressstring|null
citystring|null
zip_codestring|null
address_statestring|null
statestring|null
countystring|null
county_methodstring|null
license_numberstring|null
board_occupationstring|null
license_classstring|null
license_typestring|null
statusstring|null
specialtiesarray|null
specialty_labelsarray|null
certification_datestring|null
expiration_datestring|null
requested_countystring|null
requested_citystring|null
requested_zipstring|null
requested_tradestring|null
matched_bystring|null
county_namestring|null
tradestring|null
trade_codestring|null
noticestring|null
notice_typestring|null
source_urlstring|null

Sample row

{
  "business_name": "FSR ROOFING CONTRACTOR INC",
  "individual_name": null,
  "email": "fsrconstruction4u@gmail.com",
  "address": "8300 OLD COURTHOUSE RD",
  "city": "VIENNA",
  "zip_code": "22182",
  "address_state": "VA",
  "county": "Fairfax County",
  "county_method": "zip_single",
  "license_class": "B",
  "license_type": "Class B Contractor",
  "specialties": [
    "ROC",
    "HIC"
  ],
  "specialty_labels": [
    "Roofing",
    "Home Improvement"
  ],
  "certification_date": "03/09/2004",
  "expiration_date": "12/31/2027",
  "license_number": "083272",
  "board_occupation": "2705",
  "phone": null,
  "requested_county": "Fairfax County",
  "requested_trade": "Roofing",
  "source_url": "https://www.dpor.virginia.gov/sites/default/files/Records%20and%20Documents/Regulant%20List/2705b__crnt.txt"
}

Inputs

FieldTypeReqDefaultDescription
listOptionsOnly boolean no false If true, skip the download and return Virginia's 95 counties and 38 independent cities plus every trade DPOR's Board for Contractors licenses, with its code. Free, not charged.
trade string no "Roofing" A DPOR trade, by name or code, e.g. 'Roofing', 'Electrical', 'HVAC', 'Home Improvement', 'ROC'. A word from the name works too: 'roof' finds Roofing. Leave it empty to get every trade in the place.
trades array no ["Roofing","Electrical"] Several trades in ONE run, e.g. Roofing and Electrical. Combined with 'Trade' if you fill both. A contractor holding two of them is returned (and billed) once.
county string no "Fairfax County" A Virginia county or independent city, e.g. 'Fairfax County', 'Richmond city', 'City of Fairfax', 'Loudoun'. Fairfax, Franklin, Richmond and Roanoke are each both a county and a city, so say which. APPROXIMATE: DPOR records no county, so it is derived from the mailing ZIP (each row's county_method says how). For an exact match use City or ZIP. An unrecognised name returns the free county and trade lists instead of failing.
counties array no [] Several counties or independent cities in ONE run. Combined with 'County' if you fill both.
city string no — The city on the licence's mailing address, e.g. 'Vienna', 'Virginia Beach'. Exact match, case-insensitive.
cities array no [] Several mailing cities in ONE run, each searched separately.
zip string no — A 5-digit ZIP code, matched exactly against the licence's mailing ZIP, e.g. '22182'.
zips array no [] Several ZIP codes in ONE run, each searched separately.
licenseClasses array no ["A","B","C"] Which DPOR licence classes to include: A, B, C, and RETR (residential tradesman). Only those files are downloaded. Default: A, B and C.
inVirginiaOnly boolean no true Keep only licences with a Virginia mailing address. About 20% of DPOR's licences have an out-of-state address; turn this off to include them on a statewide trade search.
maxResults integer no — Cap on the contractors returned PER place + trade search, not per run, so adding places can never silently truncate the ones later in the list. Leave empty to return every match.
proxyConfiguration object no {"useApifyProxy":false} Optional. DPOR 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: 118 Fairfax County roofing contractors at $0.002/result ≈ $0.24.

FAQ

Where does the data come from?

Virginia DPOR's public regulant lists — one tab-delimited file per licence class (Class A, B, C, legacy Class A, temporary and residential tradesman), published at dpor.virginia.gov/RegulantLists. They list current licences and were last refreshed 2026-10-05 when we checked. This actor downloads only the classes your run needs.

Is there a phone number?

No. DPOR's licence lists publish no phone number for any licence, so the phone field is always null. Email is on 41,484 of 53,779 licences (77%, 2026-10-06), and the mailing address and ZIP on every one.

How accurate is the county?

Approximate. DPOR records no county, so it is derived from the mailing ZIP with the Census Bureau's 2020 ZIP-to-county file. Of 43,223 Virginia-address licences, 24,189 have a ZIP that lies in one county (county_method zip_single), 18,652 a ZIP that crosses a county line, where we use the county holding most of the ZIP (zip_majority), and 382 a PO-box ZIP with no area (unmapped, never matched by a county search). If you need precision, use the city or ZIP filter, which are exact.

Why does 'Fairfax' not work as a county?

Fairfax, Franklin, Richmond and Roanoke are each both a county and an independent city in Virginia. Say 'Fairfax County' or 'Fairfax city' (or 'City of Fairfax'); a bare name returns the free county list rather than guessing. Some small independent cities, Fairfax city among them, cover no ZIP's majority, so a county search for them returns a free row naming the ZIPs to search instead.

How many contractors does a search return?

Counted 2026-10-06, all three classes: Fairfax County roofing 118, electrical 451, home improvement 1,575; Richmond city roofing 13, electrical 41, home improvement 144.

How do I name a trade?

By name ('Roofing', 'Electrical', 'HVAC', 'Home Improvement'), by a word from the name ('roof' finds Roofing), or by DPOR code ('ROC', 'H/H'). Turn on Discovery Mode to get every trade with its code, free.

What about out-of-state contractors?

10,556 of DPOR's licences have a mailing address outside Virginia. They are left out by default; turn off 'Virginia addresses only' to include them on a statewide trade search.

How am I charged?

One event per contractor returned ($0.002). A licence that matches two of your searches is returned and charged once. The county and trade lists, and any row explaining a source or input problem, are free.

Guides & use cases

Related actors