Hotpads Scraper With Agents | Fast & Reliable avatar

Hotpads Scraper With Agents | Fast & Reliable

Pricing

from $0.70 / 1,000 property listings

Go to Apify Store
Hotpads Scraper With Agents | Fast & Reliable

Hotpads Scraper With Agents | Fast & Reliable

Extract HotPads rental listings at scale with unlimited coverage, deep listing detail, owner and contact data, flexible filters, and broad market coverage. Built for enterprise-grade rental intelligence, lead generation, and automated analytics pipelines.

Pricing

from $0.70 / 1,000 property listings

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Hotpads Scraper

Slug: fatihtahta/hotpads-scraper

Overview

Hotpads Scraper collects structured rental listing records, including listing identifiers, rental URLs, titles, property types, pricing, bedrooms, bathrooms, square footage, media, amenities, contact details, policies, timestamps, and location attributes. HotPads is a public rental marketplace where apartment, condo, house, townhouse, room, sublet, and corporate housing availability can provide useful signals for rental-market analysis. The actor turns selected HotPads search criteria into repeatable Apify datasets that can be used in analytics, enrichment, monitoring, and reporting workflows. It is designed for recurring data acquisition where consistent JSON output, predictable input controls, and operational repeatability matter. Results reflect the public data available at run time and should be validated against your target market, filters, and downstream requirements.

Why Use This Actor

  • Market research and analytics teams: collect structured rental data for market intelligence, pricing analysis, inventory tracking, and neighborhood-level reporting.
  • Product and content teams: populate rental experiences, internal directories, comparison tools, or content operations with normalized listing attributes and media metadata.
  • Developers and data engineering teams: feed downstream systems with repeatable JSON records suitable for ETL jobs, data warehouses, APIs, and dataset normalization.
  • Lead generation and enrichment teams: identify rental listings, owner-listed units, contact signals, amenities, and listing context for enrichment pipelines and operational review.
  • Monitoring and competitive tracking teams: schedule recurring runs to track pricing, availability, listing recency, geographic coverage, and market movement over time.

Common Use Cases

  • Market intelligence: monitor rental supply, pricing bands, availability, bedroom mix, amenities, and location movement across supported HotPads markets.
  • Lead generation: build targeted prospect lists from public rental listings that match owner-listed, amenity, price, or geographic criteria.
  • Competitive monitoring: track changes across neighborhoods, property types, special offers, and recently published listings.
  • Catalog and directory building: populate internal rental databases with structured public records, addresses, images, pricing, and feature metadata.
  • Data enrichment: add current public rental attributes to existing CRM, BI, underwriting, or analytics datasets.
  • Recurring reporting: schedule periodic runs for dashboards, alerts, market snapshots, and trend analysis.

Quick Start

  1. Enter a supported location, such as a city, neighborhood, borough, ZIP code, or address.
  2. Add optional filters such as property_type, min_price, max_price, bedroom, min_bedroom, min_bathroom, amenities, pets, or publication recency.
  3. Set a small limit for your first validation run.
  4. Run the actor in Apify Console.
  5. Inspect the first dataset records to confirm that the output shape, market, and filters match your use case.
  6. Increase limit, adjust filters, enable broader coverage with maximize_coverage, or schedule the actor once the output is verified.

Input Parameters

Hotpads Scraper requires a supported location; all other inputs refine scope, ordering, coverage, or output volume.

