# Mississippi SOS Business Search Scraper (`crawlerbros/mississippi-sos-business-search-scraper`) Actor

Search the Mississippi Secretary of State's free public business entity database by business name or exact business ID. Get business ID, legal name, name history, entity type, status, effective date, state of incorporation, principal office address, registered agent, and officers/directors.

- **URL**: https://apify.com/crawlerbros/mississippi-sos-business-search-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **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 and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Mississippi SOS Business Search Scraper

Search the **Mississippi Secretary of State's** free public business entity database. Look up a business by name or exact business ID and get its business type, status, effective date, state of incorporation, name history, registered agent, and full officers/directors roster. Browser-automation-based (no login, no CAPTCHA, no API key) via the source's own public `corp.sos.ms.gov` search.

### Data Source & Usage Notes

- **Free, public, no login.** `corp.sos.ms.gov/corp/portal/c/page/corpBusinessIdSearch/portal.aspx` is Mississippi's own free business entity search; no account, API key, or paywall stands between a user and this data.
- **10 results per page, real pagination.** The source's own results grid returns 10 rows per page; the actor pages through automatically up to `maxItems`.
- **Not affiliated with the State of Mississippi.** This is an independent third-party tool using the source's own public, no-login search form.
- **Automatic retry on transient failures.** If a search doesn't render correctly on the first attempt, the actor automatically retries before giving up. This retry only fires for a real technical failure — a search that renders successfully but finds zero matches (or zero matches after `statusFilter`/`entityTypeFilter`) is treated as a confirmed real result and is never retried.
- **`statusFilter`/`entityTypeFilter` are applied by this actor, not by the source.** The source's own search form has no server-side status/entity-type filter, so the actor pages through the source's raw name-match results and filters client-side. A broad `businessName` (e.g. a 2-letter prefix) combined with a narrow `statusFilter` can require scanning many pages before finding `maxItems` matches (or confirming there are none) — this is inherent to the source, not a sign of a stuck run. Narrowing `businessName` keeps runs fast.
- **`sourceUrl` may not open in non-browser tools.** The link is a valid, bookmarkable, working page for any human visiting in a normal web browser; automated non-browser clients (e.g. `curl`) may be blocked by the source's own bot protection.

### What this actor does

- **Four modes:** `byName` (name search with 5 match types), `byId` (exact business-ID lookup, one or more IDs per run), `byOfficerName` (find every business where a person is on file as an officer/director/incorporator/manager), `byRegisteredAgentName` (find every business that lists a matching registered agent)
- **Full entity detail** — automatically opens each matched business's detail panel for name history, business type, status, effective date, state of incorporation, principal office address, registered agent, and officers/directors
- **Status and entity-type filters** — narrow `byName`/`byOfficerName`/`byRegisteredAgentName` results to a specific filing status or business type
- **Empty fields are omitted**

### What's NOT included (and why)

- **Filed document images.** The source links to scanned filing documents for some entities; those require a separate download flow and are out of scope for v1.

### Output per business

