# GovEase Scraper \[$3.50/1K💰] | Tax Liens | Tax Deeds (`ahmed_jasarevic/govease-scraper`) Actor

Scrape GovEase tax-sale auctions across US counties: tax liens, tax deeds and upset sales with APN, owner, starting bid, assessed value, sale date and status. Screen parcels before the auction.

- **URL**: https://apify.com/ahmed_jasarevic/govease-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 results

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

## Govease Scraper

Scrape GovEase tax-sale auctions across US counties — tax liens, tax deeds, upset, judicial, redemption and sheriff sales — with parcel numbers, owners, starting bids, assessed values, sale dates and auction links.

### Screen Tax-Sale Parcels Before The Auction Opens

- Source tax lien and tax deed parcels across nine US states
- Compare starting bids against assessed and true values
- Filter by county, sale type or auction name for a target market
- Track new parcels and sale dates on a recurring schedule
- Build a tax-sale dataset for investing, research or a property-data product

### How It Works

![How the Govease Scraper turns a county auction into a dataset of tax-sale parcels with APNs, owners, bids and assessed values.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-govease-scraper.webp)

The Actor collects publicly available GovEase tax-sale auction parcels and normalizes them into one schema. Choose a state or auction name, or paste an auction URL; it reads the published auction and parcel data, then writes one row per parcel.

- `maxAuctions` controls how many auctions are scanned; `startUrls` targets specific auctions.
- `fetchParcelDetails` adds assessor values, tax year, legal description and the current bid when published.
- Parcels without published values keep `null` instead of guessed data.

Each row is one auction parcel with jurisdiction, sale type and date, APN, owner, situs address, acreage, starting bid, face value, assessed and true values, legal description, terms and links. Export as JSON, CSV or Excel, or read it through the Apify API.

### Scrape GovEase Tax Lien And Tax Deed Auctions

GovEase currently lists about 80 live auctions across nine states: CA, CO, IN, MO, NJ, PA, TN, TX and WA. `state` filters by one of those codes or `ANY`. `auctionName` filters by a substring of the county or auction name, e.g. `Baca`, `Kern` or `Los Angeles`.

`maxAuctions` defaults to 25 and caps at 500. Auctions that publish no parcels yet are skipped automatically, so the run keeps going until it finds auctions with data.

### Extract APNs, Owners, Bids And Assessed Values

Every parcel carries the fields needed for screening:

- **Identity** — `auctionId`, `auctionName`, `auctionUrl`, `parcelNumber`, `apn`, `uniqueNumber`
- **Jurisdiction** — `state`, `county`, `countySlug`
- **Sale** — `saleType`, `saleStatus`, `auctionDate`, `auctionDateRaw`, `timeLeft`
- **Money** — `startingBid`, `startingBidRaw`, `faceValueOwed`, `maxOverbid`, `currentBid`, `bidCount`
- **Values** — `assessedValue`, `assessedLand`, `assessedImprovements`, `totalTrueValue`, `trueLandValue`, `trueImprovementValue`, `taxYear`
- **Property** — `ownerName`, `propertyAddress`, `propertyDescription`, `acres`, `useCode`, `taxRateArea`, `legalDescription`
- **Terms** — `interestRate`, `redemptionPeriod`, `penaltyTerms`, `saleTermsPdfLinks`, `priorLienholder`, `priorLienYear`

`fetchParcelDetails` (off by default) collects each parcel's published detail data, including assessor values, tax year, legal description and the current bid. `maxParcelDetails` caps that detail work at 200 by default (max 5,000).

### Input

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `startUrls` | array of strings | No | — | GovEase auction or parcel URLs. Skips discovery; state and name filters are ignored. |
| `maxAuctions` | integer | No | `25` | Auctions to scrape when no start URLs are given. 1–500. |
| `state` | string | No | `ANY` | `ANY`, `CA`, `CO`, `IN`, `MO`, `NJ`, `PA`, `TN`, `TX` or `WA`. |
| `auctionName` | string | No | — | County or auction name substring, e.g. `Kern`. |
| `fetchParcelDetails` | boolean | No | `false` | Enrich each parcel from its detail page. |
| `maxParcelDetails` | integer | No | `200` | Hard cap on detail collection when enrichment is enabled. 0–5,000. |
| `proxy` | object | No | — | Standard Apify proxy configuration. Off by default. |

### Output

One row per auction parcel.

