# Hotpads Scraper — US Apartments & Homes for Rent (`sian.agency/hotpads-property-scraper`) Actor

Scrape Hotpads US rental listings by location, coordinates or URL — rent ranges, beds, baths, square footage, availability and building amenities. Enrich any listing with unit-level pricing, schools and neighborhood detail, plus built-in market KPIs and an HTML report.

- **URL**: https://apify.com/sian.agency/hotpads-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 rental listing 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Hotpads Scraper — US Apartments & Homes for Rent + Market KPIs 🏡

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Apartments.com Scraper](https://img.shields.io/badge/Store-Apartments.com%20Scraper-00A499)](https://apify.com/sian.agency/apartments-com-property-scraper?fpr=sian) [![Zillow Property Scraper](https://img.shields.io/badge/Store-Zillow%20Property%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![StreetEasy NYC Scraper](https://img.shields.io/badge/Store-StreetEasy%20NYC%20Scraper-FF4747)](https://apify.com/sian.agency/streeteasy-property-scraper?fpr=sian)

#### 🎉 Pull every US rental listing with rent ranges, beds/baths, amenities and unit-level pricing — in one run
##### Built for rental investors, leasing teams, relocation services and rent-market analysts who need structured, analysis-ready data

---

### 📋 Overview

**Scrape apartments and homes for rent from Hotpads across the United States** — search a whole metro or drill into a single building, and get clean, structured rental data every time. Hotpads is a major US rental-listings portal, and this actor turns it into an on-demand rentals data feed.

**Why professionals choose this Hotpads scraper:**
- ✅ **Rentals-first data model**: rent ranges, bed/bath/sqft ranges, availability dates, building amenities and management company — the fields leasing and investing teams actually need.
- ⚡ **6 lookup modes, one actor**: search by location, coordinates or URL; enrich any listing by ID or URL; and resolve locations with autocomplete.
- 🎯 **Unit-level enrichment**: one detail lookup returns per-model pricing, full amenity lists, nearby schools, neighborhood info and leasing contact.
- 💰 **Pay-per-result pricing**: you're only charged for rows that land in your dataset — cheaper than monthly flat-rate rental tools.
- 💎 **Powerful rent filters**: filter by price range, beds, baths, property type (apartment, house, condo, townhome, room) and pet policy, then sort by newest, price or distance.
- ✨ **Built-in market KPIs + HTML report**: median rent, rent-per-sqft distribution and city / state breakdowns on every run.

---

### ✨ Features

- 🔎 **Search by location**: city/state, neighborhood, ZIP or free text, fully paginated.
- 🌐 **Search by coordinates**: lat/long + radius for map-bounded rental farming.
- 🔗 **Search by URL**: paste any Hotpads search URL and collect every matching rental.
- 🏢 **Detail by ID or URL**: unit-level pricing, amenities, schools, neighborhood, photos and leasing contact.
- 🔤 **Location autocomplete**: resolve a partial place name to clean cities, neighborhoods and ZIPs.
- 💲 **Rent range capture**: low and high monthly rent plus a formatted display range per building.
- 🛏️ **Bed / bath / sqft ranges**: full min–max specs for multi-unit buildings.
- 🐾 **Rent filters**: price, beds, baths, property type and pet-friendly (dog / cat) filters.
- 📊 **Market KPIs**: median rent, rent-per-sqft distribution and city / state tallies, computed automatically.
- 📄 **HTML report**: a shareable run summary saved to the key-value store.

---

### 🎬 Quick Start

Pick an `operation`, give it a location (or coordinates / URL), and run. Results stream straight into your Apify dataset as structured JSON.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~hotpads-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"operation": "searchByLocation", "location": "New York, NY"}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose an operation

Pick `searchByLocation`, `searchByCoordinates`, `searchByUrl`, `detailsById`, `detailsByUrl` or `autocomplete`.

#### Step 2: Provide the target

Enter a location, coordinates, or a Hotpads URL — plus any rent, bed/bath, property-type or pet filters you want.

#### Step 3: Run and export

Start the run and export the results as JSON, CSV or Excel directly from the dataset.

**That's it! In under a minute, you'll have:**

