# US Business Entity Search | Secretary of State Company Lookup (`nidamindllc/us-business-registry-search`) Actor

Search US business entities across multiple states' Secretary of State registries by company name or entity ID. Returns status, type, formation date, address, and registered agent as clean JSON.

- **URL**: https://apify.com/nidamindllc/us-business-registry-search.md
- **Developed by:** [Scott Shinn](https://apify.com/nidamindllc) (community)
- **Categories:** Business, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

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

## US Business Entity Search | Secretary of State Company Lookup

Search US business entities across multiple states' Secretary of State registries by **company name**
or **entity ID**, and get back clean, normalized JSON — status, entity type, formation date, address,
and registered agent — ready for KYB, lead generation, enrichment, and due diligence.

Backed by official state **open-data** business registries — no login, CAPTCHA, or proxy required,
and no scraping of blocked pages.

### Supported states

Colorado (CO), New York (NY), Oregon (OR), Pennsylvania (PA), Connecticut (CT), Hawaii (HI),
Texas (TX), Delaware (DE), Florida (FL), Virginia (VA). More states are added over time.

### Modes

- **search** (default) — look up entities by company name or entity ID.
- **new-businesses** — list entities registered in the last N days (`sinceDays`), for lead
  generation. Supported in CO, NY, OR, PA, CT. New York uses the daily new-filings feed;
  Connecticut includes owner-demographic flags (woman/veteran/minority/LGBTQ-owned).

### Input

```json
{
  "searchTerm": "plumbing",
  "states": ["CO", "NY", "OR", "PA", "CT"],
  "maxResultsPerState": 100
}
```

| Field | Type | Description |
|-------|------|-------------|
| `searchTerm` | string | Company name or partial name (case-insensitive). Required unless `entityId` is set. |
| `entityId` | string | Optional. Look up one exact entity/registry/filing ID. |
| `states` | array | Which state registries to search. Defaults to all supported states. |
| `maxResultsPerState` | integer | Cap per state (1-1000). Default 100. |
| `socrataAppToken` | string | Optional. Raises rate limits; not required. |

### Output

One dataset item per matched entity, normalized across states:

```json
{
  "state": "CO",
  "entityId": "20251665680",
  "name": "EXAMPLE PLUMBING LLC",
  "status": "Good Standing",
  "entityType": "DLLC",
  "formationDate": "2025-06-16T00:00:00.000",
  "jurisdiction": "CO",
  "county": null,
  "address": "660 Willow Wood Ln, Delta, CO, 81416",
  "registeredAgent": "KEQIANG DENG",
  "sourceUrl": "https://www.coloradosos.gov/biz/BusinessEntityDetail.do?masterFileId=20251665680"
}
```

### Use cases

- **KYB / due diligence** — verify a company exists, its status, and formation date.
- **Lead generation** — pull all entities matching a trade or keyword in a state.
- **Enrichment** — resolve a business name to its registered entity, agent, and address.

### Enrichment (lead scoring)

Set `enrich: true` to turn each record into a scored lead. Adds:

- `tradeCategory` and `tradeTags` — the business's industry inferred from its name (roofing, HVAC,
  solar, plumbing, electrical, construction, real estate, and more).
- `leadScore` (0-100) and `leadSignals` — a ranking from active status, recent formation, presence of
  a registered agent and address, and whether it is a high-value trade.

Enrichment is deterministic and adds no fabricated contact data. It is billed at a higher per-record
rate than raw search.

### Pricing

Pay per result — one charge per entity record returned.

### Notes

- Name search is a case-insensitive substring match against each state's registry.
- Field coverage varies by state (e.g. registered agent is present for CO/NY/PA, not all states).

# Actor input Schema

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

search = look up entities by name/ID. new-businesses = list entities registered in the last N days (lead generation).

## `sinceDays` (type: `integer`):

For new-businesses mode: how many days back to include (by registration/formation date).

## `searchTerm` (type: `string`):

Company name or partial name to search for (case-insensitive substring match).

## `entityId` (type: `string`):

Optional. Look up one exact entity/registry/filing ID instead of a name search.

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

Which state registries to search. Defaults to all supported states.

## `enrich` (type: `boolean`):

Add a trade category, trade tags, a lead score (0-100), and buying-signal flags to each record. Premium tier.

## `maxResultsPerState` (type: `integer`):

Cap on records returned from each state (1-1000).

## `socrataAppToken` (type: `string`):

Optional Socrata app token to raise rate limits. Not required.

## Actor input object example

```json
{
  "mode": "search",
  "sinceDays": 30,
  "searchTerm": "plumbing",
  "states": [
    "CO",
    "NY",
    "OR",
    "PA",
    "CT",
    "HI",
    "TX",
    "DE",
    "FL",
    "VA"
  ],
  "enrich": false,
  "maxResultsPerState": 100
}
```

# Actor output Schema

## `results` (type: `string`):

Normalized entity records: state, name, status, type, formation date, address, registered agent.

# 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 = {
    "searchTerm": "plumbing"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nidamindllc/us-business-registry-search").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 = { "searchTerm": "plumbing" }

# Run the Actor and wait for it to finish
run = client.actor("nidamindllc/us-business-registry-search").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 '{
  "searchTerm": "plumbing"
}' |
apify call nidamindllc/us-business-registry-search --silent --output-dataset

```

## MCP server setup

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

```

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/OefvPuQLvJGX0p99d/builds/JrkHOoDvQ6VRDdcMd/openapi.json
