# Auction Property Scraper (Cheap) (`data_api/auction-property-scraper-cheap`) Actor

Auction properties extractor designed for heavy-hitting cash buyers, house flippers, and wholesale deal-makers looking to instantly spot distressed property liquidations.

- **URL**: https://apify.com/data\_api/auction-property-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/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

## Realtor Auction Property Scraper

![Realtor Auction Property Scraper](cover.jpg)

Auction and distressed homes on Realtor.com move fast, and digging them out by hand means clicking through page after page. This scraper hands you the whole pool at once. Set a location and a few filters, and every matching auction listing comes back as a clean row: asking price, full address, beds and baths, lot size, agent contacts, and the auction flag already split into fields you can sort in a spreadsheet. It runs fast, costs little, needs no code, and you only pay for what you pull.

### What you get

Each property comes back as one row, grouped into a few kinds of data:

- **Identity and link** — `propertyId`, `listingId`, `listingUrl`, `listingStatus`, `sourceName`
- **Price and history** — `askingPrice`, `soldPrice`, `priceCutAmount`, `listedDate`, `soldDate`
- **Property facts** — `propertyKind`, `propertySubKind`, `bedroomCount`, `bathroomLabel`, `livingAreaSqft`, `lotAreaSqft`, `builtYear`, `garageSpaces`
- **Location** — `streetAddress`, `cityName`, `stateName`, `stateCode`, `postalCode`, `countyName`, `lat`, `lng`
- **Flags** — `isAuction`, `isComingSoon`, `isNewListing`, `isPriceReduced`, `isNewConstruction`, `isPending`, `isContingent`
- **Media** — `coverImage`, `photoCount`, `imageLinks`, `streetViewUrl`
- **Agents** — `primaryAgentName`, `primaryAgentEmail`, `primaryAgentPhones`, `secondaryAgentName`, plus office and branding names

### Quick start

1. Decide where to look, then fill in a location filter: a `postalCode`, a `cityName` plus `stateCode`, a `stateCode` on its own, or an `addressLine`.
2. Add optional filters if you want a tighter set: `propertyCategories`, a price range with `listPriceMin` and `listPriceMax`, `bedroomsMin`, and so on.
3. Set `resultsLimit` to cap how many listings you collect and keep spend predictable.
4. Press **Start**, then export the dataset as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Investors** hunting auction and distressed stock can pull a whole metro in one run and score it against their buy box.
- **Wholesalers and flippers** can watch `priceCutAmount` and `isPriceReduced` to catch motivated sellers early.
- **Real estate agents** can size up auction inventory in their farm area and reach out using the agent contact fields.
- **Data and analytics teams** can feed structured price, size, and location data into dashboards or valuation models.
- **Lenders and title firms** can build county-level datasets keyed on `countyName` and `countyFips`.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `postalCode` | string | No | Pin results to one 5-digit US ZIP code. Example `33139`. |
| `stateCode` | string | No | Search a whole state by 2-letter code. Example `AZ`. |
| `cityName` | string | No | Match an exact city, best paired with a state code. Example `Phoenix`. |
| `streetName` | string | No | Limit results to a named street. |
| `addressLine` | string | No | Look up one precise address line. |
| `propertyCategories` | array of strings | No | Keep only chosen property kinds, e.g. `single_family`, `multi_family`. |
| `featureTerms` | array of strings | No | Restrict to listings with given amenities, e.g. `pool`, `waterfront`. |
| `bedroomsMin` | integer | No | Lowest bedroom count to accept. |
| `bedroomsMax` | integer | No | Highest bedroom count to accept. |
| `bathroomsMin` | integer | No | Lowest bathroom count, half-baths included. |
| `bathroomsMax` | integer | No | Highest bathroom count to accept. |
| `listPriceMin` | integer | No | Floor for the asking price in USD. |
| `listPriceMax` | integer | No | Ceiling for the asking price in USD. |
| `soldPriceMin` | integer | No | Floor for the recorded sold price in USD. |
| `soldPriceMax` | integer | No | Ceiling for the recorded sold price in USD. |
| `yearBuiltMin` | integer | No | Earliest construction year to include. |
| `yearBuiltMax` | integer | No | Latest construction year to include. |
| `hoaFeeMax` | integer | No | Highest monthly HOA fee to allow. |
| `pageSize` | integer | No | Listings pulled per API call. Default `150`. |
| `startOffset` | integer | No | Zero-based index where paging begins. Default `0`. |
| `resultsLimit` | integer | No | Cap on total listings collected across all pages. Default `3000`. |
| `runTimeoutSeconds` | integer | No | Whole-run timeout in seconds; the run exits cleanly once it passes. Default `420`. |
| `timeoutSeconds` | integer | No | Per-request timeout in seconds. Default `45`. |
| `proxyConfiguration` | object | No | Proxy settings; defaults to US datacenter proxies. |