- `businessId` — Mississippi business ID
- `businessName` — current legal/registered name
- `businessType` — e.g. `Limited Liability Company`, `Business Corporation`, `Profit Corporation`, `Foreign Corporation`, `Cooperative`, `Name Reservation`
- `status` — e.g. `Good Standing`, `Dissolved`, `Withdrawn`, `Revoked`, `Inactive`, `Canceled`, `Name Change`, `Reserved Name`, `Void-Failure to File`
- `effectiveDate` — `MM/DD/YYYY`
- `stateOfIncorporation` — e.g. `Mississippi`, `Delaware`
- `principalOfficeAddress` — when on file (omitted when the source itself has none on file)
- `nameHistory` — array of every name ever filed under this business ID, each as `{name, nameType}` (present when `includeDetails=true`)
- `registeredAgentName`, `registeredAgentAddress` — when on file (present when `includeDetails=true`)
- `officers` — array of officers/directors, each as `{name, address, title}` (present when `includeDetails=true`)
- `matchedOfficerName`, `matchedOfficerTitle` — the officer name/title that matched your `officerName` query (mode=byOfficerName only)
- `matchedAgentName` — the registered agent name that matched your `registeredAgentName` query (mode=byRegisteredAgentName only)
- `sourceUrl` — the business's own bookmarkable detail-search URL (mode=byOfficerName: only present when `includeDetails=true`, since the officer-search results grid itself has no business-ID column)
- `recordType: "business"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `byName` | `byName` / `byId` / `byOfficerName` / `byRegisteredAgentName` |
| `businessName` | string | `Amazon` | Name to search for (mode=byName) |
| `searchBy` | string | `startingwith` | `startingwith` / `matchall` / `matchany` / `soundslike` / `exact` (mode=byName) |
| `businessIds` | array | `["1253260"]` | Exact business IDs to look up (mode=byId) |
| `officerName` | string | `Smith` | Officer/director/incorporator/manager name to search for (mode=byOfficerName) |
| `registeredAgentName` | string | `Registered Agents Inc` | Registered agent name to search for (mode=byRegisteredAgentName) |
| `statusFilter` | string | `any` | `any` / `Good Standing` / `Dissolved` / `Withdrawn` / `Revoked` / `Inactive` / `Canceled` / `Name Change` / `Reserved Name` / `Void-Failure to File` (mode=byName/byOfficerName/byRegisteredAgentName) |
| `entityTypeFilter` | string | `any` | `any` / one of the Mississippi entity types (mode=byName/byOfficerName/byRegisteredAgentName) |
| `includeDetails` | boolean | `true` | Fetch registered agent, officers, name history, and principal address per result |
| `proxyConfiguration` | object | AUTO proxy | Apify proxy config; always datacenter (AUTO), never residential |
| `maxItems` | int | `10` | Hard cap (1–40) |

#### Example: search by business name

```json
{
  "mode": "byName",
  "businessName": "Amazon",
  "searchBy": "startingwith",
  "statusFilter": "any",
  "includeDetails": true,
  "maxItems": 10
}
```

#### Example: lookup by exact business ID(s)

```json
{
  "mode": "byId",
  "businessIds": ["1253260"],
  "includeDetails": true
}
```

#### Example: search by officer/director name

```json
{
  "mode": "byOfficerName",
  "officerName": "Johnson",
  "includeDetails": true,
  "maxItems": 10
}
```

#### Example: search by registered agent name

```json
{
  "mode": "byRegisteredAgentName",
  "registeredAgentName": "Registered Agents Inc",
  "includeDetails": true,
  "maxItems": 10
}
```

### Use cases

- **Vendor/customer due diligence** — confirm a business is in Good Standing before signing a contract
- **Compliance monitoring** — track registered agent and status changes for entities you track
- **Lead generation** — build lists of Mississippi-registered businesses by name pattern or entity type
- **Legal & title research** — verify effective dates, state of incorporation, and registered agent of record
- **Company registry enrichment** — bulk-append Mississippi entity status to an existing business dataset
- **Officer/director background checks** — find every Mississippi business a given person is (or was) an officer, director, incorporator, or LLC member/manager of
- **Registered agent portfolio audits** — find every business a given registered agent (individual or commercial agent company) currently represents

### FAQ

**Is this an official State of Mississippi product?**
No. This is an independent tool that uses the Mississippi Secretary of State's own free, public, no-login business entity search.

**Why does the actor use a browser instead of plain HTTP requests?**
The source's search results are rendered client-side via JavaScript, so a real browser is used to submit the search and render results, the same way a person would in their own browser.

**Can I look up officers or a registered agent by their own name?**
Yes — use `mode=byOfficerName` or `mode=byRegisteredAgentName`.

**Why is `principalOfficeAddress` sometimes missing?**
The source itself has no principal office address on file for that entity (it literally renders "NO PRINCIPAL OFFICE ADDRESS FOUND" on its own detail page for these) — this actor omits the field rather than emit that placeholder text as a fake value.

**Why is `businessId`/`sourceUrl` missing on some `byOfficerName` results?**
The source's own Officer Name search results grid returns only the officer's name, title, and the business's legal name — no business ID column. `businessId`/`sourceUrl` are only populated for `byOfficerName` when `includeDetails=true` (the actor opens the detail panel to resolve the business ID). This limitation doesn't apply to `byRegisteredAgentName`, whose results grid does include a business-ID column directly.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `businessName` (type: `string`):

Name or partial name to search for, e.g. `Amazon`. Matched according to `searchBy`.

## `searchBy` (type: `string`):

How `businessName` should be matched against registered business names.

## `businessIds` (type: `array`):

Exact Mississippi business ID(s) to look up, e.g. `1253260`.

## `officerName` (type: `string`):

Name (or partial name) of an officer, director, incorporator, or LLC member/manager to search for, e.g. `Smith`. Returns every Mississippi business where a matching name is on file as an officer/director. Note: because the source's own officer-search results grid does not include a business-ID column, `businessId` and `sourceUrl` are only populated when `includeDetails=true`.

## `registeredAgentName` (type: `string`):

Name (or partial name) of a registered agent to search for, e.g. `Registered Agents Inc`. Returns every Mississippi business that lists a matching registered agent.

## `statusFilter` (type: `string`):

Only include businesses with this filing status. Leave as "Any" to include all. For byOfficerName/byRegisteredAgentName, this requires `includeDetails=true` (status is only known once the detail panel is fetched).

## `entityTypeFilter` (type: `string`):

Only include this business filing type. Leave as "Any" to include all. For byOfficerName/byRegisteredAgentName, this requires `includeDetails=true` (business type is only known once the detail panel is fetched).

## `includeDetails` (type: `boolean`):

When true, the actor opens each matched business's detail panel to add name history, principal office address, registered agent, and officers/directors. When false, only the search-result-row fields are returned (faster). For mode=byOfficerName specifically, `businessId`/`sourceUrl` are only available when this is true.

## `proxyConfiguration` (type: `object`):

Uses Apify's free datacenter (AUTO) proxy group to get a fresh IP if a request is rate-limited by the source. Residential proxy is never used by this actor.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "byName",
  "businessName": "Amazon",
  "searchBy": "startingwith",
  "businessIds": [
    "1253260"
  ],
  "officerName": "Smith",
  "registeredAgentName": "Registered Agents Inc",
  "statusFilter": "any",
  "entityTypeFilter": "any",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 10
}
```

