# Zumper Scraper with Contacts | Fast & Reliable (`fatihtahta/zumper-scraper`) Actor

Extract Zumper rental listings at scale with rich property detail, contact data, ratings, fees, amenities, and flexible market filters. Built for enterprise-grade US rental intelligence, lead enrichment, market monitoring, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/zumper-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 property listings

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

## Zumper Scraper | US Rental Property

**Slug:** `fatihtahta/zumper-scraper`

### Overview

Zumper Scraper | US Rental Property collects structured rental listing records, including listing identity, location, pricing, property layout, contact details, amenities, media metadata, ratings, fees, and source context. [Zumper](https://www.zumper.com) is a public rental marketplace for apartment, house, condo, room, and townhome listings, making its listing data useful for rental market analysis, availability monitoring, and operational reporting. The actor turns repeatable Zumper searches into consistent JSON output that can be reviewed in Apify or connected to downstream systems. It is designed for dependable recurring data acquisition workflows where users need structured extraction, predictable records, and clear filters without manual browsing. Results reflect the public listing data available at run time and should be validated against each user’s target market, filters, and reporting requirements.

### Why Use This Actor

- **Market research and analytics teams:** collect normalized rental supply, pricing, location, rating, and amenity data for market intelligence and trend analysis.
- **Product and content teams:** populate rental discovery experiences, local guides, comparison pages, or internal catalogs with structured public listing attributes.
- **Developers and data engineering teams:** feed repeatable collection jobs into downstream systems, ETL pipelines, warehouses, and monitoring workflows.
- **Lead generation and enrichment teams:** build targeted rental-property datasets with public contact, location, property, amenity, and availability signals when present.
- **Monitoring and competitive tracking teams:** track pricing movement, new listings, deal signals, luxury or affordable segments, and changes in market inventory over time.

### Common Use Cases

- **Market intelligence:** monitor rental supply, rent ranges, listing freshness, neighborhood density, amenities, ratings, and property category movement.
- **Lead generation:** build targeted prospect lists from public rental listings, buildings, property managers, and agent-facing contact fields when available.
- **Competitive monitoring:** track comparable properties across target cities, neighborhoods, price bands, property types, or amenity groups.
- **Catalog and directory building:** populate internal real estate databases with structured listings, building metadata, location details, media references, and public profile URLs.
- **Data enrichment:** add current public rental attributes to existing CRM, BI, valuation, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for rental dashboards, alerting, market snapshots, and historical analysis.

### Quick Start

1. Choose a required `location`, such as a city and state, ZIP code, neighborhood, or rental market.
2. Add optional filters such as price, bedrooms, bathrooms, property type, amenities, lease length, listing age, ratings, or deal signals.
3. Set a small `limit` for the first validation run, such as 25 or 50 records.
4. Run the actor in Apify Console and wait for the dataset to be created.
5. Inspect the first records to confirm that the location, filters, and field shape match your use case.
6. Increase the limit, refine filters, enable enrichment if richer listing details are needed, or schedule recurring runs.

### Input Parameters

The actor requires at least one `location` and supports optional filters for price, layout, property type, amenities, policies, freshness, ratings, sorting, enrichment, and maximum saved results.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `location` | array of strings | Required search targets. Enter one or more cities and states, ZIP codes, neighborhoods, boroughs, or rental markets. Each location is searched separately. | Prefill: `["Austin, TX"]` |
| `min_price` | integer | Minimum monthly rent in USD. Only saves listings with rent at or above this amount. | – |
| `max_price` | integer | Maximum monthly rent in USD. Only saves listings with rent at or below this amount. | – |
| `price_category` | string | Optional price segment. Allowed values: `cheap`, `luxury`. | – |
| `min_area` | integer | Minimum floor area in square feet. | – |
| `min_bedroom` | string | Minimum bedroom count. Allowed values: `studio`, `1`, `2`, `3`, `4+`. | – |
| `max_bedroom` | string | Maximum bedroom count. Allowed values: `studio`, `1`, `2`, `3`, `4+`. | – |
| `min_bathroom` | string | Minimum bathroom count. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `max_bathroom` | string | Maximum bathroom count. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `property_type` | array of strings | Property types to include. Allowed values: `apartment`, `condo`, `house`, `room`, `townhouse`, `other`. Leave empty to include all supported property types. | – |
| `pets_allowed` | array of strings | Pet policies to include. Allowed values: `dogs`, `cats`. | – |
| `laundry` | array of strings | Laundry options to include. Allowed values: `in_building`, `in_unit`. | – |
| `listing_features` | array of strings | Listing-level signals to require. Allowed values: `3d_tour_or_video_tour`, `has_photos`, `live_virtual_walkthrough`, `new_construction`, `posted_today`. | – |
| `amenities` | array of strings | Apartment or building amenities to require. Allowed values: `air_conditioning`, `assigned_parking`, `central_heat`, `dishwasher`, `garage_parking`, `hardwood_floor`, `pool`, `balcony`, `business_center`, `carpet`, `ceiling_fan`, `concierge_service`, `controlled_access`, `deck`, `door_person`, `dry_cleaning_service`, `elevator`, `ev_charging`, `fireplace`, `furnished`, `garden`, `gym`, `high_ceilings`, `leed_certified`, `on_site_management`, `outdoor_space`, `package_service`, `residents_lounge`, `roof_deck`, `storage`, `tv`, `walk_in_closet`, `wheelchair_accessible`, `wi_fi`. | – |
| `lease_length` | string | Lease length filter. Allowed values: `short_term`, `long_term`. | – |
| `publication_date` | string | Listing age window. Allowed values: `last_24_hours`, `last_7_days`, `last_2_weeks`, `last_1_month`. | – |
| `deals` | array of strings | Deal or savings signals to require. Allowed values: `rent_special`, `no_security_deposit`, `price_drop`, `sweet_deal`, `utilities_included`. | – |
| `highly_rated` | boolean | When enabled, saves listings with a rating of at least 4 where rating data is available. | `false` |
| `zumper_expert_rating` | string | Minimum Zumper expert rating threshold. Allowed values: `9+`, `7+`, `5+`. | – |
| `lifestyle` | array of strings | Lifestyle tags to require. Allowed values: `eco_living`, `pet_owners`, `social_life`, `wellness`, `work_from_home`. | – |
| `specialty_housing` | array of strings | Specialty housing categories to require. Allowed values: `55_plus_community`, `student_housing`, `income_restricted`. | – |
| `sort_by` | string | Sort order for matching listings. Allowed values: `most_relevant`, `newest_first`, `price_low_to_high`, `price_high_to_low`, `rating_low_to_high`, `rating_high_to_low`. | `most_relevant` |
| `enrich_data` | boolean | Enables richer listing and agent details, including descriptions, media, amenities, policies, and contact information when available. | `false` |
| `limit` | integer | Maximum number of listings to save per location. Minimum value: `1`. Leave empty to collect as many matching results as available. | Prefill: `100` |

### Choosing Inputs

Use `location` as the main scope for every run. A broad location, such as a city, improves discovery, while a specific ZIP code or neighborhood creates cleaner segmentation for reporting. Add multiple locations when you want each one searched as its own seed. Price, bedroom, bathroom, property type, amenity, pet, lease length, deal, rating, and lifestyle filters narrow the dataset toward a defined rental segment; leaving optional filters empty keeps the run broader. Use `publication_date` when freshness matters, such as monitoring new listings from the last 24 hours or last 7 days. Use `sort_by` to prioritize relevance, freshness, price, or rating before records are saved. Start with a small per-location `limit` to validate the output shape, then increase it once the resulting records match your workflow.

### Location Examples

Use any renter-facing Zumper search area. Each value becomes its own search seed.

```json
{
  "location": [
    "Austin, TX",
    "10001",
    "Chelsea, New York, NY",
    "Brooklyn, NY",
    "Downtown Austin",
    "West Hollywood, CA"
  ]
}
````

### Example Inputs

#### Broad City Discovery

```json
{
  "location": ["Austin, TX"],
  "property_type": ["apartment", "townhouse"],
  "sort_by": "most_relevant",
  "enrich_data": false,
  "limit": 50
}
```

#### Recently Posted Rentals

```json
{
  "location": ["New York, NY"],
  "publication_date": "last_7_days",
  "listing_features": ["has_photos"],
  "sort_by": "newest_first",
  "enrich_data": true,
  "limit": 75
}
```

#### Targeted Pet-Friendly Search

```json
{
  "location": ["10019"],
  "min_price": 2500,
  "max_price": 6500,
  "min_bedroom": "1",
  "pets_allowed": ["dogs", "cats"],
  "amenities": ["gym", "dishwasher", "air_conditioning"],
  "limit": 40
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, the README documents each shape separately based on the provided Example Output. The provided output contains one primary record shape: a Zumper rental listing record.

#### Record Envelope And Stable Identifiers

The recommended idempotency key is `id`, which corresponds to the listing identifier and is also repeated as `ids.listing_id` in the sample record. For repeated runs, use `id` for deduplication and upserts; if a record is missing `id`, use `url` as a fallback comparison key. Stable identifiers make records easier to merge, deduplicate, and sync across warehouses, CRMs, search indexes, and monitoring systems. The `source_context` object documents the run context for the saved record, including the detail URL, seed information, domain, page index, and scrape timestamp when available.

#### Examples

##### Example: Listing Record

```json
{
  "id": "90018452",
  "url": "https://www.zumper.com/apartment-buildings/p90421/riverside-meridian-midtown-west-new-york-ny",
  "title": "Riverside Meridian",
  "description": "Riverside Meridian, in the midst of Manhattan, features studio, 1, and 2 bedroom New York City apartments. These pet friendly, green living apartments include skyline views, spacious floorplans, washer and dryer in select apartments, quartz countertops, wood flooring, and large closets. Riverside Meridian offers two fitness centers, WiFi in common areas, on-site laundry, and two rooftop sky decks with views of the Hudson River and Midtown Manhattan. Conveniently located in New York City, surrounded by shopping, restaurants, and nightlife.",
  "ids": {
    "listing_id": "90018452",
    "building_id": "780245",
    "padmapper_id": "90421",
    "provider_id": "riverside_living.204"
  },
  "location": {
    "address": "1840 W 43rd St",
    "city": "New York",
    "state": "NY",
    "postal_code": "10018",
    "country": "USA",
    "neighborhood": {
      "id": 166,
      "name": "Midtown West",
      "city": "New York",
      "state": "NY",
      "country": "USA",
      "latitude": 40.7637565,
      "longitude": -73.994467,
      "listing_count": 571,
      "url": "https://www.zumper.com/apartments-for-rent/new-york-ny/midtown-west",
      "main_image_url": "https://www.zumper.com/images/example-neighborhood-midtown-west.jpg"
    },
    "coordinates": {
      "latitude": 40.766594,
      "longitude": -73.9915
    }
  },
  "pricing": {
    "min_price": 3690,
    "max_price": 7157
  },
  "property": {
    "unit_title": "1018",
    "bedrooms": {
      "min": 0,
      "max": 2
    },
    "bathrooms": {
      "min": 1,
      "max": 2
    },
    "square_feet": {
      "min": 398,
      "max": 1210
    },
    "floorplan_count": 54,
    "listed_at": "2026-05-19T14:57:43Z",
    "modified_at": "2026-05-19T22:00:13Z",
    "property_type": 4,
    "listing_type": 1,
    "lease_type": 1
  },
  "contacts": {
    "phone": "(212) 555-0148",
    "agent_name": "Morgan Lee",
    "brokerage_name": "Riverside Living Group"
  },
  "features": {
    "pets": [
      3,
      2,
      1
    ],
    "amenity_codes": [
      5,
      6,
      3
    ],
    "feature_codes": [
      17,
      78,
      20,
      93,
      19,
      92,
      88,
      61,
      95,
      56,
      94,
      3
    ],
    "amenity_tags": [
      "Hardwood Floor",
      "Washer and Dryer",
      "High-Speed Internet",
      "Package Service",
      "Smoke Free Community",
      "Bike Storage",
      "Floor-To-Ceiling Windows",
      "Room Service",
      "Fitness Center",
      "Residents Lounge"
    ],
    "building_amenity_tags": [
      "Hardwood Floor",
      "Washer and Dryer",
      "High-Speed Internet",
      "Package Acceptance",
      "Smoke Free Community",
      "Bike Storage",
      "Floor-To-Ceiling Windows",
      "Room Service",
      "Fitness Center",
      "Residents Lounge"
    ]
  },
  "media": {
    "image_ids": [
      487535535,
      523621488,
      523621489,
      523621490,
      523621491,
      523621492,
      523621493,
      523621494,
      523621495,
      550464287
    ],
    "items": [
      {
        "media_id": 487535535,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621488,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621489,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621490,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621491,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621492,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621493,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621494,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 523621495,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 550464287,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 550464288,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 550464289,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 550464290,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 550464291,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535537,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535554,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 748197788,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true,
        "process_state": 8
      },
      {
        "media_id": 559485097,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 748197789,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true,
        "process_state": 8
      },
      {
        "media_id": 748197790,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true,
        "process_state": 8
      },
      {
        "media_id": 559485099,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 559485100,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 559485101,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 559485102,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 559485103,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 559485104,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535568,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535569,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535570,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535571,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535572,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      },
      {
        "media_id": 487535573,
        "media_type": 1,
        "width": 996,
        "height": 742,
        "is_available": true
      },
      {
        "media_id": 487535574,
        "media_type": 1,
        "width": 996,
        "height": 747,
        "is_available": true
      }
    ]
  },
  "metrics": {
    "rating": 9.7,
    "external_rating": 4.7
  },
  "details": {
    "has_fees": true,
    "is_messageable": true,
    "fees": [
      {
        "type": 3,
        "cadence": 0,
        "name": "Security Deposit",
        "cost_type": 1,
        "lifecycle": 2,
        "requirement": 1,
        "max_in_cents": 200000,
        "min_in_cents": 200000,
        "is_derived": true,
        "amount_in_cents": 200000,
        "is_required": true
      }
    ],
    "deposits": [
      {
        "description": "Security Deposit",
        "min": 2000
      }
    ],
    "supplemental_content": {
      "description": "Located in Midtown West, Riverside Meridian offers city views and stylish living with spacious floorplans, quartz countertops, and wood flooring. Enjoy amenities like two fitness centers, rooftop sky decks, and on-site laundry. Experience urban convenience with shopping, dining, and nightlife nearby in a pet-friendly, green community.",
      "description_title": "Breathtaking Hudson Views & Urban Elegance",
      "keywords": [
        "washer and dryer",
        "on-site laundry",
        "large closets",
        "granite countertops",
        "spectacular views",
        "spacious floorplans"
      ],
      "reviews_summary": "Riverside Meridian residents praise the friendly, helpful staff, including the leasing and maintenance teams, for creating a welcoming community. Amenities like the gym and views are well-loved, and maintenance is noted for quick responses. Some mention minor issues like elevator wait times, but overall, residents appreciate the solid construction, excellent location, and pleasant atmosphere.",
      "property_overview": "Riverside Meridian is a highly rated rental community with an overall expert rating of 9.7/10, strong scores for price, location, quality, and amenities, and strong value both overall and per square foot. Spacious floorplans with large closets, in-home washer and dryer, on-site laundry, quartz countertops, and skyline views are complemented by extensive on-site common and fitness spaces. With nearby parks, sports facilities, pet services, coworking-friendly cafes, and dining options, it is well-suited for fitness and wellness, pet friendliness, work-from-home, and an active social life.",
      "version": "v1.0",
      "last_generated": 1778992560
    },
    "feed_name": "riverside_living"
  },
  "related_urls": {
    "padmapper_url": "https://www.zumper.com/buildings/p90421/riverside-meridian-apartments-at-1840-w-43rd-st-new-york-ny-10018"
  },
  "source_context": {
    "detail_url": "https://www.zumper.com/apartment-buildings/p90421/riverside-meridian-midtown-west-new-york-ny",
    "seed_id": "zumper_9f3a7c8d21e54b6a",
    "seed_type": "search",
    "seed_value": "new york city",
    "page_index": 1,
    "domain": "www.zumper.com",
    "scraped_at": "2026-05-19T22:04:40Z"
  }
}
```

### Field Reference

#### Listing Record

**id** *(string, required)*: Stable listing identifier and recommended idempotency key.

**url** *(string, required)*: Public Zumper listing or building URL.

**title** *(string, required)*: Listing or building title.

**description** *(string, optional)*: Public listing description when available.

**ids.listing\_id** *(string, optional)*: Listing identifier repeated inside the nested identifiers object.

**ids.building\_id** *(string, optional)*: Building identifier when the listing is associated with a building.

**ids.padmapper\_id** *(string, optional)*: Related PadMapper identifier when provided.

**ids.provider\_id** *(string, optional)*: Provider-side identifier when available.

**location.address** *(string, optional)*: Street address.

**location.city / location.state / location.postal\_code / location.country** *(string, optional)*: City, state, postal code, and country fields.

**location.neighborhood.id** *(integer, optional)*: Neighborhood identifier.

**location.neighborhood.name** *(string, optional)*: Neighborhood name.

**location.neighborhood.city / location.neighborhood.state / location.neighborhood.country** *(string, optional)*: Neighborhood geography fields.

**location.neighborhood.latitude / location.neighborhood.longitude** *(number, optional)*: Neighborhood coordinates.

**location.neighborhood.listing\_count** *(integer, optional)*: Listing count exposed for the neighborhood.

**location.neighborhood.url** *(string, optional)*: Public neighborhood URL.

**location.neighborhood.main\_image\_url** *(string, optional)*: Neighborhood image URL when available.

**location.coordinates.latitude / location.coordinates.longitude** *(number, optional)*: Listing coordinates.

**pricing.min\_price / pricing.max\_price** *(integer, optional)*: Minimum and maximum monthly rent in USD.

**property.unit\_title** *(string, optional)*: Unit, floor plan, or display title.

**property.bedrooms.min / property.bedrooms.max** *(integer, optional)*: Bedroom range, where `0` can represent studio availability.

**property.bathrooms.min / property.bathrooms.max** *(number, optional)*: Bathroom range.

**property.square\_feet.min / property.square\_feet.max** *(integer, optional)*: Floor area range in square feet.

**property.floorplan\_count** *(integer, optional)*: Number of floor plans associated with the listing.

**property.listed\_at** *(string, optional)*: Listing publication timestamp in ISO 8601 format when available.

**property.modified\_at** *(string, optional)*: Last modified timestamp in ISO 8601 format when available.

**property.property\_type** *(integer, optional)*: Source-provided property type code.

**property.listing\_type** *(integer, optional)*: Source-provided listing type code.

**property.lease\_type** *(integer, optional)*: Source-provided lease type code.

**contacts.phone** *(string, optional)*: Public contact phone number when available.

**contacts.agent\_name** *(string, optional)*: Agent, property, or leasing contact name.

**contacts.brokerage\_name** *(string, optional)*: Brokerage, manager, or provider name.

**features.pets** *(array of integers, optional)*: Source-provided pet policy codes.

**features.pet\_types** *(array of strings, optional)*: Human-readable pet policy names mapped from source pet codes.

**features.amenity\_codes** *(array of integers, optional)*: Source-provided amenity codes.

**features.amenity\_names** *(array of strings, optional)*: Human-readable amenity names mapped from source amenity codes or source amenity tags.

**features.building\_amenity\_codes** *(array of integers, optional)*: Source-provided building amenity codes.

**features.building\_amenity\_names** *(array of strings, optional)*: Human-readable building amenity names mapped from source building amenity codes or source building amenity tags.

**features.feature\_codes** *(array of integers, optional)*: Source-provided listing feature codes.

**features.feature\_names** *(array of strings, optional)*: Human-readable listing feature names mapped from source feature codes.

**features.amenity\_tags** *(array of strings, optional)*: Human-readable amenity tags.

**features.building\_amenity\_tags** *(array of strings, optional)*: Human-readable building amenity tags.

**media.image\_ids** *(array of integers, optional)*: Image identifiers associated with the record.

**media.items.media\_id** *(integer, optional)*: Media item identifier.

**media.items.media\_type** *(integer, optional)*: Source-provided media type code.

**media.items.width / media.items.height** *(integer, optional)*: Media dimensions in pixels.

**media.items.is\_available** *(boolean, optional)*: Whether the media item is marked available.

**media.items.process\_state** *(integer, optional)*: Media processing state when provided.

**metrics.rating** *(number, optional)*: Zumper rating value when available.

**metrics.external\_rating** *(number, optional)*: External rating value when available.

**details.has\_fees** *(boolean, optional)*: Whether fee information is present.

**details.is\_messageable** *(boolean, optional)*: Whether the listing exposes a messaging option.

**details.fees.type** *(integer, optional)*: Source-provided fee type code.

**details.fees.cadence** *(integer, optional)*: Source-provided fee cadence code.

**details.fees.name** *(string, optional)*: Fee name.

**details.fees.cost\_type** *(integer, optional)*: Source-provided cost type code.

**details.fees.lifecycle** *(integer, optional)*: Source-provided lifecycle code.

**details.fees.requirement** *(integer, optional)*: Source-provided requirement code.

**details.fees.max\_in\_cents / details.fees.min\_in\_cents / details.fees.amount\_in\_cents** *(integer, optional)*: Fee amounts in cents.

**details.fees.is\_derived** *(boolean, optional)*: Whether the fee amount is marked as derived.

**details.fees.is\_required** *(boolean, optional)*: Whether the fee is marked required.

**details.deposits.description** *(string, optional)*: Deposit description.

**details.deposits.min** *(number, optional)*: Minimum deposit amount in USD.

**details.supplemental\_content.description** *(string, optional)*: Additional generated or supplemental listing description when available.

**details.supplemental\_content.description\_title** *(string, optional)*: Supplemental description title.

**details.supplemental\_content.keywords** *(array of strings, optional)*: Supplemental listing keywords.

**details.supplemental\_content.reviews\_summary** *(string, optional)*: Review summary text when available.

**details.supplemental\_content.property\_overview** *(string, optional)*: Supplemental property overview.

**details.supplemental\_content.version** *(string, optional)*: Supplemental content version.

**details.supplemental\_content.last\_generated** *(integer, optional)*: Supplemental content generation timestamp.

**details.feed\_name** *(string, optional)*: Source feed or provider label when available.

**related\_urls.padmapper\_url** *(string, optional)*: Related public PadMapper URL when available.

**source\_context.detail\_url** *(string, optional)*: Public detail URL associated with the saved record.

**source\_context.seed\_id** *(string, optional)*: Search seed identifier for the run context.

**source\_context.seed\_type** *(string, optional)*: Seed type, such as search.

**source\_context.seed\_value** *(string, optional)*: Input seed value used for the run context.

**source\_context.page\_index** *(integer, optional)*: Page index associated with the saved record.

**source\_context.domain** *(string, optional)*: Source domain.

**source\_context.scraped\_at** *(string, optional)*: Timestamp when the record was collected, in ISO 8601 format.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, or Zumper interface changes.
- **Optional fields:** null-check optional fields in downstream code, especially contact, media, ratings, fees, supplemental content, and neighborhood details.
- **Deduplication:** use `id` as the primary stable key, with `url` as a practical fallback when needed.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one geography or segment per run when you need cleaner market segmentation.
- Leave optional filters empty when the goal is broad rental discovery.
- Add filters gradually to understand how each field changes coverage.
- Use `publication_date` and `sort_by` together for freshness-focused monitoring.
- Enable `enrich_data` when descriptions, media, policies, contact information, or deeper listing details are important.
- Use stable identifiers such as `id` for deduplication when storing results over time.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Configure the available input fields for the target rental market and filters.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep rental datasets fresh for monitoring, reporting, and enrichment workflows. Recurring runs are especially useful for tracking new listings, pricing movement, and changes in available inventory.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor rent ranges, inventory, listing freshness, amenities, ratings, and geographic coverage over time.
- **Warehouses and ETL pipelines:** load normalized rental listing records into analytical databases for historical analysis.
- **CRM enrichment:** sync public listing, property, location, contact, and availability attributes into account or lead records.
- **Google Sheets or Airtable:** review smaller market snapshots, validate target segments, and share curated listing sets with operations teams.
- **Webhooks:** trigger ingestion, validation, notification, or alerting workflows after each completed run.
- **Alerts and scheduled reporting:** notify teams when new listings, price segments, deal signals, or rating thresholds match saved criteria.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for reporting, analysis, enrichment, and application workflows.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what [Zumper](https://www.zumper.com) publicly exposes at run time.
- Some optional fields may be missing on sparse listings, limited markets, or records without full public details.
- Very broad searches may take longer or require higher limits to capture enough matching records.
- Target-side changes can affect field availability, naming, or visible record structure.
- Regional, account, or availability differences may change which listings and attributes are visible.
- Rating, fee, contact, media, and supplemental fields are only included when available for the listing.

### Troubleshooting

- **No results returned:** check filter combinations, location spelling, and whether Zumper has matching public rental records for the selected area.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the target market contains enough matching listings.
- **Some fields are empty:** optional fields depend on what each public listing provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller location or filter segments.
- **Output changed:** compare the current output with the field reference and include a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Zumper rental listing data, including listing identifiers, URLs, titles, descriptions, location, pricing, property layout, contacts, amenities, media metadata, ratings, fees, related URLs, and source context when available.

#### Can I filter by location, category, date, price, or other criteria?

Yes. The actor requires `location` and supports filters for price, property type, pets, laundry, listing features, amenities, lease length, publication date, deals, ratings, lifestyle tags, specialty housing, sorting, enrichment, and result limit.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guaranteed count. You may receive fewer records if the selected location and filters have fewer matching public listings available at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cadence for monitoring, reporting, and recurring enrichment.

#### How do I avoid duplicates across runs?

Use `id` as the primary idempotency key for deduplication and upserts. If needed, use `url` as a fallback comparison key.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support JSON, CSV, Excel, and other export options for manual review and downstream ingestion.

#### Does this actor collect private data?

No. The actor is intended to collect publicly available rental listing information from Zumper. Users are responsible for using the data lawfully and responsibly.

#### When should I enable enrichment?

Enable `enrich_data` when you need richer listing details, such as longer descriptions, media, amenities, policies, fees, or contact information when available. Keep it off for faster validation runs when standard listing data is enough.

#### What should I include when reporting an issue?

Include the input used, the Apify run ID, expected versus actual behavior, and a small output sample if it helps show the issue. Redact anything sensitive before sharing.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available US rental property listing information from **https://www.zumper.com** for legitimate business purposes, including:

- **Real estate** research and market analysis
- Rental inventory monitoring and operational reporting
- Public listing enrichment for internal business systems

This section is informational and not legal advice. Users are responsible for determining whether their use of the data complies with applicable laws, regulations, contracts, and platform terms.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site’s terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used with any sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps explain the problem. Avoid sharing private credentials, unpublished business data, or unnecessary personal information.

# Actor input Schema

## `location` (type: `array`):

Enter one or more locations. Examples: Austin, TX; 10001; Chelsea, New York, NY; Brooklyn, NY; Downtown Austin; West Hollywood, CA. Each location is searched separately.

## `min_price` (type: `integer`):

Only save listings with monthly rent at or above this amount.

## `max_price` (type: `integer`):

Only save listings with monthly rent at or below this amount.

## `price_category` (type: `string`):

Optionally focus the search on Zumper listings marked as affordable or luxury.

## `min_area` (type: `integer`):

Only save listings with at least this much floor area.

## `min_bedroom` (type: `string`):

Only save listings with at least this bedroom count.

## `max_bedroom` (type: `string`):

Only save listings with no more than this bedroom count.

## `min_bathroom` (type: `string`):

Only save listings with at least this bathroom count.

## `max_bathroom` (type: `string`):

Only save listings with no more than this bathroom count.

## `property_type` (type: `array`):

Select one or more property types to include. Leave empty to keep all supported property types in scope.

## `pets_allowed` (type: `array`):

Only save listings that allow the selected pet types.

## `laundry` (type: `array`):

Only save listings that match the selected laundry setup.

## `listing_features` (type: `array`):

Only save listings that match selected listing-level signals such as photos, tours, new construction, or same-day posting.

## `amenities` (type: `array`):

Only save listings that include the selected apartment or building amenities.

## `lease_length` (type: `string`):

Only save listings that match the selected lease length.

## `publication_date` (type: `string`):

Only include listings first published within the selected timeframe.

## `deals` (type: `array`):

Only save listings that match the selected deal or savings signals.

## `highly_rated` (type: `boolean`):

Turn this on to save only listings with a rating of at least 4 where rating data is available.

## `zumper_expert_rating` (type: `string`):

Only save listings with a Zumper expert rating at or above the selected threshold.

## `lifestyle` (type: `array`):

Only save listings that match the selected lifestyle tags.

## `specialty_housing` (type: `array`):

Only save listings that match the selected specialty housing categories.

## `sort_by` (type: `string`):

Select the order used for matching Zumper rental listings.

## `enrich_data` (type: `boolean`):

Enable this to collect more complete listing details such as descriptions, media, amenities, policies, and contact information when available. Keep it off for faster validation runs when standard search results are enough.

## `limit` (type: `integer`):

Optional cap on how many listings to save for each selected location and filter set. Leave empty to collect as many matching results as available.

## Actor input object example

```json
{
  "location": [
    "Austin, TX"
  ],
  "highly_rated": false,
  "sort_by": "most_relevant",
  "enrich_data": false,
  "limit": 100
}
```

# Actor output Schema

## `results` (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 = {
    "location": [
        "Austin, TX"
    ],
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/zumper-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": ["Austin, TX"],
    "limit": 100,
}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zumper Scraper with Contacts | Fast & Reliable",
        "description": "Extract Zumper rental listings at scale with rich property detail, contact data, ratings, fees, amenities, and flexible market filters. Built for enterprise-grade US rental intelligence, lead enrichment, market monitoring, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "ydLyVrGPhwFzjB39G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~zumper-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-zumper-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/fatihtahta~zumper-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-zumper-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/fatihtahta~zumper-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-zumper-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",
                "required": [
                    "location"
                ],
                "properties": {
                    "location": {
                        "title": "Choose Search Locations",
                        "type": "array",
                        "description": "Enter one or more locations. Examples: Austin, TX; 10001; Chelsea, New York, NY; Brooklyn, NY; Downtown Austin; West Hollywood, CA. Each location is searched separately.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "min_price": {
                        "title": "Set Minimum Monthly Rent",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only save listings with monthly rent at or above this amount."
                    },
                    "max_price": {
                        "title": "Set Maximum Monthly Rent",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only save listings with monthly rent at or below this amount."
                    },
                    "price_category": {
                        "title": "Choose Price Category",
                        "enum": [
                            "cheap",
                            "luxury"
                        ],
                        "type": "string",
                        "description": "Optionally focus the search on Zumper listings marked as affordable or luxury."
                    },
                    "min_area": {
                        "title": "Set Minimum Square Feet",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only save listings with at least this much floor area."
                    },
                    "min_bedroom": {
                        "title": "Set Minimum Bedrooms",
                        "enum": [
                            "studio",
                            "1",
                            "2",
                            "3",
                            "4+"
                        ],
                        "type": "string",
                        "description": "Only save listings with at least this bedroom count."
                    },
                    "max_bedroom": {
                        "title": "Set Maximum Bedrooms",
                        "enum": [
                            "studio",
                            "1",
                            "2",
                            "3",
                            "4+"
                        ],
                        "type": "string",
                        "description": "Only save listings with no more than this bedroom count."
                    },
                    "min_bathroom": {
                        "title": "Set Minimum Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only save listings with at least this bathroom count."
                    },
                    "max_bathroom": {
                        "title": "Set Maximum Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only save listings with no more than this bathroom count."
                    },
                    "property_type": {
                        "title": "Choose Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more property types to include. Leave empty to keep all supported property types in scope.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "apartment",
                                "condo",
                                "house",
                                "room",
                                "townhouse",
                                "other"
                            ],
                            "enumTitles": [
                                "Apartment",
                                "Condo",
                                "House",
                                "Room",
                                "Townhouse",
                                "Other"
                            ]
                        }
                    },
                    "pets_allowed": {
                        "title": "Choose Allowed Pets",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that allow the selected pet types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "dogs",
                                "cats"
                            ],
                            "enumTitles": [
                                "Dogs",
                                "Cats"
                            ]
                        }
                    },
                    "laundry": {
                        "title": "Choose Laundry Options",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that match the selected laundry setup.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "in_building",
                                "in_unit"
                            ],
                            "enumTitles": [
                                "In building",
                                "In unit"
                            ]
                        }
                    },
                    "listing_features": {
                        "title": "Choose Listing Features",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that match selected listing-level signals such as photos, tours, new construction, or same-day posting.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "3d_tour_or_video_tour",
                                "has_photos",
                                "live_virtual_walkthrough",
                                "new_construction",
                                "posted_today"
                            ],
                            "enumTitles": [
                                "3D tour or video tour",
                                "Has photos",
                                "Live virtual walkthrough",
                                "New construction",
                                "Posted today"
                            ]
                        }
                    },
                    "amenities": {
                        "title": "Choose Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that include the selected apartment or building amenities.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "air_conditioning",
                                "assigned_parking",
                                "central_heat",
                                "dishwasher",
                                "garage_parking",
                                "hardwood_floor",
                                "pool",
                                "balcony",
                                "business_center",
                                "carpet",
                                "ceiling_fan",
                                "concierge_service",
                                "controlled_access",
                                "deck",
                                "door_person",
                                "dry_cleaning_service",
                                "elevator",
                                "ev_charging",
                                "fireplace",
                                "furnished",
                                "garden",
                                "gym",
                                "high_ceilings",
                                "leed_certified",
                                "on_site_management",
                                "outdoor_space",
                                "package_service",
                                "residents_lounge",
                                "roof_deck",
                                "storage",
                                "tv",
                                "walk_in_closet",
                                "wheelchair_accessible",
                                "wi_fi"
                            ],
                            "enumTitles": [
                                "Air conditioning",
                                "Assigned parking",
                                "Central heat",
                                "Dishwasher",
                                "Garage parking",
                                "Hardwood floor",
                                "Pool",
                                "Balcony",
                                "Business center",
                                "Carpet",
                                "Ceiling fan",
                                "Concierge service",
                                "Controlled access",
                                "Deck",
                                "Door person",
                                "Dry cleaning service",
                                "Elevator",
                                "EV charging",
                                "Fireplace",
                                "Furnished",
                                "Garden",
                                "Gym",
                                "High ceilings",
                                "LEED certified",
                                "On site management",
                                "Outdoor space",
                                "Package service",
                                "Residents lounge",
                                "Roof deck",
                                "Storage",
                                "TV",
                                "Walk-in closet",
                                "Wheelchair accessible",
                                "Wi-fi"
                            ]
                        }
                    },
                    "lease_length": {
                        "title": "Choose Lease Length",
                        "enum": [
                            "short_term",
                            "long_term"
                        ],
                        "type": "string",
                        "description": "Only save listings that match the selected lease length."
                    },
                    "publication_date": {
                        "title": "Choose Listing Age",
                        "enum": [
                            "last_24_hours",
                            "last_7_days",
                            "last_2_weeks",
                            "last_1_month"
                        ],
                        "type": "string",
                        "description": "Only include listings first published within the selected timeframe."
                    },
                    "deals": {
                        "title": "Choose Deal Signals",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that match the selected deal or savings signals.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "rent_special",
                                "no_security_deposit",
                                "price_drop",
                                "sweet_deal",
                                "utilities_included"
                            ],
                            "enumTitles": [
                                "Rent special",
                                "No security deposit",
                                "Price drop",
                                "Sweet deal",
                                "Utilities included"
                            ]
                        }
                    },
                    "highly_rated": {
                        "title": "Require Highly Rated Listings",
                        "type": "boolean",
                        "description": "Turn this on to save only listings with a rating of at least 4 where rating data is available.",
                        "default": false
                    },
                    "zumper_expert_rating": {
                        "title": "Set Minimum Zumper Rating",
                        "enum": [
                            "9+",
                            "7+",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only save listings with a Zumper expert rating at or above the selected threshold."
                    },
                    "lifestyle": {
                        "title": "Choose Lifestyle Tags",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that match the selected lifestyle tags.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "eco_living",
                                "pet_owners",
                                "social_life",
                                "wellness",
                                "work_from_home"
                            ],
                            "enumTitles": [
                                "Eco-living",
                                "Pet owners",
                                "Social life",
                                "Wellness",
                                "Work-from-home"
                            ]
                        }
                    },
                    "specialty_housing": {
                        "title": "Choose Specialty Housing",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only save listings that match the selected specialty housing categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "55_plus_community",
                                "student_housing",
                                "income_restricted"
                            ],
                            "enumTitles": [
                                "55+ communities",
                                "Student housing",
                                "Income restricted"
                            ]
                        }
                    },
                    "sort_by": {
                        "title": "Choose Sort Order",
                        "enum": [
                            "most_relevant",
                            "newest_first",
                            "price_low_to_high",
                            "price_high_to_low",
                            "rating_low_to_high",
                            "rating_high_to_low"
                        ],
                        "type": "string",
                        "description": "Select the order used for matching Zumper rental listings.",
                        "default": "most_relevant"
                    },
                    "enrich_data": {
                        "title": "Collect Richer Listing and Agent Details",
                        "type": "boolean",
                        "description": "Enable this to collect more complete listing details such as descriptions, media, amenities, policies, and contact information when available. Keep it off for faster validation runs when standard search results are enough.",
                        "default": false
                    },
                    "limit": {
                        "title": "Set Maximum Results per Location",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional cap on how many listings to save for each selected location and filter set. Leave empty to collect as many matching results as available."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
