# Hubzu Scraper - Foreclosure & Auction Real Estate (`jongoose/hubzu-scraper`) Actor

Scrape Hubzu foreclosure, bank-owned (REO), short-sale & auction listings: address, city, state, ZIP, current bid, starting bid, list price, beds/baths/sqft, property type, auction start/end dates, event type, bid count, photo & listing URL. Search by state, city, or a Hubzu URL.

- **URL**: https://apify.com/jongoose/hubzu-scraper.md
- **Developed by:** [James Scott](https://apify.com/jongoose) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Hubzu Scraper - Foreclosure & Auction Real Estate

Scrape **foreclosure, bank-owned (REO), short-sale and auction property listings from [Hubzu](https://www.hubzu.com)** into clean, structured data - no account or API key required. Search by **state**, **state + city**, choose an **event type**, or paste Hubzu search URLs.

Hubzu is one of the largest **online real-estate auction marketplaces** in the US - the platform banks and servicers use to auction distressed, foreclosed and REO homes. This is **high-value, low-competition data**: current bids, auction end dates and distressed-property inventory that mainstream real-estate scrapers (Zillow/Redfin-style) don't cover.

### What you get (per listing)

- **propertyId** + **listingId** and the canonical **listing URL** (`hubzu.com/property/<id>-<address-slug>`)
- **address**, **city**, **state**, **zip**, **county**, plus **lat / lng**
- **currentBid**, **startingBid**, **listPrice**, **ownItNowPrice** (all numeric) + **bidCount** and **reserveMet / reservePrice** flags
- **beds**, **baths** (supports half-baths), **sqft**, **lotSize**, **propertyType** (Single Family / Condo / ...)
- **eventType** + raw **propertyCategory** - Bank Owned (REO), Foreclosure, Short Sale, Non-Bank Owned
- **listingStatus** / **propertyStatus** (auction status) and **listingType** (Auction / Traditional Sale)
- **auctionStartDate**, **auctionEndDate**, **auctionDuration**, and time-left (**timeLeftDays / Hours / Minutes**)
- **occupancyStatus**, **agentCompanyName**, **sellerId**, **tagName**, **newToHubzu / hotProperty / selfShowing / brokerCoOp**
- **imageUrl** (primary photo) + **photoCount**

### Input

- **state** - a two-letter US state code, e.g. `GA`. Leave empty to scrape nationwide.
- **city** - optional, narrows to a single city (requires state), e.g. `Atlanta`.
- **eventType** - `auctions` (default, every live auction), `foreclosures`, `bank-owned`, `short-sale`, `non-bank-owned`, `commercial`, or `traditional-sale`.
- **startUrls** - optional. Paste Hubzu landing/search URLs (overrides state/city/event), e.g.
  `https://www.hubzu.com/ga/auctions`, `https://www.hubzu.com/tx/houston/bank-owned`, `https://www.hubzu.com/foreclosures`.
- **maxItems** - caps the total listings collected.
- **proxyConfiguration** - Apify default (datacenter) proxy is sufficient; switch to Residential only if Cloudflare starts blocking datacenter IPs.

#### Example input

```json
{
  "state": "GA",
  "city": "Atlanta",
  "eventType": "auctions",
  "maxItems": 200,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Nationwide foreclosures:

```json
{ "eventType": "foreclosures", "maxItems": 500 }
```

Equivalent with a URL:

```json
{ "startUrls": [{ "url": "https://www.hubzu.com/ga/atlanta/auctions" }], "maxItems": 200 }
```

#### Example output (one item)

```json
{
  "propertyId": "9321808372",
  "listingId": "9321808372AUCN2",
  "url": "https://www.hubzu.com/property/9321808372-251-S-Robinson-St-Lenox-GA-31637",
  "address": "251 S Robinson St",
  "city": "Lenox",
  "state": "GA",
  "zip": "31637",
  "county": "Cook",
  "lat": 31.268241,
  "lng": -83.46407,
  "currentBid": 92000,
  "startingBid": 80000,
  "listPrice": 104500,
  "bidCount": 3,
  "reserveMet": false,
  "beds": 2,
  "baths": 2,
  "sqft": 1698,
  "lotSize": 31363,
  "propertyType": "Single Family",
  "propertyCategory": "REO",
  "eventType": "Bank Owned (REO)",
  "listingType": "AUCN",
  "listingStatus": "Active",
  "auctionStartDate": "2026-07-06T09:29:11Z",
  "auctionEndDate": "2026-07-13T09:29:11Z",
  "auctionDuration": "Jul. 06 - Jul. 13",
  "occupancyStatus": "Vacant/Unknown",
  "agentCompanyName": "Norris Bishop Realty LLC",
  "photoCount": 12,
  "imageUrl": "https://image-prod.hubzu.com/2026/6/9321808372/9321808372_20260624152830283_2.JPEG.X278.Y184.JPEG",
  "scrapedFrom": "hubzu.com"
}
```

### Why this actor

- **High-WTP niche:** distressed / auction / foreclosure inventory (REO, short-sale) that mainstream real-estate scrapers skip - great for **investors, iBuyers, wholesalers and lead-gen**.
- **Reads the site's own JSON API,** not brittle HTML. Hubzu's search page is a JavaScript SPA that loads results from an internal `/api/portal/...` service; this Actor calls that endpoint directly, so it paginates cleanly through the *entire* result set (thousands of listings) instead of the empty page shell.
- **Fast + cheap:** every field comes from the search API - no per-listing detail requests - and it runs on Apify's default datacenter proxy.
- Export as JSON, CSV, or Excel, or pull via the Apify API.

Great for **distressed-property lead generation, auction monitoring, foreclosure-market analysis, and real-estate investment research**.

***

This scraper collects **public listing data for market research**. It is **not a consumer report** and must **not** be used for **FCRA / tenant-screening** purposes. Respect Hubzu's Terms of Use and applicable laws.

# Actor input Schema

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

Two-letter US state code to search, e.g. "GA", "TX", "FL", "NY". Leave empty to scrape nationwide. Combine with City to narrow to one city.

## `city` (type: `string`):

Optional city to narrow the search, e.g. "Atlanta", "San Antonio", "Los Angeles". Requires State. Ignored when State is empty.

## `eventType` (type: `string`):

Which Hubzu inventory to scrape. "auctions" (default) returns every live auction (REO, foreclosure, short-sale, non-bank-owned). The others narrow to one event type.

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

Optional. Paste one or more Hubzu search/landing URLs instead of State + City, e.g. https://www.hubzu.com/ga/auctions , https://www.hubzu.com/tx/houston/bank-owned , or https://www.hubzu.com/foreclosures . Overrides State/City/Event when provided.

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

Stop after collecting this many listings (across all searches).

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

Hubzu's search API is open (no login), so Apify's default datacenter proxy is usually enough. If Cloudflare starts blocking datacenter IPs, switch this to Residential.

## Actor input object example

```json
{
  "state": "GA",
  "city": "Atlanta",
  "eventType": "auctions",
  "startUrls": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jongoose/hubzu-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": [] }

# Run the Actor and wait for it to finish
run = client.actor("jongoose/hubzu-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": []
}' |
apify call jongoose/hubzu-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jongoose/hubzu-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/EQRIJpK0bPPw2I9Yq/builds/nR322gB8XVuJVRGI4/openapi.json