#### Example input

```json
{
    "stateCode": "AZ",
    "cityName": "Phoenix",
    "propertyCategories": ["single_family", "multi_family"],
    "featureTerms": ["pool", "waterfront"],
    "bedroomsMin": 2,
    "bedroomsMax": 4,
    "listPriceMin": 150000,
    "listPriceMax": 750000,
    "yearBuiltMin": 2010,
    "resultsLimit": 3000,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}
```

### Output

Every auction property that matches your filters becomes one row, paged automatically up to your `resultsLimit`. Fields the source does not publish for a given property come back as null rather than guessed.

#### Example output

```json
{
    "listingAttribution": "Listing courtesy of Desert Sky Realty",
    "propertyId": "9418273650",
    "listingId": "2937164850",
    "listingUrl": "https://www.realtor.com/realestateandhomes-detail/M9418273650",
    "listingStatus": "for_sale",
    "askingPrice": 415000,
    "soldPrice": null,
    "priceCutAmount": 15000,
    "listedDate": "2026-06-18",
    "soldDate": "",
    "propertyKind": "single_family",
    "propertySubKind": "",
    "bedroomCount": 3,
    "bathroomLabel": "2.5",
    "livingAreaSqft": 1840,
    "lotAreaSqft": 6500,
    "builtYear": 2014,
    "garageSpaces": 2,
    "streetAddress": "2417 W Desert Cove Ave",
    "cityName": "Phoenix",
    "stateName": "Arizona",
    "stateCode": "AZ",
    "postalCode": "85029",
    "lat": 33.5921,
    "lng": -112.1083,
    "countyName": "Maricopa",
    "countyFips": "04013",
    "streetViewUrl": "https://maps.googleapis.com/maps/api/streetview?location=33.5921,-112.1083",
    "coverImage": "https://ap.rdcpix.com/example/cover-l.jpg",
    "photoCount": 28,
    "imageLinks": [
        "https://ap.rdcpix.com/example/photo-1.jpg",
        "https://ap.rdcpix.com/example/photo-2.jpg"
    ],
    "hasMatterport": false,
    "isComingSoon": false,
    "isNewListing": true,
    "isPriceReduced": true,
    "isNewConstruction": false,
    "isPending": false,
    "isContingent": false,
    "isAuction": true,
    "isFractionallyOwned": false,
    "sourceId": "ARMLS",
    "sourceName": "Arizona Regional MLS",
    "sourceType": "mls",
    "sourceListingId": "6738291",
    "showContactAgent": true,
    "marketType": "for_sale",
    "leadType": "auction",
    "isVaEligible": false,
    "productList": ["core.agent", "core.broker"],
    "brandName": "Essentials",
    "primaryAgentType": "seller",
    "primaryAgentName": "Maria Alvarez",
    "primaryAgentEmail": "maria@desertskyrealty.com",
    "primaryAgentOffice": "Desert Sky Realty",
    "primaryAgentPhones": ["6025550148"],
    "secondaryAgentType": null,
    "secondaryAgentName": null,
    "secondaryAgentEmail": null,
    "secondaryAgentOffice": null,
    "secondaryAgentPhones": [],
    "brandingName": "Desert Sky Realty",
    "searchPromotions": [],
    "communityPromotions": [],
    "openHouses": [],
    "collectedAt": "2026-06-29T12:00:00.000000+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingAttribution` | string | Attribution text the source feed requires |
