# Minnesota Business Registry - Officers, Agents & Filings (`scrapers_lat/minnesota-business-registry-scraper`) Actor

Search Minnesota's business register: corporations, LLCs, partnerships, nonprofits and assumed names with status, registered office and principal addresses, registered agent, CEO/managers/owners with addresses, share counts, former names and full filing history. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/minnesota-business-registry-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $13.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Minnesota Business Registry — Officers, Agents & Filings

Structured company data for **Minnesota**, straight from the state's official public business
register. Search by name, pull whole slices of the register, or resolve a file number — and get
back what actually matters for KYB, lead generation and diligence: **who runs the business, who
its registered agent is, where it really sits, and everything it has ever filed.**

**📥 [Input](https://apify.com/scrapers_lat/minnesota-business-registry-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/minnesota-business-registry-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/minnesota-business-registry-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/minnesota-business-registry-scraper/examples)**

Results come back as JSON, CSV, Excel or via API.

***

### What you get for every business

**Identity**

- Registered business name and how the register classifies that name
- **File number** and the register's own record identifier
- Business type — LLC, business corporation, limited partnership, LLP, cooperative, nonprofit,
  assumed name — plus a simplified `entityCategory` you can group on
- The Minnesota statute the entity is filed under (302A, 322C, 333 …)
- Status (active / in good standing, inactive) with a clean `isActive` flag
- Home jurisdiction and a `isDomestic` flag separating Minnesota-formed entities from out-of-state
  registrants
- Original filing date, renewal due date and expiration date

**Addresses — split into usable columns**

- Registered office address, with street, city, state and ZIP as separate fields
- Principal executive office address
- Principal place of business address
- Mailing address
- A best-available `city` / `state` / `zip` so every row is mappable and filterable

**People**

- **Registered agent** for service of process — the single most requested field on any registry
- Every named **officer, manager, governor, owner or applicant**, each with their title and their
  **own business address** broken into city, state and ZIP
- Convenience columns: chief executive officer, president, manager, and the owner behind the filing
- Officer count, all officer names and all titles held, ready for filtering and enrichment

**Assumed names (DBAs) — the owner behind the trading name**

- Every assumed-name filing names the **legal entity or person that owns it**, with their address.
  That turns a storefront trading name into a real company you can sell to, invoice or diligence.

**Corporate detail**

- Authorised share count for corporations
- **Every former name** the business has traded under, extracted from the filing record
- Full **filing history** — original filing, amendments, name changes, mergers, conversions,
  reinstatements, administrative dissolutions — each with its filing date and effective date
- Renewal history with dates

***

### Three ways to find businesses

| Mode | Use it for |
|---|---|
| **Name contains** | Broad sweeps — every business with a keyword anywhere in the name |
| **Name begins with** | Complete coverage of a prefix; oversized searches are split automatically |
| **File number** | Resolving a known Minnesota file number straight to its full record |

You can pass a **list** of names or file numbers, so one run covers many searches.

#### No silent truncation

The register itself will only return 500 rows for a single query and offers no paging. When a
search comes back on that ceiling, this actor automatically re-issues it in narrower slices so the
full result set is covered, and it tells you in the run log exactly how many searches had to be
split. Nothing is quietly dropped.

***

### Filters (you are never charged for filtered-out records)

Narrow before anything counts as a result:

- Active only · inactive only · both
- Business type or simplified entity category
- **Only assumed names (DBAs)**, or exclude them and keep only registered legal entities
- City, ZIP code prefix, state
- Home jurisdiction · domestic vs foreign
- Filed between two dates — a ready-made **new-business feed**
- Officer name contains · registered agent contains
- Only businesses with a named officer · only businesses with a registered agent
- Minimum authorised shares

Anything filtered out is discarded before it counts as a result, so you only pay for the records
you actually asked for.

***

### Who is it for

- **Sales and lead generation** — every LLC registered in a given city in the last 90 days, with
  the manager's name and address
- **KYB and onboarding** — resolve a Minnesota file number or name to its legal entity, status,
  registered agent and officers
- **DBA resolution** — map a trading name to the company that owns it
- **Corporate research** — trace name changes and filing history back to the original filing
- **Registered-agent intelligence** — every business served by a given agent

***

### How to use it

1. Put one or more names in **Business Names To Search** (or file numbers).
2. Pick a match type, a status scope and any filters you want.
3. Set **Max Companies To Scrape** and run it.
4. Export as JSON, CSV, Excel, XML or an HTML table, or pull it from the Apify API.

***

### FAQ

**Do I pay for a run that finds nothing?**
No. You are charged per delivered business record. Failed runs, empty searches and filtered-out
records are never charged.

**Are contact emails and phone numbers included?**
The state register does not publish business emails or phone numbers, so this actor does not
invent them. What it does give you is the officer, manager or owner **name plus their address**,
which is what makes the record actionable.

**Does it cover inactive and dissolved businesses?**
Yes — set the status scope to inactive or to both.

**How current is the data?**
Every record is read live from the public register at run time.

**Do I need a login, cookies or a proxy?**
No. Everything is handled internally.

***

### Related actors

Other company-registry scrapers from scrapers.lat: US federal contractor, SEC and licensing
registries, plus company registers across Europe and Latin America.

***

### Notes on coverage

- Dates are normalised to `YYYY-MM-DD`.
- Only information the register publishes openly is returned.
- Records are de-duplicated across searches within a run.
- Results are flushed as they are collected, so a stopped run never loses what it already found.

***

*scrapers.lat is an independent data provider and is not affiliated with, endorsed by, or
connected to the State of Minnesota or any government agency.*

# Actor input Schema

## `businessNames` (type: `array`):

One or more business names, or parts of names. Each entry runs its own search and every match is collected.

## `nameMatchType` (type: `string`):

Match anywhere in the name, or only at the start. "Begins with" also lets a search that hits the register's 500-row ceiling be split automatically so nothing is silently dropped.

## `fileNumbers` (type: `array`):

Minnesota file numbers for a direct lookup, e.g. 11-AA or 901366400023.

## `statusScope` (type: `string`):

Search active businesses, inactive ones, or both.

## `maxCompanies` (type: `integer`):

Stop after this many business records. Free Apify plans are capped at 10 per run.

## `includeFilingHistory` (type: `boolean`):

Include the full filing and renewal history (original filing, amendments, name changes, mergers, dissolutions) on every record.

## `includePriorNames` (type: `boolean`):

Also match businesses that used your search term as a previous name.

## `deepNameSearch` (type: `boolean`):

When a search hits the register's 500-row ceiling, automatically re-run it in narrower slices so the full result set is covered (works with "Begins with").

## `businessTypes` (type: `array`):

Keep only these registered types, e.g. Limited Liability Company, Business Corporation, Nonprofit, Assumed Name.

## `entityCategories` (type: `array`):

Keep only these simplified categories: LLC, LLP, Corporation, Limited Partnership, Nonprofit Corporation, Cooperative, Assumed Name (DBA), Trust.

## `onlyAssumedNames` (type: `boolean`):

Keep only assumed-name filings, which name the owner behind the trading name.

## `excludeAssumedNames` (type: `boolean`):

Drop assumed-name filings and keep only registered legal entities.

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

Keep only businesses whose registered or principal address is in one of these cities.

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

Keep only businesses whose ZIP code starts with one of these.

## `states` (type: `array`):

Keep only businesses whose address is in one of these two-letter states.

## `homeJurisdictions` (type: `array`):

Keep only businesses formed in these jurisdictions, e.g. Minnesota, Delaware.

## `domicile` (type: `string`):

Keep Minnesota-formed businesses, out-of-state businesses registered in Minnesota, or both.

## `filedFrom` (type: `string`):

Keep only businesses filed on or after this date (YYYY-MM-DD). Great for a new-business feed.

## `filedTo` (type: `string`):

Keep only businesses filed on or before this date (YYYY-MM-DD).

## `officerNameContains` (type: `string`):

Keep only businesses with an officer, manager or owner whose name contains this text.

## `registeredAgentContains` (type: `string`):

Keep only businesses whose registered agent contains this text, e.g. CT Corporation.

## `requireOfficer` (type: `boolean`):

Keep only businesses that name at least one officer, manager or owner.

## `requireRegisteredAgent` (type: `boolean`):

Keep only businesses that name a registered agent.

## `minShares` (type: `integer`):

Keep only corporations authorised to issue at least this many shares.

## `maxSearchQueries` (type: `integer`):

Safety cap on how many searches a run issues while splitting oversized result sets.

## `maxRecordsToScan` (type: `integer`):

Safety cap on how many business files a run opens while filters narrow the result set. Leave empty for the automatic value.

## `concurrency` (type: `integer`):

How many business files to read in parallel (1-10).

## Actor input object example

```json
{
  "businessNames": [
    "NORTHERN LIGHTS"
  ],
  "nameMatchType": "contains",
  "statusScope": "active",
  "maxCompanies": 30,
  "includeFilingHistory": true,
  "includePriorNames": false,
  "deepNameSearch": true,
  "onlyAssumedNames": false,
  "excludeAssumedNames": false,
  "domicile": "any",
  "requireOfficer": false,
  "requireRegisteredAgent": false,
  "maxSearchQueries": 120,
  "concurrency": 6
}
```

# Actor output Schema

## `results` (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 = {
    "businessNames": [
        "NORTHERN LIGHTS"
    ],
    "maxCompanies": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/minnesota-business-registry-scraper").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 = {
    "businessNames": ["NORTHERN LIGHTS"],
    "maxCompanies": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/minnesota-business-registry-scraper").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 '{
  "businessNames": [
    "NORTHERN LIGHTS"
  ],
  "maxCompanies": 30
}' |
apify call scrapers_lat/minnesota-business-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/minnesota-business-registry-scraper"
        }
    }
}

```

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/Ugm5r6AWbGEyV9oug/builds/DSZlg9UhShmYdqKfg/openapi.json
