# Changelog of Realtor Scraper — Listings, Property Data, Emails & Leads (`pro100chok/realtor-com-scraper`) Actor

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

## Changelog

### 1.1 — reliability update (2026-09-11)

- **Fixed: runs on small memory settings could be killed before returning anything.** In Agents mode the actor pulled the whole agent directory for the six busiest ZIPs (up to 18,000 profiles) and held every page in memory *before* pushing its first record. On a 256 MB run that exhausted the container and the run died with an out-of-memory error and zero results. Profiles are now fetched only for the agents actually being returned, each page is released as soon as it's read, and the run's peak memory dropped from **251 MB to 70-94 MB**.
- **First results arrive ~7x sooner in Agents mode.** Profile lookup used to be a phase that had to finish for *every* agent before anything was pushed; it now runs per agent inside the streaming pipeline alongside the review lookup. First record: **49 s -> 6.5 s**, full run **83 s -> 46 s** (100 agents, Austin TX).
- **Search is 5-7x faster, and results stream continuously.** Per-listing enrichment (neighborhood medians, building permits) and detail fetches now run through a worker pool instead of one listing at a time: **167 s -> 23 s** for 100 listings, **66 s -> 14 s** for 20 listings with full details. Market medians are fetched once per ZIP even when many listings share it.
- **Every record is pushed the moment it is ready.** Each worker pushes its own result as soon as that record's fetch and enrichment finish, rather than waiting for a batch to complete — measured arrival gap across a 100-listing run: median 0.11 s, longest 0.88 s, no pause over 1 s. A run you stop early keeps everything produced up to that point.
- **Note:** because a record is no longer held back by slower records around it, dataset rows arrive in completion order rather than strict listing order. Sort on any field (e.g. `listPrice`, `propertyId`) if you need a fixed order.
- **Agent profile coverage improved to ~99%** (from ~87%): the per-agent name lookup resolves agents the ZIP directory doesn't list, and it now runs for every returned agent.
- **Minimum memory is now 512 MB** (`minMemoryMbytes`), so a run can no longer be started with too little memory to finish. The actor also scales its own concurrency to the memory it was given, and warns instead of failing if it is started below the floor.
- Agents mode now requests only the listing fields it uses when scanning for agents, cutting that payload by ~70%.
- `activeListings` is capped at 100 entries per agent (`activeListingsCount` still reports the true total), so a single high-volume agent can't produce an oversized record.

### 1.1 (2026-08-24)

- **Market medians at three levels.** Every property-details record now carries the median list price, median sold price, median days on market and median price per sqft for its **ZIP, city and county**, plus `neighborhoodStats` with the same medians per named neighborhood. No extra requests — they ride along in the detail response.
- **AVM history and forecast.** `estimatesHistorical` and `estimatesForecast` expose the dated estimate series and the 12-month forecast per provider (Quantarium, Cotality, Collateral Analytics), not just the current value.
- **Full mortgage breakdown.** The monthly payment is now split into `mortgagePrincipalAndInterest`, `mortgagePropertyTax`, `mortgageHomeInsurance`, `mortgageHoaFees` and `mortgageMortgageInsurance`, alongside `mortgagePropertyTaxRate`, `mortgageInsuranceRate`, `mortgageCountyFhaLoanLimit`, `mortgageRatesUrl` and `mortgageAverageRates` (today's average rate per loan type).
- **Five environmental risk factors instead of two.** Flood, wildfire, **heat**, **severe wind** and **air quality** each come with a 1-10 score, a severity label and a trend sentence, plus the First Street report link for flood and wildfire.
- **Zoned schools.** `assignedSchools` lists the schools the home is actually zoned for (MLS-assigned attendance), separately from the radius search in `schools`. Both now include the GreatSchools id, parent rating and review count.
- **Agents: Realtor.com's own ratings and sales production.** `realtorRating`, `realtorReviewCount` and `realtorRecommendationsCount` come straight from Realtor.com (the RealSatisfied review text stays in `agentRating` / `reviews`). New: `agentProfileUrl`, `agentFullName`, `isPaidAgent`, `forSaleListingsCount`, `forSalePriceMin/Max`, `lastListingDate`, `soldLastYearCount`, `agentLastSoldDate`, `annualPriceMin/Max` and `recentlySoldListings`.
- **Listing provenance and price moves.** `mlsSourceName`, `daysOnMls`, `mlsTaxAmount`, `mlsAgents`, `listingKey`, `createDate`, `lastPriceChangeAmount` and `lastPriceChangeDate`.
- **Media and contacts.** `photoTags` (Realtor.com's own room/feature labels for every photo), an accurate `photoCount`, virtual tours merged from both tour blocks, plus `agentWebsite`, `agentPhoto`, `agentProfileUrl` and the listing office's postal city/state/ZIP.
- **More specs and flags.** `bathsConsolidated`, `bedsMin/Max`, `bathsMin/Max`, `sqftMin/Max`, `unitCount`, `moveInDate`, `isGaragePresent`, `isUsdaEligible`, `isSubdivision`, `isSeniorCommunity`, `isPlan`, `isDealAvailable`, the tax assessment split (`latestTaxAssessmentBuilding` / `Land` / `latestTaxMarketTotal`), `priceHistory` source MLS and listing photos, and `shares*` / `clicks*` engagement counters.
- **Agent profiles now resolve for nearly every agent.** The Realtor.com agent directory is keyed by the agent's own marketing ZIP, so roughly half the agents found on listings in a ZIP were missing from that ZIP's directory and came back without a profile. Those agents are now looked up by name and matched back on their agent id.
- **Fixed:** `listingType: "coming_soon"` used an unsupported search criterion and failed the request — it now returns coming-soon listings.
- **Fixed:** `views30d` / `saves30d` / `leads30d` always came back empty because Realtor.com's empty 30-day bucket overwrote the filled 28-day one.
- **Removed:** `apn`, `noiseScore` and `parking` — Realtor.com returns them empty for every listing, so they were documented but never populated. Same for the agent fields `specializations`, `designations` and `brandingOfficeWebsite`.

### 1.0 (2026-07-11)

- Initial release. Three modes in one actor:
  - **Property search** by city, ZIP, "City, State", address, or realtor.com search URL — for sale, for rent, recently sold, pending/contingent, and coming soon, with beds/baths/price/sqft/lot/year filters and property-type selection.
  - **Property details** by listing URL or property ID — full record with tax & price history, nearby schools, AVM estimates, environmental risk scores, mortgage estimate, HOA/fees, all photos, and virtual / video tours.
  - **Agents** by location — unique agents with contact details, brokerage, active listings, a profile (bio, years of experience, languages, areas served, specializations), and client ratings & reviews (star rating, review count, and full review text) where available.
- Neighborhood market stats: each property is tagged with its ZIP's median list price, days on market, and price per sqft.
- Building permit history from free city open-data portals (covered major metros) — permit type, work class, status, issue date, valuation, and description.
- Rich output: 90+ fields per property including address, geo-coordinates, price, specs, agent/office/broker contacts, media, and structured amenities.
