Virginia Real Estate License Lookup
Pricing
Pay per event
Virginia Real Estate License Lookup
Download and filter official Virginia DPOR active and inactive real estate broker and salesperson license records.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Download and filter official Virginia Department of Professional and Occupational Regulation (DPOR) real estate credential files. The Actor turns the regulator's active and inactive broker and salesperson lists into normalized JSON records for verification, compliance exports, and scheduled refreshes.
It covers four roles published by the Virginia Real Estate Board:
- associate brokers;
- sole proprietors;
- principal brokers;
- salespeople.
Choose active, inactive, or both status groups. Every result includes its exact official source file and fetch time.
What can you do with this DPOR license lookup?
- Check supplied certificate numbers against official bulk records.
- Export active Virginia broker and salesperson credentials.
- Review inactive license records separately from active records.
- Filter licensees by name, city, state, ZIP code, dates, or public email availability.
- Build repeatable brokerage due-diligence and compliance snapshots.
- Send normalized records to a spreadsheet, database, CRM, or data warehouse.
- Schedule the same input to compare official files over time.
This Actor downloads regulator-published files. It does not automate the slower one-record-at-a-time DPOR search page.
Who is this Actor for?
Brokerage compliance teams can create bounded lists of active or inactive credentials and retain source provenance.
Property firms and vendor-risk teams can verify batches of names or certificate numbers before onboarding or periodic review.
Data analysts can normalize DPOR tab-delimited files without maintaining custom parsing and date conversion code.
Developers can call one Actor API and receive stable JSON instead of downloading and joining eight source files.
Operations teams can schedule a saved Task and compare dataset exports between runs.
Why use this Virginia real estate license Actor?
- Official source: all primary records come from public Virginia DPOR Real Estate Board regulant files.
- Active and inactive separation: status is derived from the regulator's named active or inactive list, not guessed from expiration dates.
- Role-aware output: associate broker, sole proprietor, principal broker, and salesperson lists are normalized consistently.
- Fail-closed parsing: a changed header or unexpected response stops the run instead of silently producing misleading fields.
- Batch filters: narrow thousands of public records in one run.
- Traceable results:
sourceUrl,sourceFile, andfetchedAtaccompany every item. - Lightweight execution: direct HTTP is used; no browser or proxy configuration is required.
What Virginia license data is extracted?
| Field | Meaning |
|---|---|
certificateNumber | DPOR certificate number preserved as text |
licenseStatus | active or inactive, based on the official source list |
statusSource | Human-readable DPOR status and role list |
role / roleLabel | Normalized and display forms of the credential role |
licenseRank | Source rank such as BRKR or SALP |
individualName | Licensee name published by DPOR |
businessName | Business value when present in the source row |
addressLine1, addressLine2, poBox | Source address components |
fullAddress | Combined display address |
city, state, zipCode | Normalized domestic location fields |
province, country, postalCode | International address fields when present |
issueDate | Certification date normalized to YYYY-MM-DD |
expirationDate | Expiration date normalized to YYYY-MM-DD |
email | Public email when DPOR publishes one |
boardCode, occupationCode | Source regulator codes |
sourceUrl, sourceFile | Exact official file provenance |
fetchedAt | UTC source-fetch timestamp |
Empty source values remain empty strings. The Actor does not invent missing firms, emails, dates, or affiliations.
How to run the Virginia real estate license lookup
- Open the Actor in Apify Console.
- Choose
active,inactive, or both under License statuses. - Select one or more real estate roles.
- Add optional certificate, name, location, date, or email filters.
- Set Maximum license records to control output and cost.
- Click Start.
- Open the default dataset to inspect, download, or integrate the results.
A useful first run is:
{"statuses": ["active"],"roles": ["associateBroker", "principalBroker", "salesperson"],"maxItems": 20}
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
statuses | array | ["active"] | Official active and/or inactive files |
roles | array | all four roles | Associate broker, sole proprietor, principal broker, and/or salesperson |
licenseNumbers | string array | empty | Exact certificate numbers |
names | string array | empty | Case-insensitive individual-name contains filters |
businessNames | string array | empty | Case-insensitive business-name contains filters |
cities | string array | empty | Exact city matches, case-insensitive |
states | string array | empty | Exact state abbreviations |
zipCodes | string array | empty | Exact five-digit ZIP codes |
emailRequirement | string | any | any, withEmail, or withoutEmail |
issuedAfter | date | none | Certification date on or after YYYY-MM-DD |
issuedBefore | date | none | Certification date on or before YYYY-MM-DD |
expiresAfter | date | none | Expiration date on or after YYYY-MM-DD |
expiresBefore | date | none | Expiration date on or before YYYY-MM-DD |
maxItems | integer | 100 | Maximum accepted records, from 1 to 75,000 |
Values within one text-list filter use OR logic. Different filters use AND logic. For example, two cities plus withEmail means either city, but only records that have a public email.
Output example
The default dataset contains one object per accepted credential. This anonymized example preserves the real output shape:
{"certificateNumber": "001234","licenseStatus": "active","statusSource": "DPOR Real Estate Active Salesperson","role": "salesperson","roleLabel": "Salesperson","licenseRank": "SALP","individualName": "EXAMPLE A LICENSEE","businessName": "","addressLine1": "100 MAIN STREET","addressLine2": "","poBox": "","fullAddress": "100 MAIN STREET, RICHMOND, VA, 23219","city": "RICHMOND","state": "VA","zipCode": "23219","zipCodeExtension": "0000","province": "","country": "","postalCode": "","issueDate": "2021-02-25","issueDateSource": "02/25/2021","expirationDate": "2027-02-28","expirationDateSource": "02/28/2027","email": "licensee@example.org","boardCode": "02","occupationCode": "25","sourceUrl": "https://www.dpor.virginia.gov/sites/default/files/Records%20and%20Documents/Regulant%20List/0225s_act.txt","sourceFile": "0225s_act.txt","fetchedAt": "2026-08-22T12:00:00.000Z"}
How much does it cost to look up Virginia real estate licenses?
This is a pay-per-event Actor. Each run has a $0.005 start fee, then charges for each accepted item written to the dataset. The BRONZE item price is $0.003444 per license record, with lower unit prices on higher Apify pricing tiers.
| Apify tier | Price per accepted record |
|---|---|
| FREE | $0.0039606 |
| BRONZE | $0.003444 |
| SILVER | $0.0026863 |
| GOLD | $0.0020664 |
| PLATINUM | $0.0013776 |
| DIAMOND | $0.00096432 |
At the BRONZE tier, example totals are:
| Accepted records | Estimated total |
|---|---|
| 20 | $0.0739 |
| 100 | $0.3494 |
| 1,000 | $3.449 |
Filters that produce no records incur only the start event. Rejected, duplicate, or failed source rows are not charged as items. Apify platform plan usage can be billed separately under your account terms.
Scheduled compliance and refresh workflows
A Task can run the same input daily, weekly, or monthly. For recurring verification:
- Save an input that identifies the needed roles and status groups.
- Choose a stable
maxItemsappropriate for the expected export. - Schedule the Task in Apify Console.
- Send each dataset to your storage or automation destination.
- Compare records by
certificateNumber,licenseStatus, androle. - Use
fetchedAtandsourceFileto retain provenance for each snapshot.
The Actor emits snapshots. It does not calculate changes or send alerts by itself; connect scheduled datasets to your own comparison workflow.
Export and integrations
The default dataset can be downloaded as JSON, CSV, Excel, XML, or RSS through Apify's dataset API and Console.
Common patterns include:
- append scheduled exports to Google Sheets;
- upsert records into a compliance database by certificate number and role;
- route newly inactive records into a manual review queue;
- enrich an internal roster with official status and expiry dates;
- trigger Make, Zapier, or webhook workflows after a successful run;
- load snapshots into BigQuery, Snowflake, or another warehouse.
Remember that names are not guaranteed unique. Prefer certificate numbers when matching records.
Run with the Apify API
Replace YOUR_APIFY_TOKEN with your token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~virginia-real-estate-license-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"statuses": ["inactive"],"roles": ["salesperson"],"cities": ["Richmond"],"maxItems": 20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const input = {statuses: ['active'],roles: ['associateBroker', 'principalBroker'],expiresBefore: '2027-12-31',emailRequirement: 'withEmail',maxItems: 50,};const run = await client.actor('automation-lab/virginia-real-estate-license-lookup').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/virginia-real-estate-license-lookup').call(run_input={'statuses': ['active'],'roles': ['salesperson'],'states': ['VA'],'maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI assistants
Add the Actor as an Apify MCP tool in Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/virginia-real-estate-license-lookup"
Claude Desktop setup
Add this server entry to the Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/virginia-real-estate-license-lookup"}}}
Cursor setup
Add the same JSON under Cursor Settings → MCP → Add server, then authenticate with your Apify account when prompted.
VS Code setup
Add the same HTTP MCP server URL through your VS Code MCP extension or workspace MCP configuration.
Example prompts:
- "Download 50 active Virginia principal broker records and show certificate number, name, and expiration date."
- "Find inactive Virginia salesperson credentials with Richmond addresses."
- "Create a CSV-ready export of active associate brokers expiring through the end of 2027."
MCP clients still use your Apify account and the Actor's active pricing.
Tips for reliable results
- Start with a small
maxItemswhile refining filters. - Certificate numbers are exact matches; preserve leading zeros.
- Name and business filters are case-insensitive substring matches.
- City, state, and ZIP filters are exact after case normalization.
- Select both statuses when checking whether a credential appears in either published list.
- Use date filters for bounded compliance cohorts, not as a substitute for
licenseStatus. - Keep source provenance when moving records into another system.
- Schedule refreshes at a cadence appropriate for your business need; the source controls update timing.
Source limits and failure behavior
The Actor reads the public bulk lists linked from the DPOR Regulant Lists page. Its scope is the eight active/inactive broker and salesperson files, not every Virginia profession.
Important limits:
- DPOR controls publication timing, availability, and field completeness.
- Business names and emails can be empty.
- Public bulk files do not include a complete business-affiliation graph.
- Status means membership in a named active or inactive source list at fetch time.
- The Actor does not infer disciplinary history, renewal eligibility, or good standing beyond published fields.
- A changed file header, non-tabular response, or failed download causes a non-zero run instead of partial silent output.
- No residential proxy or browser fallback is enabled.
Responsible use and legality
The Actor processes public professional-license records published by a Virginia regulator. You are responsible for your purpose, retention practices, security controls, and compliance with applicable laws and DPOR terms.
Do not use public contact details for harassment, unlawful discrimination, or unsolicited messaging that violates applicable rules. Treat an automated result as a research and workflow aid. For consequential decisions, retain provenance and verify the current record through the official regulator.
This Actor is not affiliated with or endorsed by the Virginia DPOR or Real Estate Board.
Troubleshooting and FAQ
Why did my run return zero records?
The selected filters are combined with AND logic. Remove filters one at a time, check the chosen active/inactive status, and confirm certificate numbers include leading zeros.
Why is businessName empty?
Many individual DPOR bulk rows do not publish a business name. The Actor preserves the official value and does not infer an affiliation.
Does an unexpired date prove the license is active?
No. Use licenseStatus, which identifies the official active or inactive file. Dates are separate source fields.
Can I search one exact certificate number?
Yes. Put it in licenseNumbers. The Actor checks the selected status and role files and emits matching records.
Does the Actor include inactive real estate licenses?
Yes. Add inactive to statuses, or select it alone.
Can it monitor changes automatically?
You can schedule repeated runs and compare the resulting datasets. The Actor creates normalized snapshots; change detection and notifications belong in your downstream workflow.
What happens if DPOR changes its file format?
The Actor validates the exact expected header and fails with a source-specific schema error. This prevents shifted columns from being presented as valid license data.
Related automation-lab Actors
- Virginia DPOR Contractor License Leads Scraper for official Virginia Class A, B, and C contractor records.
- Texas TREC License Holder Search Scraper for Texas real estate license-holder workflows.
- New York eAccessNY Real Estate License Scraper for New York real estate credential records.
For Virginia real estate records, use this Actor so status, role, dates, public contact fields, and DPOR provenance stay in one consistent dataset.