# Business Registry Search: Status, Type, Formation Date, LEI (`jtpalms/company-registry-search`) Actor

Company registry search: verify companies by name or id in official open registries (New York, Colorado and Connecticut state records, global GLEIF LEI index). Legal name, entity type, status, formation date, jurisdiction, address, LEI. No officers, agents or emails. USD 0.90 per 1,000 records.

- **URL**: https://apify.com/jtpalms/company-registry-search.md
- **Developed by:** [JT Palms](https://apify.com/jtpalms) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.72 / 1,000 registry records

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?

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

## Business Registry Search: status, entity type, formation date and LEI from official open data

Check a company against official registries by name or registry id, and get back the entity facts: legal name, entity type, status, formation date, jurisdiction of formation, business address and, where one exists, its LEI.

- **Registries covered:** New York (Department of State), Colorado (Secretary of State), Connecticut (Secretary of the State) and the global **GLEIF LEI index** (every country).
- **Entity facts only. No people data:** no officers, directors, registered agents, organizers, members, managers, owners, emails or phone numbers.
- **USD 0.90 per 1,000 records.** Names with no match and failed lookups are free.
- Official open-data APIs only (the states' Socrata SODA APIs and the GLEIF API), at polite rates. No scraping of state search pages, no proxies, no browser.

### What people use it for

- **KYB first pass.** Before a human review: does the company exist, is it active, what type is it, when was it formed, where, and does it have an LEI?
- **Vendor and supplier checks.** Match a supplier list against official records and flag names that are dissolved, revoked or not found.
- **CRM cleanup.** Replace typed company names with the legal name and registry id, and add the LEI.
- **Enrichment tables.** One call per row in Clay, Make, Zapier or your own pipeline: `matchMode: exact`, `maxResultsPerSource: 1`.

### Sample output

A real row from the default run (6 October 2026). Colorado lists Starbucks Corporation, a Washington corporation; the actor found its LEI in the GLEIF index by legal name and jurisdiction of formation:

```json
{
  "queryName": "Starbucks",
  "matchScore": 0.95,
  "matchType": "exact",
  "source": "co-sos",
  "jurisdiction": "US-CO",
  "registry": "Colorado Secretary of State, Business Division",
  "sourceDataset": "Business Entities in Colorado",
  "sourceDatasetUrl": "https://data.colorado.gov/d/4ykn-tg5h",
  "registryId": "19921028206",
  "legalName": "STARBUCKS CORPORATION",
  "entityType": "corporation",
  "entityTypeRaw": "FPC",
  "isForeign": true,
  "status": "active",
  "statusRaw": "Good Standing",
  "goodStanding": true,
  "formedOn": null,
  "foreignRegistrationOn": "1992-03-18",
  "dissolvedOn": null,
  "jurisdictionOfFormation": "US-WA",
  "addressType": "principal",
  "street": "2401 Utah Avenue S, Suite 800, MS: S-LA1",
  "city": "Seattle",
  "region": "WA",
  "postalCode": "98134-1435",
  "country": "US",
  "lei": "OQSJ1DU9TAOC51A47K68",
  "leiStatus": "ISSUED",
  "leiIssuedOn": "2012-11-28",
  "leiMatchedBy": "name and jurisdiction of formation",
  "lastUpdated": "2026-10-06",
  "recordUrl": "https://data.colorado.gov/resource/4ykn-tg5h.json?$select=entityid,entityname,...&entityid=19921028206",
  "officialSearchUrl": "https://www.coloradosos.gov/biz/BusinessEntityCriteriaExt.do",
  "licence": "Public Domain (dataset licence on data.colorado.gov). ...",
  "attribution": "Colorado Department of State (CDOS)"
}
```

A row from the LEI index (shortened):

```json
{
  "queryName": "Shopify",
  "matchScore": 0.95,
  "jurisdiction": "LEI",
  "registryId": "549300HGQ43STJLLP808",
  "legalName": "SHOPIFY INC.",
  "entityType": "corporation",
  "status": "active",
  "formedOn": "2004-09-28",
  "jurisdictionOfFormation": "CA-ON",
  "addressType": "legal",
  "city": "OTTAWA",
  "country": "CA",
  "lei": "549300HGQ43STJLLP808",
  "leiStatus": "ISSUED",
  "lastUpdated": "2026-08-30",
  "recordUrl": "https://search.gleif.org/#/record/549300HGQ43STJLLP808",
  "licence": "CC0 1.0 (GLEIF LEI Data Terms of Use: https://www.gleif.org/en/meta/lei-data-terms-of-use)"
}
```

The default run (Starbucks, Stripe and Shopify, 4 best matches per registry) returned 38 records: New York 10, Colorado 9, Connecticut 7, LEI 12, with 5 state records matched to an LEI. The run also writes a `SUMMARY` record: per name and per registry the number of matches, the names with no match, any failed lookup with its error, each dataset's refresh time, LEI matches and duplicates skipped.

### How to use it

1. Put your company names in **Company names**, one per line (or registry ids and LEIs in **Registry ids or LEIs**).
2. Pick a **Name match**: *Starts with* (default), *Exact name* (legal form ignored, so "Acme Inc" finds "ACME, INC." and "Acme LLC"), or *Contains*.
3. Leave **Active entities only** on for "does it exist and is it active"; switch it off to see dissolved, withdrawn and revoked entities too.
4. Run it, then export as CSV, JSON or Excel, or call it from the API.

Main inputs: `companyNames`, `entityIds`, `matchMode` (`prefix`, `exact`, `contains`), `jurisdictions` (`US-NY`, `US-CO`, `US-CT`, `LEI`; empty = all), `onlyActive` (default true), `entityTypes`, `maxResultsPerSource` (default 10), `maxResults` (default 1,000), `minMatchScore` (0 to 1), `matchLei` (default true), `includeAddress` (default true).

```json
{ "companyNames": ["Acme Widgets Inc", "Northwind Traders LLC"], "matchMode": "exact", "maxResultsPerSource": 1, "minMatchScore": 0.95 }
```

### Coverage, sources and licences

| Jurisdiction | Official source (dataset) | What it holds | Refresh | Licence and terms |
|---|---|---|---|---|
| New York (`US-NY`) | Department of State, Division of Corporations: "Active Corporations: Beginning 1800", https://data.ny.gov/d/n9v6-gdp6 | About 4.3 million **active** corporations, LLCs, partnerships and nonprofits (inactive ones are not in this dataset) | Refreshed 6 October 2026 when checked; newest filing the day before | No licence is declared on the dataset. The OPEN-NY Terms of Use (https://data.ny.gov/download/77gx-ii52/application%2Fpdf) invite you to "use our government information however you wish, in private sector projects" |
| Colorado (`US-CO`) | Secretary of State: "Business Entities in Colorado", https://data.colorado.gov/d/4ykn-tg5h | Every entity registered since 1864, all statuses | Daily | Dataset licence: **Public Domain**, attribution CDOS. Portal terms: https://data.colorado.gov/terms (required disclaimer below) |
| Connecticut (`US-CT`) | Secretary of the State: "Connecticut Business Registry - Business Master", https://data.ct.gov/d/n7gp-d28j | Every business entity, all statuses (name reservations and rejected filings are left out) | Daily | Dataset licence: **Public Domain**. Portal terms (https://data.ct.gov/terms): data is provided "as is" |
| Global (`LEI`) | GLEIF LEI records, https://api.gleif.org | About 3.45 million LEI records, every country (about 130,000 sole proprietors among them are left out) | Several times a day | **CC0 1.0**: "The data available through the Access Service are provided under the CC0 licence" (https://www.gleif.org/en/meta/lei-data-terms-of-use) |

Every row carries its `licence`, `attribution`, `sourceDataset`, `sourceDatasetUrl` and `lastUpdated` (for state rows, the date the state last refreshed the dataset; for LEI rows, the date the LEI record was last updated).

**Studied and left out: Oregon.** The Oregon Secretary of State publishes "Active Businesses - ALL" on data.oregon.gov, but that portal has no state terms page; the only terms it links to are the Tyler Technologies Terms of Use (https://www.tylertech.com/terms), which say users may not "sell, resell, exploit, transfer, or transmit for any commercial purposes" any portion of the service. A paid tool cannot meet that, so Oregon is not covered.

**Colorado's required disclaimer** (from https://data.colorado.gov/terms): "The data made available here has been modified for use from its original source, which is the State of Colorado. THE STATE OF COLORADO MAKES NO REPRESENTATIONS OR WARRANTY AS TO THE COMPLETENESS, ACCURACY, TIMELINESS, OR CONTENT OF ANY DATA MADE AVAILABLE THROUGH THIS SITE. THE STATE OF COLORADO EXPRESSLY DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. The data is subject to change as modifications and updates are complete. It is understood that the information contained in the Web feed is being used at one's own risk."

### What is deliberately left out: people

This tool returns entity facts only. These are never requested from the registries and never output:

- **Officers, directors and the New York "CEO" (chairman) name and address.**
- **Registered agents** (Colorado agent first, middle and last names and addresses; New York registered agent name and address).
- **New York service-of-process names.** New York's filing often names a person (the owner, an organizer or a lawyer) as the addressee. The query asks the portal to return the service-of-process address **only when it is addressed to the entity itself**; when it names anyone else, neither the name nor the address leaves the portal.
- **Organizers, incorporators, members, managers and owners.**
- **Emails and phone numbers** (Connecticut publishes business and survey email addresses: never requested).
- **Ownership survey answers** (Connecticut's woman-, veteran-, minority-, disability- and LGBTQI-owned flags).
- **Sole proprietors in the LEI index** (their record is a person's name and address): refused in the query and again in the code.
- **Care-of and attention lines** ("c/o ...", "Attn ...") are removed from any address.

Every output row has a fixed list of fields (below); nothing else from the source record is passed through.

### Not a certified search

The data is an open-data copy of each registry, refreshed daily by the states and GLEIF. It is a fast first check, **not a substitute for a certified search or a certificate of good standing**. Always confirm anything that matters on the official search page given in each row (`officialSearchUrl`):

- New York: https://apps.dos.ny.gov/publicInquiry/
- Colorado: https://www.coloradosos.gov/biz/BusinessEntityCriteriaExt.do
- Connecticut: https://service.ct.gov/business/s/onlinebusinesssearch
- LEI: https://search.gleif.org/

### Output fields

| Field | Meaning |
|---|---|
| `queryName`, `queryId` | The name or id you gave |
| `matchScore`, `matchType` | 0 to 1 (below); `exact`, `prefix`, `word`, `contains` or `id` |
| `source`, `jurisdiction`, `registry` | `ny-dos` / `co-sos` / `ct-sots` / `gleif`; `US-NY`, `US-CO`, `US-CT` or `LEI`; registry name |
| `sourceDataset`, `sourceDatasetUrl` | The open dataset the row comes from |
| `registryId` | NY DOS id, Colorado entity id, Connecticut business id, or the LEI |
| `legalName` | As registered (Colorado's appended "Dissolved October 27, 2008" goes to `dissolvedOn`) |
| `entityType`, `entityTypeRaw` | `corporation`, `llc`, `lp`, `llp`, `nonprofit`, `cooperative`, `trust`, `partnership`, `fund`, `branch`, `other`; and the registry's own wording |
| `isForeign` | Formed elsewhere and registered to do business in this state |
| `status`, `statusRaw`, `goodStanding` | `active`, `inactive`, `dissolved` or `other`; the registry's wording; Colorado's good standing (false for Delinquent and Noncompliant entities, which still exist) |
| `formedOn`, `foreignRegistrationOn`, `dissolvedOn` | Formation date (domestic entities and LEI records); date a foreign entity registered in the state; dissolution date (Colorado, Connecticut) |
| `jurisdictionOfFormation`, `jurisdictionOfFormationRaw` | As a code (`US-DE`, `CA-ON`, `GB`) and as written |
| `addressType`, `street`, `city`, `region`, `postalCode`, `country`, `county` | Business address of the entity: `principal` (Colorado principal office, New York physical location), `business` (Connecticut), `service-of-process` (New York, only when addressed to the entity itself), `legal` (LEI legal address). `county` is New York's county |
| `lei`, `leiStatus`, `leiIssuedOn`, `leiMatchedBy` | The LEI and its registration status (`ISSUED`, `LAPSED`...); for state rows, how it was matched |
| `lastUpdated` | Data date (see above) |
| `recordUrl` | The record on the portal's own API (only the non-personal columns), or the GLEIF record page |
| `officialSearchUrl`, `licence`, `attribution`, `fetchedAt` | Where to confirm, licence line, credit, time of the run |

### Matching and scores

Names are compared after removing case, accents, punctuation and the legal form (Inc, Incorporated, Corp, LLC, L.L.C., Ltd, LP, LLP, PLLC, GmbH, B.V. and similar), and "&" counts as "and".

- **1**: the same name including the legal form. **0.95**: the same name with another legal form ("Stripe Inc" against "STRIPE, LLC").
- Below that (at most 0.94): a blend of shared words, where your words sit in the name (start, whole word, inside a word) and how close the lengths are.
- Results are sorted best first; `maxResultsPerSource` keeps the best few per name and registry, and `minMatchScore` drops weaker ones.
- The LEI index matches **whole words** only, so *Contains* and a partial last word ("Strip") find nothing there.
- **LEI matching.** For each state record, the actor looks for a GLEIF record of the same entity: first by registration authority and registry number (for example New York DOS id 7858078 at GLEIF's RA000628), then by the same legal name and the same jurisdiction of formation. If two LEI records qualify, none is attached. A matched LEI is not repeated as its own row.
- **One row per record per run.** If two of your names find the same registry record, it is returned (and charged) once.

### Pricing

Pay per record: **USD 0.90 per 1,000 records** (USD 0.0009 each) plus USD 0.001 per run. Higher Apify plans get up to 20% off.

- The default run (3 names, 38 records): about USD 0.035.
- 1,000 records: USD 0.90.
- A 2,000-name vendor list in exact mode with about 3 records per name across the four registries: 6,000 records, about USD 5.40.
- Not charged: names with no match, failed lookups, duplicates.

Set **Maximum results** or a maximum cost per run in Apify; the run stops cleanly at either.

### Speed and limits

- The default run takes about 6 seconds on Apify. The tool sends one request at a time to each portal with at least 1 second between requests (the portals' robots.txt asks for a 1-second crawl delay) and at most 48 requests per minute to GLEIF (its documented limit is 60). On HTTP 429 it waits, slows down and retries.
- Throughput: about 0.8 names per second with LEI matching on (measured on Apify: 40 company names in exact mode, 89 records, in 50 seconds; so about 21 minutes for 1,000 names). The default run timeout is 1 hour (about 2,800 names); raise it for longer lists.
- *Contains* on New York scans the whole dataset and takes about 5 seconds per name.
- If a registry is down or changes its columns, that registry is skipped with a clear message in `SUMMARY` and the others still return.

### What it does not do

- Officers, owners, registered agents, beneficial ownership, ownership trees or any other people data.
- States other than New York, Colorado and Connecticut (Oregon studied and left out for its terms, see above), filings and documents, UCC liens, credit or sanctions checks.
- Certified records or certificates of good standing.

### Support

Open an issue on the Actor page with the input you used and the run link.

### Related actors

- [Company Enrichment From Domain: Tech Stack, Socials, Hiring](https://apify.com/JTPalms/company-profile): Company enrichment from a list of website domains: company name, description, official social links, tech stack (CMS, ecommerce,...
- [Bulk WHOIS Lookup (RDAP): Domain Availability & Expiry Checker](https://apify.com/JTPalms/domain-rdap-lookup): WHOIS lookup for thousands of domains through RDAP, the official successor to WHOIS: available or registered, registrar, creation date,...
- [Startup Funding Feed: New Private Raises from SEC Form D](https://apify.com/JTPalms/startup-funding-feed): Fresh US private fundraising from official SEC Form D filings: company, state, industry, amount offered and sold, first sale date.
- [Company News Triggers: Funding, Layoffs, M\&A and More](https://apify.com/JTPalms/company-news-triggers): Watch a list of companies for buying-signal news from open GDELT data: funding, acquisitions, layoffs, expansions, leadership changes,...

# Actor input Schema

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

Names to look up, one per line. Case, punctuation and the legal form are ignored when matching ("Stripe Inc" finds "STRIPE, INC."). Duplicates are looked up once.

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

Exact lookups: an LEI (20 characters), or a registry number with an optional prefix for the state: NY:7858078 (New York DOS id), CO:20151186339 (Colorado entity id), CT:1175082 (Connecticut business id). A number without a prefix is tried in every chosen state.

## `matchMode` (type: `string`):

Starts with: the registry name begins with your words (fast, the default). Exact: the same name once the legal form (Inc, LLC, Corp...) is ignored. Contains: your text appears anywhere in the name (slower on New York; the LEI index matches whole words only).

## `jurisdictions` (type: `array`):

Which registries to search. Empty = all four. LEI is the global GLEIF index (every country). Oregon was studied and left out: its portal's terms do not allow commercial redistribution.

## `onlyActive` (type: `boolean`):

Return only entities the registry still lists as existing (Colorado's delinquent entities included, flagged with goodStanding false). Switch off to also see dissolved, withdrawn, revoked and merged ones (Colorado, Connecticut and LEI; the New York dataset holds active entities only).

## `entityTypes` (type: `array`):

Keep only these types (normalised across registries). Empty = all.

## `maxResultsPerSource` (type: `integer`):

Best matches kept for each name in each registry (highest match score first).

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

Stop after this many records for the whole run. Each record is one charged event.

## `minMatchScore` (type: `number`):

From 0 to 1. 1 = the same name and legal form, 0.95 = the same name with another legal form, lower = the name starts with or contains your words. 0 keeps every match.

## `matchLei` (type: `boolean`):

Look the same name up in the GLEIF index and add the LEI to a state record when it is the same entity (same registry number, or the same legal name and jurisdiction of formation). The matched LEI is then not repeated as its own row.

## `includeAddress` (type: `boolean`):

Business address of the entity as the registry lists it (principal office, business address or, in New York, the service-of-process address when it is addressed to the entity itself). Off = city, region and postal code only.

## Actor input object example

```json
{
  "companyNames": [
    "Starbucks",
    "Stripe",
    "Shopify"
  ],
  "matchMode": "prefix",
  "jurisdictions": [
    "US-NY",
    "US-CO",
    "US-CT",
    "LEI"
  ],
  "onlyActive": true,
  "maxResultsPerSource": 4,
  "maxResults": 50,
  "minMatchScore": 0,
  "matchLei": true,
  "includeAddress": true
}
```

# Actor output Schema

## `records` (type: `string`):

One row per matching entity record in the default dataset (JSON, CSV, Excel via the format parameter).

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

Per name and per registry: records found, names with no match, lookups that failed, dataset refresh dates, LEI matches, duplicates skipped, requests made.

# 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": [
        "Starbucks",
        "Stripe",
        "Shopify"
    ],
    "maxResultsPerSource": 4,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("jtpalms/company-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": [
        "Starbucks",
        "Stripe",
        "Shopify",
    ],
    "maxResultsPerSource": 4,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("jtpalms/company-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": [
    "Starbucks",
    "Stripe",
    "Shopify"
  ],
  "maxResultsPerSource": 4,
  "maxResults": 50
}' |
apify call jtpalms/company-registry-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jtpalms/company-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/DNZNZgLlcc6gPLO5J/builds/z2VNi1oDfWugaTZ32/openapi.json
