# Changelog of Realtor Scraper — US Real Estate Listings & Property Data (`blackfalcondata/realtor-scraper`) Actor

- **URL**: https://apify.com/blackfalcondata/realtor-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/blackfalcondata/realtor-scraper.md

## Changelog

### 2026-10-12

- Fixed: a run with a small maximum cost per run could stop before delivering any listings,
  because the cost already spent was counted too high. It now delivers as many listings as the
  limit pays for.

- Added: the rest of what a realtor.com listing page shows, from the same listing-details request
  as before (no extra request per listing, no price change):
  market medians for the listing's city, county and ZIP (`cityMedian*`, `countyMedian*`,
  `zipMedian*`: listing price, sold price, price per sqft, days on market), and sold price, price per
  sqft and market badge per neighbourhood; wildfire risk (`wildfireScore`, `wildfireSeverity`,
  `wildfireCountyRisk`, `wildfireReportUrl`) and per-source `noiseCategories`; the full mortgage
  estimate (`mortgageLoanAmount`, `mortgageDownPayment`, `mortgageTotalPayment`, `mortgageRate`,
  `mortgageTermYears`, the monthly split into principal and interest, home insurance, HOA, mortgage
  insurance and property tax, plus `mortgagePaymentBreakdown`, `mortgageInsuranceRate`,
  `mortgageFhaLoanLimit`, `mortgageRatesUrl`); the monthly valuation history and 12-month forecast
  per source (`estimateHistory`, `estimateForecast`); `buildingPermits` (date, status, type of work,
  project); `hasMatterport`, `virtualTours`, `openHouses` (start, end, time zone, in person or
  virtual), `streetViewUrl` and `otherListings` (earlier and current listings of the same property).
  Tours, open houses, street view and other listings also fill with listing details off.

- Added: heat, wind and air-quality risk next to flood and wildfire (`heatScore`, `heatSeverity`,
  `heatReportUrl`, `windScore`, `windSeverity`, `windReportUrl`, `airQualityScore`,
  `airQualitySeverity`, `airQualityReportUrl`), from the same listing-details request.

- Note: the sold-price medians are empty in states that keep sale prices private (Texas, Utah,
  New Mexico, Mississippi and other non-disclosure states); realtor.com does not publish them there.
  `noiseScore` and `noiseCategories` are currently empty for every listing because realtor.com
  publishes no noise data; they fill when it does.

- Changed: an input that names something to search for but cannot be run (swapped or impossible
  coordinates, a start URL from another site, an agent location that is not a place, a location
  realtor.com does not know) now ends the run as FAILED with the reason as its status message
  and in the log.
  Before, it ended SUCCEEDED with 0 results. Every location is checked before the first listing is
  saved, so one unknown location among several fails the run before anything is charged. An empty
  input still ends quietly with 0 results.

- Changed: Center Latitude / Center Longitude are number fields. Runs started from code with numbers (as
  the form's `lat`/`lon` already took) were rejected before the run started; a number in quotes is
  no longer accepted there.

- Fixed: results now come out in the order realtor.com returns them. With listing details on,
  records were written as each detail page arrived, so a "price low to high" sort came out
  shuffled. The listings were the right ones; only their order was off.

- Changed: a rental community's rent, bed, bath and size ranges are now part of change
  detection in incremental mode, so a rent change on a community is reported as UPDATED.
  Communities already tracked are reported as UPDATED once on the next run.

- Added: every filter realtor.com's search offers — max baths, lot size, year built, max HOA fee
  (0 = no HOA), garage spaces, listed / price-reduced / sold within N days, open houses in the next
  N days, include / only / exclude pending, contingent, foreclosure and new-construction listings,
  virtual and 3D tours, cats and dogs allowed (rentals), amenity tags (pool, waterfront, single
  story, ... with "did you mean" on a typo), widen each location by N miles, and 12 sort orders.
  All optional; a saved input returns the same results as before.

- Fixed: a centre point + radius now searches the circle itself, with or without a location —
  before, it needed a location and dropped every listing outside the radius after fetching it.
  `lat`/`lon` and `query` in the form are now read (as centre point and keyword).

- Fixed: filters in a pasted search URL (beds, baths, price, size, lot, property type, HOA, pending,
  open house, pets, ...) are applied. A URL segment that is not understood is named in the log.

- Fixed: an input that cannot run — an unknown tag, a minimum above its maximum, swapped
  coordinates, a radius without a centre — stops the run before any charge and says what to change.

- Added: `communityName` — the building or community name of a listing.

- Fixed: rental listings for apartment communities now come with price and specs. These list several
  floor plans, so `listPrice`, `beds`, `bathsTotal` and `sqft` show the starting ("from") value, and
  the new `listPriceMin`/`listPriceMax`, `bedsMin`/`bedsMax`, `bathsMin`/`bathsMax` and
  `sqftMin`/`sqftMax` fields give the full range (single listings repeat their value in both).

- Fixed: Start URLs given as `{ "url": "..." }` objects (the shape the Console and API send) are now read
  — previously the run ended with "No location was provided". A URL that is not a realtor.com search or
  property page is now named in the run's status message and log.

- Fixed: pasted URLs without `https://` (e.g. `realtor.com/apartments/Austin_TX`) are recognised.

### 2026-10-01

- Fixed: runs with a maximum cost limit no longer end without results when platform usage counts toward the limit.
- Fixed: when the Max items run option limits a run, the log now says "maximum number of items" instead of "maximum cost".

### 2026-09-30

- Fixed: runs with a maximum cost per run now use the full budget. With a limit set, a run
  stopped early — for example a $0.013 limit returned 5 listings where it pays for 8. The run
  now also stops cleanly at the limit instead of fetching results it cannot return; in
  incremental mode, new or changed listings beyond the limit are delivered by your next run.
  Prices are unchanged.

### 0.1.x — 2026-06-20

- Added: Realtor.com (US) listings scraper — for-sale, for-rent, and sold, with deep detail enrichment on by default (price/tax/sale history, schools, flood, valuation & mortgage estimates).
- Added: optional agents mode — find real-estate agents by location with ratings, recent activity, and contact details.
- Added: location-radius search (center coordinate + radius) with verified per-listing distance.
- Added: incremental change tracking — `NEW` / `UPDATED` / `EXPIRED` across runs, scoped per search configuration.
- Added: repost detection, email enrichment, compact output, MCP export, and notification hooks.
- Fixed: detail enrichment and email lookups are billed only for records that actually received them (never for listings without a fetched detail, for expired-listing markers, or when detail enrichment is off).
- Fixed: repost detection now catches re-listed properties whose price changed.
- Fixed: "days on market" for sold listings is measured to the sale date, not the scrape time.
- Fixed: radius searches drop listings without a verifiable coordinate instead of shipping an unknown distance, and keep their own change-tracking state so nothing is wrongly marked expired.
- Improved: transient upstream errors are retried with backoff before a page is abandoned.
- Improved: a degraded or empty mid-scan response no longer counts as full coverage, protecting change-detection accuracy.
- Improved: invalid `maxResults` values fall back to the default instead of running unbounded.
