# US Business Entity Search (KYB) - CO, NY, CT, OR, TX registries (`larkmoor/us-business-entity-search`) Actor

Look up companies by name, entity ID or registered agent/officer in official state registries (Colorado, New York, Connecticut, Oregon, Texas): status, type, formation date, addresses, registered agent, officers, NAICS. Bulk KYB with match scores; misses are free.

- **URL**: https://apify.com/larkmoor/us-business-entity-search.md
- **Developed by:** [Larkmoor Data](https://apify.com/larkmoor) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.28 / 1,000 entities

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

## US Business Entity Search (KYB): Colorado, New York, Connecticut, Oregon & Texas registries

Look a company up the way a compliance analyst does, but in bulk: give it **company names, state entity numbers or the name of a registered agent or officer**, and get back the **official registry record** for every match: legal name, entity number, entity type, **status** (good standing, active, dissolved, forfeited...), **formation date**, jurisdiction of formation, principal and mailing address, **registered agent**, **officers and directors** where the state publishes them, and, for Connecticut, the **NAICS industry** and **business email** on file.

Every row comes from an **official state open-data publication** of the Secretary of State or the state tax authority, read through their public APIs. No scraping of search pages, no CAPTCHAs, no guessed data. That makes it a fast, low-cost building block for **KYB / vendor onboarding, merchant verification, lead research and due diligence**: **$1.50 per 1,000 entities found**, and names with no match are free.

### What does it return?

One row per matched entity:

- `query`, `state`, `found`, `matchScore` (1.0 = the same name once "LLC", "Inc.", "Corp." and punctuation are ignored; results are sorted best match first)
- `name`, `entityId` (the state's entity / file / DOS / registry number), `entityType` (e.g. Domestic LLC, Foreign Profit Corporation, Texas Limited Liability Company)
- `status`, `active`, `goodStanding` (Colorado), `formedAt`, `jurisdiction` (state or country of formation)
- `address`, `city`, `stateOrRegion`, `zip`, `mailingAddress`
- `registeredAgent`, `registeredAgentAddress`
- `officers`: a list of `{title, name, address}` (Connecticut officers and directors, Oregon authorized representatives, New York chief executive officer) with business addresses only
- `naics`, `businessEmail`, `annualReportDue` (Connecticut), `county` (New York), `taxpayerNumber` and `rightToTransactBusiness` (Texas)
- `sourceUrl` (the state's own lookup page for that entity) and `source` (which registry the row came from)

Names that match nothing in the selected states get one **free** row with `found: false`, so a list of 5,000 vendors comes back as a complete list you can join back to your spreadsheet.

### Coverage

| State | Source | Statuses | Extra fields |
|---|---|---|---|
| Colorado | Secretary of State, Business Entities (data.colorado.gov) | all (good standing, delinquent, dissolved, withdrawn...) | registered agent, principal and mailing address |
| New York | Department of State, Active Corporations (data.ny.gov) | active | registered agent, service-of-process address, CEO, county |
| Connecticut | Secretary of the State, Business Registry (data.ct.gov) | all | agent, officers and directors, NAICS, business email, annual report due date |
| Oregon | Secretary of State, Active Businesses (data.oregon.gov) | active | registered agent, authorized representative, principal place of business |
| Texas | Comptroller of Public Accounts, Active Franchise Taxpayers (data.texas.gov) | active | SOS file number, charter date, taxpayer number, right to transact business |

The states update these files themselves, most of them daily. More states will be added as they publish open registry data; tell us which one you need.

### Who is it for?

- **KYB and vendor onboarding**: confirm a supplier, customer or merchant legally exists, is active and was formed when they say, and capture the entity number for your records.
- **Fintech, lending and payments teams** checking business applicants against the state of formation before a manual review.
- **Lead generation and sales research**: find every entity with "dental", "roofing" or "holdings" in its name in a state, or every company a law firm or registered-agent service represents.
- **Investigators, journalists and due-diligence analysts** mapping which companies a person serves as officer, director or registered agent.
- **Data teams** enriching a CRM with legal name, entity type and formation date.

### Input

- **Company names**: one per line. With the default `contains` mode, exact and starts-with matches are found first, then broader matches fill up to your limit.
- **Entity / file numbers**: prefix with the state (`CT:2770540`, `TX:0806762076`) to search one registry; without a prefix the number is tried in every selected state.
- **Registered agent / officer names**: e.g. `Corporation Service Company` or `Jane Smith`.
- **States**, **Name match** (contains, all words, starts with, exact), **Active entities only**, **Minimum match score**, **Include officers**, **Max matches per name per state**, **Max entities in total**, **Not-found rows**.

Example input for a KYB check with one best row per state:

```json
{
  "names": ["Starbucks Corporation", "Blue Ocean Advisors LLC", "Acme Imaginary Holdings LLC"],
  "states": ["CO", "NY", "CT", "OR", "TX"],
  "matchMode": "contains",
  "minMatchScore": "0.9",
  "maxResultsPerQuery": 1
}
```

### Output example

```json
{
  "query": "Starbucks Corporation",
  "state": "OR",
  "found": true,
  "matchScore": 1.0,
  "name": "STARBUCKS CORPORATION",
  "entityId": "16062689",
  "entityType": "Foreign Business Corporation",
  "status": "Active",
  "active": true,
  "formedAt": "1989-06-09",
  "jurisdiction": "WA",
  "address": "2401 UTAH AVE S, SUITE 800 MS S-LA1",
  "city": "SEATTLE",
  "stateOrRegion": "WA",
  "zip": "98134",
  "registeredAgent": "THE PRENTICE-HALL CORPORATION SYSTEM, INC.",
  "registeredAgentAddress": "1127 BROADWAY STREET NE STE 310, SALEM, OR, 97301",
  "source": "Oregon Secretary of State (data.oregon.gov, active businesses)"
}
```

Download the dataset as JSON, CSV, Excel or XML, or read it through the API.

### How much does it cost?

You pay **$1.50 per 1,000 entities found** (less on higher Apify plans), plus a one-time $0.001 start fee. Not-found rows are free, and the run stops at your spending limit.

- **KYB check of 1,000 vendors, 1 best match in each of 5 states, 60% found somewhere**: about 3,000 entity rows = **$4.50**.
- **Every active company with "roofing" in its name in Texas and Oregon (2,000 rows)**: **$3.00**.
- **All entities represented by one registered agent in Colorado and Connecticut (300 rows)**: **$0.45**.

Searches are light API calls, so runs need only 256 MB of memory and a 100-name list usually finishes in under two minutes.

### Tips

- For KYB use `exact` or `minMatchScore` 0.9 with `maxResultsPerQuery` 1 to get one clean row per company per state.
- `active` is `true` only for entities in good standing (Colorado "Good Standing" / "Exists", Connecticut "Active", and every New York, Oregon and Texas row, which are active-only files). Colorado "Delinquent" entities still exist on the register but have missed their periodic report, so they count as not active.
- A company can appear in several states: once in its home state as a domestic entity and in others as a foreign (registered-to-do-business) entity. Use `jurisdiction` to tell them apart.
- New York, Oregon and Texas publish active entities only, so a missing row there can also mean the entity is no longer active.

### Integrations and API

Run it from the Apify API, the Python or JavaScript client, Make, Zapier, n8n or any HTTP client, schedule it, and send results to Google Sheets, Airtable, a webhook or your database. Each run's dataset is available at the API URL shown in the run's Output tab.

### Is it legal to use this data?

Business registry records are public by law, and each source used here is published by the state itself as open data for reuse through an official API. The actor reads only those publications, respects the portals' rate limits, and returns business addresses only: home addresses of officers are never included. You remain responsible for how you use the data, for example under the FCRA if you use it for credit or employment decisions.

### FAQ

**Is this the same as the state's "business search" website?** It is the same registry data, published by the state as a downloadable open dataset. It can lag the live website by a day.

**Why does a well-known company not show up in a state?** It may not be registered there, or it is registered under another name (for example a parent or a d/b/a). Try `contains` mode and a shorter name.

**Can I search by officer name?** Yes, use Registered agent / officer names. Connecticut, Oregon, New York (CEO and agent) and Colorado (agent) publish names; Texas does not.

**Do you include Delaware, California or Florida?** Not yet: those states do not publish a free searchable registry API. Our separate New Business Registrations actor covers daily new Florida filings.

**What does matchScore mean?** A 0 to 1 similarity between your query and the registered name after removing legal suffixes and punctuation.

### Changelog

- 0.1 (November 2026): first release with Colorado, New York, Connecticut, Oregon and Texas; name, ID and agent/officer search; match scores; free not-found rows.

### Support

Found a wrong field or need another state? Open an issue on the actor's Issues tab and we will look at it quickly.

# Actor input Schema

## `names` (type: `array`):

Company names to look up (one per line). Each name is searched in every selected state; the best matches come first with a matchScore (1.0 = same name once LLC/Inc/Corp are ignored).

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

State entity IDs to look up. Prefix with the state to avoid collisions, e.g. CT:2770540, CO:20071359978, NY:6326456, OR:299818, TX:0806762076 (TX accepts the SOS file number or the 11-digit taxpayer number).

## `agentOrOfficerNames` (type: `array`):

Find every entity tied to a person or company acting as registered agent, officer, director or authorized representative (CO agents, NY agent/process/CEO, CT agents + principals, OR agents + representatives). Texas publishes no names, so it is skipped here.

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

Registries to search. Default: all five.

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

How names are matched. 'contains' still ranks exact and starts-with matches first.

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

Drop dissolved, withdrawn, revoked or forfeited entities (CO and CT carry every status; NY, OR and TX publish active entities only).

## `minMatchScore` (type: `string`):

Optional, e.g. 0.8 keeps only close name matches for KYB checks. Empty = keep all.

## `includeOfficers` (type: `boolean`):

Add officers, directors and authorized representatives where the state publishes them (CT, OR, NY CEO). Business addresses only; home addresses are never returned.

## `maxResultsPerQuery` (type: `integer`):

Max matches per query in each state. Default: 10. Use 1 with exact names for a one-row-per-company KYB check.

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

Stop after this many entities. Default: 1000.

## `includeNotFound` (type: `boolean`):

Keeps a bulk KYB list complete: each query with no match in any selected state gets one row with found=false (not charged).

## Actor input object example

```json
{
  "names": [
    "Tesla, Inc.",
    "Blue Ocean"
  ],
  "states": [
    "CO",
    "NY",
    "CT",
    "OR",
    "TX"
  ],
  "matchMode": "contains",
  "activeOnly": false,
  "includeOfficers": true,
  "maxResultsPerQuery": 10,
  "maxResults": 1000,
  "includeNotFound": true
}
```

# Actor output Schema

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

All matched entities (and free not-found rows) as JSON items in the run's default dataset; also downloadable as CSV/Excel.

# 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 = {
    "names": [
        "Tesla, Inc.",
        "Blue Ocean"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("larkmoor/us-business-entity-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 = { "names": [
        "Tesla, Inc.",
        "Blue Ocean",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("larkmoor/us-business-entity-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 '{
  "names": [
    "Tesla, Inc.",
    "Blue Ocean"
  ]
}' |
apify call larkmoor/us-business-entity-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,larkmoor/us-business-entity-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/CBNEc83yclS1eplqf/builds/sYWS5UbSwUK2hcLUH/openapi.json
