DLCP
DC Contractor License Lookup & List Scraper (DLCP)
Export every active Washington, DC contractor licence (5,909 on 2026-10-09): general contractors, home improvement and asbestos abatement firms, with address and registered agent. Filter by activity, status, state, city, ZIP, ward or name.
Verification
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
license_number | string|null |
license_activity | string|null |
status | string|null |
status_date | string|null |
initial_issue_date | string|null |
license_start_date | string|null |
expiration_date | string|null |
business_name | string|null |
trade_name | string|null |
entity_type | string|null |
owner_name | string|null |
registered_agent | string|null |
address | string|null |
street | string|null |
city | string|null |
address_state | string|null |
zip_code | string|null |
premise_in_dc | boolean|null |
ward | string|null |
mailing_address | string|null |
state | string|null |
notice | string|null |
notice_type | string|null |
source_url | string|null |
Sample row
{
"license_number": "410521000073",
"license_activity": "General Contractor/Construction Manager",
"status": "Active",
"status_date": "2026-10-06",
"initial_issue_date": "2020-11-05",
"license_start_date": "2026-10-06",
"expiration_date": "2030-10-31",
"business_name": "Aku Consulting Inc.",
"trade_name": "GOTA Engineering",
"entity_type": "Domestic Business Corporation",
"owner_name": null,
"registered_agent": "REGISTERED AGENTS INC.",
"address": "2402 17th Street SE, Washington, DC, 20020, USA",
"street": "2402 17th Street SE",
"city": "WASHINGTON",
"address_state": "DC",
"zip_code": "20020",
"premise_in_dc": true,
"ward": "Ward 8",
"mailing_address": "2402 17th Street SE, Washington, DC, 20020, USA",
"state": "DC",
"source_url": "https://maps2.dcgis.dc.gov/dcgis/rest/services/FEEDS/DCRA/MapServer/0/query?where=CUSTOMERNUMBER%3D%27410521000073%27&outFields=%2A&f=json"
} Inputs
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
activity | string | no | — | Which DLCP contractor licence activity to return: 'general_contractor' (General Contractor/Construction Manager), 'home_improvement' (Home Improvement Contractor) or 'asbestos' (Asbestos Abatement Business). Leave empty for all three. An unrecognised value is ignored with a log line; if nothing you gave is recognised, the run returns a free row saying so instead of every licence. |
activities | array | no | [] | Several activities in ONE run, e.g. general_contractor and home_improvement. Combined with 'Licence activity' if you fill both. |
status | string | no | — | Leave empty for Active licences (or for every status when you look up licence numbers). 'all' adds closed, cancelled, expired and suspended licences; 'expired' covers every 'Expired' variant DLCP files (Expired, Expired - Enforcement, Expired - 1st / 2nd / Final Penalty). |
licenseNumber | string | no | — | A DC Basic Business Licence number to verify, digits only, e.g. 420225000088. Searches every status unless you set one. |
licenseNumbers | array | no | [] | Several licence numbers in ONE run. The run log names any that matched nothing. Filters of different kinds combine (a licence must match all of them), so leave name, city and the other filters empty for a plain licence lookup. |
name | string | no | — | Text the business name or trade name contains (case-insensitive), e.g. 'ROOFING' or 'SMITH'. |
names | array | no | [] | Several name fragments in ONE run; a licence matching any of them is returned once. The run log says how many licences each one matched. |
addressState | string | no | — | Two-letter state of the business premises address, e.g. DC, MD or VA. Most DC-licensed contractors are based outside the District (on 2026-10-09: 2,863 active in MD, 1,278 in VA, 1,154 in DC). |
addressStates | array | no | [] | Several states in ONE run. Combined with 'Business address state' if you fill both. |
city | string | no | — | City of the business premises address, exact match ignoring case, e.g. 'Silver Spring'. DC premises file the city as 'Washington'. |
cities | array | no | [] | Several cities in ONE run. Combined with 'City' if you fill both. |
zip | string | no | — | ZIP of the business premises address, 5 digits (a ZIP+4 is matched on its first 5). |
zips | array | no | [] | Several ZIPs in ONE run. Combined with 'ZIP code' if you fill both. |
ward | string | no | — | DC ward of the business premises, 1 to 8 (only premises inside the District have a ward). |
wards | array | no | [] | Several wards in ONE run, e.g. 5 and 6. |
maxResults | integer | no | 500 | Cap on licences returned for the whole run (a spend control). DC had 5,909 active contractor licences and 20,910 in all statuses on 2026-10-09, so 100000 returns everything that matches. The run log states how many matched when the cap cuts it short. |
proxyConfiguration | object | no | {"useApifyProxy":false} | Optional. DC's open-data server 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: 1154 active contractor licences based in DC at $0.004/result ≈ $4.62.
FAQ
Where does the data come from?
From the 'Basic Business License' table that DC GIS publishes for the Department of Licensing and Consumer Protection (DLCP, formerly DCRA) on opendata.dc.gov, refreshed daily. The actor reads the three contracting business activities on every run.
Does it include phone numbers or emails?
No. The licence table publishes no phone number or email address, and the actor does not add any. Each licence carries a premises address, a mailing address and a registered agent.
Why are most of the contractors outside DC?
A contractor needs a DC licence to work in the District, wherever it is based. On 2026-10-09, 2,863 of the 5,909 active licences had a Maryland premises address, 1,278 a Virginia one and 1,154 a DC one. Set 'Business address state' to keep one state, or 'DC ward' for premises inside the District.
Are expired licences included?
Only when asked. The default is Active; 'all' returns every status DLCP records (20,910 licences on 2026-10-09), and 'expired' collects Expired, Expired - Enforcement and the three Expired penalty statuses. Looking up licence numbers searches every status unless you set one.
What happens if I type a value the actor does not know?
That value is ignored and the run log says so. If none of the values you gave for a filter is recognised, the run returns one free row explaining it instead of every licence.
How am I charged?
$0.004 per licence returned. The default input returns the first 500 active licences ($2.00); every active licence (5,909) is about $24. Rows explaining an outage, an unrecognised filter or an empty result are free.
Guides & use cases
Related actors