Hotpads Scraper
Pricing
from $3.00 / 1,000 results
Hotpads Scraper
Scrape rental listings from HotPads.com. Extract price, beds, baths, address, photos, amenities, pet policy, nearby schools and more. Supports apartments, houses, condos and rooms across any US city. Fast mode or full detail mode.
Pricing
from $3.00 / 1,000 results
Rating
5.0
(1)
Developer
wallace
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Scrape rental listings from HotPads.com — rent, beds, baths, square footage, address, coordinates, photos, amenities, pet policies, nearby schools and per-unit availability — for any US city, neighbourhood or ZIP code. Paste a HotPads search URL, press start, and get a clean spreadsheet.
What does HotPads Scraper do?
HotPads Scraper turns any HotPads.com search page into structured rental data. Give it a search URL — a city, a neighbourhood, or a filtered search — and it walks the results and returns one row per listing with plain-English columns you can open directly in Excel, Google Sheets, or load through the API.
It runs in two modes:
- Fast mode (default) reads everything the search pages carry: rent, beds, baths, sqft, full address, coordinates, photos, unit counts, price drops and a contact phone. Roughly 200 listings in 20 seconds.
- Detail mode additionally opens each listing page for the full description, complete amenity list, pet policies and fees, lease terms, office hours, nearby schools, popularity stats, and a per-unit breakdown of every available apartment in a building.
Running on Apify means you also get scheduling, a REST API, webhooks, integrations with Make, Zapier, Google Sheets and Slack, automatic proxy rotation, and run monitoring — without maintaining any of it yourself.
Why use HotPads Scraper?
- Rental market research — track asking rents, price drops and availability across neighbourhoods over time.
- Lead generation — build lists of property managers and landlords with contact phone numbers.
- Competitive analysis — see how comparable buildings price, what they offer, and how long they sit on the market.
- Real estate investment — evaluate rental yields by area with square footage, bed/bath mix and per-unit pricing.
- Relocation and tenant search — filter thousands of listings offline instead of clicking through pages.
- Academic and policy research — assemble reproducible housing datasets with coordinates and timestamps.
How to use HotPads Scraper
- Find your search on HotPads.com — pick a city, then apply any filters you want (price, beds, property type). Copy the URL from your browser, e.g.
https://hotpads.com/san-francisco-ca/apartments-for-rent. - Open this Actor and click Try for free.
- Paste the URL into Start URLs. You can add several at once.
- Set your limits — Max Items caps how many listings you save, Max Pages caps how many result pages are followed (HotPads itself stops at 40 pages, about 1,600 listings per search).
- Choose a mode — leave Scrape Detail Pages off for a fast, cheap run, or switch it on for the full dataset.
- Click Start, then download from the Output tab as JSON, CSV, Excel or HTML — or pull it through the API.
Getting more than 1,600 listings from one city
HotPads caps any single search at 40 pages. To go deeper, split the city into several narrower searches — by neighbourhood, by ZIP, or by price band — and pass them all as Start URLs. Each one gets its own 40-page allowance.
Input
| Field | Type | Default | Description |
|---|---|---|---|
| Start URLs | URL list | — | One or more HotPads search page URLs |
| Max Items | integer | 0 (unlimited) | Stop after this many listings |
| Max Pages | integer | 40 | Result pages to follow per URL (40 is HotPads' own cap) |
| Scrape Detail Pages | boolean | false | Off: search-page data only, ~10× faster and cheaper. On: opens every listing for description, amenities, pets, schools and per-unit pricing |
| Block Images | boolean | false | Skips downloading listing photos to cut proxy bandwidth. Photo URLs are still extracted. Note it does not make runs faster — measured slightly slower — so leave it off unless bandwidth is what you are optimising |
| Proxy Configuration | proxy | Apify Residential (US) | Residential proxies are required. HotPads blocks datacenter IPs outright |
Example input:
{"startUrls": [{ "url": "https://hotpads.com/san-francisco-ca/apartments-for-rent" }],"maxItems": 100,"maxPages": 3,"includeDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Output
One row per listing. Download as JSON, CSV, Excel or HTML.
{"url": "https://hotpads.com/33-8th-at-trinity-place-san-francisco-ca-94103-23y7253/pad","name": "33 8th at Trinity Place","property_type": "Apartment building","rent": 4114,"rent_max": 6341,"rent_display": "$4,114 – $6,341","bedrooms": 0,"bedrooms_max": 2,"bathrooms": 1,"sqft": 382,"sqft_max": 685,"full_address": "33 8th St, San Francisco, CA 94103","address": "33 8th St","city": "San Francisco","state": "CA","zip": "94103","latitude": 37.77844882678356,"longitude": -122.41362422704697,"units_available": 15,"price_drops": 7,"contact_phone": "1-707-847-4228","photos": ["https://photos.zillowstatic.com/fp/01ae778a92392c6dcf1a5755615b23d2-rentals_medium_500_500.webp"],"photo_count": 12,"listed_date": "2023-07-27T12:33:33.979Z","updated_date": "2026-08-20T12:30:31.416Z","scraped_at": "2026-08-20T20:33:07.112Z","source": "hotpads.com"}
How ranges work
Most listings quote a single figure, so rent, bedrooms, bathrooms and sqft hold that value and the matching _max column stays empty. When a building spans a range — a 15-unit building from studios to 2-beds — rent holds the starting figure and rent_max the top of the range. rent_display gives the formatted version for reports.
Data dictionary
Returned in both modes
| Column | Type | Description |
|---|---|---|
url | string | Listing page URL |
name | string | Building or listing name |
property_type | string | Apartment building, House, Condo, Townhouse, Room for rent |
rent | number | Monthly rent, or the starting rent for a range |
rent_max | number | Top of the rent range, empty when there is a single price |
rent_display | string | Formatted rent, e.g. $4,114 – $6,341 |
bedrooms, bedrooms_max | number | Bedroom count (0 means studio) |
bathrooms, bathrooms_max | number | Bathroom count |
sqft, sqft_max | number | Interior square footage |
full_address | string | Single-line address, ready for geocoding or a CRM |
address, city, state, zip | string | Address components |
latitude, longitude | number | Coordinates |
unit | string | Unit number, when the listing is a specific unit |
units_available | number | Units currently available in the building |
new_units, price_drops | number | Recently added units, and units whose price dropped |
accepting_applications | boolean | Whether the landlord takes applications; empty when unstated |
special_offer | string | Promotion text, e.g. one month free |
has_3d_tour | boolean | Whether a 3D tour exists |
contact_phone | string | Listing contact number |
photos | array | Photo URLs |
photo_count | number | Number of photos |
listed_date, updated_date | date | When the listing appeared and last changed |
scraped_at | date | When this row was collected |
source | string | Always hotpads.com |
Added by detail mode
| Column | Type | Description |
|---|---|---|
description | string | Full listing description |
neighborhood | string | Neighbourhood name |
available_date | string | Soonest move-in date |
amenities, unit_amenities | array | Building and in-unit amenity lists |
laundry, parking, security | string | e.g. In Unit, Yes |
air_conditioning, gym, pool, dishwasher, furnished | boolean | Amenity flags |
pets_allowed | string | e.g. Cats and Dogs Allowed |
cat_allowed, dog_allowed | boolean | Per-species permission |
cat_deposit, dog_deposit, cat_monthly_fee, dog_monthly_fee | number | Pet costs |
pet_restrictions | string | Breed or size restrictions |
lease_terms, office_hours | string | Lease lengths offered, leasing office hours |
fees_and_deposits | array | Fees and deposits |
total_units_in_building | number | Total units in the building |
units | array | Per-unit rows: unit number, floorplan, beds, baths, sqft, rent, availability, price drop |
schools | array | Nearby schools with name, type, rating, grades and distance |
views_count, favorites_count, inquiries_count | number | Popularity on HotPads |
contact_name, contact_company | string | Leasing contact and company |
is_broker_listing | boolean | Whether a broker listed it |
website | string | Property website |
student_housing, senior_housing, military_housing | boolean | Housing programme flags |
Search pages do not carry amenity, school or description data, so those columns are omitted in fast mode rather than returned empty. Turn on detail mode to populate them.
How much does it cost to scrape HotPads?
This Actor is pay per result: $0.003 per listing saved, plus a negligible start fee. There is no platform surcharge on top of the result price.
| Run | Listings | Approximate cost |
|---|---|---|
| Quick sample | 10 | $0.03 |
| One city page | 40 | $0.12 |
| Full search (40 pages) | ~1,600 | $4.80 |
Detail mode returns the same number of rows, so the result cost is identical — it simply takes longer and uses more proxy bandwidth, since it opens a page per listing.
Keeping costs down: set Max Items on exploratory runs, leave detail mode off unless you need descriptions or amenities, and schedule incremental runs (a few pages, sorted by newest) instead of re-scraping whole cities.
Tips and advanced usage
- Filter on HotPads first. Applying price, bed and property-type filters on the site produces a narrower search URL and means fewer paid rows.
- Multiple cities in one run. Add several Start URLs; each is paginated independently.
- Schedule it. Daily or weekly runs with
updated_datemake it easy to spot new listings and price changes. - Deduplicate on
url. It is stable per listing and is the natural key for joining runs over time. - Residential proxies are not optional. HotPads is behind PerimeterX and refuses datacenter IPs immediately.
Migrating from version 2
Version 3 renames the output columns to plain English, decodes HotPads' internal codes, and drops columns that were always empty. If you have a pipeline built on v2 field names:
| v2 | v3 |
|---|---|
display_name | name |
price_min / price_max | rent / rent_max |
price_display | rent_display |
bedrooms_min / bedrooms_max | bedrooms / bedrooms_max |
bathrooms_min, sqft_min | bathrooms, sqft |
street_address | address (plus the new full_address) |
property_type: "large" | property_type: "Apartment building" |
rental_application_status: "accepted" | accepting_applications: true |
is_apartment_building | folded into property_type |
listed_by_phone / listed_by_name / listed_by_company | contact_phone / contact_name / contact_company |
posted_date | listed_date |
listing_source | source |
hvac | air_conditioning |
unit_count | units_available |
pet_policy | pets_allowed |
FAQ
Is scraping HotPads legal? This Actor collects only publicly available listing information — no login, no personal accounts. Public data collection is broadly lawful, but how you use the data is your responsibility, particularly for contact details, which are subject to privacy and marketing rules such as GDPR and CCPA. Review HotPads' Terms of Use and take your own legal advice for commercial use.
Why do I need residential proxies? HotPads sits behind PerimeterX, which blocks datacenter IP ranges on sight. The default Apify Residential (US) configuration works out of the box.
Why did a few listings fail? Anti-bot systems occasionally challenge individual requests. The Actor retries with a fresh session, and the run log states exactly why anything was skipped. A small number of failures in a large run is normal.
Can I get more than 1,600 listings from one city? Not from a single search — that is HotPads' own limit. Split the city into neighbourhood, ZIP or price-band searches and pass them together.
Some detail columns are empty on a few listings. HotPads occasionally serves a detail page that omits part of its data. Those rows still carry everything from the search result — rent, address, coordinates, photos and contact — so the row remains usable.
Support
Found a bug or need a field that is missing? Open an issue on the Issues tab and include the run ID and input you used. Requests for related scrapers or custom real estate data pipelines are welcome.
Disclaimer
This Actor is not affiliated with, endorsed by, or connected to HotPads or Zillow Group. It collects publicly accessible information only. You are responsible for ensuring your use complies with applicable laws and with HotPads' Terms of Use.