# Hockley County Foreclosure Notices Scraper (`automation-lab/hockley-county-foreclosure-notices-scraper`) Actor

🏠 Collect official Hockley County foreclosure sale dates and direct notice PDF links for monitoring, research, document archiving, and lead workflows.

- **URL**: https://apify.com/automation-lab/hockley-county-foreclosure-notices-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.02 / 1,000 notice extracteds

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/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

## Hockley County Foreclosure Notices Scraper

Collect public Hockley County, Texas foreclosure notices as clean, structured data.

The Actor reads the county's official foreclosure page, normalizes each posted sale date, and returns the direct notice PDF URL. Use it for recurring auction research, investor watchlists, document archiving, and lead-data pipelines without copying links by hand.

- 🏠 **Official source** — every row points back to the Hockley County website.
- 📅 **Normalized dates** — filter and sort sale dates as `YYYY-MM-DD`.
- 📄 **Direct documents** — download or archive the original public notice PDFs.
- ⚡ **Lightweight runs** — one public HTML request, no browser or proxy.
- 🔁 **Automation-ready** — schedule runs and compare newly posted documents.

### What does Hockley County Foreclosure Notices Scraper do?

Hockley County publishes foreclosure notices as dated PDF links on a public web page. This Actor converts that page into a dataset with one record per notice.

It extracts:

- the advertised foreclosure sale date;
- the direct county-hosted PDF URL;
- the PDF filename;
- the numeric sale year; and
- the source page URL for provenance.

The Actor resolves relative links, repairs dates split by imperfect page markup, removes duplicate document URLs, and ignores non-notice PDFs without a sale date.

It does **not** invent property addresses, owner names, debt amounts, or case details that are not present on the index. Many source PDFs are scanned images, so v1 keeps the dependable notice index and raw document link as its product contract.

### Who is this foreclosure notice scraper for?

#### Real-estate investors

Monitor upcoming trustee-sale dates and collect the original notice documents before auction research.

#### Wholesalers and acquisition teams

Feed newly posted notices into an internal review queue, CRM, or enrichment workflow.

#### Auction researchers

Build a dated archive of county postings and preserve direct links to source evidence.

#### Lead-data operators

Schedule recurring runs, deduplicate by `documentUrl`, and send only unseen records downstream.

#### Journalists and public-record researchers

Create a reproducible source list for local housing, credit, and auction reporting.

### Why use this Actor?

Copying notice links manually is repetitive and error-prone. County markup can also contain duplicated anchors or a date split across adjacent links.

This Actor provides:

- ✅ deterministic URL deduplication;
- ✅ normalized, machine-readable dates;
- ✅ inclusive year and date-range filters;
- ✅ a stable output schema;
- ✅ CSV, JSON, Excel, XML, and RSS exports through Apify;
- ✅ API, webhook, schedule, and MCP access; and
- ✅ clear failures when a filter is invalid or extraction stops working.

A successful run always returns matching notice records. If extraction produces no records, the run fails instead of silently reporting success with an empty dataset.

### What Hockley County foreclosure data can I extract?

| Field | Type | Description |
|---|---|---|
| `saleDate` | string | Foreclosure sale date normalized to `YYYY-MM-DD` |
| `documentUrl` | URL | Direct public Hockley County notice PDF |
| `documentFilename` | string | Decoded filename from the county URL |
| `year` | integer | Sale year derived from `saleDate` |
| `sourceUrl` | URL | Official county foreclosure index used for extraction |

Each row represents one posted notice document. Several notices may share the same sale date because multiple properties or filings can be scheduled for one auction day.

### How much does it cost to scrape Hockley County foreclosure notices?

The Actor uses pay-per-event pricing:

- **$0.005** when a run starts; and
- tiered pricing per saved foreclosure notice.

The current BRONZE reference rate is **$0.000036624 per notice**, with automatic discounts on higher Apify plans. For example, a run that saves 25 notices costs approximately $0.00592 at that reference rate: $0.005 start plus about $0.00092 for records.

Apify's free platform credits may cover small monitoring runs. Check the live pricing panel for your plan's exact tier before running a large workflow.

You are charged only for notices written to the dataset, plus the run-start event. Filters can reduce output and downstream processing.

### How to scrape foreclosure notices in 4 steps

1. Open the Actor in Apify Console.
2. Set **Maximum notices** and optionally add a year or inclusive date range.
3. Click **Start** and wait for the public county page to be parsed.
4. Open the dataset to download JSON, CSV, Excel, XML, or another supported format.

For recurring monitoring, save the input as a task and attach an Apify schedule. Use `documentUrl` as the stable deduplication key in your database or automation.

