# Colorado Tax Lien Sale Lists + County-Held (`tatonicventures/colorado-tax-lien-sale-lists`) Actor

Colorado county tax lien sale lists in one table: parcel, address, tax, interest, fees, total due, valuation, lien-to-value. Denver, Larimer, Grand plus Adams county-held liens (no premium). From treasurer downloads.

- **URL**: https://apify.com/tatonicventures/colorado-tax-lien-sale-lists.md
- **Developed by:** [Nels Tate](https://apify.com/tatonicventures) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 tax 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/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

## Colorado Tax Lien Sale Lists: Denver, Larimer, Grand, Arapahoe + County-Held Liens

**Every parcel on Colorado county tax lien sale lists in one normalized table**: parcel, situs address, legal description, tax, interest, fees, total due and (where published) county valuation with a **lien-to-value ratio**. It also includes **county-held liens**, which you can buy from the treasurer at face value with no auction premium.

Colorado tax lien certificates earn a statutory interest rate set each year, but every county publishes its sale list differently: Excel in one county, an old .xls in another, a two-column newspaper PDF in a third. This Actor reads each treasurer's own published files and gives you one clean dataset to screen before the auction.

### Counties and lists

| Key | List | Format at source | Rows in our Oct 2026 test |
|---|---|---|---|
| `denver` | Denver advertised list (2026 sale, 2025 taxes, plus prior years still delinquent) | XLSX | 7,218 |
| `larimer` | Larimer advertised list incl. county valuation (updated nightly by the county) | XLS | 2,414 |
| `grand` | Grand County legal-notice list (real property and mobile homes) | PDF | 444 |
| `arapahoe` | Arapahoe advertised list incl. county assessed value (treasurer "Viewable file", refreshed weekly; fully paid rows dropped) | XLSX | 2,130 |
| `adams-county-held` | Adams County county-held liens (no premium) | PDF | 393 |

More counties are added as they publish machine-readable lists. Lists appear each fall ahead of the October-November sales.

### Who uses it

- **Tax lien investors** screening thousands of parcels before bidding: filter by total due, lien-to-value and entity owners, then cross-check with the assessor.
- **Analysts and researchers** studying delinquency by county.
- **Title, lending and property-data teams** monitoring delinquent parcels.

### Output fields

`county`, `listType` (`advertised` / `county-held`), `taxYear`, `accountId`, `parcelId`, `situsAddress`, `city`, `zip`, `legalDescription`, `taxAmount`, `interestAmount`, `feesAmount`, `totalDue`, `propertyValue`, `propertyValueType`, `totalDueToValuePct`, `partiallyPaid`, `ownerIsEntity`, `ownerName` (opt-in), `notes`, `sourceUrl`, `sourceLastModified`, `retrievedAt`.

#### Example input

```json
{
  "counties": ["denver", "larimer", "grand", "arapahoe", "adams-county-held"],
  "latestTaxYearOnly": true,
  "minTotalDue": 500,
  "maxTotalDue": 10000
}
```

#### Example output

```json
{
  "county": "Larimer",
  "listType": "advertised",
  "accountId": "1658145",
  "parcelId": "9524325120",
  "situsAddress": "1010 S LINCOLN AVE 120",
  "city": "LOVELAND",
  "zip": "80537",
  "taxAmount": 1737.31,
  "interestAmount": 104.25,
  "feesAmount": 15.0,
  "totalDue": 1856.56,
  "propertyValue": 330000,
  "totalDueToValuePct": 0.563,
  "ownerIsEntity": true,
  "ownerName": null
}
```

### Privacy

Owner names appear in the counties' published legal notices, but for individuals they're personal data, so they're **off by default**. You still get `ownerIsEntity` (LLC, trust, HOA and so on) for screening. Turn on `includeOwnerNames` only if you have a legitimate need.

### Pricing

Pay per lien record (see the Pricing tab). At the proposed $1.50 per 1,000 records, a full pull of all four lists (10,469 records in our test) would cost about $16. Use the filters to pay only for what you need.

### Notes and limitations

- Amounts are as published by the county on the date shown in `sourceLastModified`. Taxes get paid down right up to the sale, so confirm with the treasurer or auction site before bidding.
- `propertyValue` is the valuation printed on the county's list, labeled as such. Counties differ on whether it's actual or assessed value.
- This Actor reads only the treasurers' own public downloads. It doesn't access auction platforms, place bids, or log in anywhere.
- Not investment advice.

# Actor input Schema

## `counties` (type: `array`):

Which county treasurer lists to fetch. More counties are added as they publish machine-readable lists.

## `listTypes` (type: `array`):

Advertised = parcels in this year's auction. County-held = liens nobody bought at prior sales, which the treasurer sells for face value.

## `minTotalDue` (type: `integer`):

Skip liens below this amount.

## `maxTotalDue` (type: `integer`):

Skip liens above this amount. 0 = no maximum.

## `latestTaxYearOnly` (type: `boolean`):

Some lists (e.g. Denver) also carry older delinquent years for the same parcel. Keep only the most recent tax year.

## `entityOwnersOnly` (type: `boolean`):

Keep only parcels whose owner looks like a business, trust or other entity (LLC, INC, TRUST, HOA...).

## `includeOwnerNames` (type: `boolean`):

Owner names appear in the counties' published notices, but they are personal data for individual owners. Off by default: you still get the ownerIsEntity flag.

## `maxItems` (type: `integer`):

Stop after this many records in total. 0 = no limit.

## Actor input object example

```json
{
  "counties": [
    "denver",
    "larimer",
    "grand",
    "arapahoe",
    "adams-county-held"
  ],
  "listTypes": [
    "advertised",
    "county-held"
  ],
  "minTotalDue": 0,
  "maxTotalDue": 0,
  "latestTaxYearOnly": false,
  "entityOwnersOnly": false,
  "includeOwnerNames": false,
  "maxItems": 0
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `results` (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("tatonicventures/colorado-tax-lien-sale-lists").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("tatonicventures/colorado-tax-lien-sale-lists").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 tatonicventures/colorado-tax-lien-sale-lists --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tatonicventures/colorado-tax-lien-sale-lists"
        }
    }
}
```

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/6idLd7MArymFO15kF/builds/2D4PARbEyYOL3sdMY/openapi.json
