# Arizona Trustee Sale Postponements Scraper (`usta/arizona-trustee-sale-postponements`) Actor

Arizona foreclosure auctions that were postponed, cancelled or are expected to be postponed. One row per notice: file number, the date it moved from, the date it moved to, county, city, ZIP, opening bid and loan amount. Read live from the public trustee sale list.

- **URL**: https://apify.com/usta/arizona-trustee-sale-postponements.md
- **Developed by:** [US Tech Automations](https://apify.com/usta) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 result rows

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

## Arizona Trustee Sale Postponement Alerts

Real-estate wholesalers and foreclosure-auction investors get only the Arizona trustee-sale notices that moved: postponed, re-dated or cancelled.

### Introduction

Arizona foreclosure auctions move. A sale advertised for Tuesday is pushed to
November, or the file is cancelled outright, and anyone who drove to the
courthouse steps finds nothing happening. This Actor reads the public Arizona
notice-of-trustee-sale list published by the trustee firm Tiffany & Bosco, P.A.
and returns only the notices that moved: sales already postponed from an earlier
date, sales carrying the trustee's estimated postponement date, and sales marked
cancelled.

Notices that show no movement are skipped, so the output is the exception list
rather than the whole calendar.

Each row says which auction it is (the trustee file number), the date it was
scheduled for, the date it moved from, the date it may move to, how many days
that is, and where the property sits by county, city and ZIP. Loan and bid
figures are included where the notice publishes them.

The list is Arizona public notice under A.R.S. 33-808. Every row carries the
address of the page it came from and the UTC time it was read.

### Tutorial

1. Choose a **County**. Maricopa and Pima carry most of the notices. `All`
   searches every county on the list.
2. Choose **Weeks back**, from 1 to 8. A value of 4 searches sale dates from
   four weeks before today to four weeks after today. Looking back catches
   auctions that already got pushed; looking forward catches the ones flagged to
   be pushed next.
3. Set **Maximum rows**. This is a hard cap on the run and therefore on the
   cost. The default is 50, which holds that run to $0.50.
4. Run it, then open the dataset and export to JSON, CSV or Excel.

A run that finds nothing produces an empty dataset and costs nothing. If the
public list cannot be read, the run stores a status of `UNKNOWN` with the error
and produces no rows. Rows are never invented to fill a run.

### Pricing

**$0.01 per row, charged from the first row.** There is no start fee and no
monthly fee. A run is charged only for the rows it actually delivers, so a run
that returns 30 rows costs $0.30 and a run that returns 200 rows costs $2.00.

**Maximum rows** is the spend cap. Leave it at 50 to hold a run to $0.50.

### Input and output examples

Input:

```json
{
  "county": "Maricopa",
  "weeksBack": 4,
  "maxItems": 50
}
```

One row, a sale still on the calendar but carrying an estimated postponement
date six weeks out:

```json
{
  "file_no": "26-01403-RM-AZ",
  "event_type": "postponement_expected",
  "canceled": false,
  "scheduled_sale_date": "2026-09-15",
  "previous_sale_date": null,
  "projected_sale_date": "2026-10-30",
  "days_moved": 45,
  "sale_time": "10:00 AM",
  "file_status": "Trustee Sale",
  "state": "AZ",
  "county": "Maricopa",
  "city": "Phoenix",
  "zip": "85008",
  "sale_location": "at the office of the Trustee, 7720 North 16th Street, Suite 300, in the City of Phoenix, County of Maricopa, State of Arizona",
  "loan_date": "2021-12-02",
  "original_loan_amount": 562500.0,
  "opening_bid": 260816.76,
  "max_bid": 260816.76,
  "source_url": "https://fs.tblaw.com/sales/PendingSalesAz.aspx",
  "fetched_at": "2026-09-15T02:30:54Z"
}
```

Every field, in full:

| Field | What it holds |
| --- | --- |
| `file_no` | The trustee's file number for the sale, for example `26-01403-RM-AZ`. |
| `event_type` | `postponed`, `postponement_expected`, or `canceled`. |
| `canceled` | `true` when the notice carries the cancelled marker. |
| `scheduled_sale_date` | The auction date currently set, as `YYYY-MM-DD`. Empty on a cancelled file with no current date. |
| `previous_sale_date` | The date the auction was moved from, if the notice shows one. |
| `projected_sale_date` | The trustee's estimated postponement date, if the notice shows one. |
| `days_moved` | Days between the two dates that are known. Empty when only one date exists. |
| `sale_time` | Time of day the auction is set for. |
| `file_status` | The status word on the notice: `Trustee Sale`, `On Hold` or `Closed`. |
| `state` | Always `AZ`. |
| `county` | County of sale, taken from the notice's place-of-sale line. |
| `city` | City of the property. |
| `zip` | Five-digit ZIP of the property. |
| `sale_location` | Where the auction is held, in the notice's own words. |
| `loan_date` | Origination date of the defaulted loan. |
| `original_loan_amount` | Original loan amount as a number. |
| `opening_bid` | Opening bid as a number, where published. |
| `max_bid` | Maximum bid as a number, where published. |
| `source_url` | The public list the row was read from. |
| `fetched_at` | UTC time the read happened. |

`event_type` is `canceled` whenever the cancelled marker is present, otherwise
`postponed` when the notice shows a date it moved from, otherwise
`postponement_expected` when it shows only an estimated date.

### Recommendations

Run it the morning of an auction day with **Weeks back** set to 1. That gives a
short list of the sales on this week's calendar that are flagged to move, which
is the list worth checking before driving anywhere.

Run it weekly with **Weeks back** set to 8 to build a history of how far each
file keeps sliding. A file that has been pushed three times behaves differently
from one postponed once.

Sort by `days_moved` to see which auctions are being pushed months rather than
weeks. Filter on `event_type` of `canceled` to see files leaving the calendar
altogether.

### Limitations

Read this section before buying.

- **One trustee, not all of Arizona.** The source is the sale list of a single
  trustee firm, Tiffany & Bosco, P.A. Other Arizona trustees publish their own
  lists and none of them are included here. This is not every foreclosure
  auction in the state, and no percentage of statewide coverage is claimed
  because that figure has not been measured.
- **A projected date is an estimate, not a promise.** The source states that a
  listed possible postponement date "is an estimate of the action that will be
  taken at the time of sale as now scheduled, and is not a commitment to
  postpone", and that the trustee reserves the right to proceed to sale as
  scheduled. An `event_type` of `postponement_expected` means the notice carries
  such an estimate, nothing more.
- **No owner name and no street address.** The public page shows a trustor
  surname and the property street address. Neither is collected. Location is
  county, city and ZIP only. A notice whose address cannot be read leaves `city`
  and `zip` empty rather than guessing.
- **County coverage is uneven.** Maricopa and Pima carry most notices. Pinal,
  Mohave, Cochise, Yavapai, Yuma, Gila, Navajo and Santa Cruz appear in much
  smaller numbers, and a run against one of them can legitimately return nothing.
- **No permanent link per notice.** The source has no individual URL per sale,
  so `source_url` is the list page itself. Use `file_no` to look a notice up
  there.
- **Accurate as of the read, no more.** The source describes itself as a
  courtesy report, believed accurate at the time of viewing, not issued in place
  of the notices required by statute. Anything that matters should be confirmed
  with the trustee's office and the county recorder.
- **Not legal, title or investment advice.** These are parsed public notices.
  They are not a title search, a lien position, or a recommendation to bid.
- **Support is by issue tracker only.** Use this Actor's Issues tab with the run
  ID. No named person, response time or service level is offered.

### FAQ

**How is a postponement detected in a single run?**
The source's own legend marks the sale-date column with a previous date and a
projected date, shown in different colours. Both are read directly from the
page, so one run is enough. No history from earlier runs is needed.

**Why did a run return fewer rows than expected?**
Only notices that moved or were cancelled are returned. A quiet week in one
county genuinely produces few rows. Widen **Weeks back**, or set **County** to
`All`.

**Can the same auction appear twice?**
No. The source sometimes lists one file more than once inside a window. Those
listings are merged into a single row per file number and scheduled date, so a
run is never charged twice for the same auction.

**What happens if the source is down or changes?**
The run stores `UNKNOWN` with the error and returns no rows. Rows are never
guessed or carried over from a previous run.

**Is scraping this list allowed?**
The notices are Arizona public record under A.R.S. 33-808. The list is served
publicly without a login, and the host publishes no robots.txt file. Requests
identify themselves honestly and are paced one per second. The host's own
website terms have not been reviewed, so no representation is made about them.

**Which other states are covered?**
None. Arizona only.

### Refunds and support

Refunds: if a run returns zero rows for a valid input, email operations@ustechautomations.com within 7 days and we refund that run. Support: same address, replies within 2 business days.

# Actor input Schema

## `county` (type: `string`):

Arizona county to search. Maricopa and Pima carry by far the most notices. 'All' searches every county on the list.

## `weeksBack` (type: `integer`):

How many weeks before today the sale-date window starts. The window also runs the same number of weeks forward, so 4 covers sale dates from four weeks ago to four weeks ahead.

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

Hard cap on the number of rows this run produces, and therefore on what it can cost. Every row bills at the listed price from row one; there is no start fee.

## Actor input object example

```json
{
  "county": "Maricopa",
  "weeksBack": 4,
  "maxItems": 50
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `report` (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 = {
    "county": "Maricopa",
    "weeksBack": 4,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("usta/arizona-trustee-sale-postponements").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 = {
    "county": "Maricopa",
    "weeksBack": 4,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("usta/arizona-trustee-sale-postponements").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 '{
  "county": "Maricopa",
  "weeksBack": 4,
  "maxItems": 50
}' |
apify call usta/arizona-trustee-sale-postponements --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,usta/arizona-trustee-sale-postponements"
        }
    }
}
```

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/NGS1x4GeCQmZ3nSQf/builds/91lPcuBkLtkwIyNtM/openapi.json