### Input parameters

#### Maximum notices

`maxItems` stops the run after the requested number of matching records.

- Type: integer
- Range: 1–1000
- Default: 50
- Prefill: 10

#### Sale year

`year` keeps only notices whose advertised sale date falls in one year.

```json
{
  "year": 2026,
  "maxItems": 100
}
```

#### Inclusive date range

`fromDate` and `toDate` use `YYYY-MM-DD` and include both boundaries.

```json
{
  "fromDate": "2026-07-01",
  "toDate": "2026-09-30",
  "maxItems": 100
}
```

You may combine `year` with a date range. All filters must match. Invalid calendar dates and reversed ranges fail closed.

### Example output

```json
{
  "saleDate": "2026-08-04",
  "documentUrl": "https://www.co.hockley.tx.us/upload/page/0096/2026/20260610143132874.pdf",
  "documentFilename": "20260610143132874.pdf",
  "year": 2026,
  "sourceUrl": "https://www.co.hockley.tx.us/page/foreclosures"
}
```

The PDF remains on the county host. The Actor does not copy the file into the dataset or claim that a scanned PDF has searchable text.

### Monitoring newly posted foreclosure notices

A useful recurring workflow is:

1. Run the Actor daily or weekly.
2. Store returned `documentUrl` values in your database.
3. Compare the current dataset with previously seen URLs.
4. Send unseen documents to a review queue.
5. Archive the source PDF when your retention policy allows it.

The county page can add records for a sale date that already appeared before, so deduplicate by document URL rather than only by date.

### Data quality and source behavior

The county page is the authority for what is currently posted. Dates are parsed from each PDF link's nearby visible text.

The extractor handles:

- relative and absolute PDF URLs;
- repeated anchors pointing to the same PDF;
- dates split across adjacent links inside one paragraph;
- inconsistent whitespace around commas; and
- unrelated PDF links that do not have a valid sale date.

If Hockley County changes its page structure or stops exposing dated PDFs, the Actor fails visibly so stale or fabricated rows are not emitted.

### Tips for reliable foreclosure research

- 🔑 Use `documentUrl` as the unique key.
- 🗓️ Run shortly after county posting cycles, not every few minutes.
- 📥 Archive documents promptly if your workflow requires long-term access.
- 🔎 Treat the notice PDF as the primary evidence for property-level details.
- 🧩 Add OCR in a separate downstream step only when needed.
- ⚖️ Verify auction status and legal details with official sources before acting.

A foreclosure notice may be amended, withdrawn, postponed, or superseded. This dataset is a discovery index, not a guarantee that a sale will occur.

### Integrations and automation workflows

#### Google Sheets or Airtable watchlist

Send new rows through Make or Zapier, deduplicate on `documentUrl`, and assign review status to a team member.

#### CRM lead intake

Use a webhook after the run, download the dataset, and create a research record for each unseen notice. Enrich only after reviewing the official PDF.

#### Cloud storage archive

Use `documentFilename` and `documentUrl` to copy public PDFs into a controlled S3, Google Drive, or OneDrive folder.

#### Slack or email alerts

Compare with the previous run and notify researchers when a new URL appears or a new sale date is posted.

#### Data warehouse

Load the JSON dataset into BigQuery, Snowflake, PostgreSQL, or another warehouse with `documentUrl` as a unique constraint.

### Run with the Apify API in JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/hockley-county-foreclosure-notices-scraper').call({
    year: 2026,
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Install the client with `npm install apify-client`.

### Run with the Apify API in Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/hockley-county-foreclosure-notices-scraper').call(
    run_input={
        'fromDate': '2026-07-01',
        'toDate': '2026-09-30',
        'maxItems': 100,
    }
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

Install the client with `pip install apify-client`.

### Run with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~hockley-county-foreclosure-notices-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"year":2026,"maxItems":100}'
```

Use the returned run ID to inspect status, logs, and the default dataset through the Apify API.

### Use this Actor through MCP

Connect the Actor to Claude Code:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/hockley-county-foreclosure-notices-scraper"
```

