Minnesota Contractor Licenses - DLI Trades Register avatar

Minnesota Contractor Licenses - DLI Trades Register

Pricing

from $0.03 / 1,000 minnesota construction trades license records

Go to Apify Store
Minnesota Contractor Licenses - DLI Trades Register

Minnesota Contractor Licenses - DLI Trades Register

Minnesota DLI construction trades license register (259k rows, public data): electricians, plumbers, boiler and high-pressure-piping engineers, residential contractors and more. Search by name, type, subtype, status or city, look up a license, screen enforcement actions.

Pricing

from $0.03 / 1,000 minnesota construction trades license records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Minnesota Contractor Licenses - DLI Construction Trades Register

The Minnesota Department of Labor and Industry (DLI) publishes its entire current construction trades license register as public data - every electrician, plumber, boiler and high-pressure-piping engineer, residential contractor and more - refreshed continuously. This actor turns that register into a charged-per-record lookup and screening tool.

Built for: contractor and tradesman due diligence - verifying that an electrician, plumber or builder actually holds a current Minnesota license, screening enforcement actions, checking license expiration and status, and statewide trade-market sizing.

What it covers

259,243 license records (current register):

License typeRows
Electrical109,837
Residential Contractors59,290
Plumbing36,923
Boiler34,973
High Pressure Piping7,493
Mechanical Contractor Bond5,362
Elevator1,946
Building Officials1,113
Water Conditioning1,061
Continuing Education1,005
Manufactured Structures240

Across 78 license subtypes - master and journeyworker electricians and plumbers, registered (unlicensed) electricians, power-limited technicians, special engineers, qualifying builders and remodelers, building officials, backflow-prevention testers, elevator constructors and more.

Every row carries the licensee or business name, doing-business-as name, license number, license type and subtype, mailing address, city, state, ZIP, phone, status, original and expiration dates, an enforcement-action flag, and a renewal-in-progress marker. Dates come through as clean ISO (YYYY-MM-DD).

Two things this actor fixes from the raw file. First, DLI ships each status in mixed case - Expired and EXPIRED, Issued and ISSUED, Suspended and SUSPENDED - so a naive filter silently splits a facet. This actor ships a normalized status (Issued, Expired, Licensed, Revoked, Suspended, Voluntary Termination, Denied, Withdrawn) and filters and aggregates on that. Second, Enforcement_Action is a genuine public flag - 3,759 records (~1.5%) carry a DLI enforcement action.

Typical questions

  • "Is this electrician's or plumber's license current - and has DLI taken an enforcement action?"
  • "Show every Class A Master Electrician in Minneapolis."
  • "Which residential building contractors in Minnesota hold a current license?"
  • "Look up license PJ064542."
  • "Find every trade license with an enforcement action on record."
  • "How are Minnesota trades licenses distributed by type and status?"

Inputs

InputWhat it does
licenseNumberexact license number -> that licensee's row, e.g. PJ064542
namelicensee or DBA name substring, case-insensitive
licenseTypethe trade (Electrical, Plumbing, Boiler, Residential Contractors )
licenseSubtypeexact credential, e.g. Class A Master Electrician, Journeyworker Plumber
busPersPersonal (individual) or Business (entity)
statuscanonical status - Issued / Expired / Licensed / Revoked / Suspended /
enforcementActiontrue = only records with a DLI enforcement action
city / state / zipCodelocation filters (out-of-state licensees carry their home state)
aggregate / groupByone summary row per group with a count - type / subtype / status / business-or-personal / state
maxResultscap records (default 200)

Default run = a tiny aggregate (license-type mix) - fast and safe for the daily auto-test, never a surprise full dump. For records, add a name / licenseType / city filter or a licenseNumber.

Example inputs

Look up one license number - a bare number returns that licensee's row.

{ "licenseNumber": "PJ064542" }

Master electricians in Minneapolis -

{ "licenseSubtype": "Class A Master Electrician", "city": "Minneapolis", "maxResults": 10 }

Screen enforcement actions - enforcementAction=true returns every license carrying a DLI action.

{ "enforcementAction": true, "maxResults": 10 }

The license-type mix - one summary row per trade, across the register.

{ "aggregate": true, "groupBy": "licenseType", "maxResults": 10 }

Low cost

From $0.00005 per record, down to $0.00003 at Gold - billed only for the rows you use, and each record is metered individually.

Minnesota's register is a 51 MB flat CSV with no query server behind it - there is no way to ask the state for "just Minneapolis master electricians". Rather than make every lookup pay for a full-register download, the register is mirrored, and each run queries the mirror in a single pass. That mirror is what lets a 259,243-row register behave like a live lookup at per-record pricing. Every pull is integrity-checked against the register's known shape (total count, type floors, the closed type vocabulary, the status vocabulary, license-number uniqueness, key-column coverage), so a degraded or schema-changed source fails loudly instead of returning bad rows.

Example output

licenseNumber=PJ064542 - a journeyworker plumber:

{
"platform": "mn-dli",
"source": "mn-dli-licenses",
"jurisdiction": "MN",
"licenseNumber": "PJ064542",
"busPers": "Personal",
"licenseType": "Plumbing",
"licenseSubtype": "Journeyworker Plumber",
"name": "ADAM J OTIS",
"dbaName": "",
"address1": "120 MINNESOTA ST WEST",
"address2": "",
"city": "Cannon Falls",
"state": "MN",
"zipCode": "55009",
"phone": "701230998_",
"status": "Issued",
"statusNormalized": "Issued",
"originalDate": "2021-09-15",
"expirationDate": "2027-12-31",
"enforcementAction": "0",
"renewalInProgress": "",
"refreshed": "2026-10-07",
"mode": "record",
"groupKey": "",
"groupCount": ""
}

aggregate=true, groupBy=licenseType - the register's trade mix:

Electrical 109,837
Residential Contractors 59,290
Plumbing 36,923
Boiler 34,973
High Pressure Piping 7,493

Source