| `propertyId` | string | Stable internal identifier for the property |
| `listingId` | string | Identifier for this specific listing record |
| `listingUrl` | string | Permalink path to the property detail page |
| `listingStatus` | string | Current market state, e.g. for\_sale |
| `askingPrice` | integer | Current advertised price in USD |
| `soldPrice` | integer | Final sale price when the property has closed |
| `priceCutAmount` | integer | Dollar amount of the latest price reduction |
| `listedDate` | string | Date the listing was published |
| `soldDate` | string | Date the sale closed, when applicable |
| `propertyKind` | string | Broad property type such as single\_family |
| `propertySubKind` | string | Finer property classification when available |
| `bedroomCount` | integer | Number of bedrooms |
| `bathroomLabel` | string | Consolidated bathroom figure, e.g. 2.5 |
| `livingAreaSqft` | integer | Indoor living space in square feet |
| `lotAreaSqft` | integer | Lot size in square feet |
| `builtYear` | integer | Year construction was completed |
| `garageSpaces` | integer | Number of garage parking spaces |
| `streetAddress` | string | Street line of the property address |
| `cityName` | string | City or town |
| `stateName` | string | Full state name |
| `stateCode` | string | Two-letter state abbreviation |
| `postalCode` | string | Postal or ZIP code |
| `lat` | number | Latitude of the property |
| `lng` | number | Longitude of the property |
| `countyName` | string | County the property belongs to |
| `countyFips` | string | FIPS code of the county |
| `streetViewUrl` | string | Link to a street-level view |
| `coverImage` | string | URL of the primary listing photo |
| `photoCount` | integer | Number of photos on the listing |
| `imageLinks` | array | Collection of listing photo URLs |
| `hasMatterport` | boolean | True when a Matterport 3D tour exists |
| `isComingSoon` | boolean | True when flagged as coming soon |
| `isNewListing` | boolean | True when posted within the last two weeks |
| `isPriceReduced` | boolean | True when the price dropped in the last 30 days |
| `isNewConstruction` | boolean | True for newly built homes |
| `isPending` | boolean | True when the sale is pending |
| `isContingent` | boolean | True when the offer is contingent |
| `isAuction` | boolean | True when the property sells at auction |
| `isFractionallyOwned` | boolean | True for fractional-ownership listings |
| `sourceId` | string | Identifier of the listing source feed |
| `sourceName` | string | Name of the listing source |
| `sourceType` | string | Type of the listing source |
| `sourceListingId` | string | Listing identifier within the source feed |
| `showContactAgent` | boolean | True when a contact-an-agent option is offered |
| `marketType` | string | Market classification reported for the lead |
| `leadType` | string | Category of lead the listing supports |
| `isVaEligible` | boolean | True when flagged Veterans United eligible |
| `productList` | array | Marketing products tied to the listing |
| `brandName` | string | Brand attached to the listing products |
| `primaryAgentType` | string | Role of the first advertiser |
| `primaryAgentName` | string | Name of the first advertiser or agent |
| `primaryAgentEmail` | string | Email of the first agent when shared publicly |
| `primaryAgentOffice` | string | Office or brokerage of the first agent |
| `primaryAgentPhones` | array | Listed phone numbers for the first agent |
| `secondaryAgentType` | string | Role of the second advertiser |
| `secondaryAgentName` | string | Name of the second advertiser or agent |
| `secondaryAgentEmail` | string | Email of the second agent when shared publicly |
| `secondaryAgentOffice` | string | Office or brokerage of the second agent |
| `secondaryAgentPhones` | array | Listed phone numbers for the second agent |
| `brandingName` | string | Branding label shown on the listing |
| `searchPromotions` | array | Promotional placements returned with the listing |
| `communityPromotions` | array | Community-level promotions on the property |
| `openHouses` | array | Scheduled open house dates and times |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Reason a row failed to parse; null on success |

### Tips for best results

- **Start with one location filter.** A `postalCode`, or a `cityName` with a `stateCode`, gives you the tightest, cleanest set. A bare `stateCode` casts a wide net.
- **Layer filters to cut noise.** Combine price bands, `propertyCategories`, and bedroom or bathroom ranges to skip listings you would only delete later.
- **Use `resultsLimit` on test runs.** Try a small cap first to confirm the fields fit your pipeline, then raise it for the full pull.
- **Keep US datacenter proxies on.** They are the default and handle most runs. If responses start failing, switch to residential proxies.
- **Raise `timeoutSeconds`** when large result sets show timeout errors, and lift `runTimeoutSeconds` if a big pull is getting cut short.
- **Expect some sparse fields.** A second agent or open house data is not always present, so those fields can be null while the rest of the row stays complete.

### How can I use Realtor auction property data?

**How can I use the Realtor Auction Property Scraper to find distressed homes for investment?**
Set your target market with `stateCode` and `cityName`, then filter on price with `listPriceMin` and `listPriceMax`. Every row carries `isAuction`, `askingPrice`, `priceCutAmount`, and the full address, so you can rank distressed and below-market candidates against your own buy criteria and export the shortlist to CSV.

**How can I scrape Realtor.com auction listings by ZIP code?**
Drop a `postalCode` into the input and run it. The scraper pages through all matching listings up to your `resultsLimit` and returns address, beds, baths, lot size, and agent contacts as structured fields, which beats copying details off the site one property at a time.

