# UCC Lien Search by Debtor Name — 18 Official State Sources (`whetstonetools/ucc-lien-search`) Actor

Search 18 official state UCC registries by organization debtor name. Normalized lien records: secured party, filing number/type, filing & lapse dates, status, collateral where published, official source URL. Pre-lending due diligence. No API keys.

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

## Pricing

from $3.00 / 1,000 lien 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/platform/actors/running/actors-in-store#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

## UCC Lien Search by Debtor Name — 19 Official State Sources

Search **official state UCC registries by organization (business) debtor name**
and get back one normalized feed of lien records from **nineteen official state
sources**: **AR, CO, CT, FL, IA, ID, KY, ME, MI, MS, MT, NE, NJ, NM, NY, OH, OR,
RI, WI**. Built for **lenders,
equipment lessors, and factoring companies doing pre-lending due diligence**:
before you extend credit, see who already holds a security interest in the
debtor's assets — secured party, filing number and type, filing and lapse
dates, status, and collateral where the state publishes it.

Organization-debtor search only (no individual/person search — by design).
No API keys, no logins, no CAPTCHA bypass — every record comes from an
official state source and carries a `sourceUrl` and `retrievedAt` timestamp
so you can verify it yourself.

### What you get per lien record

| Field | Description |
|---|---|
| `state` | Two-letter state code the record came from |
| `debtorName` | Debtor organization name as filed (where the state publishes it) |
| `debtorAddress` | Debtor address, where published |
| `securedParty` | Secured party name(s) — multiple parties joined with `;` |
| `securedPartyAddress` | Secured party address, where published |
| `filingNumber` | The state's own filing number (unique per record) |
| `filingType` | Normalized short label: `UCC-1`, `UCC-3`, `Amendment`, `Continuation`, `Termination`, or the state's own lien label (e.g. `IRS Tax Lien`, `EFS`) |
| `filingDate` | Filing date, ISO `YYYY-MM-DD` |
| `lapseDate` | Lapse date, ISO `YYYY-MM-DD` (or `null`) |
| `status` | `Active` / `Lapsed` / `Terminated`, as derivable from published facts |
| `collateral` | Collateral description **where the state machine-publishes it** (CO, KY, OR farm filings, RI post-2010 filings); `null` elsewhere — never guessed |
| `sourceUrl` | Link back to the official state source |
| `retrievedAt` | When this record was fetched (ISO 8601) |

Fields a state does not publish are `null`, never guessed.

### Input

- **debtorName** (required) — the ORGANIZATION debtor name to search. Use the
  business's full legal name for best results (several states match
  begins-with or exact, see the per-state table).
- **states** — any of `AR`, `CO`, `CT`, `FL`, `IA`, `ID`, `KY`, `ME`, `MI`,
  `MS`, `MT`, `NE`, `NJ`, `NM`, `NY`, `OH`, `OR`, `RI`, `WI`. Omit for all
  nineteen.
- **maxResultsPerState** — cap per state (default 50, max 500). Several states
  fetch one detail page per record, so this also bounds runtime and
  politeness load.