# Actor output Schema

## `businesses` (type: `string`):

Dataset containing all scraped Mississippi business entity records.

# 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 = {
    "mode": "byName",
    "businessName": "Amazon",
    "searchBy": "startingwith",
    "businessIds": [
        "1253260"
    ],
    "officerName": "Smith",
    "registeredAgentName": "Registered Agents Inc",
    "statusFilter": "any",
    "entityTypeFilter": "any",
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/mississippi-sos-business-search-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 = {
    "mode": "byName",
    "businessName": "Amazon",
    "searchBy": "startingwith",
    "businessIds": ["1253260"],
    "officerName": "Smith",
    "registeredAgentName": "Registered Agents Inc",
    "statusFilter": "any",
    "entityTypeFilter": "any",
    "includeDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/mississippi-sos-business-search-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 '{
  "mode": "byName",
  "businessName": "Amazon",
  "searchBy": "startingwith",
  "businessIds": [
    "1253260"
  ],
  "officerName": "Smith",
  "registeredAgentName": "Registered Agents Inc",
  "statusFilter": "any",
  "entityTypeFilter": "any",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 10
}' |
apify call crawlerbros/mississippi-sos-business-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/mississippi-sos-business-search-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/hcOozAwxpQjWEOMxx/builds/32W1KfYjyehjuBV6E/openapi.json