For Claude Desktop, Cursor, or VS Code, add an HTTP MCP server configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/hockley-county-foreclosure-notices-scraper"
    }
  }
}
```

Example prompts:

- “Collect the latest 25 Hockley County foreclosure notices.”
- “Find Hockley County notice PDFs with sale dates in August 2026.”
- “Return the 2026 notice URLs as a table grouped by sale date.”

Your MCP client will still need authorization for your Apify account.

### Scheduling and incremental processing

Create an Apify task with a small `maxItems`, then attach a daily or weekly schedule. After each run:

- read the default dataset;
- discard URLs already stored;
- process unseen records;
- record the run ID and timestamp for auditability; and
- alert on run failure so source changes are investigated.

Because the Actor fetches one index page, aggressive schedules do not provide useful additional coverage. Choose a cadence that matches the county's posting frequency.

### Limitations

- The Actor covers only the public Hockley County foreclosure index.
- It returns notice metadata and links, not OCR text or parsed property fields.
- A linked PDF can be a scanned image without a searchable text layer.
- The county controls availability, content, corrections, and link retention.
- A posted notice does not prove a foreclosure sale completed.
- Date filters apply to the advertised sale date, not upload time.
- Historical notices no longer present on the page cannot be reconstructed.

For broader property listings or other jurisdictions, use a related specialist Actor.

### Is scraping foreclosure notices legal?

The Actor accesses an anonymously available county public-record page and returns links to public documents. Public availability does not remove every legal or contractual obligation.

You are responsible for:

- using data for a lawful purpose;
- following applicable privacy, consumer-protection, and solicitation rules;
- respecting source terms and public-record restrictions;
- protecting personal information found inside notice documents; and
- verifying facts before making financial or legal decisions.

Do not use the output for unlawful discrimination, harassment, deceptive outreach, or decisions requiring regulated notices or professional advice.

### Troubleshooting

#### The run says no notices matched

Check that `year`, `fromDate`, and `toDate` overlap dates currently posted on the county page. Remove optional filters to test the current source. A zero-match run fails intentionally.

#### A date value is rejected

Use a real calendar date in `YYYY-MM-DD` format. For example, use `2026-08-04`, not `08/04/26` or `2026-02-30`.

#### A PDF does not contain selectable text

The source document may be a scan. Download it from `documentUrl` and use an OCR service in a downstream workflow. The Actor does not promise OCR accuracy.

#### The county link no longer works

County administrators control document retention. Rerun the Actor to get current links and consider archiving public documents when your compliance policy permits it.

### Frequently asked questions

#### Does this Actor scrape property addresses?

No. It indexes the reliably visible date and source PDF. Property-level extraction would require reading each document, and many are scans.

#### Can I filter one sale month?

Yes. Set `fromDate` to the first day and `toDate` to the last day of the desired month.

#### Can I request another Texas county?

This Actor is intentionally scoped to Hockley County. Different counties use different systems and require separate validation.

#### Are duplicate notices removed?

Duplicate links to the same absolute `documentUrl` are removed within each run. Different PDFs on the same sale date remain separate records.

#### Does the Actor need a proxy?

No. The current county page is publicly accessible through plain HTTP requests. Adding a proxy would increase cost without improving the proven route.

#### Can I download the PDFs in bulk?

Use the returned `documentUrl` values in a downstream downloader or archive process. Apply sensible request rates and retention controls.

### Related real-estate scrapers

- [Auction.com Foreclosure Listings Scraper](https://apify.com/automation-lab/auction-com-foreclosure-listings-scraper) — broader distressed-property listings and auction inventory.
- [HUD Home Store Foreclosure Listings Scraper](https://apify.com/automation-lab/hud-home-store-foreclosure-listings-scraper) — HUD foreclosure inventory.
- [Zillow Scraper](https://apify.com/automation-lab/zillow-scraper) — residential property listings and details.

Choose this Actor when you specifically need Hockley County's official dated notice-document index and direct source provenance.

### Support

If a run fails, include the run URL, input, expected sale-date range, and a sample county notice link in your report. Do not include private credentials or unnecessary personal information from a notice PDF.

Source websites evolve. Clear reproduction details help distinguish a filter mismatch, removed county document, and extractor regression quickly.

# Actor input Schema

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

Stop after saving this many matching foreclosure notices.

## `year` (type: `integer`):

Optionally keep notices for one foreclosure sale year.

## `fromDate` (type: `string`):

Optionally keep notices on or after this date (YYYY-MM-DD).

## `toDate` (type: `string`):

Optionally keep notices on or before this date (YYYY-MM-DD).

## Actor input object example

```json
{
  "maxItems": 10
}
```

# Actor output Schema

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

Open the run dataset containing sale dates, direct notice PDF links, filenames, years, and county source URLs.

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/hockley-county-foreclosure-notices-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/hockley-county-foreclosure-notices-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 '{
  "maxItems": 10
}' |
apify call automation-lab/hockley-county-foreclosure-notices-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/hockley-county-foreclosure-notices-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/o04weY8Pz0FE5r9pQ/builds/g6oxLn25XAQBTJ3Zc/openapi.json
