Hotpads Scraper With Agents | Fast & Reliable
Pricing
from $0.70 / 1,000 property listings
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
- Enter a supported
location, such as a city, neighborhood, borough, ZIP code, or address. - Add optional filters such as
property_type,min_price,max_price,bedroom,min_bedroom,min_bathroom, amenities, pets, or publication recency. - Set a small
limitfor your first validation run. - Run the actor in Apify Console.
- Inspect the first dataset records to confirm that the output shape, market, and filters match your use case.
- Increase
limit, adjust filters, enable broader coverage withmaximize_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.
| Parameter | Type | Description | Default |
|---|---|---|---|
location | string | Supported 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_price | integer | Minimum monthly rent to include, in USD. Leave empty for no lower price requirement. | – |
max_price | integer | Maximum monthly rent to include, in USD. Leave empty for no upper price requirement. | – |
property_type | array of strings | Property categories to include. Allowed values: apartment, condo, duplex, house, townhouse. | ["apartment"] |
bedroom | string | Exact bedroom count. Allowed values: studio, 1, 2, 3, 4. | – |
min_bedroom | string | Minimum bedroom count. Allowed values: 1+, 2+, 3+, 4+. When both bedroom and min_bedroom are provided, the minimum bedroom filter takes priority. | – |
min_bathroom | string | Minimum bathroom count. Allowed values: 1+, 1.5+, 2+, 3+, 4+. | – |
min_area | string | Minimum 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_area | string | Maximum 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. | – |
amenities | array of strings | Required amenities. Allowed values: in_unit_laundry, shared_laundry, ac, heating, parking, gated_entry, doorman, gym, pool, dishwasher, furnished. | – |
pets | array of strings | Required pet policies. Allowed values: dogs_allowed, cats_allowed. | – |
publication_date | string | Listing recency window. Allowed values: 1_hour, 24_hours, 7_days, 30_days. | – |
keyword | string | One keyword or phrase to narrow listing text, such as a feature, building name, neighborhood term, or leasing condition. | – |
exclude_rental_type | array of strings | Rental categories to exclude. Allowed values: regular, rooms_for_rent, sublet, corporate. | – |
special_restriction | string | Housing program filter. Allowed values: income_restricted, senior_housing, student_housing, military_housing, no_restricted_housing. | – |
with_photo | boolean | Include only listings that provide at least one photo. | false |
with_price | boolean | Include only listings that show clear pricing. | false |
for_rent_by_owner | boolean | Include only rentals listed directly by the owner. | false |
properties_with_offers | boolean | Include only listings that advertise special offers. | false |
accepting_online_applications | boolean | Include only listings that accept online rental applications. | false |
sort_by | string | Result ordering. Allowed values: default, newest, most_popular, highest_price, lowest_price. | default |
maximize_coverage | boolean | Collect 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 |
limit | integer | Maximum 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
Targeted apartment search
{"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_idas the strongest stable key; useentity.urlorsource_context.external_ids.fingerprintas 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
limitto validate output shape before scaling up. - Use one
locationor 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_dateandsort_by: "newest"for recently posted listing monitoring. - Keep
maximize_coverageenabled for broad searches where you want more complete matching output. - Use
record_id,entity.url, orsource_context.external_ids.fingerprintfor deduplication when storing results over time.
How to Run on Apify
- Open the Actor in Apify Console.
- Configure the available input fields for the target location and listing scope.
- Set the maximum number of outputs to collect with
limit. - Click Start and wait for the run to finish.
- Open the dataset and inspect the first records.
- 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
limitvalues 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.