ParameterTypeDescriptionDefault
locationstringSupported HotPads location to search. Use a city, neighborhood, borough, ZIP code, or address, such as San Francisco, CA, SoHo, New York, 10001, or 90210. Statewide searches are not supported in this flow.
min_priceintegerMinimum monthly rent to include, in USD. Leave empty for no lower price requirement.
max_priceintegerMaximum monthly rent to include, in USD. Leave empty for no upper price requirement.
property_typearray of stringsProperty categories to include. Allowed values: apartment, condo, duplex, house, townhouse.["apartment"]
bedroomstringExact bedroom count. Allowed values: studio, 1, 2, 3, 4.
min_bedroomstringMinimum bedroom count. Allowed values: 1+, 2+, 3+, 4+. When both bedroom and min_bedroom are provided, the minimum bedroom filter takes priority.
min_bathroomstringMinimum bathroom count. Allowed values: 1+, 1.5+, 2+, 3+, 4+.
min_areastringMinimum floor area in square feet. Allowed values: 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 3799.
max_areastringMaximum floor area in square feet. Allowed values: 3600, 3400, 3200, 3000, 2800, 2600, 2400, 2200, 2000, 1800, 1600, 1400, 1200, 1000, 800, 600, 400, 200, 1.
amenitiesarray of stringsRequired amenities. Allowed values: in_unit_laundry, shared_laundry, ac, heating, parking, gated_entry, doorman, gym, pool, dishwasher, furnished.
petsarray of stringsRequired pet policies. Allowed values: dogs_allowed, cats_allowed.
publication_datestringListing recency window. Allowed values: 1_hour, 24_hours, 7_days, 30_days.
keywordstringOne keyword or phrase to narrow listing text, such as a feature, building name, neighborhood term, or leasing condition.
exclude_rental_typearray of stringsRental categories to exclude. Allowed values: regular, rooms_for_rent, sublet, corporate.
special_restrictionstringHousing program filter. Allowed values: income_restricted, senior_housing, student_housing, military_housing, no_restricted_housing.
with_photobooleanInclude only listings that provide at least one photo.false
with_pricebooleanInclude only listings that show clear pricing.false
for_rent_by_ownerbooleanInclude only rentals listed directly by the owner.false
properties_with_offersbooleanInclude only listings that advertise special offers.false
accepting_online_applicationsbooleanInclude only listings that accept online rental applications.false
sort_bystringResult ordering. Allowed values: default, newest, most_popular, highest_price, lowest_price.default
maximize_coveragebooleanCollect more matching listings for broad searches that may exceed the visible result set, without changing the selected criteria. Turn off for faster exploratory runs.true
limitintegerMaximum number of listings to save. Minimum value: 1. Leave empty to collect all available results that match the selected criteria.

Choosing Inputs

Start with the smallest scope that answers your question. Use location to define the market, then decide whether your workflow needs broad discovery or a targeted dataset.

Narrower filters, such as price, bedroom count, property type, amenities, pets, publication recency, or listing requirements, produce more focused records. Broader inputs improve discovery and are useful for market scans, inventory analysis, and trend reporting. Use sort_by when ordering matters for validation or monitoring, and use maximize_coverage when broad searches may contain more matching rentals than the first visible result set. When testing a new market or filter set, start with a small limit, inspect the output, and then increase the limit after confirming record quality.

Example Inputs

{
"location": "SoHo, New York",
"property_type": ["apartment", "condo"],
"min_price": 3000,
"max_price": 8000,
"bedroom": "1",
"with_photo": true,
"limit": 50
}

Recently posted monitoring run

{
"location": "San Francisco, CA",
"property_type": ["apartment"],
"publication_date": "24_hours",
"sort_by": "newest",
"with_price": true,
"limit": 100
}

Broad discovery with controlled volume

{
"location": "90210",
"property_type": ["house", "townhouse"],
"min_bedroom": "2+",
"min_bathroom": "2+",
"pets": ["dogs_allowed", "cats_allowed"],
"maximize_coverage": true,
"limit": 75
}

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.

The actor emits one public record family: property_listing. Each row represents one HotPads rental listing.

Record Envelope And Stable Identifiers

Each record includes a stable record_type, record_id, source provenance, listing identity, pricing, location, property facts, availability, media, contact details, relationships, metrics, and source-specific attributes. The recommended idempotency key is record_id; if your destination requires a fallback, use entity.url or source_context.external_ids.fingerprint.

For deduplication and upserts, use the recommended idempotency key to merge repeated observations of the same listing instead of creating duplicate records. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The source_context object records the HotPads source URLs, external identifiers, run seed, resolved location, and a stable fingerprint for sync workflows.

Examples

Example: listing record

