Virginia License Leads Scraper - Contractors, Realtors & Pros avatar

Virginia License Leads Scraper - Contractors, Realtors & Pros

Pricing

$6.00 / 1,000 license lead records

Go to Apify Store
Virginia License Leads Scraper - Contractors, Realtors & Pros

Virginia License Leads Scraper - Contractors, Realtors & Pros

Scrape Virginia DPOR licensed pros & businesses: contractors, tradesmen, realtors/brokers, appraisers, architects, engineers, home inspectors, HOA managers, cosmetologists & more. Get name, e-mail, address, license number, type, status & expiration. Filter by profession, city & renewal date.

Pricing

$6.00 / 1,000 license lead records

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Virginia License Leads Scraper — Contractors, Realtors, Appraisers & Pros (with Email)

Build a clean, sales-ready B2B lead list of every licensed professional and business in Virginia straight from the official Virginia DPOR Regulant Lists — the Commonwealth's public-records roster of contractors, tradesmen, real-estate agents & brokers, appraisers & AMCs, architects, engineers & surveyors, home inspectors, HOA managers, cosmetologists & salons, auctioneers, opticians and more.

Every record ships with the licensee or business name, e‑mail address of record, full mailing address, license number, license type, rank & specialty, status, and the issue & expiration dates — so you can prospect by profession, by city, and by renewal-timing window.

No login, no API key, no browser — fast, reliable extraction straight from the official Virginia DPOR public files.

Why this Virginia license scraper?

Most "Virginia license" tools are single-board lookup utilities that make you type one license number at a time and hand back a bare status. This actor downloads the entire official roster for any board and turns it into a rich, deduplicated, lead-scored dataset — with the e‑mail address DPOR publishes (most state license rolls have none).

DataTypical lookup toolsThis actor
Bulk roster (no license number needed)❌ one-at-a-time✅ whole board(s)
Licensee / business name (parsed)partial✅ first / middle / last / suffix + firm
E‑mail address of record✅ ~80–95% coverage
Full mailing address (street, city, state, ZIP+4)partial
License number, type, rank & specialtypartial
Status + expiration date (renewal timing)partial
Issue date → newly-licensed / business-age signal
Individuals and businesses / firmspartial✅ both
18 boards / 170+ license types in one run
Lead score (0–100) + lead signals
Only-new monitoring of new & renewed licenses
One clean table — no empty columns

Use cases

  • Lead generation — licensed pros and firms are active buyers: contractors need insurance, surety bonds, financing, materials, software & marketing; real-estate agents, brokers & appraisers need lead tools, CRMs, signage and E&O; HOA managers need vendors; salons need supplies and booking software. Reach them directly with the published e‑mail + mailing address.
  • Renewal-timing campaigns — filter by expiringWithinDays to catch licenses approaching their renewal date for CE providers, insurers and bond agencies.
  • New-business / new-licensee feeds — filter by issuedAfter to find pros and companies that just got licensed.
  • Market & competitive intelligence — size and map a profession across Virginia by city, ZIP, rank and specialty.
  • Compliance, verification & enrichment — append official license numbers, status, expiration and classifications to your existing records.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Virginia License Leads Scraper, pick one or more boards / professions, set filters (status, city, ZIP, renewal window, etc.) and click Start.
  3. Watch results stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"boards": ["contractors", "real-estate", "real-estate-appraisers"],
"statusFilter": "active",
"cities": ["Richmond", "Virginia Beach", "Arlington"],
"withEmailOnly": true,
"expiringWithinDays": 120,
"sortBy": "leadScore",
"maxResults": 1000
}
  • boards (default ["contractors"]) — which DPOR rosters to pull. Choose any of: Contractors & Tradesmen, Real Estate (brokers/salespersons/firms/settlement agents), Real Estate Appraisers & AMCs, Architects/Engineers/Surveyors/Interior Designers, Asbestos/Lead/Home Inspectors, Community Association (HOA) Managers, Barbers/Cosmetologists/Nail/Wax/Tattoo/Esthetics & Salons, Auctioneers, Opticians & Hearing Aid Specialists, Soil Scientists & Geologists, Waterworks/Wastewater/Onsite Sewage, Waste Management, Cemetery, Branch Pilots, Polygraph Examiners, Athlete Agents, Boxing/Wrestling/Martial Arts, Fair Housing.
  • statusFilter (default active)active, all, or inactive. Real-estate & appraiser boards publish separate active/inactive rosters; other boards publish a current roster (expired records inside it are flagged).
  • recordTypes — keep only individual or business records.
  • licenseCodes — filter to specific DPOR codes (board+occupation), e.g. 2701 (Class A Contractor), 2710 (Tradesman), 0226 (Real Estate Firm), 4009 (AMC), 0402 (Professional Engineer).
  • cities / zipCodes / states — geographic filters.
  • nameQuery / businessNameQuery — substring match on the licensee or company name.
  • withEmailOnly / withBusinessNameOnly / withStreetAddressOnly — quality filters.
  • expiringWithinDays — keep licenses expiring within N days (renewal timing).
  • issuedAfter (YYYY-MM-DD) — keep licenses originally issued on/after this date (newly licensed).
  • minLeadScore / sortBy / maxResults / deduplicateResults / includeRawFields — output controls.
  • monitorMode / monitorKey — emit only new/changed licenses across runs (see below).

