Homes.com Scraper: For Sale, Rent, Sold & Open Houses
Pricing
from $1.80 / 1,000 property results
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
Maintained by CommunityActor 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
| Field | Notes |
|---|---|
listingKey, url | Stable per-property id and canonical link |
price, priceCurrency, priceLabel | priceLabel names what the figure is, for example Last List Price on a sold record |
statusLabel | The badge on the card, for example $6K PRICE DROP or Sold Mar 11, 2026 |
bedrooms, bathrooms, livingAreaSqft, yearBuilt | Half baths included |
streetAddress, city, state, postalCode, country | Split, not one blob |
propertyType | For example SingleFamilyResidence |
listingChannel, isSold | Which channel the row came from |
soldDate, daysOnMarket, pricePerSqft | Populated on the recently-sold channel |
agentName, agentTitle, agentPhone, agentEmail, agentUrl | Listing agent, as published on the listing |
brokerageName | Listing brokerage |
primaryImageUrl, description | Lead photo and summary |
latitude, longitude | Coordinates (populated with detail enrichment) |
With detail enrichment on, additionally
| Field | Notes |
|---|---|
priceHistory | One entry per recorded event: date, event, price, listToSalePercent, pricePerSqft |
priceHistorySource | The originating MLS, named |
taxHistory | Per year: taxPaid, totalAssessment, landAssessment, improvementAssessment |
taxHistorySource | Usually public records |
amenityGroups | The full home-details block, grouped as {group, values} |
hoaFees, parking, lotDetails, utilities | Pulled out of the groups for direct use |
schools, highlights | Assigned schools and the listing's highlight tags |
fullDescription | The 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | search | search picks a location and a channel; url scrapes exactly the links you paste. |
location | string | Austin, TX | Search mode. A US city and state (Austin, TX) or a 5-digit ZIP (78701). |
zipCode | string | empty | Search mode. Optionally narrow the search to one 5-digit ZIP inside the location. |
minBedrooms | integer | empty | Search mode. Homes.com publishes fixed per-count bedroom pages, so only 1 to 5 can be requested and a value matches that count. |
maxPrice | select | empty | Search mode. Fixed maximum-price page: 800000, 900000, 1000000, 1500000 or 2000000. Any other value is refused, not ignored. |
sort | select | relevance | Search mode. newest puts the most recently listed properties first, which pairs well with Max items. |
urls | list | empty | URL mode. Homes.com search links (walked page by page) and/or property links (one detailed row each). |
listingType | select | for_sale | The listing channel: for sale / for rent (including per-property-type channels), recently sold, open houses, foreclosures. Labels the rows a pasted link returns too. |
fetchDetails | checkbox | false | Read 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. |
maxItems | integer | 20 | The single cap on the run. 0 returns everything the search has, bounded by the natural end of results. |
maxPages | integer | 0 | Optional extra ceiling on result pages walked per search. 0 means no page limit. |
resumeFromRunId | string | empty | Continue one interrupted crawl: paste a previous run ID or dataset ID, and listings it already returned are skipped. |
incrementalMode | checkbox | false | For scheduled monitoring: the first run returns everything as NEW, later runs only what changed. |
stateKey | string | empty | Optional name for an incremental campaign. Different keys keep separate baselines; the same key shares one. |
emitUnchanged | checkbox | false | Also return listings that have not changed, marked UNCHANGED. Returns, and bills, extra rows. |
emitExpired | checkbox | false | Also return listings no longer found after a complete scan, marked EXPIRED. Returns, and bills, extra synthetic rows. |
proxy | proxy | enabled | Homes.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. |
mcpConnectors | list | empty | Pipe a condensed summary per item into Notion, Linear, Airtable or the Apify MCP server. Authorize once under Apify > Settings > Integrations. |
notionParentPageUrl | string | empty | Notion connector only: the parent page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap 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.
priceon a recently-sold record is labelled bypriceLabel. 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
*Sourcefield.