Homes.com Scraper & API - Homes For Sale & Rentals avatar

Homes.com Scraper & API - Homes For Sale & Rentals

Pricing

from $2.00 / 1,000 per-run start fees

Go to Apify Store
Homes.com Scraper & API - Homes For Sale & Rentals

Homes.com Scraper & API - Homes For Sale & Rentals

Homes.com scraper for any US city or filtered search URL. Get one row per listing: address, asking price or rent, beds, baths, square feet, price per square foot, open-house time and listing type. For investors, agents, proptech and housing analysts.

Pricing

from $2.00 / 1,000 per-run start fees

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

Homes.com Scraper & API: Homes For Sale and Rentals

This Homes.com scraper turns any US city or filtered Homes.com search into a clean table of property listings: the full address, the asking price or monthly rent, the bed and bath counts, the floor area, the price per square foot, and the open-house window when one is advertised. It is built for investors, agents, proptech teams and housing analysts who need Homes.com listings in a spreadsheet or pipeline instead of a browser tab.

It takes Homes.com's own slug, like new-york-ny or austin-tx, and walks the result pages for you. It also takes a full search URL, so if you have already narrowed a search in the browser to three bedrooms under $800,000, paste that URL and every filter in it is respected.

Both sides of the market come back the same way. listing_type says for sale or for rent on every row, taken from the page rather than guessed from the price, so a mixed search stays sortable.

What the Homes.com scraper does

  • Reads Homes.com search results for any city slug or search URL, homes for sale and rentals alike.
  • Returns one row per listing, with the same columns for every location you enter.
  • Works out price_per_sqft for you, and keeps missing values as null instead of zero.
  • Records how many listings the search matched in total, so you know what share of a market you hold.
  • Exports to JSON, CSV, Excel or any integration Apify supports, or runs through the Apify API.

Input

The required search list accepts Homes.com city slugs and complete filtered search URLs.

FieldTypeDefaultMeaning
searchlist of strings["new-york-ny"] in the formCity slugs such as new-york-ny, or full search URLs such as https://www.homes.com/austin-tx/homes-for-rent/
maxItemsinteger100Maximum listings across all locations (1 to 5,000)
maxPagesinteger10Maximum result pages for each location (1 to 50)

Example input:

{
"search": ["new-york-ny", "https://www.homes.com/austin-tx/homes-for-rent/"],
"maxItems": 100,
"maxPages": 10
}

Locations are collected in the order you enter them. If a city cannot be read, other cities are still processed, and any listings already collected remain available. Free users receive up to ten listings per run.

Run sizes and paging

Result pages hold forty listings each. Maximum listings caps the run across every location and trims the last page. Fetching 50 or 80 listings reads two result pages; listing charges apply only to the rows delivered. Maximum pages per location stops one large city from consuming a whole run, and applies to each location separately rather than to the run as a whole.

A hundred listings takes a few seconds. There is no second request per listing: everything below is on the search page already, so a run is one page load per forty rows and nothing more.

Output

Each listing is one row in the default dataset. Fields per listing:

  • address, url, property_key, listing_key
  • price, beds, baths, sqft
  • price_per_sqft, worked out for you
  • listing_type, open_house
  • search, search_page, position_on_page, position, and result_count

Here is a real row from a run on new-york-ny (October 2026):

{
"property_key": "4b215f8nkz79f",
"listing_key": "lfbykfb6tllzk",
"url": "https://www.homes.com/property/1563-merry-ave-bronx-ny/4b215f8nkz79f/",
"address": "1563 Merry Ave, Bronx, NY 10461",
"listing_type": "for sale",
"price": 785000,
"beds": 3,
"baths": 2,
"sqft": 1595,
"price_per_sqft": 492.16,
"open_house": null,
"position_on_page": 1,
"search": "new-york-ny",
"search_page": 1,
"result_count": 23424,
"position": 1,
"source": "homes-com-scraper",
"platform": "homes",
"fetched_at": "2026-10-05T22:29:53.098Z",
"offer_type": "for_sale",
"listing_id": "4b215f8nkz79f",
"query": "new-york-ny",
"currency": "USD",
"country_code": "US",
"bedrooms": 3,
"bathrooms": 2,
"living_area": 1595,
"living_area_unit": "sqft"
}

And a rental from https://www.homes.com/austin-tx/homes-for-rent/ in the same week (selected fields):

