Virginia DPOR License Scraper: Contractors & Tradesmen
Pricing
from $17.00 / 1,000 results
Virginia DPOR License Scraper: Contractors & Tradesmen
Scrape the Virginia DPOR license lookup for contractors, electricians, plumbers, HVAC and other licensed pros. Get name, license number, full address, license type, board, class/rank, specialties and expiration date. Search by name, business or trade. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Virginia DPOR License Scraper: Contractors & Tradesmen
Here is one real result, with every field the actor returns:
{"licenseNumber": "2705034120","name": "APEX PLUMBING LLC","addressFull": "3240 A CORPORATE COURT, ELLICOTT CITY, MD 21042","street": "3240 A CORPORATE COURT","city": "ELLICOTT CITY","state": "MD","zip": "21042","licenseType": "Contractor","board": "Board for Contractors","firmType": "LLC - Limited Liability Company","rank": "Class A","specialties": "Plumbing (PLB)","initialCertificationDate": "1996-06-03","expirationDate": "2008-06-30","status": "TERMINATED","searchQuery": "plumbing","source": "Virginia DPOR License Lookup","observedAt": "2026-08-10T14:36:42.634Z"}
The most complete Virginia DPOR license scraper available. It returns every field the Commonwealth of Virginia public license register exposes for each licensee, plus a parsed address (street, city, state, zip) and optional detail-page enrichment (firm type, class or rank, specialties, certification and expiration dates), and lets you search by name, business, or trade keyword.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the Virginia Department of Professional and Occupational Regulation (DPOR) public license lookup, which covers contractors, tradesmen (electricians, plumbers, HVAC, gas fitters) and many other DPOR boards. For each search term it reads the results table, parses each licensee into one normalized record with a split address, and (when detail enrichment is enabled) opens each license detail page to add firm type, class or rank, specialties, initial certification date, expiration date, and status. Missing source values are returned as null.
Search by any combination of business name, individual name, or trade keyword. Each query runs a separate search and results are combined and deduplicated. The register returns up to 200 matches per query, so use specific terms to go deeper.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 50 plumbing licenses, each enriched from its detail page.
{"searchQueries": ["plumbing"],"fetchDetails": true,"maxLicenses": 50}
Provide at least one search term in searchQueries. Set fetchDetails to false for a faster run without the detail-page fields.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | yes | ["plumbing"] | One or more search terms: a business name, an individual name, or a trade keyword (for example plumbing, electrical, Smith Construction). Each query runs a separate search and results are combined. |
fetchDetails | boolean | no | true | When enabled, each license is enriched with firm type, class or rank, specialties, initial certification date, and expiration date from its detail page. Disable for a faster run. |
maxLicenses | integer | no | 50 | Maximum number of licenses to collect across all searches. |
At least one search term is required. With no query, the actor writes a single item explaining that a query is needed and exits.
Output reference
One dataset item per license. Types: string or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
licenseNumber | string | DPOR license number (unique per license). |
name | string | Business or individual name on the license. |
addressFull | string | Full address as shown in the register. |
street | string | Street portion parsed from the address. |
city | string | City parsed from the address. |
state | string | Two-letter state code parsed from the address. |
zip | string | ZIP code parsed from the address. |
licenseType | string | License type, for example Contractor. |
board | string | DPOR board that issued the license, for example Board for Contractors. |
firmType | string | Legal firm type, for example LLC - Limited Liability Company. Populated when fetchDetails is on, else null. |
rank | string | Class or rank, for example Class A. Populated when fetchDetails is on, else null. |
specialties | string | Trade specialties, for example Plumbing (PLB). Populated when fetchDetails is on, else null. |
initialCertificationDate | string | Date the license was first certified. Populated when fetchDetails is on, else null. |
expirationDate | string | License expiration date. Populated when fetchDetails is on, else null. |
status | string | License status, for example TERMINATED, when present on the detail page, else null. |
searchQuery | string | The search term that returned this record. |
source | string | Data source label: Virginia DPOR License Lookup. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | Present only on a failed search; an item with a populated error field is written instead of a license. |
Example output record
Real record from a live run (input {"searchQueries": ["plumbing"], "fetchDetails": true, "maxLicenses": 50}):
{"licenseNumber": "2705034120","name": "APEX PLUMBING LLC","addressFull": "3240 A CORPORATE COURT, ELLICOTT CITY, MD 21042","street": "3240 A CORPORATE COURT","city": "ELLICOTT CITY","state": "MD","zip": "21042","licenseType": "Contractor","board": "Board for Contractors","firmType": "LLC - Limited Liability Company","rank": "Class A","specialties": "Plumbing (PLB)","initialCertificationDate": "1996-06-03","expirationDate": "2008-06-30","status": "TERMINATED","searchQuery": "plumbing","source": "Virginia DPOR License Lookup","observedAt": "2026-08-10T14:36:42.634Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~virginia-dpor-licenses-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["electrical"],"fetchDetails":true,"maxLicenses":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~virginia-dpor-licenses-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["Smith Construction"],"maxLicenses":100}'
Apify CLI:
apify call scrapers_lat/virginia-dpor-licenses-scraper \--input '{"searchQueries":["plumbing"],"fetchDetails":false}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per license record returned (
resultevent). WhenfetchDetailsis enabled, a separatedetailsevent is charged for each license successfully enriched from its detail page. See the pricing tab for current prices. - No charge on failure. If a search fails, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 licenses per run. Upgrade for higher
maxLicenses. - Source limit. The register returns up to 200 matches per query, so use specific terms to reach more records.
FAQ and troubleshooting
What can I search?
Any business name, individual name, or trade keyword (for example plumbing, electrical, Smith Construction). Pass several terms in searchQueries to combine multiple searches in one run.
What does fetchDetails add?
Firm type, class or rank, specialties, initial certification date, expiration date, and status, pulled from each license detail page. Turn it off for a faster, cheaper run that returns only the fields visible in the results table.
A run returned 0 records. Why? The search matched nothing in the register. Try a broader or differently spelled term. Zero-result runs are not charged.
Why is the address state not Virginia?
DPOR licenses firms and individuals that operate in Virginia, but their business address can be in another state. The state field reflects the address on the license.
Is this an official DPOR tool? No. This actor is independent and has no affiliation with the Virginia DPOR. It reads only data that is publicly available through the DPOR license lookup. Use it in accordance with the source terms of service.
Related scrapers
- California CSLB Contractor License Scraper: California licensed contractors with status and classifications.
- Washington L&I Contractor Scraper: Washington State registered contractors and bonds.
- Florida DBPR License Scraper: Florida professional and business licenses.
- Alabama LBGC Contractors Scraper: Alabama licensed general contractors.
- Chicago Building Permits Scraper: Chicago building permits with contractor details.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Virginia DPOR. Accesses only publicly available license data. Use in accordance with the source terms of service.
