MD Baltimore County Permits - Building & Trade avatar

MD Baltimore County Permits - Building & Trade

Pricing

from $0.03 / 1,000 permit records

Go to Apify Store
MD Baltimore County Permits - Building & Trade

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

Wenhao Yang

Maintained by Community

Actor 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:

RegisterRecordsWhat it holds
building~165,000building & 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,000electrical permits (residential + commercial)
gas~42,000gas permits
plumbing~39,000plumbing 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

FieldWhat it does
sourcebuilding / electrical / gas / plumbing register
permitNumberexact permit lookup (e.g. R26-05266)
owner / address / zipfind permits by property or owner
workDescriptionsearch the scope-of-work text
statusfilter by exact status, or issued/open/closed/expired/cancelled/complete
issuedFrom / issuedTo / appliedFrom / appliedTodate windows
aggregate + groupBysummary 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).