MD Baltimore County Permits - Building & Trade
Pricing
from $0.03 / 1,000 permit records
MD Baltimore County Permits - Building & Trade
Baltimore County, MD building & trade permit registers (~310k, public open data): who pulled a permit for what and where. Building/construction (~165k, est. cost + depth), electrical (~64k), gas (~42k), plumbing (~39k). Search by permit number, owner, address, status, date; aggregate by type/status.
Pricing
from $0.03 / 1,000 permit records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Baltimore County (MD) Building & Trade Permits
Who pulled a permit for what, where, in Baltimore County, Maryland - the building / construction, electrical, gas and plumbing permit registers in one query API.
Data
Four county permit registers (public government open data) unified under one schema - ~310,000 permits:
| Register | Records | What it holds |
|---|---|---|
| building | ~165,000 | building & construction permits - new dwellings, alteration/addition, decks, fences, sprinklers, accessory structures, commercial work. The deep register: owner, estimated cost, assessor parcel, existing/proposed use, district, full work description |
| electrical | ~64,000 | electrical permits (residential + commercial) |
| gas | ~42,000 | gas permits |
| plumbing | ~39,000 | plumbing permits |
Every permit carries the owner, the issued / applied / occupancy dates, the permit type and subtype, and the full scope-of-work text. Street address is published on essentially every building permit and on roughly half of the trade registers; the assessor parcel is on the building register. Work dates run current - the register is live to this week.
Low cost
From $0.00005 per record, down to $0.00003 at Gold
Digging county permit records usually means trading between four separate
registers that disagree with each other. The building layer speaks a different
status vocabulary than the trade layers (ISSUE / CANCELLED there, ISSUED
/ CANCEL here), costs only exist on the building register, and each layer's
~65-column depth is mostly empty scaffolding. We normalized all four onto one
schema with per-register status matching, real date parsing, and empty-field
handling - so permitNumber / owner / status / workDescription /
address / district / zip / date-window filters just work, and aggregates
by type / status / subtype / district / land use come back clean. You query one
clean register; the archaeology stays with us.
Every record is one flat JSON object - no HTML, no pagination to chase, no shape-shifting between registers.
Use cases
- Construction & trade leads - find permits by type, district, or date window; track new dwelling construction in a council district
- Diligence - check whether a property or owner has active or recent permits, by address, owner, or exact permit number
- Market analysis - aggregate what kind of work is being pulled, where, over time
Inputs
| Field | What it does |
|---|---|
source | building / electrical / gas / plumbing register |
permitNumber | exact permit lookup (e.g. R26-05266) |
owner / address / zip | find permits by property or owner |
workDescription | search the scope-of-work text |
status | filter by exact status, or issued/open/closed/expired/cancelled/complete |
issuedFrom / issuedTo / appliedFrom / appliedTo | date windows |
aggregate + groupBy | summary counts by type / status / subtype / district / landUse |
Example inputs
One permit by number - permitNumber is an exact, case-insensitive match.
{"permitNumber": "R23-08620", "maxResults": 5}
New dwellings issued this month - source=building is the deep register; issuedFrom windows the issue date.
{"source": "building", "status": "issued", "issuedFrom": "2026-09-01", "maxResults": 25}
Deck permits in one ZIP - workDescription searches the scope-of-work text.
{"workDescription": "deck", "zip": "21136", "maxResults": 25}
Electrical permits that are issued - The trade registers use their own status vocabulary.
{"source": "electrical", "status": "ISSUED", "maxResults": 25}
Output fields
permitNumber / status / type / subtype / workDescription / ownerName
/ address / district / zip / estCost / applyDate / issuanceDate /
occupancyDate / assessorNumber / proposedUse / existingUse / landUse /
totalUnits / floorArea + register depth fields.
Note on honesty: the source publishes the contractor on no register (that column exists but is empty everywhere) - this API does not invent it. Building permits carry estimated cost on ~14% of rows, districts on ~14%; trade permits carry neither. Those fields are returned only where the county actually records them.
Example output
One permit - permitNumber=R23-08620 returns the building permit:
{"platform": "md-baltco-permits","source": "building","groupKey": "","groupCount": "","groupBy": "","permitNumber": "R23-08620","status": "ISSUE","type": "Res. Permit - New Dwelling","subtype": "New Dwelling","workDescription": "CONSTRUCT 2STY SFD W/PARTIALLY FINISHED AREAWAY BASEMENT TO BE RECREATION ROOM, BATHROOM, WET BAR, & FIREPLACE (NO OUTSIDE PROJECTION). 3 CAR S/L GARAGE, FRONT COVERED PORCH, REAR OPEN DECK, 2 FIREPLACES (NO OUTSIDE PROJECTION), HOME OFFICE, 2ND FLR BALCONY, 5 BEDROOMS, 6 BATHROOMS, 1 POWDER ROOM. 82'X51'X34.8'=7570SF. SPRINKLERS REQ'D, PATTERN BOOK, PDM#:08-0765. EROSION AND SEDIMENT CONTROL INSPECTION MUST BE SCHEDULED AND PASSED PRIOR TO ANY BUILDING ACTIVITY.","caseType": "Residential New","ownerName": "","ownerAddress": "","address": "13118 PENDLETONCT","district": "08","zip": "21136","estCost": "140000.00","applyDate": "2023-11-29","issuanceDate": "2026-09-22","occupancyDate": "2026-09-22","assessorNumber": "2400006168","initiatedBy": "An Nguyen","proposedUse": "SFD","existingUse": "VACANT LOT","landUse": "VACANT","construction": "Wood Frame","totalUnits": "","totalBeds": "5.00","floorArea": "7570.00","bathrooms": "6.00","sizeWidth": "","sizeHeight": "","setbackFront": "51.20","zoning": "RC 5","drcNumber": ""}
Source: Baltimore County government open data (public permit registers).