# CO UCC Filings - Secured Lien & Debtor Search (`j0401/co-ucc-filings`) Actor

Colorado UCC financing-statement register (public open data, 2.0M debtor records): the public record of secured claims on a business or person - debtor name and address, organization type and jurisdiction, the filing action (add / change / delete) and the record status.

- **URL**: https://apify.com/j0401/co-ucc-filings.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 ucc debtor 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

## Colorado UCC Filings - Secured Lien & Debtor Search

When a lender takes a security interest in a business - equipment financing, inventory, receivables - it files a **UCC financing statement** with the Colorado Secretary of State. Those filings are public, and they are published as open data. This actor turns that register into a **charged-per-record search, filter and aggregate tool**: find a debtor by name, pull the filings on a single statement, filter by action or status, or aggregate the register.

**Built for:** lenders and credit analysts checking who else has a claim on a debtor, M\&A and asset-based diligence, and anyone who wants **the public lien record on a business** without paging a state portal one name at a time.

### What it covers

**2,015,388 debtor records** - the state's full UCC register, across **1,599,600 financing statements** (a statement can name several debtors, so one filing can return more than one row).

Depth beyond a bare name list:

- the filing's **action** - `add` (**1,981,929**), `change only` (**26,522**), `delete only` (**6,855**), `change and delete` (**82**) - the amendment history of a statement
- the **record status** - `active` (**1,977,469**) / `inactive` (**37,919**)
- the **debtor identity**, either an **organization** (name, jurisdiction, type, organization id) or a **natural person** (last / first / middle name, suffix) - the two are mutually exclusive
- the debtor's **full address** - street, city, state (CO **1,887,677**, CA, TX, ...), country and zip

### The fine print that matters

This register carries **no date column at all**. The recency axis is the monotonic **file id** (newest filing first), and the freshness guard reads the dataset's own update stamp rather than a row field - so a newest-first pull still tracks the live edge without a date to sort on.

Also worth knowing: a **file id is not a debtor**. The id names the statement; the register lists every debtor on it, so `fileId` can legitimately return more than one record. And a debtor is either an organization or a natural person, never both - the actor keeps both key sets on every record (empty-filled) so the output shape never shifts.

### Typical questions

- "Every UCC filing naming **a given business**."
- "The debtors on **one financing statement** (file id)."
- "Active filings against debtors in **Denver**."
- "Amendments and terminations (change / delete) on a statement."
- "Aggregate the register by **state**, **organization type** or **action**."

### Inputs

| Input | What it does |
|---|---|
| `mode` | `rows` (default) / `aggregate` |
| `debtor` | organization or person name substring |
| `fileId` / `debtorId` / `efsUniqueId` | exact identifiers |
| `debtorType` | organization / individual |
| `actionType` / `recordStatus` | add / change / delete; active / inactive |
| `city` / `state` / `country` | debtor location |
| `organizationJurisdiction` / `organizationType` | entity jurisdiction and type |
| `groupBy` | aggregate over state / country / action / status / org type / jurisdiction |
| `maxResults` | cap records (default 200) |

**Default run = the 200 most recent debtor records** - fast for the daily auto-test. For a targeted query add a filter; for a broad view use `aggregate`.

### Low cost

**From $0.0001 per record** - billed only for the rows you use, at the platform floor. Cost scales with what you pull, not with the size of the register, and because each record is metered individually there's no per-run charge cap to hit on a big pull.

What a thin scraper misses is the **filing structure**: a UCC record is not a name in a list, it is a debtor on a *statement* that can be amended and terminated over time - the register carries the action (`add` / `change` / `delete`) and the status, and the id you search on names the statement, not the debtor. The register also has **no date column to sort by**, so a naive newest-first pull either fails or drifts, and a debtor is **either an organization or a natural person**, two different shapes behind one record. Normalizing the statement-vs-debtor grain, the amendment action and the two debtor shapes into a schema where a `debtor` / `state` / `recordStatus` query returns exactly the filings you mean is the actual product. Every pull is integrity-checked against the register's known shape, so a degraded source fails loudly instead of returning bad rows.

### Source

- [Colorado: Uniform Commercial Code (UCC) Debtor Information](https://data.colorado.gov/Business/Uniform-Commercial-Code-UCC-Debtor-Informati/8upq-58vz) - the Secretary of State's UCC debtor register. Public open data. Records are the state's own published fields; not legal advice, and a filing is not a determination of any obligation.

# Actor input Schema

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

rows = debtor records matching your filters (default). aggregate = one count row per group (see groupBy).

## `debtor` (type: `string`):

Debtor name substring - matches the organization name or a natural person's first / last name, e.g. 'CHEVROLET', 'SMITH'. Blank = any.

## `fileId` (type: `string`):

Exact financing-statement file id (numeric). One statement can name several debtors, so a file id can return more than one row.

## `debtorId` (type: `string`):

Exact debtor record id (numeric).

## `efsUniqueId` (type: `string`):

Exact EFS unique id (numeric).

## `debtorType` (type: `string`):

organization = a business / entity debtor; individual = a natural-person debtor. Blank = both.

## `actionType` (type: `string`):

add (~1.98M), change only (~26.5k), delete only (~6.9k), change and delete. Blank = any.

## `recordStatus` (type: `string`):

active (~1.98M) / inactive (~37.9k). Blank = both.

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

Debtor city substring. Blank = any.

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

Two-letter debtor state, e.g. 'CO' (~1.89M), 'CA', 'TX'. Blank = any.

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

Debtor country, e.g. 'US'. Blank = any.

## `organizationJurisdiction` (type: `string`):

Organization jurisdiction substring (state / country of organization). Blank = any.

## `organizationType` (type: `string`):

Organization type substring (e.g. corporation, LLC). Blank = any.

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

Which dimension to aggregate over.

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

Cap the number of records pushed in rows 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",
  "debtor": "",
  "fileId": "",
  "debtorId": "",
  "efsUniqueId": "",
  "debtorType": "",
  "actionType": "",
  "recordStatus": "",
  "city": "",
  "state": "",
  "country": "",
  "organizationJurisdiction": "",
  "organizationType": "",
  "groupBy": "state",
  "maxResults": 50
}
```

# Actor output Schema

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

Colorado UCC debtor records 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-ucc-filings").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-ucc-filings").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-ucc-filings --silent --output-dataset

```

## MCP server setup

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

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/GJF4Dc19w5zMCtcF1/builds/WI6jwLlzeRN7d3sPT/openapi.json