{
"record_type": "property_listing",
"record_id": "sample-listing-001",
"source_context": {
"source_name": "HotPads",
"source_domain": "hotpads.com",
"source_url": "https://hotpads.com/123-example-ave-example-city-ca-90001-sample/4b/pad",
"listing_url": "https://hotpads.com/123-example-ave-example-city-ca-90001-sample/4b/pad",
"building_url": "https://hotpads.com/123-example-ave-example-city-ca-90001-sample/building",
"external_ids": {
"listing_id": "sample-listing-001",
"fingerprint": "sample-fingerprint-001",
"building_id": "sample-building-001"
},
"seed_id": "sample-seed-001",
"seed_type": "search",
"seed_value": "Example District, Example City",
"page_index": 1,
"resolved_location": {
"locationInput": "Example District, Example City",
"name": "Example District",
"type": "neighborhood",
"areaId": "sample-area-001",
"resourceId": "example-district-example-city-ca",
"city": "Example City",
"state": "CA",
"lat": "34.0000000000",
"lon": "-118.0000000000",
"bounds": {
"maxLat": "34.0100000000",
"maxLon": "-117.9900000000",
"minLat": "33.9900000000",
"minLon": "-118.0100000000"
}
}
},
"entity": {
"title": "123 Example Ave #4B",
"description": "Unit 4B at 123 Example Ave is a sample 2-bedroom, 2-bath residence with approximately 1,180 square feet of living space.",
"url": "https://hotpads.com/123-example-ave-example-city-ca-90001-sample/4b/pad",
"category": "Apartment Unit for Rent",
"external_ids": {
"listing_id": "sample-listing-001"
}
},
"listing": {
"listing_id": "sample-listing-001",
"listing_type": "rental",
"deal_type": "rent",
"updated_at": "2026-01-15T12:00:00.000000Z",
"published_at": "2026-01-15T12:00:00.000000Z",
"status": {
"trusted": false,
"broker_listing": false,
"paid_and_not_demoted": false
}
},
"pricing": {
"price_min": 4250.0,
"price_max": 4250.0,
"rent": {
"min": 4250.0,
"max": 4250.0
}
},
"location": {
"address": {
"street": "123 Example Ave",
"city": "Example City",
"region": "CA",
"postal_code": "90001",
"hide_street": false
},
"city": "Example City",
"region": "CA",
"postal_code": "90001",
"coordinates": {
"latitude": 34.0,
"longitude": -118.0,
"quad": "sample-quad-001"
},
"neighborhoods": ["Sample District"]
},
"property": {
"property_type": "condo",
"bedrooms": {
"min": 2,
"max": 2
},
"bathrooms": {
"min": 2.0,
"max": 2.0,
"value": 2.0
},
"floor_area_sqft": {
"min": 1180.0,
"max": 1180.0
},
"amenities": [
"Pets: Cats and Dogs Allowed",
"Laundry: In Unit",
"Appliances: Dishwasher"
],
"pets_allowed": true,
"housing_programs": {
"rental_application_status": "undecided",
"income_restricted": false,
"senior_housing": false,
"student_housing": false,
"military_housing": false
}
},
"availability": {
"models": [
{
"num_beds": 2,
"low_price": 4250.0,
"high_price": 4250.0
}
],
"new_unit_count": 0,
"price_drop_count": 0
},
"media": {
"main_image_url": "https://example.com/images/hotpads-sample-01.webp",
"image_urls": [
"https://example.com/images/hotpads-sample-01.webp",
"https://example.com/images/hotpads-sample-02.webp"
],
"image_count": 15,
"has_videos": false,
"has_external_3d_tours": false,
"has_zillow_3d_tours": false
},
"contact_details": {
"name": "Sample Property Group",
"phone": "555-010-1234",
"contacts": [
{
"company_name": "Sample Property Group",
"contact_phone": "555-010-1234",
"contact_name": "Leasing Team"
}
],
"inquiry": {
"restricted": false,
"requires_phone": true,
"requires_email": true,
"display_contact_box": true
}
},
"relationships": {
"agency": {
"name": "Sample Property Group",
"phone": "555-010-1234"
},
"building": {
"building_id": "sample-building-001",
"url": "https://hotpads.com/123-example-ave-example-city-ca-90001-sample/building"
}
},
"metrics": {
"priority": 0.0,
"score": 0.0,
"experiment_score": 0.0
},
"attributes": {
"tags": [
"Pets: Cats and Dogs Allowed",
"Laundry: In Unit",
"Appliances: Dishwasher"
],
"promotions": {
"has_special_offers": false
},
"source_specific": {
"activated": 1768478400000,
"unit": "4B",
"company_name": "Sample Property Group",
"has_total_monthly_price": false
}
}
}

