# CO Business Entities - Registry & Filing History (`j0401/co-business-entities`) Actor

Colorado business-entity register (public open data, 3.1M entities + 21.6M filings): a company's status, type, addresses and registered agent, plus its complete Secretary-of-State filing history on one exact entity id - name changes, redomestications, dissolutions.

- **URL**: https://apify.com/j0401/co-business-entities.md
- **Developed by:** [Wenhao Yang](https://apify.com/j0401) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.10 / 1,000 co 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?

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

## CO Business Entities - Registry & Filing History

Colorado's **business-entity register** and the Secretary of State's **complete filing history** for it, on one exact key.

Every entity in Colorado has an entity id. That id is the same in the register and in the 21.6-million-row transaction history, so a company's current record and every filing it ever made line up exactly - no name matching, no fuzzy joins.

### Low cost

**From $0.0001 per record.** Pay-per-event: you are charged per record delivered, and nothing for the query.

### What you get

| Corpus | Rows | Row is |
|---|---|---|
| `entities` | **3,108,712** | one registered entity |
| `history` | **21,622,207** | one filing against an entity |

The history covers **4,411,219** distinct entity ids against the register's 3,108,712 - it reaches entities that have since been **dissolved or purged**. Ask for an id and you get the entire filing record of a company that no longer exists in the register at all.

#### The register (`entities`)

- **Status** - 15 values: `Good Standing` (1,026,907), `Delinquent` (1,143,709), `Voluntarily Dissolved` (596,652), `Administratively Dissolved` (157,833), `Withdrawn`, `Noncompliant`, `Revoked`, `Judicially Dissolved`, `Merged`, `Converted` and more.
- **Type** - 33 exact Colorado codes: `DLLC` (2,098,353), `DPC` (549,606), `DNC`, `FLLC`, `FPC`, `DLP`, `DLLP`, `FNC`, `GP`, and the rest (`D` domestic / `F` foreign; `PC` profit corp / `NC` nonprofit corp / `LLC` / `LP`).
- **Formation date** and **jurisdiction of formation** - 1,374 distinct jurisdictions, `CO` 2,834,914 and `DE` 83,742 among them.
- **Principal and mailing address** - full 5-part address each.
- **Registered agent** - a person or an organization, with their own address, principal and mailing.

#### The filing history (`history`)

Every filing under 253 distinct types: `File Report` (10,981,507), `Form a Limited Liability Company (LLC)` (2,112,164), `Statement of Change Changing the Registered Agent Information` (589,878), `Statement Curing Delinquency` (583,126), `Dissolve a Limited Liability Company` (446,666), `Amendment` (410,232), `Form a Profit Corporation` (319,289), `Articles of Incorporation` (292,911), name reservations, trade names, trademarks, reinstatements - with the **Secretary of State's own comment** on the filing, where the substance lives:

> `Amend Articles of Organization for an LLC` - *"Change of entity name from Azer Auto Sales, LLC"*
> `Amendment` - *"REDOMESTICATION TO STATE OF TEXAS"*
> `Statement of Change Changing the Principal Office Address` - *"Principal address changed"*

Two dates per filing - **received** and **effective** - so you can follow a company's corporate history in order, or pull the daily change stream with `receivedFrom`.

### Modes

- **`rows`** (default) - records matching your filters.
- **`aggregate`** - one count row per group: by status, type, principal state, jurisdiction of formation, country, or filing type.
- **`profile`** - one entity's register row **plus its entire filing history**, given an `entityId`. See the example below.

### Examples

**A company's complete corporate history** - `mode=profile`, `entityId=20171940013` returns **12 records: the entity plus all 11 of its filings**:

```
Voyage Auto Sales, LLC / Good Standing / DLLC / formed 2017-12-21
  2026-09-11  Amend Articles of Organization for an LLC   "Change of entity name from Azer Auto Sales, LLC"
  2026-08-24  Statement Curing Delinquency                "Change in registered agent information"
  2024-11-01  File Report                                 "Principal address changed, Change in registered agent information"
  2023-08-28  Statement Curing Delinquency
  2022-04-24  File Report                                 "Change of Registered Agent Address / Change of Entity Address"
  2021-04-11  File Report
  2020-02-26  File Report
  2019-02-21  File Report                                 "Removed agent mailing address; / Change of Registered Agent Address"
  2019-01-05  Statement of Change Changing the Principal Office Address   "Principal address changed;"
  2018-02-15  Statement of Change Changing the Principal Office Address   "Removed entity mailing address;Principal address changed;"
  2017-12-21  Form a Limited Liability Company (LLC)
```

The name change is visible in the record itself: filed in 2017 as *Azer Auto Sales, LLC*, renamed to *Voyage Auto Sales, LLC* in 2026.

**Who filed what last week** - `corpus=history`, `receivedFrom=2026-09-04`, `historyType=Dissolve`.

**Delinquent Colorado LLCs** - `status=Delinquent`, `entityType=DLLC`.

**Where companies incorporate** - `mode=aggregate`, `groupBy=jurisdiction`.

### A note on the names

The register glues the status onto the name once an entity leaves good standing:

```
entityNameRaw:  SOUTHWEST CONTRACTING, LLC, Delinquent May 1, 2016
entityName:     SOUTHWEST CONTRACTING, LLC
```

985,161 names carry a `Delinquent` suffix and 770,034 a `Dissolved` one - more than half the register. Filtering or rendering the raw column gives you that noise as if it were the company's name. Every record here carries **both**: `entityName` with the suffix stripped when it matches the Secretary of State's own pattern, and `entityNameRaw` exactly as stored.

### Source

> **Counts below are a live snapshot** - the register is refreshed daily, so the exact figures move by a few hundred rows between reads. The order of magnitude and the ratios are stable.

Colorado Secretary of State, published on `data.colorado.gov` as [Business Entities in Colorado](https://data.colorado.gov/d/4ykn-tg5h) and [Business Entity Transaction History](https://data.colorado.gov/d/casm-dbbj) - public open data, no login and no key. Updated daily: the transaction feed takes 2,400-3,200 filings on a weekday (under 2,000 at a weekend), and 570-730 new entities are formed on a weekday.

The register is messier than a company list suggests, and the cleanup is done for you. The Secretary of State writes the status *into the company name* the moment an entity leaves good standing - `SOUTHWEST CONTRACTING, LLC, Delinquent May 1, 2016` - on more than half the register; that suffix is separated out here rather than handed to you as if it were part of the name. And the history reaches further than the register: 4,411,219 entity ids have filings against them against 3,108,712 registered entities, so a lookup by id returns the whole corporate record of a company that has since dissolved or been purged.

### Output

Every record carries the same key set regardless of corpus or mode - `recordType`, `entityId`, the entity fields, the filing fields, and the aggregate columns (`groupKey`, `groupCount`, `groupBy`) which are `""` outside aggregate mode.

### Related actors

- **CO UCC Filings** - the secured-lien register for these same Colorado businesses.
- **CO Charity Registry** - the charitable-solicitation register, with 990-style financials.
- **PA Registered Businesses** - the same idea for Pennsylvania, keyed per officer.

# Actor input Schema

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

rows = records matching your filters (default). aggregate = one count row per group (see groupBy). profile = one entity's register row plus its entire filing history — requires entityId.

## `corpus` (type: `string`):

entities = the register (3.1M entities, default). history = the filing history (21.6M filings) — find who filed what, when. Filters below apply to the corpus you pick.

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

Exact Colorado entity id (numeric), e.g. '19871342214'. The one key that ties an entity to its whole filing history.

## `name` (type: `string`):

Entity name substring, e.g. 'CONTRACTING', 'DENVER'. Matches the register name — which for a delinquent or dissolved entity carries a status suffix; the matched name is cleaned on output. (entities corpus)

## `status` (type: `string`):

Exact entity status (15 values). Good Standing ~1.03M, Delinquent ~1.14M, Voluntarily Dissolved ~597k. Blank = any. (entities corpus)

## `entityType` (type: `string`):

Exact Colorado entity-type code (33 values): D\* = domestic, F\* = foreign; LLC / PC (profit corp) / NC (nonprofit corp) / LP. DLLC ~2.10M, DPC ~550k. Blank = any. (entities corpus)

## `city` (type: `string`):

Principal-office city substring, e.g. 'Denver'. Blank = any. (entities corpus)

## `state` (type: `string`):

Two-letter principal-office state, e.g. 'CO' (~2.66M), 'CA', 'TX'. Blank = any. (entities corpus)

## `zip` (type: `string`):

Exact principal ZIP code, e.g. '80202'. Blank = any. (entities corpus)

## `country` (type: `string`):

Principal country, e.g. 'US'. Blank = any. (entities corpus)

## `jurisdiction` (type: `string`):

Jurisdiction the entity was formed in, e.g. 'DE' (~84k), 'CO', 'Delaware'. Substring match. Blank = any. (entities corpus)

## `agentName` (type: `string`):

Registered-agent name substring — matches the agent's organization name or a natural person's first / last name. Blank = any. (entities corpus)

## `formedFrom` (type: `string`):

Entities formed on or after this date (YYYY-MM-DD). Rows with no formation date are kept, not dropped. Blank = any. (entities corpus)

## `formedTo` (type: `string`):

Entities formed on or before this date (YYYY-MM-DD). Blank = any. (entities corpus)

## `historyType` (type: `string`):

Filing type substring, e.g. 'Dissolve', 'Amendment', 'Statement of Change', 'Form a Limited Liability Company'. 253 distinct filing types. Blank = any. (history corpus)

## `comment` (type: `string`):

The Secretary of State's own comment on the filing, substring match — carries name changes, address changes, agent changes, redomestications. Blank = any. (history corpus)

## `historyName` (type: `string`):

The entity name as recorded on the filing, substring match — for a name-change filing this is the new name. Blank = any. (history corpus)

## `transactionId` (type: `string`):

Exact filing transaction id (numeric), e.g. '20268141433'. Blank = any. (history corpus)

## `receivedFrom` (type: `string`):

Filings received on or after this date (YYYY-MM-DD) — the daily change stream. Blank = any. (history corpus)

## `receivedTo` (type: `string`):

Filings received on or before this date (YYYY-MM-DD). Blank = any. (history corpus)

## `effectiveFrom` (type: `string`):

Filings taking effect on or after this date (YYYY-MM-DD). Blank = any. (history corpus)

## `effectiveTo` (type: `string`):

Filings taking effect on or before this date (YYYY-MM-DD). Blank = any. (history corpus)

## `groupBy` (type: `string`):

Which dimension to aggregate over (mode=aggregate). The first five belong to the entities corpus, historyType to the history corpus — pick one that matches your corpus.

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

Cap the number of records pushed in rows / profile mode (0 = up to ~10k per run; each record is metered individually, so there is no per-run charge cap). Aggregate mode returns every group.

## Actor input object example

```json
{
  "mode": "rows",
  "corpus": "entities",
  "entityId": "",
  "name": "",
  "status": "",
  "entityType": "",
  "city": "",
  "state": "",
  "zip": "",
  "country": "",
  "jurisdiction": "",
  "agentName": "",
  "formedFrom": "",
  "formedTo": "",
  "historyType": "",
  "comment": "",
  "historyName": "",
  "transactionId": "",
  "receivedFrom": "",
  "receivedTo": "",
  "effectiveFrom": "",
  "effectiveTo": "",
  "groupBy": "entityStatus",
  "maxResults": 50
}
```

# Actor output Schema

## `recordsUrl` (type: `string`):

Colorado business-entity records, filings or aggregates - as JSON

## `datasetUrl` (type: `string`):

No description

## `runUrl` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("j0401/co-business-entities").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("j0401/co-business-entities").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 '{}' |
apify call j0401/co-business-entities --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,j0401/co-business-entities"
        }
    }
}
```

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/8SOVvLxlbMD5AM8Oc/builds/ddCepoZXZT093MFhS/openapi.json
