# Secretary of State Business Search & LLC Lookup: CO CT NY PA (`ventura_workalong/us-state-business-registry-search`) Actor

Secretary of State business registry search & LLC lookup for CO, CT, NY and PA: find a business entity by company name, entity ID or formation date (new business filings). Returns entity name, ID, type, status, formation date and official record links. Official open data. $0.003/record.

- **URL**: https://apify.com/ventura_workalong/us-state-business-registry-search.md
- **Developed by:** [Ventura WorkAlong](https://apify.com/ventura_workalong) (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 $3.00 / 1,000 business entity records

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

## Secretary of State Business Search & LLC Lookup: CO, CT, NY, PA

**Look up US businesses in official state business registries.** Search for a company, LLC or corporation by name, by state entity ID, or by formation date (new business filings) in **Colorado, Connecticut, New York and Pennsylvania**. For each business entity you get:

- entity name and state entity ID (file / filing / DOS number)
- entity type (LLC, corporation, nonprofit, partnership...)
- status (Good Standing, Active, Delinquent, Dissolved, Withdrawn...) plus a simple `statusClass`
- formation or registration date, and jurisdiction of formation
- links to the official record: the Secretary of State record page (Colorado) and the entity's row on the state's official open-data portal (all four states)

**$0.003 per business record returned.** Searches that find nothing are free, and so are invalid searches and any state that fails to answer.

Data comes from each state's **official open-data portal**, published by the Secretary of State / Department of State under licenses that allow reuse. We don't scrape state search websites, so there are no CAPTCHAs, no blocked runs and no terms-of-service gray areas.

### What can I use it for?

- **KYB and vendor onboarding:** confirm that a company is registered, in good standing, and when it was formed.
- **LLC lookup and corporation search** in bulk: paste up to 1,000 company names and get every matching registration in four states.
- **New business filings:** list every entity formed in a date range, for example all Colorado LLCs formed last week.
- **Data enrichment and CRM cleanup:** add the official entity ID, type, status and formation date to a list of companies.
- **AI agents:** one call answers "is this business registered in CO, CT, NY or PA, and is it active?" through Apify's MCP server or API.

### How to search

1. Add **Company names** (one per line), **Entity IDs**, or a **formation date range**.
2. Pick the **States** and the **Name match** type:
   - **Fuzzy** (default): every word of the name in any order. Case, punctuation, plurals and legal forms (LLC, Inc, Corp) are ignored, and results are ranked by name similarity. "Acme Widgets Inc" finds "ACME WIDGET COMPANY, LTD." and "Acme Widgets LLC".
   - **Exact:** the full name, case-insensitive.
   - **Starts with:** every name beginning with your text.
3. Click **Start**. Export the results as CSV, Excel or JSON, or call the Actor from the API or MCP.

```json
{
  "companyNames": ["Microsoft Corporation", "Acme Widget"],
  "entityIds": ["CT:0191632", "NY:1768283"],
  "states": ["CO", "CT", "NY", "PA"],
  "matchType": "fuzzy",
  "maxResultsPerSearch": 25
}
```

New business filings in Colorado and Connecticut during the first week of October:

```json
{ "formedAfter": "2026-10-01", "formedBefore": "2026-10-07", "states": ["CO", "CT"], "maxResultsPerSearch": 5000 }
```

### Input

| Field | What it does | Default |
|---|---|---|
| `companyNames` | Business names to search, up to 1,000 per run | |
| `entityIds` | State IDs. Use a state prefix: `CO:19931121425`, `CT:0191632`, `NY:1768283`, `PA:0002826638`. An ID without a prefix is tried in each selected state whose ID format fits, so it can match a different business with the same number in another state. | |
| `states` | Any of `CO`, `CT`, `NY`, `PA` | all four |
| `matchType` | `fuzzy`, `exact` or `startsWith` | `fuzzy` |
| `formedAfter` / `formedBefore` | Formation or registration date filter. With no names or IDs, it lists every entity formed in the range. | |
| `activeOnly` | CO: Good Standing or Exists. CT: Active or Registered. (NY and PA list active entities only anyway.) | false |
| `maxResultsPerSearch` | Most records per search, per state (1–10,000). Results are paged automatically. | 25 |
| `includeNoMatchRows` | Adds a free `no_match` row for each name or ID with no result in a state. Useful for bulk verification. | false |

You need at least one name, one ID, or a date. To cap your spend, set **Max total charge** on the run. The Actor stops cleanly when it reaches the cap.

### Output

One dataset item per business entity. This is real output (2026-10-09):

```json
{
  "resultType": "record",
  "state": "CO",
  "entityId": "19931121425",
  "entityName": "MICROSOFT CORPORATION",
  "entityType": "FPC",
  "entityTypeDescription": "Foreign Profit Corporation",
  "status": "Good Standing",
  "statusClass": "active",
  "formationOrRegistrationDate": "1993-12-29",
  "jurisdictionOfFormation": "WA",
  "recordUrl": "https://www.coloradosos.gov/biz/BusinessEntityDetail.do?quitButtonDestination=BusinessEntityResults&fileId=19931121425",
  "openDataRecordUrl": "https://data.colorado.gov/resource/4ykn-tg5h.json?%24select=entityid%2Centityname%2Centitytype%2Centitystatus%2Centityformdate%2Cjurisdictonofformation&entityid=19931121425",
  "registrySearchUrl": "https://www.coloradosos.gov/biz/BusinessEntityCriteriaExt.do",
  "matchScore": 100,
  "rank": 1,
  "query": "Microsoft Corporation",
  "queryType": "name",
  "matchType": "fuzzy",
  "dataset": "Business Entities in Colorado (Colorado Secretary of State)",
  "license": "Public Domain",
  "coverage": "all",
  "updateFrequency": "daily",
  "dataAsOf": "2026-10-09T11:15:09+00:00"
}
```

- `statusClass` is one of `active`, `not_in_good_standing` (for example CO "Delinquent"), `inactive` (dissolved, withdrawn, revoked, forfeited, merged...) or `unknown`. The state's own wording is in `status`.
- `matchScore` (0–100) is the name similarity, ignoring legal forms. Records are ranked best match first, then active before inactive.
- `resultType` is `record` (charged), or one of the free rows: `no_match`, `invalid_input`, `error`. A per-search summary is saved in the key-value store as `SUMMARY`.

### Coverage and freshness

Every search is a **live query** against the state's current published dataset. Nothing is cached on our side, so results are as fresh as the state's last upload. Each record carries `dataAsOf`, which is read from the portal's metadata on every run.

| State | Official dataset | Statuses | State refreshes it | License |
|---|---|---|---|---|
| Colorado | data.colorado.gov `4ykn-tg5h`, Business Entities in Colorado (Secretary of State), 3.1M entities since 1864 | all (active, delinquent, dissolved...) | daily | Public Domain |
| Connecticut | data.ct.gov `n7gp-d28j`, CT Business Registry, Business Master (Secretary of the State), 1.3M | all | daily | Public Domain |
| New York | data.ny.gov `n9v6-gdp6`, Active Corporations: Beginning 1800 (Department of State) | **active only** | monthly | NY Open Data terms (commercial use allowed) |
| Pennsylvania | data.pa.gov `xvd7-5r2c`, Registered Businesses in PA (Department of State) | **current only** | monthly | Public Domain (U.S. Government) |

**New York and Pennsylvania publish active or current entities only.** A business that isn't found there may be dissolved, or newer than the last monthly update. "Not found" doesn't mean "never existed".

**Official record links.** Colorado has a stable record page per entity (`recordUrl`). Connecticut, New York and Pennsylvania use search applications without stable record links, so `recordUrl` is empty there. Use `openDataRecordUrl`, the entity's row on the state's official portal, or `registrySearchUrl`.

### Limitations

- **Four states only:** CO, CT, NY and PA. Other states aren't searched.
- **NY and PA list active or current entities only** (see above).
- **No officers, registered agents, owners or addresses.** This Actor returns **business entity fields only**. It never requests or returns them, even where the state dataset includes them. If you need officers or registered agents, this isn't the tool.
- **No filing history or documents.** You get the entity record, not its filings, annual reports or UCC liens.
- **Fuzzy isn't spell-checking.** Every word must appear in the registered name (plurals are tolerated); misspelled words won't match.
- **Speed:** exact and starts-with searches take about 0.2 s per state. Fuzzy search scans every name in the state's registry for each word, which takes about 3–6 s per name (the four states run in parallel). For bulk lists of exact legal names, use `exact`. We also send at most 1 request per second to each state portal.
- **Is it legal?** Yes. Each state publishes these datasets for reuse (Public Domain for CO, CT and PA; NY Open Data terms allow commercial use), and we use the official open-data API rather than scraping the search websites.

### FAQ

#### Which states do you plan to add?

States that publish their business registry as official open data under a reuse-permitting license. We won't scrape state search portals whose terms forbid automated access.

#### Why didn't my search find a company I know exists?

It may be registered in a different state, or (in NY and PA) it may be inactive. In fuzzy mode every word must appear in the registered name, so try fewer words, e.g. "Acme" instead of "Acme Widget Holdings Group".

#### Is this a KYB or compliance product?

It's a fast, cheap lookup of official registry data. For regulated KYB/AML checks, use the official record and a licensed provider. To also check domains, LEI, EU VAT and US screening lists in one call, see Counterparty Check below.

#### Do I need an API key?

No.

#### How much does it cost?

$0.003 per business record returned, plus Apify's small per-run start fee. For example, 1,000 name lookups that each find one match in one state cost about $3. Searches with no results are free.

### Related tools by WorkAlong

- [Company Verification & Counterparty Check](https://apify.com/ventura_workalong/counterparty-check): this registry status, plus domain age, SSL, GLEIF LEI, EU VAT and OFAC/US screening-list matches, with a consistency summary. $0.03 per company.
- [Bulk WHOIS Domain Lookup](https://apify.com/ventura_workalong/domain-lookup-bundle): domain age, DNS and SSL, $0.003 per domain.

# Actor input Schema

## `companyNames` (type: `array`):

Business names to search, one per line. Legal forms (LLC, Inc, Corp) are optional in fuzzy mode.

## `entityIds` (type: `array`):

State entity / filing numbers, best with a state prefix: CO:19931121425 (Colorado entity ID, 11 digits), CT:0191632 (Connecticut business ID), NY:1768283 (New York DOS ID), PA:0002826638 (Pennsylvania filing number). An ID without a prefix is looked up in each selected state whose ID format fits, so it can match a different business with the same number in another state.

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

Which state registries to search. CO and CT include every status (active, dissolved, withdrawn...); NY and PA publish active/current entities only.

## `matchType` (type: `string`):

Fuzzy: every word of the name, in any order, ignoring case, punctuation, plurals and legal forms; results ranked by similarity. Exact: the full name, case-insensitive. Starts with: names beginning with your text.

## `formedAfter` (type: `string`):

Only entities formed or registered on or after this date. With no names or IDs, lists every entity formed in the date range (new business filings).

## `formedBefore` (type: `string`):

Only entities formed or registered on or before this date.

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

CO: Good Standing or Exists. CT: Active or Registered. NY and PA list active/current entities only anyway.

## `maxResultsPerSearch` (type: `integer`):

Upper limit of records returned for each name, ID or date range in each state (1-10,000). You pay only for records returned.

## `includeNoMatchRows` (type: `boolean`):

Adds a row with resultType "no_match" for each name or ID that found nothing in a state. Useful for bulk verification. Never charged.

## Actor input object example

```json
{
  "companyNames": [
    "Microsoft Corporation",
    "Acme Widget"
  ],
  "entityIds": [
    "CT:0191632"
  ],
  "states": [
    "CO",
    "CT",
    "NY",
    "PA"
  ],
  "matchType": "fuzzy",
  "activeOnly": false,
  "maxResultsPerSearch": 25,
  "includeNoMatchRows": false
}
```

# Actor output Schema

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

One item per entity found (resultType "record"), plus free rows for invalid searches, state errors and, if enabled, searches with no match.

## `summary` (type: `string`):

Records found per search and state, with errors.

# 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 = {
    "companyNames": [
        "Microsoft Corporation",
        "Acme Widget"
    ],
    "entityIds": [
        "CT:0191632"
    ],
    "states": [
        "CO",
        "CT",
        "NY",
        "PA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ventura_workalong/us-state-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 = {
    "companyNames": [
        "Microsoft Corporation",
        "Acme Widget",
    ],
    "entityIds": ["CT:0191632"],
    "states": [
        "CO",
        "CT",
        "NY",
        "PA",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("ventura_workalong/us-state-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 '{
  "companyNames": [
    "Microsoft Corporation",
    "Acme Widget"
  ],
  "entityIds": [
    "CT:0191632"
  ],
  "states": [
    "CO",
    "CT",
    "NY",
    "PA"
  ]
}' |
apify call ventura_workalong/us-state-business-registry-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ventura_workalong/us-state-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/NlFO9EEkqdIjgwYGl/builds/YXS94DNNz5OSnKA04/openapi.json
