Homes.com Scraper: For Sale, Rent, Sold & Open Houses avatar

Homes.com Scraper: For Sale, Rent, Sold & Open Houses

Pricing

from $1.80 / 1,000 property results

Go to Apify Store
Homes.com Scraper: For Sale, Rent, Sold & Open Houses

Homes.com Scraper: For Sale, Rent, Sold & Open Houses

Scrape US property records from Homes.com. Pick a city, state or ZIP and a channel (for sale, for rent, recently sold, open houses, foreclosures), or paste links. One flat row per property with price, beds, baths, size, address, geo, agent and brokerage.

Pricing

from $1.80 / 1,000 property results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Scrape US property records from Homes.com, the #4 most-visited US real-estate portal. Pick a city, state or ZIP and a listing channel, or paste links, and get one flat row per property.

Every result page carries a full set of forty listings, so a typical search returns complete rows without opening a single property page. Turn on detail enrichment when you want the deep, public-records-backed sections that only exist on a property's own page.

What you get

On every row, from the search results alone

FieldNotes
listingKey, urlStable per-property id and canonical link
price, priceCurrency, priceLabelpriceLabel names what the figure is, for example Last List Price on a sold record
statusLabelThe badge on the card, for example $6K PRICE DROP or Sold Mar 11, 2026
bedrooms, bathrooms, livingAreaSqft, yearBuiltHalf baths included
streetAddress, city, state, postalCode, countrySplit, not one blob
propertyTypeFor example SingleFamilyResidence
listingChannel, isSoldWhich channel the row came from
soldDate, daysOnMarket, pricePerSqftPopulated on the recently-sold channel
agentName, agentTitle, agentPhone, agentEmail, agentUrlListing agent, as published on the listing
brokerageNameListing brokerage
primaryImageUrl, descriptionLead photo and summary
latitude, longitudeCoordinates (populated with detail enrichment)

With detail enrichment on, additionally

FieldNotes
priceHistoryOne entry per recorded event: date, event, price, listToSalePercent, pricePerSqft
priceHistorySourceThe originating MLS, named
taxHistoryPer year: taxPaid, totalAssessment, landAssessment, improvementAssessment
taxHistorySourceUsually public records
amenityGroupsThe full home-details block, grouped as {group, values}
hoaFees, parking, lotDetails, utilitiesPulled out of the groups for direct use
schools, highlightsAssigned schools and the listing's highlight tags
fullDescriptionThe complete listing narrative

With incremental mode on, additionally

changeType (NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED), changedFields, firstSeenAt, lastSeenAt.

Two ways to run it

Search by location. Give a location (Austin, TX or 78701) and pick a channel: for sale, for rent, recently sold, open houses, foreclosures, or a specific property type within those. Optionally narrow by ZIP, bedrooms or a maximum price, and sort by newest.

Paste links. Give any mix of Homes.com search links and property links. A search link is walked page by page (a link that already points at page 2 or later starts the walk there); a property link returns one fully detailed row.

About the filters

Homes.com publishes filters as fixed URL pages rather than free-form parameters, and it silently ignores a page it does not recognise: asking for a filter it does not publish returns the unfiltered result set with a normal 200 OK. That is a quiet way to be charged for rows you did not ask for, so this actor only offers the filters Homes.com actually publishes, and refuses anything else with a clear message instead of running an unfiltered search.

In practice that means bedrooms are 1 to 5, and the maximum price is one of $800,000 / $900,000 / $1,000,000 / $1,500,000 / $2,000,000. For anything finer, filter the dataset after the run.

Filters build the search URL, so they apply to search mode only. A link you paste in URL mode is fetched exactly as you gave it.

Input parameters