- A structured feed of US rental listings
- Rent ranges, beds/baths, amenities and availability per building
- Ready-to-analyze data for pricing, sourcing or lead generation

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | Yes | `searchByLocation`, `searchByCoordinates`, `searchByUrl`, `detailsById`, `detailsByUrl` or `autocomplete` |
| location | string | No | City/state, neighborhood, ZIP or free text (searchByLocation) |
| input | string | No | Partial location text (autocomplete) |
| latitude / longitude | string | No | Search center for searchByCoordinates |
| radius | string | No | Radius in miles around the point (default 1.5) |
| url | string | No | Hotpads search or listing URL (searchByUrl / detailsByUrl) |
| listingId | string | No | Hotpads listing alias, e.g. `403zj7h276rbn` (detailsById) |
| sortOrder | string | No | `Distance`, `Newest`, `Price_Low_to_High`, `Price_High_to_Low` |
| propertyType | string | No | Comma-separated: `Apartment`, `House`, `Condo`, `Townhome`, `Room` |
| minPrice / maxPrice | string | No | Monthly rent range filter |
| minBeds / maxBeds | string | No | Bedroom range (use `0` for studio) |
| minBaths / maxBaths | string | No | Bathroom range |
| petsAllowed | string | No | `dog`, `cat`, or both comma-separated |
| maxResults | integer | No | Max rows to collect (FREE tier capped at 25) |

**Example — search a metro with rent + bed filters:**

```json
{
  "operation": "searchByLocation",
  "location": "Jersey City, NJ",
  "minPrice": "2000",
  "maxPrice": "4000",
  "minBeds": "1",
  "propertyType": "Apartment,Condo",
  "sortOrder": "Price_Low_to_High",
  "maxResults": 100
}
```

**Example — enrich a single listing:**

```json
{
  "operation": "detailsById",
  "listingId": "403zj7h276rbn"
}
```

***

### 📤 Output

Results are saved to the Apify dataset. Search rows carry the core rental fields; detail rows add unit-level enrichment:

| Field | Type | Description |
|-------|------|-------------|
| listingId | string | Hotpads listing alias |
| listingName | string | Building or listing name |
| url | string | Full Hotpads listing URL |
| address | object | Street, city, state, ZIP |
| location | object | Latitude and longitude |
| rent | object | Low / high monthly rent + display range |
| specs | object | Bed / bath / sqft ranges (low–high) |
| availability | object | Activated and last-updated timestamps |
| amenities | array | Building and unit amenities |
| media | object | Photo count and gallery |
| company | string | Management company |
| flags | object | Student / senior / military housing |
| pricing / units | object / array | Detail only — unit-level pricing matrix |
| schools | array | Detail only — nearby schools with ratings |
| contact | object | Detail only — leasing company, agent, phone, website |

**Example row (search):**

```json
{
  "rowType": "rental",
  "listingId": "403zj7h276rbn",
  "buildingId": "1wfsvd7",
  "listingName": "Hudson House East",
  "url": "https://www.hotpads.com/hudson-house-east-jersey-city-nj-07310-1wfsvd7/pad",
  "listingType": "rental",
  "address": { "street": "315 15th St", "city": "Jersey City", "state": "NJ", "zip": "07310" },
  "location": { "latitude": 40.7325, "longitude": -74.0464 },
  "rent": { "priceLow": 3625, "priceHigh": 8420, "display": "$3,625 - $8,420" },
  "specs": { "bedsLow": 0, "bedsHigh": 3, "bathsLow": 1, "bathsHigh": 3, "sqftLow": 676, "sqftHigh": 1826 },
  "availability": { "activatedAt": "2026-04-17T00:49:08.753Z", "updatedAt": "2026-06-26T21:50:03.163Z" },
  "amenities": ["Fitness Center", "Swimming Pool", "Concierge", "Elevator"],
  "media": { "photoCount": 26 },
  "company": "RXR",
  "flags": { "studentHousing": false, "seniorHousing": false, "militaryHousing": false }
}
```

***

### 💼 Use Cases & Examples

#### 1. Rental market analysis

**Analysts benchmarking rents across a metro.**
**Input:** `searchByLocation` for a city + `maxResults`. **Output:** rent ranges and rent-per-sqft across hundreds of buildings. **Use:** median-rent and pricing-trend dashboards.