Field Reference

Listing Record

record_type (string, required): Stable discriminator. HotPads listing rows use property_listing.

record_id (string, required): Stable HotPads listing identifier.

source_context.source_name / source_context.source_domain (string, optional): Source name and domain.

source_context.source_url / source_context.listing_url / source_context.building_url (string, optional): Public HotPads audit URLs.

source_context.external_ids (object, optional): Source listing, building, feed, lot, and fingerprint identifiers.

source_context.seed_id / source_context.seed_type / source_context.seed_value / source_context.page_index (string or number, optional): Run and seed context for the record.

source_context.resolved_location (object, optional): HotPads location resolver metadata for the input location.

entity.title / entity.description / entity.url / entity.category (string, optional): Main listing display fields.

listing.listing_id / listing.listing_type / listing.deal_type (string, optional): Listing identity and rental context.

listing.updated_at / listing.published_at / listing.posted_at (string, optional): Listing lifecycle timestamps when available.

listing.status (object, optional): Source status and trust signals, such as active, trusted, paid, broker, and demotion flags.

pricing.price_min / pricing.price_max (number, optional): Monthly rent range in USD when available.

pricing.rent (object, optional): Rent range object with min and max values.

pricing.models / pricing.fees / pricing.total_monthly_price (object or array, optional): Source-provided pricing model, fee, and total monthly price details.

location.address.street (string, optional): Street address when visible.

location.address.city (string, optional): Address city.

location.address.region (string, optional): State or region abbreviation.

location.address.postal_code (string, optional): Postal code.

location.address.hide_street (boolean, optional): Whether street display is hidden.

location.city (string, optional): Listing city.

location.region (string, optional): Listing state or region.

location.postal_code (string, optional): Listing postal code.

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

location.coordinates.quad (string, optional): Geographic grid reference when available.

location.neighborhoods (array of strings, optional): Neighborhoods associated with the listing.

property.property_type (string, optional): Property type, such as condo, apartment, house, or townhouse.

property.bedrooms / property.bathrooms / property.floor_area_sqft (object, optional): Bedroom, bathroom, and square-footage ranges.

property.amenities (array of strings, optional): Public amenity labels associated with the listing.

property.pets_allowed (boolean, optional): Pet-friendly signal inferred from public amenity labels when present.

property.housing_programs (object, optional): Rental application, income-restricted, senior, student, and military housing signals.

availability.models / availability.floorplans / availability.available_units (array or object, optional): Unit, model, and floorplan-level availability details.

availability.new_unit_count / availability.price_drop_count (number, optional): Counts of new units and price-drop signals.

media.main_image_url / media.image_urls / media.image_count (string, array, or number, optional): Listing image data.

media.photos / media.has_videos / media.has_external_3d_tours / media.has_zillow_3d_tours (array, object, or boolean, optional): Photo, video, and tour details.

contact_details.name / contact_details.phone (string, optional): Public contact name and phone when displayed.

contact_details.contacts (array, optional): Source-provided listed-by contact payloads.

contact_details.inquiry (object, optional): Public inquiry requirements and default inquiry details.

relationships.agency (object, optional): Listing agency or property-management relationship.

relationships.building (object, optional): Linked building identifier, URL, and lot ID.

metrics.priority / metrics.score / metrics.experiment_score / metrics.popularity (number or object, optional): Source ranking and popularity signals.

attributes.tags (array of strings, optional): Amenity-style labels useful as tags.

attributes.promotions (object, optional): Special-offer and promotion details.

attributes.details / attributes.amenity_details / attributes.history / attributes.schools / attributes.areas (object or array, optional): Additional public detail-page payloads preserved from HotPads.