- **exactMatch** — post-filter to debtor names containing the full query
  string (useful where a state's matching is loose).

#### Input example

```json
{
  "debtorName": "ACME MANUFACTURING",
  "states": ["NY", "FL", "CT", "CO"],
  "maxResultsPerState": 50,
  "exactMatch": false
}
```

### Per-state sources, stated honestly

Every state publishes different fields, on a different cadence, with different
matching rules. We'd rather tell you a source's limits up front than let you
find out from a missed lien.

| State | Source | Matching | Honest caveats |
|---|---|---|---|
| **Arkansas** | BCS UCC public JSON API (bcs.sos.arkansas.gov) | Contains (min 2 chars) | Free search rows only: secured party + city/state published. Collateral, street addresses, and full party detail are behind the paid certified UCC-11 → `null`. Client-side organization-only privacy filter drops any matched row whose debtor reads as an individual. Server caps 100 rows, no paging. Dedup by filing number keeps the initial financing statement so `filingDate` reflects lien origination. |
| **Colorado** | CDOS open data (data.colorado.gov, 4 official datasets) | Substring | Richest record — secured party + **collateral text** on most records. Daily refresh, ~1–2 day lag. Includes IRS/hospital/EFS/statutory liens. One record per filed document naming the debtor; lineage lapse/termination is reflected in `status`/`lapseDate`. |
| **Connecticut** | SOTS official UCC dataset (data.ct.gov) | Substring | Updated daily. Scope: **active liens + <1 year past lapse** — long-lapsed history absent. Collateral not published. Also carries vessel/aircraft/IRS/municipal lien types (labeled). |
| **Florida** | FL UCC registry public API (floridaucc.com) | Prefix | Full parties + addresses. Collateral lives only in the filing-image PDF → `null`. ~5-day processing lag. Debtor index lists UCC-1s; later amendments are not separate records. |
| **Idaho** | SOSBiz UCC API (sosbiz.idaho.gov) | Whole-leading-word prefix | Free preliminary list publishes secured party + debtor city/state. Collateral and full street addresses are behind the paid Access Idaho premium product → `null`. Whole-word prefix match (not a substring search); very broad single-token queries are truncated by the source's own anti-abuse gate. Out-of-state-registered orgs correctly return 0 (Revised Article 9). |
| **Iowa** | IA SoS filings portal JSON (filings.sos.iowa.gov) | Starts-with | Full parties, normalized filing types, termination detection. Collateral PDF-only → `null`. Weekly "current as of" cutoff (~few days lag). |
| **Kentucky** | KY SoS UCC search (web.sos.ky.gov) | Prefix | **Collateral text published** (verbatim). Scope: active filings (+ <1 yr past lapse) only. Records current through ~2 weeks prior. |
| **Maine** | Bureau of Corporations "Unofficial Debtor Name Search" (apps1.web.maine.gov) | Contains (case-insensitive) | **Names-only index.** The free search returns only a single-column list of organization debtor names (filings active or lapsed within the past year) — it confirms an org has UCC filings on record but publishes no detail. `securedParty`, `filingNumber`, `filingDate`, `lapseDate`, `status`, `collateral`, and addresses are all `null` (the paid official search is never touched). Deduped by org name; hard-capped at 50 names, no pagination. |
| **Michigan** | MI UCC portal API (ucc.michigan.gov) | **Exact full legal name** | Thin free layer: filing number, date, lapse date, status only — secured party/addresses/collateral are in the paid UCC-11 product → `null`. Scope: active + lapsed <1 yr. Use the debtor's exact legal name. |
| **Mississippi** | SOS STAR business portal, "UCC Public Search" (business.sos.ms.gov) | RA9 normalized starts-with | Free public search plus a free per-filing filing-chain fetch for the secured party. Collateral is not in the free view (image-only) → `null`. `status` is **derived** from the filing chain (Terminated / Lapsed / Active). `securedParty` is the original UCC-1 secured party of record. Organization-debtor only — never enumerates individual co-debtors. |
| **Montana** | SOS Liens Search API (biz.sosmt.gov) | Contains | Free public search returns the full debtor hit list (certified copies/UCC-11 out of scope). A positive organization allowlist emits only entity debtors — individuals and suffix-less person-named businesses are dropped (zero-individual guarantee). Only city + state per party (no street). 100-row cap, no pagination. `filingType` is MT's own category label (UCC / EFS / Title 71). Primary debtor only. |
| **Nebraska** | NE lien search API (business.nebraska.gov) | Substring (primary debtor) | Free non-certified search. Secured party + city published; street addresses/collateral `null`. Server caps one response at 100 rows. Liens where the searched org is a non-primary co-debtor are not returned. |
| **New Jersey** | DORES non-certified search (njportal.com) | Begins-with | Free layer publishes debtor name/city, filing number, status, filing date ONLY — secured party, lapse date, and collateral are behind the state's paid $6 status report → `null`. ~2-business-day lag. |
| **New Mexico** | SOS Enterprise UCC public JSON API (enterprise.sos.nm.gov) | Contains (case-insensitive) | Same vendor platform as Arkansas. Free search rows publish secured party + city/state only; collateral, street addresses, and full party detail are behind the paid certified UCC-11 → `null`. Client-side organization-only privacy filter drops individual-debtor matches. Server caps 100 rows, no paging. |
| **New York** | DOS UCC e-filing portal (ucc-efiling.dos.ny.gov) | Begins-with (min 3 chars) | **Current same-day.** Full parties via per-lien detail fetch (slower on big result sets). Collateral not published → `null`. |
| **Ohio** | SOS "UCC Online" JSON API (ucc.ohiosos.gov) | Exact (RA9 normalized name) | Free index publishes debtor + secured-party **names only** — addresses and collateral live in the paid certified-copy product → `null`. No Active/Lapsed status string is published, so `status` is `null` (deriving it from a lapse date alone would be a guess). `filingType` passes Ohio's own event label through as filed (`Original`, `Amendment`, `Continuation`, `Termination`, `Assignment`). Feed the full normalized legal name. |
| **Oregon** | OR SoS open data (data.oregon.gov, 3 datasets) | Substring | **Scope caveat:** last-calendar-month UCC/EFS/IRS filings (refreshed monthly, up to ~6-week lag) **plus all currently-effective farm-product liens** (full history for farm debtors, collateral included). Full historical non-farm search is behind a challenge-walled UI → not covered. |
| **Rhode Island** | RI Dept. of State Business Services UCC Search (business.sos.ri.gov) | Begins-with | Grid + a per-filing history fetch enrich secured party, debtor street address, and **Collateral Information text where published** (post-2010 filings; older filings keep collateral in scanned PDFs → `null`). `lapseDate` and `status` are not published by RI → `null` (honest). Includes lapsed/historical filings. One extra polite request per returned record. |
| **Wisconsin** | WI DFI WiMS API (wims.dfi.wi.gov) | Contains | Secured party published; addresses/collateral not in the free summary → `null`. Current registry data. |

#### Not covered & why

We never bypass CAPTCHAs, bot challenges, logins, or paywalls. A state moves
into coverage only when an official **free public** route exists. States we
probed and cannot serve without crossing that line:

| State | Why not covered |
|---|---|
| AK | CAPTCHA/WAF — DataDome bot-defense + F5 BIG-IP |
| AZ | CAPTCHA/WAF — Cloudflare managed-JS challenge / Turnstile |
| CA | WAF — Imperva/Incapsula managed-JS challenge |
| DC | Login required |
| DE | No public search / paid (authorized-searcher-only) |
| GA | Login required (GSCCCA account) |
| HI | WAF/managed-JS — Salesforce Lightning Aura SPA behind Akamai |
| IL | Bot-wall — Akamai Bot Manager |
| IN | CAPTCHA-keyed search form |
| KS | Paid + login (no free org-name search tier) |
| LA | Paid + login / no central SoS search (parish model) |
| MA | WAF — Imperva Incapsula managed-JS challenge |
| MN | Paid (login + per-lookup fee) |
| MO | Login required |
| NC | CAPTCHA/WAF — Cloudflare managed challenge |
| ND | CAPTCHA (public search) + login (no-captcha option) + paid (certified) |
| NH | No public online search |
| NV | Login required |
| PA | CAPTCHA/WAF — Cloudflare managed-JS challenge |
| SC | Paid (per-search paywall, card required) |
| SD | Login required (pre-paid account) |
| TN | CAPTCHA — Cloudflare Turnstile on the search action |
| TX | Login + paid — SOSDirect subscriber portal (no Socrata dataset) |
| UT | WAF/managed-JS — Cloudflare Bot Management |
| VA | CAPTCHA — Google reCAPTCHA v3 (server-verified) |
| WA | CAPTCHA — Google reCAPTCHA Enterprise (server-verified) |
| WV | CAPTCHA — Google reCAPTCHA Enterprise (IP-reputation gated) |
| WY | Login required |

Remaining states (AL, MD, OK, VT) are not yet integrated.

### Typical uses

- **Pre-lending / pre-lease due diligence**: search a prospective borrower or
  lessee before filing your own UCC-1 — see existing secured parties and
  whether a blanket lien is already in place.
- **Factoring onboarding**: check a new client's receivables for prior
  security interests across the states they operate in.
- **Portfolio monitoring**: re-run your debtor list on a schedule and diff
  filing numbers to catch new liens.
- **Asset research / competitive intel**: see which finance companies are
  active against a company's equipment.

### Companion actors

- **Look up / verify any company (KYB)** — the registry record behind a debtor,
  or any US company by name across official sources:
  [**Secretary of State Business Entity Search (KYB)**](https://apify.com/whetstonetools/secretary-of-state-business-search)
  (28 states, official-data-only).
- **Brand-new business registrations as a lead feed**:
  [**New Business Leads by State**](https://apify.com/whetstonetools/new-business-filings-monitor)
  (16 official state sources).
- **Sanctions screening** — KYC/AML-check the same name against the official
  U.S. Treasury OFAC SDN list:
  [**OFAC Sanctions Screening**](https://apify.com/whetstonetools/ofac-sanctions-screen).
- **Federal contracts & grants** — see a company's government revenue:
  [**Federal Awards Lookup**](https://apify.com/whetstonetools/federal-awards-lookup).

### Pricing

Pay-per-event: a small per-run start fee plus a per-result charge. You only
pay for lien records actually returned. No subscription, no minimum.

### For AI agents (MCP)

Built for agentic use: a clean, described input schema and a normalized output
schema with per-record source URLs. Discoverable and callable through the
Apify MCP server and pay-per-event agentic payment rails — an agent can screen
a debtor across all nineteen states in one call.

### Data sources

All data comes from official state government sources (Secretary of State /
state filing-office UCC registries and their official open-data portals).
This actor returns public record data as published by each state; it is
provided "as is" for informational purposes and is **not** a certified UCC
search. For a certified search, order one from the state filing office.

### FAQ

**How do I search UCC liens by company name across multiple states?**
Run this actor with the debtor's organization name. It queries each selected
state's official UCC registry and returns one normalized feed of lien records
— secured party, filing number/type, dates, status, and collateral where
published — each with a link back to the official source.

**Which states are covered?**
Nineteen: AR, CO, CT, FL, IA, ID, KY, ME, MI, MS, MT, NE, NJ, NM, NY, OH, OR,
RI, and WI. Omit the `states` field to search all nineteen. States behind
CAPTCHAs, bot-walls, logins, or paywalls (e.g. CA, WA, MN, IL, TX, GA) are
deliberately not covered — see the "Not covered & why" table above. We never
bypass access controls.

**Can I search for liens against an individual person?**
No — organization (business) debtor search only, by design, for privacy
reasons. Every state module hard-codes the organization search path and never
submits individual name fields.

**How fresh is the data?**
Varies by state and stated honestly: NY is current same-day; CO and CT update
daily (~1–2 day lag); NJ ~2 business days; FL ~5 days; IA a weekly cutoff;
KY ~2 weeks; OR's general UCC file refreshes monthly (farm liens are
current). See the per-state table above.

**How much does it cost?**
Pay-per-event: a small per-run start fee plus a per-record charge. You only
pay for lien records actually returned — no subscription, no minimum.

# Actor input Schema

## `debtorName` (type: `string`):

The ORGANIZATION (business) debtor name to search for in state UCC registries. Organization search only — individual-debtor search is not supported.

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

Which official state UCC registries to search. Leave empty for all supported states.

## `maxResultsPerState` (type: `integer`):

Cap on how many lien records to return from each state (keeps cost and runtime bounded).

## `exactMatch` (type: `boolean`):

When enabled, post-filters results to debtor names containing the full query string (case-insensitive). Useful when a state's search is fuzzy and returns loose matches.

## Actor input object example

```json
{
  "debtorName": "John Deere",
  "states": [
    "AR",
    "CO",
    "CT",
    "FL",
    "IA",
    "ID",
    "KY",
    "ME",
    "MI",
    "MS",
    "MT",
    "NE",
    "NJ",
    "NM",
    "NY",
    "OR",
    "RI",
    "WI"
  ],
  "maxResultsPerState": 50,
  "exactMatch": false
}
```

# 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 = {
    "debtorName": "John Deere"
};

// Run the Actor and wait for it to finish
const run = await client.actor("whetstonetools/ucc-lien-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 = { "debtorName": "John Deere" }

# Run the Actor and wait for it to finish
run = client.actor("whetstonetools/ucc-lien-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "debtorName": "John Deere"
}' |
apify call whetstonetools/ucc-lien-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=whetstonetools/ucc-lien-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WNKlmiHy0Kp75mABa/builds/2Hm72FbCbJ3HPVE06/openapi.json