ParameterTypeDefaultDescription
modeselectsearchsearch picks a location and a channel; url scrapes exactly the links you paste.
locationstringAustin, TXSearch mode. A US city and state (Austin, TX) or a 5-digit ZIP (78701).
zipCodestringemptySearch mode. Optionally narrow the search to one 5-digit ZIP inside the location.
minBedroomsintegeremptySearch mode. Homes.com publishes fixed per-count bedroom pages, so only 1 to 5 can be requested and a value matches that count.
maxPriceselectemptySearch mode. Fixed maximum-price page: 800000, 900000, 1000000, 1500000 or 2000000. Any other value is refused, not ignored.
sortselectrelevanceSearch mode. newest puts the most recently listed properties first, which pairs well with Max items.
urlslistemptyURL mode. Homes.com search links (walked page by page) and/or property links (one detailed row each).
listingTypeselectfor_saleThe listing channel: for sale / for rent (including per-property-type channels), recently sold, open houses, foreclosures. Labels the rows a pasted link returns too.
fetchDetailscheckboxfalseRead each property's own page: price and tax history, home details, HOA, parking, utilities, schools, highlights, full description. Adds a per-listing surcharge, charged only for listings actually returned.
maxItemsinteger20The single cap on the run. 0 returns everything the search has, bounded by the natural end of results.
maxPagesinteger0Optional extra ceiling on result pages walked per search. 0 means no page limit.
resumeFromRunIdstringemptyContinue one interrupted crawl: paste a previous run ID or dataset ID, and listings it already returned are skipped.
incrementalModecheckboxfalseFor scheduled monitoring: the first run returns everything as NEW, later runs only what changed.
stateKeystringemptyOptional name for an incremental campaign. Different keys keep separate baselines; the same key shares one.
emitUnchangedcheckboxfalseAlso return listings that have not changed, marked UNCHANGED. Returns, and bills, extra rows.
emitExpiredcheckboxfalseAlso return listings no longer found after a complete scan, marked EXPIRED. Returns, and bills, extra synthetic rows.
proxyproxyenabledHomes.com serves listing pages to US connections only and refuses low-quality exits, so the run climbs to a residential US connection when a cheaper one is refused.
mcpConnectorslistemptyPipe a condensed summary per item into Notion, Linear, Airtable or the Apify MCP server. Authorize once under Apify > Settings > Integrations.
notionParentPageUrlstringemptyNotion connector only: the parent page under which item pages are created.
maxNotifyListingsinteger50Cap on items written per connector. Does not affect the dataset.

Recurring monitoring

Turn on Incremental changes for scheduled runs and schedule the actor. The first run returns everything as NEW; later runs return only what actually changed, so a daily watch on a market costs a handful of rows instead of the whole market. Unchanged and expired rows are off by default and are billed when you turn them on.

Resume from a previous run is a different tool: paste a run or dataset id to continue one interrupted crawl without re-collecting, or re-paying for, what it already returned.

Limits and cost control

Max items is the single cap and defaults to 20, so an exploratory run stays cheap. Set it to 0 for everything the search has, bounded by the natural end of results. Max pages is an optional extra ceiling per search.

Detail enrichment opens one page per property and adds a per-property surcharge, charged only for properties actually returned. A property whose detail page could not be read is never charged for enrichment, and a run where nothing could be read fails loudly rather than reporting an empty success.

Send results into your apps (MCP connectors)

Optionally pipe results straight into the tools you already use over Model Context Protocol: Notion, Linear, Airtable, or the Apify MCP server. Authorize a connector once under Apify > Settings > Integrations, then pick it in the input. Each connector receives a condensed summary per item; the complete record always stays in the dataset. For Notion, also give the parent page the item pages should be created under.

Output sample

{
"listingKey": "a1b2c3d4e5f6g",
"url": "https://www.homes.com/property/1200-example-st-austin-tx/a1b2c3d4e5f6g/",
"listingChannel": "for_sale",
"isSold": false,
"name": "1200 Example St, Austin, TX 78701",
"price": 545000,
"priceCurrency": "USD",
"statusLabel": "$10K PRICE DROP",
"propertyType": "SingleFamilyResidence",
"bedrooms": 4,
"bathrooms": 2.5,
"livingAreaSqft": 2410,
"yearBuilt": 2006,
"streetAddress": "1200 Example St",
"city": "Austin",
"state": "TX",
"postalCode": "78701",
"country": "US",
"latitude": 30.2672,
"longitude": -97.7431,
"brokerageName": "Example Realty Group",
"agentName": "A. Example",
"agentTitle": "Listing Agent",
"agentPhone": "555-0100 ext. 0",
"agentEmail": "agent@example.com",
"priceHistory": [
{ "date": "08/21/2026", "event": "Price Changed", "price": 545000,
"listToSalePercent": -1.8, "pricePerSqft": 226 }
],
"priceHistorySource": "Example MLS",
"taxHistory": [
{ "year": 2025, "taxPaid": 9120, "totalAssessment": 512000,
"landAssessment": 140000, "improvementAssessment": 372000 }
],
"taxHistorySource": "Public Records",
"hoaFees": ["$45 Monthly HOA Fees"],
"schools": ["Example Elementary School", "Example High School"],
"changeType": "NEW",
"scrapedAt": "2026-09-04T09:41:00Z"
}

The sample above uses placeholder contact details. Real runs return the agent and brokerage details as published on the listing.

Plan requirement

Runs on any Apify plan. Homes.com serves its listing pages to US connections only; leave the Proxy configuration enabled for the most reliable results.

Notes

  • Results cover the United States.
  • price on a recently-sold record is labelled by priceLabel. Read the label before treating the figure as a closing price.
  • Property and tax history come from public records and the originating MLS, each attributed in its own *Source field.