attributes.source_specific (object, optional): Meaningful HotPads fields that do not fit a stronger normalized group, such as unit, activation timestamp, source company name, and total-monthly-price flags.

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, and HotPads presentation changes.
  • Optional fields: null-check fields in downstream code, especially contact, policy, media, address, and pricing details.
  • Deduplication: use record_id as the strongest stable key; use entity.url or source_context.external_ids.fingerprint as fallbacks 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 output shape before scaling up.
  • Use one location or market segment per run when you need clean segmentation.
  • Leave optional filters empty when the goal is broad discovery.
  • Add filters gradually to understand how each field changes coverage.
  • Use publication_date and sort_by: "newest" for recently posted listing monitoring.
  • Keep maximize_coverage enabled for broad searches where you want more complete matching output.
  • Use record_id, entity.url, or source_context.external_ids.fingerprint 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 location and listing scope.
  3. Set the maximum number of outputs to collect with limit.
  4. Click Start and wait for the run to finish.
  5. Open the dataset and inspect the first records.
  6. 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 useful when you need consistent snapshots of pricing, availability, or recently posted listings.

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

Integration Options

  • BI dashboards: monitor pricing, availability, property types, amenities, and geographic coverage over time.
  • Data warehouses: load normalized listing records into historical tables for reporting and analysis.
  • CRM enrichment: sync public rental listing attributes, contact signals, and location context into account or lead records.
  • Google Sheets or Airtable: review smaller market samples, qualification queues, or operational research lists.
  • Webhooks: trigger validation, ingestion, notification, or enrichment workflows after each completed run.
  • Alerts and scheduled reporting: notify teams when new listings, price bands, or market segments match your criteria.

Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for operational analysis, monitoring, and data delivery.

  • 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 HotPads publicly exposes at run time.
  • Some optional fields may be missing on sparse listings or records with limited public detail.
  • Very broad searches may take longer or require higher limit values to collect the desired volume.
  • HotPads-side changes can affect field availability, naming, or visible results.
  • Regional, account, or availability differences may change which listings are visible for the same criteria.
  • Statewide searches are not supported by this actor input flow.

Troubleshooting

No results returned: Check filter combinations, location spelling, property type selection, and whether HotPads has matching public rental records for the requested market.

Fewer results than expected: Broaden filters, raise limit, enable maximize_coverage, or verify that the target market contains enough matching records.

Some fields are empty: Optional fields depend on what each listing publicly 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 when reporting the issue.

FAQ

What data does this actor collect?

It collects public HotPads rental listing records, including identifiers, URLs, titles, property types, pricing, bedrooms, bathrooms, square footage, images, amenities, contact details, policies, timestamps, and location context when available.

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

Yes. The actor supports location, property_type, price range, bedroom and bathroom filters, area filters, amenities, pets, publication recency, keywords, rental-type exclusions, housing program filters, listing requirements, sorting, and output limits.

Why did I receive fewer results than my limit?

The limit is a maximum, not a guarantee. The run may return fewer records when HotPads has fewer matching public listings for the selected location and filters.

Can I schedule recurring runs?

Yes. Use Apify Schedules to run the actor daily, weekly, or on a custom cron schedule.

How do I avoid duplicates across runs?

Use record_id as the primary idempotency key. If needed, use entity.url or source_context.external_ids.fingerprint as fallback keys for deduplication and upserts.

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

Yes. Apify datasets support JSON, CSV, Excel, and other export formats.

Does this actor collect private data?

The actor is intended to collect publicly available HotPads listing information. Users are responsible for ensuring their use of collected data complies with applicable laws, terms, and privacy requirements.

What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available rental listing information from HotPads for legitimate business purposes, including:

  • Real estate research and market analysis
  • Rental inventory monitoring and operational reporting
  • Data enrichment for internal analytics, CRM, and business intelligence workflows

Users are responsible for ensuring that their use of the data complies with applicable laws, regulations, contractual obligations, and the target site’s terms. This section is informational and not legal advice.

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, including GDPR and CCPA

Support

For help, use the actor page or Issues. Include the input used, with sensitive values redacted if needed, the run ID, expected versus actual behavior, and a small output sample when it helps illustrate the issue.