| Field | Description |
| --- | --- |
| `auctionId`, `auctionName`, `auctionUrl` | GovEase auction identity and public URL. |
| `state`, `county`, `countySlug` | Jurisdiction. |
| `saleType` | `Tax Lien`, `Tax Deed`, `Redemption`, `Upset Sale`, `Judicial Sale`, `Sheriff Sale`, `Foreclosure` or `Surplus`. |
| `saleStatus`, `auctionDate`, `auctionDateRaw`, `timeLeft` | `scheduled`, `live` or `closed`, ISO sale date, raw portal string and countdown. |
| `parcelNumber`, `apn`, `uniqueNumber` | Parcel/APN and GovEase "Unique #". |
| `ownerName`, `propertyAddress`, `propertyDescription` | Assessed owner, situs address and full property note. |
| `acres`, `useCode`, `taxRateArea` | Parsed from the property description. |
| `startingBid`, `startingBidRaw`, `faceValueOwed`, `maxOverbid` | Opening/minimum bid, face value owed and max overbid when published. |
| `currentBid`, `bidCount` | Live bid state; may be `null`/`0` when GovEase publishes it separately. |
| `assessedValue`, `assessedLand`, `assessedImprovements`, `totalTrueValue`, `trueLandValue`, `trueImprovementValue`, `taxYear` | Assessor and true values where the county supplies them. |
| `legalDescription`, `priorLienholder`, `priorLienYear` | Legal text and prior lien info. |
| `interestRate`, `redemptionPeriod`, `penaltyTerms`, `saleTermsPdfLinks` | Best-effort terms extraction. |
| `parcelDetailUrl`, `scrapedAt` | Source parcel page and extraction timestamp. |

### Example Input

```json
{
  "state": "CA",
  "auctionName": "Kern",
  "maxAuctions": 5,
  "fetchParcelDetails": true,
  "maxParcelDetails": 100,
  "proxy": { "useApifyProxy": false }
}
```

### Example Output

```json
{
  "auctionId": "1564",
  "auctionName": "2026 Kern County Tax Deed Auction - Reoffer",
  "auctionUrl": "https://liveauctions.govease.com/CA/cakernreoffer/1564/browsestandard",
  "state": "CA",
  "county": "Kern",
  "countySlug": "cakernreoffer",
  "saleType": "Tax Deed",
  "saleStatus": "scheduled",
  "auctionDate": "2026-11-18",
  "parcelNumber": "123-456-78",
  "apn": "123-456-78",
  "uniqueNumber": "1042",
  "ownerName": "DOE, JANE",
  "propertyAddress": "1234 Example St, Bakersfield, CA 93301",
  "acres": 0.24,
  "startingBid": 12500,
  "faceValueOwed": 11840,
  "assessedValue": 98000,
  "assessedLand": 24000,
  "assessedImprovements": 74000,
  "taxYear": 2025,
  "parcelDetailUrl": "https://liveauctions.govease.com/CA/cakernreoffer/1564/openstandardparcel/1042/123-456-78",
  "scrapedAt": "2026-10-25T08:00:00.000Z"
}
```

### Schedule Tax-Sale Monitoring And Export Parcels

- **Pre-auction screening** — run weekly and filter `startingBid` against `assessedValue` to surface candidates.
- **New-parcel alerts** — diff `parcelNumber` between runs for a county and send new rows to Slack or email.
- **Sale-date tracking** — follow `auctionDate` and `saleStatus` as an auction moves from scheduled to live to closed.
- **Integrations** — push rows to Google Sheets, Airtable, a CRM or an underwriting model through the Apify API, webhooks, Zapier or Make.

### Related Actors