#### 2. Rental investor sourcing

**Investors screening multifamily and single-family rentals.**
**Input:** `searchByCoordinates` around a target radius with bed/price filters. **Output:** unit mix, rent and amenities per building. **Use:** shortlist properties by yield potential.

#### 3. Leasing & property management intelligence

**Leasing teams tracking competitor pricing and concessions.**
**Input:** `searchByLocation` filtered to `Apartment`. **Output:** rents, specials flag and amenities. **Use:** price your units against the local comp set.

#### 4. Relocation & corporate housing

**Relocation services building move-in shortlists.**
**Input:** `searchByLocation` with `petsAllowed` and bed filters. **Output:** matching furnished and pet-friendly rentals. **Use:** curated options for relocating employees.

#### 5. Lead generation for proptech

**Sales teams targeting property managers and operators.**
**Input:** `detailsById` on shortlisted buildings. **Output:** leasing contact, company and website. **Use:** enriched outreach lists.

#### 6. Deep listing enrichment

**Teams that need the full picture on one building.**
**Input:** `detailsByUrl` on a Hotpads listing. **Output:** per-model pricing, full amenities, schools and neighborhood. **Use:** underwriting and due diligence.

#### 7. Location resolution

**Pipelines that start from messy place names.**
**Input:** `autocomplete` with a partial string. **Output:** clean cities, neighborhoods and ZIPs. **Use:** normalize inputs before a bulk search.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/hotpads-property-scraper').call({
  operation: 'searchByLocation',
  location: 'New York, NY',
  maxResults: 100
});

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

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/hotpads-property-scraper').call(
    run_input={'operation': 'searchByLocation', 'location': 'New York, NY', 'maxResults': 100}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~hotpads-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "searchByLocation", "location": "New York, NY"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call the actor API
3. **Process**: Handle JSON rental rows
4. **Action**: Save to a sheet/CRM, notify, or feed a pricing model

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 rental rows** per run — full feature access, same data quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** rows per run with deep pagination
- Enriched detail lookups unlocked
- Pay-per-result: only charged for rows that land in your dataset

💰 **Transparent pay-per-result pricing** — a low per-listing headline plus optional unit-level enrichment, so you only pay for the depth you use.