{
"property_key": "2yhhshc4wj0d6",
"listing_key": "5kq1qr39t4h4y",
"url": "https://www.homes.com/property/the-watson-austin-tx/2yhhshc4wj0d6/?l=5kq1qr39t4h4y",
"address": "11901 Burnet Rd, Austin, TX 78758",
"listing_type": "for rent",
"price": 1615,
"beds": 3,
"baths": null,
"sqft": null,
"price_per_sqft": null,
"open_house": null,
"result_count": 25870,
"offer_type": "for_rent"
}

price_per_sqft is the first thing anyone computes and the easiest to get subtly wrong across a mixed set, so it is done once, here. It is null rather than zero whenever either input is missing.

result_count is the total the search itself reports, which is much larger than what any run returns. New York reports over twenty thousand listings. Having both numbers on the row tells you what share of a market you are holding.

Output compatibility

All sixteen original dataset fields remain present. Missing values are JSON null, rather than zero or an empty string. listing_type keeps the original values for sale and for rent. The additional offer_type uses for_sale and for_rent for integrations that need a standard category. fetched_at records the UTC collection time. source, platform, listing_id, query, currency, country_code, bedrooms, bathrooms, living_area and living_area_unit make the listings easier to combine with other property datasets. These fields are added alongside the original names.

For rental communities, price is the starting monthly rent, and beds is the numeric bedroom count shown in the card, which may be the upper end of a range. A studio without a numeric bedroom label has a null bedroom count. The full source URL lets you inspect the original offer.

Summary and errors

The summary key-value record contains the listing totals, how many have a price or floor area, and how many are for sale. A location that fails becomes an entry in the errors record rather than a missing set of rows:

CodeMeaning
bad_inputNo location supplied
no_resultsThe location was read and genuinely has no listings
fetch_failedA result page could not be read after several attempts

no_results and fetch_failed are deliberately different. An empty city and a page that would not load look identical if you only count rows, and only one of them is worth rerunning. When a location has no listings, the run succeeds with an empty dataset and a no_results entry. If a run returns fetch_failed for every location where it worked last week, re-run once; if it persists, let us know through the Issues tab.

Use cases for Homes.com data

  • Investors screen a city by price per square foot and spot listings priced below the local median.
  • Agents and brokers track new inventory and open houses in their farm area every morning.
  • Rental analysts compare asking rents across Homes.com rentals in several cities with one run.
  • Proptech and data teams feed a real estate data API or dashboard without maintaining a scraper.
  • Researchers follow housing supply over time using result_count per city.

How it compares

This Homes.com scraperCopying from the siteZillow, Redfin or MLS data
Homes for sale and rentalsBoth, labelled per rowOne page at a timeDepends on the source
Price per square footComputed, null when unknownManualVaries
Filtered search URLsRespected as enteredYesDifferent filters per site
SetupNoneNoneFeed agreements or another scraper

Homes.com does not publish an open API for its search listings, so a scraper is the practical way to get it in bulk. For US rentals specifically, use Apartments.com Scraper. For homes for sale with MLS numbers and sold history, use Redfin Scraper or Zillow Scraper. For the UK market, use Rightmove Scraper.

Pricing

The existing price is unchanged: $0.002 per valid run plus $0.0003 per listing delivered. A run that delivers 100 listings costs $0.032 in actor events. A valid search with no results has only the start fee and no listing fee. Invalid input has no start fee. Platform usage is billed separately by Apify according to your plan. Listings beyond the free-user limit are neither delivered nor charged as listing events.

Frequently asked questions

Can I scrape Homes.com rental listings as well as homes for sale?

Yes. Paste a Homes.com search URL with the rental filter already applied. Each row keeps its original listing type, so mixed location lists can still be filtered after collection.

Is there a Homes.com API I can call instead?

You can call this actor as an API: start a run through the Apify API with the same input and read the dataset as JSON or CSV. That gives you a Homes.com listings API without writing a scraper.

How is the price per square foot calculated?

It is the asking price divided by the interior floor area, rounded to two decimals. When either the price or the floor area is missing, the value is null rather than zero.

Are the default limits different from the original actor?

No. The default maximum is 100 listings across all locations and ten pages for each location. A smaller item limit trims the last result page. A page limit applies separately to each location, rather than reducing the entire run to that number of pages.

Does an empty search fail the run or charge for missing listings?

A location with no properties produces a successful empty run and an entry in the errors record. There is no listing charge for absent data. The existing valid-run start fee still applies. If an individual location cannot be read, inspect fetch_failed before retrying.

Will existing integrations need new field names?

No. All original field names remain present, with their original JSON types. The new standard fields are additional columns, and the original summary record remains available. You can continue using property_key, search, beds, baths and sqft in existing code.