**How can I build a real estate auction dataset for a dashboard?**
Feed in one or more location filters, set `resultsLimit` to the volume you need, and export to JSON or Excel. You get a clean property database keyed on `propertyId` with price, size, location, and `countyFips`, ready to load into a BI tool or valuation model and refresh on a schedule.

**How can I track price reductions on Realtor.com auctions?**
Run the scraper on a recurring schedule for your area and watch `isPriceReduced` and `priceCutAmount` across runs. Pair them with `listedDate` and `listingStatus` to spot motivated sellers the day their price drops.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `postalCode` (type: `string`):

Narrow the search to a single 5-digit US ZIP code. This is the sharpest way to pin results to one neighborhood. For instance, use '33139' for Miami Beach, FL.

## `stateCode` (type: `string`):

Widen the search to a whole state using its 2-letter code. Pairs well with other filters. For example, 'TX' for Texas or 'GA' for Georgia.

## `cityName` (type: `string`):

Match an exact city name. Works best when combined with a state code. For example, 'Phoenix' or 'Tampa'.

## `streetName` (type: `string`):

Limit results to a named street. For example, 'Ocean Drive' or 'Elm St'.

## `addressLine` (type: `string`):

Look up one precise property address line, such as '742 Evergreen Terrace'.

## `propertyCategories` (type: `array`):

Keep only the property kinds you care about. Accepted values include: apartment, condo\_townhome, condo\_townhome\_rowhome\_coop, condo, condos, single\_family, multi\_family, mobile, land, farm, other.

## `featureTerms` (type: `array`):

Restrict listings to ones carrying certain features. Accepted values include: basement, carport, central\_air, den, hardwood\_floors, pool, waterfront, ocean\_view, fireplace.

## `bedroomsMin` (type: `integer`):

Lowest bedroom count to accept.

## `bedroomsMax` (type: `integer`):

Highest bedroom count to accept.

## `bathroomsMin` (type: `integer`):

Lowest bathroom count to accept, half-baths included.

## `bathroomsMax` (type: `integer`):

Highest bathroom count to accept.

## `listPriceMin` (type: `integer`):

Floor for the active asking price, in US dollars.

## `listPriceMax` (type: `integer`):

Ceiling for the active asking price, in US dollars.

## `soldPriceMin` (type: `integer`):

Floor for the recorded sold price, in US dollars.

## `soldPriceMax` (type: `integer`):

Ceiling for the recorded sold price, in US dollars.

## `yearBuiltMin` (type: `integer`):

Earliest construction year to include.

## `yearBuiltMax` (type: `integer`):

Latest construction year to include; use it to focus on newer or older stock.

## `hoaFeeMax` (type: `integer`):

Highest monthly Homeowners Association fee you will tolerate.

## `pageSize` (type: `integer`):

How many listings are pulled in each single API call.

## `startOffset` (type: `integer`):

The zero-based index where paging begins.

## `resultsLimit` (type: `integer`):

Upper bound on how many listings the run collects across every page. Default `3000`.

## `runTimeoutSeconds` (type: `integer`):

Once the run passes this many seconds, it shuts down cleanly and returns whatever it has. Default `420`.

## `timeoutSeconds` (type: `integer`):

How long to wait on each API slice before giving up on it. Default `45`.

## `proxyConfiguration` (type: `object`):

Pick proxies to mask your IP and stay clear of blocks. US datacenter proxies are the default and handle most runs.

## Actor input object example

```json
{
  "postalCode": "33139",
  "stateCode": "AZ",
  "cityName": "Phoenix",
  "propertyCategories": [
    "single_family",
    "multi_family"
  ],
  "featureTerms": [
    "pool",
    "waterfront"
  ],
  "bedroomsMin": 2,
  "bedroomsMax": 4,
  "bathroomsMin": 1,
  "listPriceMin": 150000,
  "listPriceMax": 750000,
  "yearBuiltMin": 2010,
  "yearBuiltMax": 2024,
  "pageSize": 150,
  "startOffset": 0,
  "resultsLimit": 500,
  "runTimeoutSeconds": 420,
  "timeoutSeconds": 45,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "stateCode": "AZ",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/auction-property-scraper-cheap").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 = {
    "stateCode": "AZ",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/auction-property-scraper-cheap").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 '{
  "stateCode": "AZ",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call data_api/auction-property-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/auction-property-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gmiXvbLqgW7aETSdI/builds/ovDsEaupX0rsdbOVe/openapi.json
