Minnesota contractor data does not come from one clean state feed. It comes from separate government systems that were never designed to line up with each other.
That is the first thing to ask about any contractor-data source: where the record came from, field by field. Not the category. The source. A license record from the Minnesota Department of Labor and Industry is one thing. A permit pulled from a city portal is another. An OSHA inspection matched back to a license by company name is a third. If those distinctions disappear in the product, you are being asked to trust a black box.
- MN DLI LICENSES274,532
- MN DLI DISCIPLINE1,319 orders
- MN AG FILINGS11 actions
- OSHA INSPECTIONS122,688
- CITY + COUNTY PERMITS4,224,614 across 102 cities
Licenses come from DLI directly.
Minnesota contractor licenses are the cleanest part of the stack. DLI publishes a bulk export of active and inactive licenses. The fields are what you would expect: license number, business name, trade, status, issue date, expiration date, and contact details. That is the authoritative source. PullFirst normalizes formatting around it, but the record starts there.
This matters because a lot of downstream logic depends on the license table being boring. If a contractor does not exist in the DLI export, there is nothing trustworthy to match permits, discipline, or OSHA history against later.
Discipline also starts at DLI, but it is a different feed.
DLI disciplinary orders are not the same dataset as the license export. They are their own public record with their own shape: order date, action type, penalty amount, violation language, and source document. Some orders name a license cleanly. Some name a business and a person. Some are easy to attach. Some are not.
That is why match tiers exist. A disciplinary record linked by explicit license number is stronger than one linked by company name and city. The useful thing to expose is not fake certainty. It is the confidence of the attachment.
Attorney General actions sit on a separate track.
Minnesota Attorney General consumer-protection actions do not show up in the DLI discipline feed. They live in a separate state record and they answer a different question. DLI discipline is administrative. An AG filing usually means the state moved into fraud, consumer-protection, or broader civil enforcement territory.
Putting those records next to each other is useful. Pretending they are the same thing is sloppy. A contractor with a consent order from DLI and a contractor with an AG judgment may both be "bad" in a loose marketing sense, but they are not the same risk signal.
OSHA comes from the federal government, not from Minnesota licensing.
OSHA inspections arrive through the Department of Labor's IMIS export files. Those files have establishment names and addresses. They do not carry Minnesota license numbers. So again, attachment is a matching problem. If the establishment name lines up cleanly with one Minnesota licensee, that is useful. If it collides with three similar names, the system should say so.
This is where a lot of contractor products start bluffing. They collapse a probabilistic match into a neat contractor profile and hope nobody asks how it was joined. That shortcut makes the page cleaner. It also makes the data worse.
Permits are the messiest source because there is no statewide feed.
Minnesota does not publish one statewide building-permit database. The record is scattered across city and county systems: Accela, EnerGov, LOGIS, BS&A, CitizenServe, CityView, OpenGov, ArcGIS endpoints, and a handful of local variations that only make sense once you have fought with them directly.
That is why permit coverage should be discussed jurisdiction by jurisdiction, not as a vague statewide promise. Minneapolis is one source. St. Paul is another. The LOGIS suburban ring is its own cluster. Some systems publish rich detail. Some barely publish enough to support a usable record. Some refresh daily. Some do not.
The honest version is more useful than the clean version.
PullFirst exposes source attribution, freshness, and match confidence because those details are part of the product, not caveats hidden behind it. Anyone deciding whether to underwrite, route leads, or extend credit to a contractor needs to know whether a record came from DLI, OSHA, or a city permit system, and whether the attachment was explicit or inferred.
The clean marketing version of this story is that Minnesota contractor data has been unified. The true version is better. Minnesota publishes a useful public record, but it is fragmented, inconsistent, and worth handling carefully. If a vendor cannot tell you which source produced a field, the safe assumption is that the field will fail when you need it most.
SOURCE Minnesota Department of Labor and Industry license and disciplinary records, Minnesota Attorney General consumer-protection actions, federal OSHA IMIS export files, and Minnesota city and county permit systems. Copy reflects the source architecture in PullFirst as of April 17, 2026.