🔗 [View current pricing](https://apify.com/sian.agency/hotpads-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many rentals can I collect?**
A: FREE tier: 25 rows per run. PAID tier: unlimited, with deep pagination.

**Q: Does it cover for-sale homes too?**
A: No — Hotpads is a rentals portal, so this actor returns apartments and homes for rent.

**Q: Can I filter by rent, beds and pets?**
A: Yes — price range, bed range (use `0` for studio), bath range, property type and pet policy are all supported.

**Q: What output formats are available?**
A: JSON, CSV and Excel — export directly from the Apify dataset.

**Q: How do I get unit-level pricing and schools?**
A: Use `detailsById` or `detailsByUrl` — detail rows include the per-unit pricing matrix, amenities, schools and neighborhood.

**Q: Is this legal?**
A: Yes — we only extract publicly available data. See the legal section below.

***

### 🐛 Troubleshooting

**No rows returned from a search**

- Broaden the `location` (try `City, ST`) or relax rent/bed filters.
- Increase `maxResults` for more pages.

**A detail lookup returns nothing**

- Confirm the `listingId` is the alias from a search row (e.g. `403zj7h276rbn`), or use the full listing `url` with `detailsByUrl`.

**Filters seem ignored**

- `propertyType` values are `Apartment`, `House`, `Condo`, `Townhome`, `Room` (case-sensitive, comma-separated).

**Run hit the FREE cap**

- FREE runs stop at 25 rows — upgrade to a paying Apify plan for unlimited results and enrichment.

***

### ⚠️ Trademark Disclaimer

Hotpads® is a trademark of its respective owner. This actor is an independent tool and is **not** affiliated with, endorsed by, or sponsored by Hotpads or its parent company. It accesses only publicly available information and is intended for lawful data-analysis purposes. All product names, logos and brands are the property of their respective owners.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. 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

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's Console Issues tab
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

What to pull from Hotpads.

**Search (rental-listing rows):**
• **searchByLocation** — city / state / neighborhood / ZIP / free text (paginated)
• **searchByCoordinates** — lat/long + radius (paginated)
• **searchByUrl** — paste a Hotpads search URL (paginated)

**Detail (single rich listing):**
• **detailsById** / **detailsByUrl** — full detail with unit-level pricing, amenities, schools, neighborhood and photos

**Helper:**
• **autocomplete** — resolve a location string to cities / neighborhoods / ZIPs

## `location` (type: `string`):

For **searchByLocation** (and **autocomplete**) — a city/state, neighborhood, ZIP or free text, e.g. `New York, NY`, `07310`, `Jersey City, NJ`.

## `input` (type: `string`):

For **autocomplete** — a partial location prefix to suggest on, e.g. `Brook`, `Jersey`.

## `latitude` (type: `string`):

For **searchByCoordinates** — center latitude, e.g. `40.7128`.

## `longitude` (type: `string`):

For **searchByCoordinates** — center longitude, e.g. `-74.006`.

## `radius` (type: `string`):

For **searchByCoordinates** — search radius in miles around the point (default 1.5).

## `url` (type: `string`):

For **searchByUrl / detailsByUrl** — a Hotpads search page (e.g. `https://www.hotpads.com/new-york-ny/apartments-for-rent`) or a listing page (e.g. `https://www.hotpads.com/111-worth-new-york-ny-10013-skg1ra/pad`).

## `listingId` (type: `string`):

For **detailsById** — the Hotpads listing alias from a search result (the `listingId` field), e.g. `403zj7h276rbn`.

## `sortOrder` (type: `string`):

For **searchByLocation / searchByCoordinates** — how to order results.

## `propertyType` (type: `string`):

For **searchByLocation / searchByCoordinates** — comma-separated types to filter: `Apartment`, `House`, `Condo`, `Townhome`, `Room`. Leave empty for any.

## `minPrice` (type: `string`):

For **searchByLocation / searchByCoordinates** — minimum monthly rent, e.g. `1500`.

## `maxPrice` (type: `string`):

For **searchByLocation / searchByCoordinates** — maximum monthly rent, e.g. `3500`.

## `minBeds` (type: `string`):

For **searchByLocation / searchByCoordinates** — minimum bedrooms (use `0` for studio).

## `maxBeds` (type: `string`):

For **searchByLocation / searchByCoordinates** — maximum bedrooms.

## `minBaths` (type: `string`):

For **searchByLocation / searchByCoordinates** — minimum bathrooms.

## `maxBaths` (type: `string`):

For **searchByLocation / searchByCoordinates** — maximum bathrooms.

## `petsAllowed` (type: `string`):

For **searchByLocation / searchByCoordinates** — filter to pet-friendly rentals: `dog`, `cat`, or both comma-separated.

## `maxResults` (type: `integer`):

Maximum rows to collect for paginated search operations (also caps autocomplete suggestions). FREE tier is capped at 25.

## Actor input object example

```json
{
  "operation": "searchByLocation",
  "location": "New York, NY",
  "sortOrder": "Distance",
  "maxResults": 50
}
```

# Actor output Schema

## `results` (type: `string`):

Hotpads rental listings, enriched detail rows and location-suggestion rows.

## `htmlReport` (type: `string`):

HTML summary with run stats and rental-market KPIs (median rent, rent/sqft distribution and city / state breakdowns).

# 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 = {
    "location": "New York, NY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/hotpads-property-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 = { "location": "New York, NY" }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/hotpads-property-scraper").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 '{
  "location": "New York, NY"
}' |
apify call sian.agency/hotpads-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hotpads Scraper — US Apartments & Homes for Rent",
        "description": "Scrape Hotpads US rental listings by location, coordinates or URL — rent ranges, beds, baths, square footage, availability and building amenities. Enrich any listing with unit-level pricing, schools and neighborhood detail, plus built-in market KPIs and an HTML report.",
        "version": "1.0",
        "x-build-id": "Oy12FwNa7QjEMIbSl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~hotpads-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-hotpads-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~hotpads-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-hotpads-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~hotpads-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-hotpads-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "operation": {
                        "title": "🧭 Operation",
                        "enum": [
                            "searchByLocation",
                            "searchByCoordinates",
                            "searchByUrl",
                            "detailsById",
                            "detailsByUrl",
                            "autocomplete"
                        ],
                        "type": "string",
                        "description": "What to pull from Hotpads.\n\n**Search (rental-listing rows):**\n• **searchByLocation** — city / state / neighborhood / ZIP / free text (paginated)\n• **searchByCoordinates** — lat/long + radius (paginated)\n• **searchByUrl** — paste a Hotpads search URL (paginated)\n\n**Detail (single rich listing):**\n• **detailsById** / **detailsByUrl** — full detail with unit-level pricing, amenities, schools, neighborhood and photos\n\n**Helper:**\n• **autocomplete** — resolve a location string to cities / neighborhoods / ZIPs",
                        "default": "searchByLocation"
                    },
                    "location": {
                        "title": "📍 Location",
                        "type": "string",
                        "description": "For **searchByLocation** (and **autocomplete**) — a city/state, neighborhood, ZIP or free text, e.g. `New York, NY`, `07310`, `Jersey City, NJ`.",
                        "default": "New York, NY"
                    },
                    "input": {
                        "title": "🔤 Autocomplete text",
                        "type": "string",
                        "description": "For **autocomplete** — a partial location prefix to suggest on, e.g. `Brook`, `Jersey`."
                    },
                    "latitude": {
                        "title": "🌐 Latitude",
                        "type": "string",
                        "description": "For **searchByCoordinates** — center latitude, e.g. `40.7128`."
                    },
                    "longitude": {
                        "title": "🌐 Longitude",
                        "type": "string",
                        "description": "For **searchByCoordinates** — center longitude, e.g. `-74.006`."
                    },
                    "radius": {
                        "title": "📏 Radius (miles)",
                        "type": "string",
                        "description": "For **searchByCoordinates** — search radius in miles around the point (default 1.5)."
                    },
                    "url": {
                        "title": "🔗 Hotpads URL",
                        "type": "string",
                        "description": "For **searchByUrl / detailsByUrl** — a Hotpads search page (e.g. `https://www.hotpads.com/new-york-ny/apartments-for-rent`) or a listing page (e.g. `https://www.hotpads.com/111-worth-new-york-ny-10013-skg1ra/pad`)."
                    },
                    "listingId": {
                        "title": "🆔 Listing ID",
                        "type": "string",
                        "description": "For **detailsById** — the Hotpads listing alias from a search result (the `listingId` field), e.g. `403zj7h276rbn`."
                    },
                    "sortOrder": {
                        "title": "↕️ Sort order",
                        "enum": [
                            "Distance",
                            "Newest",
                            "Price_Low_to_High",
                            "Price_High_to_Low"
                        ],
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — how to order results.",
                        "default": "Distance"
                    },
                    "propertyType": {
                        "title": "🏘️ Property Type",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — comma-separated types to filter: `Apartment`, `House`, `Condo`, `Townhome`, `Room`. Leave empty for any."
                    },
                    "minPrice": {
                        "title": "💵 Min Rent",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — minimum monthly rent, e.g. `1500`."
                    },
                    "maxPrice": {
                        "title": "💵 Max Rent",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — maximum monthly rent, e.g. `3500`."
                    },
                    "minBeds": {
                        "title": "🛏️ Min Beds",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — minimum bedrooms (use `0` for studio)."
                    },
                    "maxBeds": {
                        "title": "🛏️ Max Beds",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — maximum bedrooms."
                    },
                    "minBaths": {
                        "title": "🛁 Min Baths",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — minimum bathrooms."
                    },
                    "maxBaths": {
                        "title": "🛁 Max Baths",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — maximum bathrooms."
                    },
                    "petsAllowed": {
                        "title": "🐾 Pets Allowed",
                        "type": "string",
                        "description": "For **searchByLocation / searchByCoordinates** — filter to pet-friendly rentals: `dog`, `cat`, or both comma-separated."
                    },
                    "maxResults": {
                        "title": "🔢 Max results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum rows to collect for paginated search operations (also caps autocomplete suggestions). FREE tier is capped at 25.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