- [GovEase Scraper - Tax Lien & Tax Deed Auctions and Parcels](https://apify.com/scrapersdelight/govease-auction-scraper) — GovEase auctions and parcels with monitor mode.
- [US Foreclosures, Tax Deeds & Sheriff Auctions API](https://apify.com/magebase/us-foreclosures-tax-deeds-auctions-api) — multi-portal distressed-property aggregation.
- [Property Owner, Tax & Deed Records Intel](https://apify.com/seibs.co/property-records-intel) — county assessor and recorder records.
- [Distressed Property Scraper — Tax Delinquent & Pre-Foreclosure](https://apify.com/dominvo/distressed-property-ai-scraper) — county distress signals and owner data.
- [Zillow Foreclosure Scraper: REO, Auctions & Pre-Foreclosure](https://apify.com/memo23/zillow-foreclosure-scraper) — broader foreclosure inventory.

### FAQ

#### Why use this Actor instead of the official GovEase API?

GovEase does not publish a public API for auction parcels. This Actor collects the publicly visible auction, parcel and export data that the portal provides, then normalizes it into one row per parcel.

#### What are the alternatives to this Actor?

`scrapersdelight/govease-auction-scraper` also targets GovEase and adds monitor mode. `magebase/us-foreclosures-tax-deeds-auctions-api` aggregates many county portals, and `seibs.co/property-records-intel` covers assessor and recorder records. This Actor focuses on GovEase parcel-level inventory with the portal's published assessor values merged in.

#### Why are assessed values or terms null on some parcels?

Assessed values are only present where the county pushes them to GovEase; some California tax-deed counties send `N/A`. Interest rate, redemption period and sale-terms PDFs are often published only in the county's own documents, not on the GovEase portal, so those fields are best-effort and may be `null`.

#### Why is `currentBid` null while an auction is running?

GovEase may publish live bid data separately while an auction is running. The published value is captured when present; otherwise the field is `null` or `0`. Enable `fetchParcelDetails` to collect the published current bid per parcel.

#### Can I scrape one specific auction?

Yes. Paste its URL into `startUrls`, e.g. `https://liveauctions.govease.com/CA/cakernreoffer/1564/browsestandard`. The Actor extracts the state, county slug and county id from the link and skips discovery. State and name filters are ignored when start URLs are provided.

#### Why did an auction return zero rows?

An auction that is registered but not yet opened publishes no parcels. The Actor skips it and continues; zero rows is the portal's real state, not a collection error.

#### How much does a run cost?

$0.0035 per parcel plus a $0.00005 start event. A 1,000-parcel run costs about $3.50. Free users receive the first 10 parcels.

### For AI Agents & LLM Apps

Returns GovEase tax-sale parcels with APN, owner, bids, assessed values and sale dates as one row per parcel.

Minimal input:

```json
{ "state": "CA", "maxAuctions": 3 }
```

Direct auction lookup:

```json
{ "startUrls": ["https://liveauctions.govease.com/CA/cakernreoffer/1564/browsestandard"] }
```

Enriched parcels:

```json
{ "state": "TX", "fetchParcelDetails": true, "maxParcelDetails": 100 }
```

Output fields: `auctionId`, `auctionName`, `auctionUrl`, `state`, `county`, `countySlug`, `saleType`, `saleStatus`, `auctionDate`, `auctionDateRaw`, `timeLeft`, `parcelNumber`, `apn`, `uniqueNumber`, `ownerName`, `propertyAddress`, `propertyDescription`, `acres`, `useCode`, `taxRateArea`, `startingBid`, `startingBidRaw`, `faceValueOwed`, `maxOverbid`, `currentBid`, `bidCount`, `assessedValue`, `assessedLand`, `assessedImprovements`, `totalTrueValue`, `trueLandValue`, `trueImprovementValue`, `taxYear`, `legalDescription`, `priorLienholder`, `priorLienYear`, `interestRate`, `redemptionPeriod`, `penaltyTerms`, `saleTermsPdfLinks`, `parcelDetailUrl`, `scrapedAt`.

Behaviors an agent should know:

- `startUrls` skips discovery and ignores `state` and `auctionName`.
- `maxAuctions` only applies when no start URLs are given.
- `fetchParcelDetails` adds detail work per parcel, capped by `maxParcelDetails` (default 200).
- `currentBid` and `bidCount` can be `null`/`0` on the grid because GovEase may publish live bid data separately.
- Auctions with no published parcels are skipped and return zero rows.
- Billing: $0.0035 per parcel plus a $0.00005 start event; free users receive 10 parcels.

### Legal & Compliance Disclaimer

This Actor is independent and is not affiliated with, endorsed by, or sponsored by GovEase or any county that uses the platform. It collects only publicly visible GovEase auction, parcel and export data; it does not log in, register as a bidder, place a bid or bypass a CAPTCHA. Output includes assessor-record owner names and property addresses, which are public records but may still be personal data under applicable law. You are responsible for complying with GovEase's Terms of Use, county sale rules and applicable data-protection law, and for verifying every parcel, bid and sale date with the administering county before bidding.

### SEO Keywords

govease scraper, govease auction data, tax lien auction data, tax deed auction data, tax sale parcels, county tax sale listings, tax lien investing data, tax deed investing, upset sale, judicial sale, sheriff sale data, apn parcel data, tax delinquent properties, property tax auction, gov ease auctions, tax sale api, tax lien list, tax deed list, county auction scraper

# Actor input Schema

## `startUrls` (type: `array`):

Paste GovEase auction URLs to scrape exactly those auctions, e.g. https://liveauctions.govease.com/CA/cakernreoffer/1564/browsestandard. Parcel detail URLs are resolved to their auction. When set, the state and auction name filters below are ignored. Leave empty to auto-discover every live auction.

## `maxAuctions` (type: `integer`):

Maximum number of GovEase auctions to scrape when no start URLs are given. Each auction yields one row per parcel; auctions with no published parcels are skipped automatically. GovEase currently lists ~80 live auctions across CA, CO, IN, MO, NJ, PA, TN, TX and WA.

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

Only scrape auctions from this US state. Use "Any state" to search all states.

## `auctionName` (type: `string`):

Only scrape auctions whose county or auction name contains this text, e.g. "Baca", "Kern" or "Los Angeles". Leave empty for all matched auctions.

## `fetchParcelDetails` (type: `boolean`):

Off by default (cheap). When enabled the actor also opens each parcel detail page to fill assessor values, tax year, legal description and the server-rendered current bid. Costs one extra request per parcel, capped by "Max parcel detail pages".

## `maxParcelDetails` (type: `integer`):

Hard cap on parcel detail requests per run when enrichment is enabled.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "startUrls": [],
  "maxAuctions": 25,
  "state": "ANY",
  "fetchParcelDetails": false,
  "maxParcelDetails": 200,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `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 = {
    "startUrls": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/govease-scraper").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 = {
    "startUrls": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/govease-scraper").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 '{
  "startUrls": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/govease-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/govease-scraper"
        }
    }
}
```

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/UGchieVBgzLYFvIXo/builds/9etGoFgo3hFDmoxuD/openapi.json