Output

One record per license:

{
"state2": "VA",
"board": "Board for Contractors",
"boardKey": "contractors",
"category": "Construction & Trades",
"licenseNumber": "2701030496",
"certificateNumber": "030496",
"licenseCode": "2701",
"boardCode": "27",
"occupationCode": "01",
"licenseType": "Class A Contractor",
"licenseRank": "A",
"licenseSpecialty": "H/H",
"recordType": "business",
"name": "Froehling & Robertson INC",
"firstName": null,
"lastName": null,
"businessName": "Froehling & Robertson INC",
"email": "jclingenpeel@fandr.com",
"street": "3015 Dumbarton Rd",
"city": "Richmond",
"state": "VA",
"zip": "23228",
"zipExtension": null,
"country": "US",
"issueDate": "1987-08-31",
"expirationDate": "2027-08-31",
"fullAddress": "3015 Dumbarton Rd, Richmond, VA, 23228",
"hasEmail": true,
"isActive": true,
"status": "Active",
"expiresInDays": 436,
"isExpiringSoon": false,
"isExpired": false,
"businessAgeYears": 38.8,
"isNewlyLicensed": false,
"licenseLookupUrl": "https://dporweb.dpor.virginia.gov/LicenseLookup/Search?licenseNumber=2701030496",
"leadScore": 82,
"leadSignals": ["Business / firm licensee"],
"scrapedAt": "2026-06-21T12:00:00.000Z"
}

Set includeRawFields: true (default) to also attach the raw DPOR sourceFields row for full transparency.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

  • Apify API — start runs, fetch datasets, and manage schedules over REST.
  • apify-client for JavaScript and apify-client for Python — official SDKs.
  • Schedules — run it weekly/monthly to catch newly-issued and just-renewed licenses; DPOR refreshes the rosters every ~5 business days.
  • Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/virginia-license-leads-scraper').call({
boards: ['contractors', 'real-estate'],
statusFilter: 'active',
withEmailOnly: true,
expiringWithinDays: 120,
maxResults: 2000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Virginia license leads`);

Monitor mode — only new & renewed licenses

Turn on monitorMode and the actor remembers everything it has emitted (in a named key-value store) and, on the next run, returns only new or changed licenses — newly issued, renewed (new expiration), moved (new address) or updated e‑mail. Pair it with a Schedule to build an always-fresh feed of new Virginia license leads. Monitor mode works independently of the Apify scheduler — use any cadence you like, and use a distinct monitorKey per saved search.

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new license leads straight into your CRM.
  • Slack — get notified when a monitored search finds new licensees.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find active Class A contractors in Richmond with an email and a license expiring in the next 90 days" and let it run this scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete US license & local-business lead-gen stack:

Tips

  • Cost & speed — each board downloads its full official roster, so add boards deliberately. The default contractors board is fast and cheap; Real Estate and Cosmetology are the largest.
  • Renewal campaigns — combine statusFilter: active, expiringWithinDays, and sortBy: expirationSoon.
  • Find firms — set withBusinessNameOnly: true (or recordTypes: ["business"]) for B2B company leads such as contracting firms, brokerages and AMCs.
  • Recurring monitoring — combine Schedules with monitorMode to track only newly issued & renewed licenses.

FAQ

Where does the data come from? The official Virginia Department of Professional & Occupational Regulation (DPOR) "Regulant Lists" — public-records files published by the Commonwealth and refreshed every ~5 business days. No API key or login needed.

Does it include e‑mail addresses? Yes — DPOR publishes the regulant's e‑mail address of record, and most records have one (roughly 80–95% depending on the board). Use withEmailOnly: true to keep only records that have one.

Is there a phone number? No — DPOR does not publish phone numbers in the regulant lists. You get name, e‑mail and full mailing address. To add phones, enrich the licensee's website with the Website Contact Scraper.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

How do I get only newly licensed or just-renewed pros? Use issuedAfter for new licenses, expiringWithinDays for upcoming renewals, or turn on monitorMode with a Schedule to receive only new/changed records each run.

Is scraping this data legal? This actor collects publicly available government records published by Virginia DPOR. You are responsible for using the data in compliance with applicable laws (e.g. CAN-SPAM, TCPA, GDPR/CCPA) and DPOR's terms.

A field is null — why? Some records genuinely omit a street, e‑mail or specialty. Fields are null only when the source doesn't publish them, not because the scraper skipped them.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests — including additional states — are welcome; this actor is actively maintained.