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
31
Total users
8
Monthly active users
2 days 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, neighborhood or ZIP code. Type a location like "Austin, TX" (or paste a HotPads URL), press start, and get a clean spreadsheet of every listing in the area — even in cities with more listings than HotPads shows for one search.
What does HotPads Scraper do?
HotPads Scraper turns HotPads.com rental searches into structured data. Give it locations — cities, boroughs, neighborhoods or ZIP codes — with optional filters (rent, beds, baths, pets, property type, posted date), or paste HotPads search URLs. It walks every result page and returns one row per listing with plain-English columns you can open directly in Excel, Google Sheets, or load through the API.
- Complete coverage of big cities. HotPads shows at most 99 pages (3,960 listings) for one search. When a search is bigger — New York has ~9,800 rentals — the scraper automatically splits it into rent ranges and collects them all, removing duplicates.
- All rental types by default. HotPads' "Apartments" category means apartment buildings only; in New York it returns ~100 results versus ~9,800 for all rentals. The default search covers houses, condos, townhomes, duplexes and rooms too.
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 neighborhoods 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
- Open this Actor and click Try for free.
- Enter one or more locations — e.g.
Austin, TX,Brooklyn, NYor10001, one per line. - Add filters if you want — rent range, bedrooms, bathrooms, pets, property type, posted within, sort order.
- Set Max Items to cap how many listings you save (and pay for). Leave it at 0 to collect every listing.
- Choose a mode — leave Scrape Detail Pages off for a fast, cheap run, or switch it on for descriptions, amenities and per-unit pricing.
- Click Start, then download from the Output tab as JSON, CSV, Excel or HTML — or pull it through the API.
Prefer HotPads' own filters? Apply them on hotpads.com and paste the URL into Start URLs instead — it is used exactly as given. Listing URLs (ending in /pad) are scraped directly.
How the scraper gets every listing in a big city
HotPads shows at most 99 result pages (3,960 listings) for any single search. When a search holds more than that, the scraper splits it into rent ranges ($1,000–$1,499, $1,500–$1,999 and so on, narrowing further where needed) and runs each range as its own search, so every listing is reachable. Buildings that appear in two neighbouring ranges are saved once. This happens automatically when Max Search Pages is left at 99; turn off Split large searches to disable it.
Input
| Field | Type | Default | Description |
|---|---|---|---|
| Locations | text list | — | Cities, boroughs, neighborhoods or ZIP codes, e.g. Austin, TX, Brooklyn, NY, 10001. Unrecognised spellings are looked up through HotPads' own area search |
| Start URLs | URL list | — | HotPads search or listing URLs, used as given. Use this, Locations, or both |
| Max Items | integer | 0 (unlimited) | Stop after this many listings across the whole run |
| 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 |
| Property type | select | All rentals | All rentals, apartment buildings, houses, condos, townhomes or rooms (applies to Locations) |
| Min / Max rent | integer | — | Monthly rent range (applies to Locations) |
| Min / Max bedrooms, Min bathrooms | integer | — | 0 bedrooms includes studios (applies to Locations) |
| Pets allowed | select | Any | Cats, dogs, or both (applies to Locations) |
| Posted within | select | Any time | Last hour, 24 hours, 7 days or 30 days — ideal for scheduled runs (applies to Locations) |
| Sort by | select | Relevance | Newest, lowest rent or highest rent first — matters when Max Items stops the run early |
| Max Search Pages | integer | 99 | Result pages to follow per search (99 is HotPads' own cap) |
| Split large searches | boolean | true | Split searches bigger than 3,960 listings into rent ranges to collect them all |
| 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 optimizing |
| Proxy Configuration | proxy | Apify Residential (US) | Residential proxies are required. HotPads blocks datacenter IPs outright |
Example input:
{"locations": ["Austin, TX", "Brooklyn, NY"],"propertyType": "all","maxPrice": 3000,"minBeds": 1,"sortBy": "newest","maxItems": 500,"includeDetails": false}
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 | Neighborhood 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 program 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. The Apify platform usage of your run — compute and residential proxy traffic — is billed to your Apify account at your plan's rates. Proxy traffic is the main part: about 1–2 MB per results page of 40 listings in fast mode, and one page per listing in detail mode.
| Run | Listings | Result cost |
|---|---|---|
| Quick sample | 20 | $0.06 |
| One results page | 40 | $0.12 |
| Austin, TX — all rentals | ~4,400 | ~$13 |
| New York, NY — all rentals | ~9,800 | ~$29 |
Detail mode returns the same number of rows, so the result cost is identical — it takes longer and uses more proxy bandwidth, since it opens a page per listing. If a listing page cannot be loaded after every retry, its search-result row is saved instead, so the listing still reaches your dataset.
Keeping costs down: set Max Items on exploratory runs, add rent or bedroom filters, leave detail mode off unless you need descriptions or amenities, and schedule incremental runs with Posted within: Last 24 hours instead of re-scraping whole cities. The run also stops by itself when it reaches the maximum cost you set for it.
Tips and advanced usage
- Filter before you scrape. Rent, bedroom and property-type filters mean fewer paid rows.
- Multiple cities in one run. Add several locations or Start URLs; each is searched independently and duplicates across them are removed.
- Track new listings. Schedule a daily run with Posted within: Last 24 hours and Sort by: Newest first to collect only what is new.
- Spot price changes. Weekly runs joined on
urlwithupdated_dateandprice_dropsshow how asking rents move. - 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 do I see "Blocked … retrying" in the log? HotPads' anti-bot system refuses a share of fresh proxy IPs. The Actor retries each page on a new IP (up to eight times), so these warnings are normal and rarely cost a listing. The run log states exactly why anything was skipped.
A location was not found — what now? The Actor first tries HotPads' URL for the name you typed, then HotPads' own area search, and tells you in the log what it matched ("Brooklyn, NY" is "Brooklyn, New York, NY"). If nothing matches, it suggests close names. You can always open the area on hotpads.com and paste its URL into Start URLs.
Can I get every listing in a big city? Yes. Searches with more than 3,960 listings are split into rent ranges automatically, so a full New York run returns ~9,800 listings rather than stopping at HotPads' page limit.
My search returned no listings. The run finishes successfully with a message saying HotPads had no matches — try a wider area or fewer filters.
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.