# Minnesota Contractor License Lookup & List - DLI (`loomwise/minnesota-contractor-licenses`) Actor

Minnesota contractor license list and DLI license lookup, businesses only: residential building contractors, remodelers, roofers, electrical, plumbing, HVAC and registered contractors, with phone, dates and status.

- **URL**: https://apify.com/loomwise/minnesota-contractor-licenses.md
- **Developed by:** [Loomwise](https://apify.com/loomwise) (community)
- **Categories:** Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Minnesota Contractor License List and DLI License Lookup (businesses only)

**Every licensed Minnesota contractor business, from the Minnesota Department of Labor and Industry's (DLI) official nightly license files.** About **33,000 active contractor businesses**: residential building contractors, remodelers and roofers (about 10,800), electrical, technology-systems and sign contractors (about 3,600), plumbing contractors and pipelayers (about 2,000), HVAC/mechanical contractors with a mechanical bond (about 2,500) and registered construction contractors (about 14,000). Each row has the business name, DLI license number, license type, status, first-licensed and expiration dates, enforcement-action flag, business phone, address, city, state and ZIP.

**Sample output** (real rows, a few of the columns):

| `businessName` | `licenseType` | `licenseNumber` | `originalLicenseDate` | `city` | `zipCode` |
|---|---|---|---|---|---|
| Lakes Building Company LLC | Residential Building Contractor | BC810491 | 2026-11-09 | Battle Lake | 56515 |
| Amp Electric LLC | Class A Electrical Contractor | EA807834 | 2026-11-09 | Litchfield | 55355 |
| Quality Plumbing & HVAC LLC | Plumbing Contractor | PC150415 | 2026-11-10 | Owatonna | 55060 |
| Performance Duct and Ventilation LLC | Mechanical Contractor Bond | MB100711 | 2026-11-10 | Duluth | 55807 |
| Diamond Countertops LLC | Construction Contractor Registration | IR818051 | 2026-11-10 | Wayzata | 55391 |

### Quick start: 3 ready-made searches

Press **Try for free**, open the **JSON** view of the input form, paste one of these and press **Start**. Results appear in the **Output** tab in seconds and export to Excel or CSV.

**New Minnesota contractors licensed in the last 30 days** (about 300 rows, so at most $1.50)

```json
{"licensedWithinDays": 30, "maxResults": 500}
```

**Every active residential builder, remodeler and roofer in the Twin Cities** (up to 5,000 rows, so at most $15.00)

```json
{"categories": ["residential"], "zipCodes": ["550", "551", "553", "554", "555"], "maxResults": 5000}
```

**Verify a list of Minnesota contractor licenses**

```json
{"licenseNumbers": ["BC810491", "EA807834", "PC150415"]}
```

**Free to try:** Apify's free plan ($5/month in credit, no card needed) covers about **1,600 records** a month.
**Price:** $3.00 per 1,000 results.

No browser, no proxies, no login, no API key. The Actor downloads DLI's official CSV exports, so a full run takes about 15 seconds.

### Three ways to use it

1. **New-contractor leads.** Set `licensedWithinDays` (for example 7 or 30) to get every contractor business Minnesota licensed or registered in that window, newest first. DLI refreshes the files nightly, so schedule it daily or weekly.
2. **Full Minnesota contractor list.** Leave `licensedWithinDays` at 0 and filter by category, city, ZIP or business name. Use `expiresFrom` / `expiresTo` for renewal prospecting.
3. **Bulk DLI license lookup / verification.** Paste license numbers into `licenseNumbers` to check status, type, expiration and enforcement flag for a whole subcontractor list in one run.

### Categories

| `categories` value | License types included | Active businesses (Nov 2026) |
|---|---|---|
| `residential` | Residential Building Contractor, Residential Remodeler Contractor, Residential Roofer Contractor, Manufactured Home Installer | ~10,800 |
| `electrical` | Class A and Class B Electrical Contractor, Technology Systems Contractor, Satellite System Contractor, Sign Contractor Bond, Registered Electrical Employer | ~3,600 |
| `plumbing` | Plumbing Contractor, Restricted Plumbing Contractor, Registered Plumbing Employer, Pipelaying Bond | ~2,000 |
| `hvac` | Mechanical Contractor Bond (required for HVAC/mechanical contractors working in Minnesota) | ~2,500 |
| `registered` | Construction contractor registrations held by business entities | ~14,000 |

### What you get

| Field | Example |
|---|---|
| `businessName`, `dbaName` | Lakes Building Company LLC |
| `licenseNumber`, `licenseType`, `category`, `trade` | BC810491, Residential Building Contractor, residential, Residential building |
| `licenseStatus`, `isActive` | Issued, true |
| `originalLicenseDate`, `expirationDate` | 2026-11-09, 2028-03-31 |
| `hasEnforcementAction`, `renewalInProgress` | false, false |
| `businessAddress`, `businessPhone` | business address and phone of record |
| `city`, `state`, `zipCode` | Battle Lake, MN, 56515 |
| `verifyUrl`, `sourceUrl`, `sourceAgency`, `retrievedAt` | DLI license lookup, CSV file, agency, timestamp |

### Input

| Field | What it does | Default |
|---|---|---|
| `licensedWithinDays` | Only businesses first licensed in the last N days (0 = any) | 0 |
| `licensedFrom` / `licensedTo` | Exact first-licensed date window | none |
| `categories` | `residential`, `electrical`, `plumbing`, `hvac`, `registered` | all |
| `licenseNumbers` | Bulk lookup: only these licenses, any status | none |
| `cities` / `zipCodes` | Location filters | all |
| `keywords` | Business name contains | none |
| `minnesotaOnly` | Skip out-of-state contractors licensed in Minnesota | false |
| `expiresFrom` / `expiresTo` | Expiration-date window (renewal prospecting) | none |
| `activeOnly` | Only DLI status "Issued" | true |
| `includeContactDetails` | Business address and phone | true |
| `maxResults` | Cap (you pay per result) | 100 |

### Who uses this

- **Lumber yards, building-supply, electrical, plumbing and HVAC distributors** prospecting newly licensed Minnesota contractors.
- **Insurance, surety and bonding agents**, including renewal prospecting by expiration date.
- **Construction software, estimating, financing and payments companies** selling to contractors.
- **General contractors, property managers and home-service marketplaces** verifying subcontractors in bulk.

### Privacy by design

- **Businesses only.** Personal licenses (journeyworker and master electricians and plumbers, qualifying persons, technicians) are never output. Business licenses held under a person's name (sole proprietors) are dropped unless the trade name is a registered entity, and then the address and phone are blanked. `RUN_SUMMARY.droppedPersonalLicense` and `droppedPersonName` show the counts.
- **No email addresses.** DLI's files include an email column; this Actor never outputs it.

### Common questions

**Is this data legal to use?** Yes. DLI publishes these exports on its license lookup page for anyone to download, sort and filter, and refreshes them nightly.

**How fresh is it?** Each run downloads the current files. `RUN_SUMMARY.files` shows each file's last-modified time (usually early that morning).

**How do I check a Minnesota contractor license?** Paste the number into `licenseNumbers`, or part of the business name into `keywords` with `activeOnly` off. You get type, status, expiration and an enforcement-action flag. Always confirm on the DLI license lookup (`verifyUrl`) before you hire.

**Does Minnesota require a contractor license?** Residential building contractors, remodelers and roofers need a DLI license; electrical and plumbing contractors need a DLI contractor license; HVAC/mechanical contractors need a mechanical contractor bond; and many other construction contractors must register with DLI. This Actor covers all five.

**How much does it cost?** Free to try with Apify's free plan ($5/month credit, no credit card), which covers about 1,600 records a month. After that it is $3.00 per 1,000 results, plus a fraction of a cent per run.

**Can I get new contractors automatically every week?** Yes. Save your filters as a task and add a weekly **Schedule** with `licensedWithinDays: 7`. Send each batch to Google Sheets, Slack, email, Zapier, Make or n8n under **Integrations**.

**Can I call it from code or an AI agent?** Yes. Use the Apify API or the Python/JavaScript clients, or connect it to Claude, ChatGPT or Cursor through the Apify MCP server.

Data: Minnesota Department of Labor and Industry, Construction Codes and Licensing Division, license, bond, certification and registration exports. Not affiliated with or endorsed by DLI or the State of Minnesota.

### More contractor license tools from Loomwise

- [alabama-contractor-licenses](https://apify.com/loomwise/alabama-contractor-licenses): Alabama GenConBd general contractor and subcontractor license lookup and list
- [iowa-contractor-registrations](https://apify.com/loomwise/iowa-contractor-registrations): Iowa DIAL construction contractor registration list and lookup
- [us-contractor-licenses](https://apify.com/loomwise/us-contractor-licenses): contractor license lookup across 14 official sources in 10 states
- [california-contractor-licenses](https://apify.com/loomwise/california-contractor-licenses): CSLB California contractor license lookup and list
- [new-york-contractor-registry](https://apify.com/loomwise/new-york-contractor-registry): NYS Contractor Registry lookup and new contractors
- [virginia-contractor-licenses](https://apify.com/loomwise/virginia-contractor-licenses): Virginia DPOR Class A, B and C contractor license lookup and list
- [colorado-electrical-plumbing-contractors](https://apify.com/loomwise/colorado-electrical-plumbing-contractors): Colorado DORA electrical and plumbing contractors
- [illinois-idfpr-business-licenses](https://apify.com/loomwise/illinois-idfpr-business-licenses): Illinois IDFPR roofing contractors, design firms and licensed businesses
- [wa-contractor-licenses](https://apify.com/loomwise/wa-contractor-licenses): Washington L\&I contractor licenses
- [oregon-electrical-plumbing-contractors](https://apify.com/loomwise/oregon-electrical-plumbing-contractors): Oregon electrical, plumbing, HVAC/R and solar contractors
- [texas-contractor-licenses](https://apify.com/loomwise/texas-contractor-licenses): Texas TDLR HVAC and electrical contractors
- [delaware-business-licenses](https://apify.com/loomwise/delaware-business-licenses): Delaware Division of Revenue business license list (contractors, retailers, restaurants, hotels)

# Actor input Schema

## `licensedWithinDays` (type: `integer`):

Only contractor businesses whose license or registration was first issued in the last N days, newest first. 0 = any date.

## `categories` (type: `array`):

residential (building contractors, remodelers, roofers, manufactured home installers), electrical (Class A/B electrical, technology systems, sign), plumbing (plumbing contractors, pipelayers), hvac (mechanical contractor bond holders), registered (registered construction contractors). Empty = all.

## `licenseNumbers` (type: `array`):

Paste Minnesota DLI license or registration numbers (for example BC123456, EA001234, PC012345, IR123456). Returns those business licenses with any status and ignores the other filters. Unmatched numbers are listed in RUN_SUMMARY.

## `cities` (type: `array`):

Exact city names, for example Minneapolis, St Paul, Rochester. 'Saint Paul' and 'St. Paul' both work.

## `zipCodes` (type: `array`):

For example 554 (Minneapolis) or 55901.

## `keywords` (type: `array`):

Case-insensitive, any of these words, for example roofing, solar, heating.

## `minnesotaOnly` (type: `boolean`):

Skip out-of-state contractors licensed in Minnesota.

## `expiresFrom` (type: `string`):

Renewal prospecting: expiration date on or after.

## `expiresTo` (type: `string`):

Expiration date on or before.

## `licensedFrom` (type: `string`):

Exact first-licensed date window, overrides 'last N days'.

## `licensedTo` (type: `string`):

End of the first-licensed date window.

## `activeOnly` (type: `boolean`):

Only licenses with DLI status 'Issued'. Ignored in lookup mode.

## `includeContactDetails` (type: `boolean`):

Business address and phone of record, for registered entities only (never email).

## `maxResults` (type: `integer`):

You pay per result. All categories together are about 25,000 active contractor businesses.

## Actor input object example

```json
{
  "licensedWithinDays": 30,
  "minnesotaOnly": false,
  "activeOnly": true,
  "includeContactDetails": true,
  "maxResults": 100
}
```

# Actor output Schema

## `licenses` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "licensedWithinDays": 30,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("loomwise/minnesota-contractor-licenses").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "licensedWithinDays": 30,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("loomwise/minnesota-contractor-licenses").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "licensedWithinDays": 30,
  "maxResults": 100
}' |
apify call loomwise/minnesota-contractor-licenses --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,loomwise/minnesota-contractor-licenses"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/baRYmScRuHHwfF9ff/builds/MwtlMgGqjPgWtcesa/openapi.json
