{
  "data": {
    "id": "xJ0EyZLaPnLnZtUeM",
    "actId": "76arWXzbeyTRhZQcR",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-09T12:48:36.300Z",
    "finishedAt": "2026-11-09T12:48:46.035Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 9649,
      "runTimeSecs": 9.649,
      "computeUnits": 0.010721111111111112,
      "imageSizeBytes": 351674880
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Realtor.com Property & Agent Scraper\",\n  \"description\": \"Search Realtor.com listings by city, ZIP, address, map radius or GeoJSON polygon, or pull full property/agent records. Filter by status, beds, baths, price, size, year, type, keywords, open houses and listing dates.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Listing status\",\n      \"type\": \"string\",\n      \"description\": \"Property status to search. `BUY` is active for-sale, `RENT` is for-rent, `SOLD` is recently sold, `PENDING`/`CONTINGENT` are under contract, `COMING_SOON` is not-yet-active inventory, `OFF_MARKET` is delisted and `READY_TO_BUILD` is new construction. Used in property mode; ignored in agent mode.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"BUY\",\n        \"RENT\",\n        \"SOLD\",\n        \"PENDING\",\n        \"CONTINGENT\",\n        \"COMING_SOON\",\n        \"OFF_MARKET\",\n        \"READY_TO_BUILD\"\n      ],\n      \"enumTitles\": [\n        \"For sale\",\n        \"For rent\",\n        \"Recently sold\",\n        \"Pending\",\n        \"Contingent\",\n        \"Coming soon\",\n        \"Off market\",\n        \"Ready to build\"\n      ],\n      \"default\": \"BUY\",\n      \"prefill\": \"BUY\"\n    },\n    \"recordType\": {\n      \"title\": \"What to collect\",\n      \"type\": \"string\",\n      \"description\": \"Collect property listings or real-estate agent directory records.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"PROPERTIES\",\n        \"AGENTS\"\n      ],\n      \"enumTitles\": [\n        \"Properties\",\n        \"Agents\"\n      ],\n      \"default\": \"PROPERTIES\",\n      \"prefill\": \"PROPERTIES\"\n    },\n    \"search\": {\n      \"title\": \"Location or address\",\n      \"type\": \"string\",\n      \"description\": \"City and state (`Houston, TX`), ZIP code (`77002`), neighborhood, county or a street address (`16142 Maladi Dr`). In agent mode this may be a city/state or ZIP.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"Houston, TX\"\n    },\n    \"agentName\": {\n      \"title\": \"Agent name (agent mode)\",\n      \"type\": \"string\",\n      \"description\": \"Agent or team name to search in agent mode, e.g. `Pedro Casanova`. Leave empty to search agents by the location above.\",\n      \"editor\": \"textfield\"\n    },\n    \"startUrls\": {\n      \"title\": \"Start URLs\",\n      \"type\": \"array\",\n      \"description\": \"Realtor.com property detail URLs or search-result URLs. Detail URLs are resolved directly; search URLs reuse their location, mode and page.\",\n      \"editor\": \"requestListSources\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"title\": \"Listing URL\",\n            \"description\": \"Realtor.com property or search URL.\"\n          }\n        }\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum property or agent records to emit (1-10000). Property searches are limited by the source to 10,000 addressable rows per search.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 100,\n      \"prefill\": 3\n    },\n    \"endPage\": {\n      \"title\": \"Maximum search pages\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum GraphQL result pages per search. Each page holds up to 200 properties; set 50 to reach the 10,000-row search cap. Agents use their own page size.\",\n      \"minimum\": 1,\n      \"maximum\": 50,\n      \"default\": 50,\n      \"prefill\": 1\n    },\n    \"scrapeDetails\": {\n      \"title\": \"Scrape full details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each property's full detail record: description, HOA, mortgage estimate, assigned schools, open houses, tours, photo tags, tax and price history, risk scores and extra agent contacts. In agent mode it also fetches each agent's profile phone numbers.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"bedsMin\": {\n      \"title\": \"Beds (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum bedrooms. Applied server-side, then verified on each record.\",\n      \"minimum\": 0,\n      \"maximum\": 30,\n      \"sectionCaption\": \"Search filters\",\n      \"sectionDescription\": \"Optional property filters. They apply in property mode when searching by location, address, ZIP or map radius.\"\n    },\n    \"bedsMax\": {\n      \"title\": \"Beds (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum bedrooms.\",\n      \"minimum\": 0,\n      \"maximum\": 30\n    },\n    \"bathsMin\": {\n      \"title\": \"Baths (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum bathrooms.\",\n      \"minimum\": 0,\n      \"maximum\": 30\n    },\n    \"bathsMax\": {\n      \"title\": \"Baths (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum bathrooms.\",\n      \"minimum\": 0,\n      \"maximum\": 30\n    },\n    \"priceMin\": {\n      \"title\": \"Price (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum list price in US dollars.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"priceMax\": {\n      \"title\": \"Price (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum list price in US dollars.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"sqftMin\": {\n      \"title\": \"Living area sqft (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum living area in square feet.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"sqftMax\": {\n      \"title\": \"Living area sqft (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum living area in square feet.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"lotSqftMin\": {\n      \"title\": \"Lot sqft (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum lot size in square feet.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"lotSqftMax\": {\n      \"title\": \"Lot sqft (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum lot size in square feet.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"yearBuiltMin\": {\n      \"title\": \"Year built (min)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum construction year.\",\n      \"minimum\": 1700,\n      \"maximum\": 2100\n    },\n    \"yearBuiltMax\": {\n      \"title\": \"Year built (max)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum construction year.\",\n      \"minimum\": 1700,\n      \"maximum\": 2100\n    },\n    \"propertyTypes\": {\n      \"title\": \"Property types\",\n      \"type\": \"array\",\n      \"description\": \"Limit results to one or more Realtor.com property types.\",\n      \"editor\": \"select\",\n      \"uniqueItems\": true,\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"apartment\",\n          \"commercial\",\n          \"cond_op\",\n          \"condo\",\n          \"condo_townhome\",\n          \"condo_townhome_rowhome_coop\",\n          \"condop\",\n          \"condos\",\n          \"coop\",\n          \"duplex_triplex\",\n          \"farm\",\n          \"investment\",\n          \"land\",\n          \"mobile\",\n          \"multi_family\",\n          \"other\",\n          \"rental\",\n          \"single_family\",\n          \"townhomes\",\n          \"townhouse\"\n        ],\n        \"enumTitles\": [\n          \"Apartment\",\n          \"Commercial\",\n          \"Cond-op\",\n          \"Condo\",\n          \"Condo/townhome\",\n          \"Condo/townhome/rowhome/co-op\",\n          \"Condop\",\n          \"Condos\",\n          \"Co-op\",\n          \"Duplex/triplex\",\n          \"Farm\",\n          \"Investment\",\n          \"Land\",\n          \"Mobile\",\n          \"Multi-family\",\n          \"Other\",\n          \"Rental\",\n          \"Single family\",\n          \"Townhomes\",\n          \"Townhouse\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"keywords\": {\n      \"title\": \"Keywords\",\n      \"type\": \"array\",\n      \"description\": \"Free-text keywords matched by Realtor.com, e.g. `pool`, `waterfront`, `garage`, `new construction`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"hasPhotos\": {\n      \"title\": \"Only listings with photos\",\n      \"type\": \"boolean\",\n      \"description\": \"Exclude listings that have no photos.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"comingSoonOnly\": {\n      \"title\": \"Only coming-soon listings\",\n      \"type\": \"boolean\",\n      \"description\": \"Apply the source's coming-soon filter to for-sale modes. `COMING_SOON` mode enables it automatically.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"sortBy\": {\n      \"title\": \"Sort results\",\n      \"type\": \"string\",\n      \"description\": \"Result ordering.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevant\",\n        \"newest\",\n        \"price_low\",\n        \"price_high\",\n        \"sqft_high\",\n        \"beds_high\"\n      ],\n      \"enumTitles\": [\n        \"Most relevant\",\n        \"Newest listings\",\n        \"Price: low to high\",\n        \"Price: high to low\",\n        \"Largest living area\",\n        \"Most bedrooms\"\n      ],\n      \"default\": \"relevant\",\n      \"prefill\": \"relevant\"\n    },\n    \"listedSince\": {\n      \"title\": \"Listed since\",\n      \"type\": \"string\",\n      \"description\": \"Only listings added on or after this date (YYYY-MM-DD). Useful for delta monitoring.\",\n      \"editor\": \"textfield\"\n    },\n    \"soldSince\": {\n      \"title\": \"Sold since\",\n      \"type\": \"string\",\n      \"description\": \"In SOLD mode, only sales on or after this date (YYYY-MM-DD).\",\n      \"editor\": \"textfield\"\n    },\n    \"openHouseFrom\": {\n      \"title\": \"Open house from\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with an open house on or after this date (YYYY-MM-DD).\",\n      \"editor\": \"textfield\",\n      \"sectionCaption\": \"Open houses & map\",\n      \"sectionDescription\": \"Optional open-house date window and map-radius search.\"\n    },\n    \"openHouseTo\": {\n      \"title\": \"Open house to\",\n      \"type\": \"string\",\n      \"description\": \"Only listings with an open house on or before this date (YYYY-MM-DD).\",\n      \"editor\": \"textfield\"\n    },\n    \"latitude\": {\n      \"title\": \"Latitude\",\n      \"type\": \"number\",\n      \"description\": \"Latitude for a radius search. Combine with longitude and radius miles.\",\n      \"minimum\": -90,\n      \"maximum\": 90\n    },\n    \"longitude\": {\n      \"title\": \"Longitude\",\n      \"type\": \"number\",\n      \"description\": \"Longitude for a radius search. Combine with latitude and radius miles.\",\n      \"minimum\": -180,\n      \"maximum\": 180\n    },\n    \"radiusMiles\": {\n      \"title\": \"Radius (miles)\",\n      \"type\": \"integer\",\n      \"description\": \"Search radius in miles around the latitude/longitude point.\",\n      \"minimum\": 1,\n      \"maximum\": 100\n    },\n    \"boundary\": {\n      \"title\": \"Polygon boundary (GeoJSON)\",\n      \"type\": \"object\",\n      \"description\": \"Search inside a GeoJSON Polygon instead of a named location. Coordinates are [longitude, latitude]; rings may be open and are closed automatically. Example: {\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-95.6,29.6],[-95.0,29.6],[-95.0,30.1],[-95.6,30.1],[-95.6,29.6]]]}.\",\n      \"editor\": \"json\"\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Realtor.com Property & Agent Scraper\r\n\r\nTurn Realtor.com into structured data. Search active, rental, sold, pending, contingent, coming-soon, off-market or new-construction listings by city, ZIP, street address, map radius or GeoJSON polygon; apply real filters; and pull the full property record â€” MLS number, HOA, mortgage estimate, assigned schools, open houses, tours, photo tags, tax and price history, risk scores and agent contacts. Switch one field to collect real-estate agent directory records, including profile phone numbers.\r\n\r\nNo account, cookies, API key or proxy setup is required.\r\n\r\n## What this actor does\r\n\r\n- **Eight listing statuses** â€” `BUY` (for sale), `RENT`, `SOLD`, `PENDING`, `CONTINGENT`, `COMING_SOON`, `OFF_MARKET` and `READY_TO_BUILD`.\r\n- **Five ways to target** â€” free-form location (city, ZIP, neighborhood, county), street address, a map point with a mile radius, a GeoJSON polygon, or Realtor.com URLs.\r\n- **Real server-side filters** â€” beds, baths, price, living area, lot size, year built, property type, keywords, photos-only, coming-soon, open-house dates and listing/sold dates.\r\n- **Full detail records** â€” one detail lookup per property adds the marketing description, HOA fee, mortgage estimate, assigned and nearby schools, open houses, virtual tours, photo tags, categorized features, tax/price history, parcel ids and expanded agent contacts.\r\n- **Agent directory** â€” search agents by name, city/state or ZIP; returns name, office, profile phones, license, bio, languages, designations, avatar and public profile URL.\r\n- **Sorted and paginated deeply** â€” newest, price, size or bedroom ordering, up to 10,000 records per run (the source's addressable search window).\r\n- **Honest output** â€” a field the source does not publish for a listing is omitted, never guessed or filled with a sentinel. Zero placeholder prices from public records are removed rather than emitted.\r\n\r\n## Listing statuses\r\n\r\n| Mode | What it returns |\r\n|---|---|\r\n| `BUY` | Active for-sale listings |\r\n| `RENT` | Active rental listings |\r\n| `SOLD` | Recently sold properties with sale date and, where published, sale price |\r\n| `PENDING` | For-sale listings with an accepted offer |\r\n| `CONTINGENT` | For-sale listings still subject to a contingency |\r\n| `COMING_SOON` | Not-yet-active listings announced ahead of the market |\r\n| `OFF_MARKET` | Delisted / off-market listings |\r\n| `READY_TO_BUILD` | New-construction and build-ready listings |\r\n\r\n`PENDING`, `CONTINGENT` and `COMING_SOON` come back with `status: for_sale` and the matching `flags.isPending` / `flags.isContingent` / `flags.isComingSoon` set, because that is how the source models them. The same coming-soon filter is available as `comingSoonOnly` on the other for-sale modes.\r\n\r\n## Filters\r\n\r\n| Filter | Applies to |\r\n|---|---|\r\n| `bedsMin` / `bedsMax` | Bedroom range |\r\n| `bathsMin` / `bathsMax` | Bathroom range |\r\n| `priceMin` / `priceMax` | List price range (USD) |\r\n| `sqftMin` / `sqftMax` | Living area range |\r\n| `lotSqftMin` / `lotSqftMax` | Lot size range |\r\n| `yearBuiltMin` / `yearBuiltMax` | Construction year range |\r\n| `propertyTypes` | One or more of Realtor.com's 20 property types |\r\n| `keywords` | Free-text terms such as `pool`, `waterfront`, `garage` |\r\n| `hasPhotos` | Exclude listings without photos |\r\n| `comingSoonOnly` | Only coming-soon listings in the for-sale modes |\r\n| `openHouseFrom` / `openHouseTo` | Listings with an open house in the date window |\r\n| `listedSince` | Listings added on or after a date (delta monitoring) |\r\n| `soldSince` | In `SOLD` mode, sales on or after a date |\r\n| `latitude` + `longitude` + `radiusMiles` | Radius search around a map point |\r\n| `boundary` | GeoJSON Polygon search area (longitude/latitude rings) |\r\n| `sortBy` | Relevance, newest, price low/high, largest living area or most bedrooms |\r\n\r\nFilters are sent to Realtor.com and then verified on every returned record, so a filter cannot silently pass through unfiltered rows.\r\n\r\n## Output per property\r\n\r\nIdentity\r\n- `recordType` â€” always `property`\r\n- `url`, `id`, `listingId`, `permalink`\r\n- `mlsId`, `mlsSource`, `mlsType`, `mlsStatus`\r\n- `parcelId` plus `taxRecord.clId`, `.publicRecordId`, `.lastUpdateDate`, `.apn`, `.taxParcelId`\r\n- `status`\r\n\r\nPricing\r\n- `listPrice`, `listPriceMin`, `listPriceMax` (range-priced new builds have no single price)\r\n- `pricePerSqft` â€” from the source, or computed from list price and living area\r\n- `priceReduced` â€” reduction amount\r\n- `lastSoldPrice`, `soldOn`\r\n- `estimatedValue`, and `estimates[]` with `.estimate`, `.estimateLow`, `.estimateHigh`, `.date`, `.source`, `.sourceType` (multiple valuation providers when available)\r\n- `mortgage.monthlyPayment`, `.downPayment`, `.loanAmount`\r\n- `hoaFee`\r\n\r\nProperty facts\r\n- `beds`, `baths`, `bathsFull`, `bathsHalf`\r\n- `sqft`, `lotSqft`, `yearBuilt`, `yearRenovated`\r\n- `garage`, `garageType`, `stories`, `rooms`, `units`\r\n- `type`, `subType`, `name` (community/building name)\r\n- `listDate`, `pendingDate`, `lastStatusChangeDate`, `lastUpdateDate`\r\n- `daysOnMarket` â€” source value, or derived from the list date (and the sale date for sold records)\r\n\r\nLocation\r\n- `address.street`, `.city`, `.state`, `.postalCode`, `.county`, `.countyFips`, `.neighborhoods`\r\n- `coordinates.lat`, `.lng`\r\n\r\nMedia\r\n- `photos` â€” photo URLs\r\n- `photoTags` â€” `[{ url, tags: [\"kitchen\", \"exterior\", â€¦] }]`\r\n- `virtualTours` â€” `[{ href, type }]`\r\n\r\nFlags\r\n- `flags.isNewListing`, `.isPriceReduced`, `.isForeclosure`, `.isNewConstruction`, `.isPending`, `.isContingent`, `.isComingSoon`\r\n\r\nDetail sections (when `scrapeDetails` is on and the source publishes them)\r\n- `text` â€” full marketing description\r\n- `features` â€” cooling, heating, exterior, roofing, construction, fireplace, pool, zoning, styles, garage type\r\n- `tags` â€” source amenity tags\r\n- `details` â€” categorized feature lists, `[{ category, parentCategory, items }]`\r\n- `petPolicy`, `unitDetails`\r\n- `nearbySchools` â€” name, rating, distance, grades, type, levels, student count, `assigned`\r\n- `assignedSchools` â€” the assigned public schools for the address\r\n- `openHouses` â€” start, end, description, methods, time zone, DST\r\n- `local.flood`, `.noise`, `.wildfire` â€” risk scores, severity, FEMA zone, noise categories\r\n- `history` â€” listing/sale events with date, event, price and price per sqft; zero placeholder prices are omitted per row\r\n- `taxHistory` â€” year, tax, assessed and market values (total/land/building); zero placeholders are omitted\r\n- `agents` â€” name, email, phone, office, office phone, office email, type, license, NRDS id, fulfillment id, broker\r\n- `branding`, `products`, `leadAttributes`, `otherListings`\r\n\r\nEvery record ends with `scrapedAt` (ISO timestamp).\r\n\r\n## Output per agent\r\n\r\n- `recordType` â€” always `agent`\r\n- `agentId`, `fulfillmentId`\r\n- `name`, `profileUrl`, `website`\r\n- `officeName`, `licenseNumber`\r\n- `phone`, `phones[]` â€” profile phone numbers with their `type` (when Realtor.com publishes them and `scrapeDetails` is on)\r\n- `officePhone`, `officePhones[]` â€” office phone numbers from the same profile\r\n- `bio`, `languages`, `designations`\r\n- `avatarUrl`\r\n- `searchLocation` â€” the agent-name/city/ZIP query that produced the record\r\n- `scrapedAt`\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | Select | `BUY` | Listing status: `BUY`, `RENT`, `SOLD`, `PENDING`, `CONTINGENT`, `OFF_MARKET`, `READY_TO_BUILD` |\r\n| `recordType` | Select | `PROPERTIES` | Collect property listings or agent directory records |\r\n| `search` | String | - | City/state, ZIP, neighborhood, county or street address. In agent mode: city/state or ZIP |\r\n| `agentName` | String | - | Agent or team name (agent mode) |\r\n| `startUrls` | Array | `[]` | Realtor.com detail or search-result URLs |\r\n| `maxItems` | Integer | `100` | Maximum records to emit (1-10,000) |\r\n| `endPage` | Integer | `50` | Maximum result pages per search (200 properties per page; 50 reaches 10,000) |\r\n| `scrapeDetails` | Boolean | `true` | Fetch each property's full detail record; in agent mode, fetch profile phones |\r\n| `bedsMin`, `bedsMax` | Integer | - | Bedroom range |\r\n| `bathsMin`, `bathsMax` | Integer | - | Bathroom range |\r\n| `priceMin`, `priceMax` | Integer | - | List price range |\r\n| `sqftMin`, `sqftMax` | Integer | - | Living area range |\r\n| `lotSqftMin`, `lotSqftMax` | Integer | - | Lot size range |\r\n| `yearBuiltMin`, `yearBuiltMax` | Integer | - | Construction year range |\r\n| `propertyTypes` | Multi-select | `[]` | One or more property types |\r\n| `keywords` | String list | `[]` | Free-text keywords |\r\n| `hasPhotos` | Boolean | `false` | Only listings with photos |\r\n| `comingSoonOnly` | Boolean | `false` | Only coming-soon listings in for-sale modes |\r\n| `sortBy` | Select | `relevant` | `relevant`, `newest`, `price_low`, `price_high`, `sqft_high`, `beds_high` |\r\n| `listedSince` | Date | - | Listings added on/after `YYYY-MM-DD` |\r\n| `soldSince` | Date | - | Sales on/after `YYYY-MM-DD` (`SOLD` mode) |\r\n| `openHouseFrom`, `openHouseTo` | Date | - | Open-house date window |\r\n| `latitude`, `longitude` | Number | - | Map point for a radius search |\r\n| `radiusMiles` | Integer | - | Radius around the map point (1-100 miles) |\r\n| `boundary` | Object | - | GeoJSON Polygon: `{\"type\":\"Polygon\",\"coordinates\":[[[lon,lat],...]]}` |\r\n\r\nAt least one of `search`, `startUrls`, a complete latitude/longitude/radius point, or a `boundary` polygon is required for property mode. Agent mode needs `agentName` or `search`.\r\n\r\n### Example: active listings in a city\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"search\": \"Houston, TX\",\r\n    \"maxItems\": 100,\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\n### Example: comparable sales\r\n\r\n```json\r\n{\r\n    \"mode\": \"SOLD\",\r\n    \"search\": \"Denver, CO\",\r\n    \"soldSince\": \"2026-01-01\",\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\n### Example: filtered search with open houses\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"search\": \"Austin, TX\",\r\n    \"bedsMin\": 3,\r\n    \"priceMax\": 750000,\r\n    \"propertyTypes\": [\"single_family\"],\r\n    \"openHouseFrom\": \"2026-11-01\",\r\n    \"openHouseTo\": \"2026-11-30\",\r\n    \"sortBy\": \"newest\",\r\n    \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: radius search around coordinates\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"latitude\": 29.76,\r\n    \"longitude\": -95.36,\r\n    \"radiusMiles\": 5,\r\n    \"sqftMin\": 1500,\r\n    \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Example: coming-soon listings\r\n\r\n```json\r\n{\r\n    \"mode\": \"COMING_SOON\",\r\n    \"search\": \"Atlanta, GA\",\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": false\r\n}\r\n```\r\n\r\n`comingSoonOnly: true` applies the same filter inside `BUY`, `PENDING` or `CONTINGENT` mode.\r\n\r\n### Example: polygon search area\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"boundary\": {\r\n        \"type\": \"Polygon\",\r\n        \"coordinates\": [\r\n            [[-95.6, 29.6], [-95.0, 29.6], [-95.0, 30.1], [-95.6, 30.1], [-95.6, 29.6]]\r\n        ]\r\n    },\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": false\r\n}\r\n```\r\n\r\nRings may be open; the actor closes them automatically. Coordinates are `[longitude, latitude]`.\r\n\r\n### Example: agent directory by city or ZIP\r\n\r\n```json\r\n{\r\n    \"recordType\": \"AGENTS\",\r\n    \"search\": \"Houston, TX\",\r\n    \"maxItems\": 100\r\n}\r\n```\r\n\r\n```json\r\n{\r\n    \"recordType\": \"AGENTS\",\r\n    \"agentName\": \"Pedro Casanova\",\r\n    \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: direct property URLs\r\n\r\n```json\r\n{\r\n    \"startUrls\": [\r\n        { \"url\": \"https://www.realtor.com/realestateandhomes-detail/1802-Hamlin-Valley-Dr_Houston_TX_77090_M80144-71467\" }\r\n    ],\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\nSearch-result URLs work too; their location, status and page are reused:\r\n\r\n```json\r\n{\r\n    \"startUrls\": [\r\n        { \"url\": \"https://www.realtor.com/realestateandhomes-search/Houston_TX/pg-2\" }\r\n    ],\r\n    \"maxItems\": 20\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Comparable-sales research** â€” pull `SOLD` records by ZIP or neighborhood with sale dates, assessed values and price per sqft.\r\n- **Buyer shortlists** â€” check flood, wildfire and noise scores, assigned schools, HOA and monthly mortgage estimates before a showing.\r\n- **Open-house planning** â€” filter by open-house dates and get start/end times, methods and time zone in one dataset.\r\n- **Investor screening** â€” compare list price, tax history and automated valuations to spot under- or over-assessed properties.\r\n- **Rental tracking** â€” run `RENT` on a schedule and use `listedSince` or `sortBy: newest` for deltas.\r\n- **Agent and brokerage mapping** â€” collect agent names, offices, licenses, languages and profile links for a market.\r\n- **Listing monitoring** â€” schedule a run with `listedSince` to pick up new inventory without re-scraping everything.\r\n\r\n## Data source and reliability\r\n\r\nThe actor reads Realtor.com's public web endpoints. It does not log in, and it does not need cookies, browser automation or a paid proxy. Detail enrichment costs one request per property (and one per agent in agent mode); turn `scrapeDetails` off when search-level fields are enough.\r\n\r\n## Limits and FAQ\r\n\r\n**How many results can one search return?**\r\nUp to 10,000 per run, which is Realtor.com's own addressable search window (200 per request, offset up to 10,000). The result total can be larger, but only the first 10,000 rows of one search are reachable. To go deeper, split the market with filters (price bands, property type, ZIP codes or smaller map radii) and run each slice.\r\n\r\n**Do I need a Realtor.com account or API key?**\r\nNo. Both property and agent searches use public data and run without credentials.\r\n\r\n**Why is `lastSoldPrice` empty for some sold properties?**\r\nSome US states do not disclose sale prices. The sale date and history events are still returned when published; price fields are omitted rather than guessed or filled with the `0` placeholder that public records sometimes carry. The same rule applies inside `history` and `taxHistory` rows.\r\n\r\n**Why are some detail fields missing on a property?**\r\nSections such as HOA, tax history, assigned schools, open houses, tours, risk scores and mortgage estimates exist only when Realtor.com publishes them for that listing. New construction and off-market properties often have fewer sections.\r\n\r\n**What is the difference between `PENDING` and `CONTINGENT`?**\r\nBoth are for-sale listings under contract; the source marks them with separate flags, which the actor filters on and exposes as `flags.isPending` and `flags.isContingent`.\r\n\r\n**Can I scrape coming-soon listings?**\r\nYes. Use `mode: COMING_SOON` or set `comingSoonOnly: true` in a for-sale mode. The actor applies Realtor.com's coming-soon filter, verifies `flags.isComingSoon` on each record and exposes the flag in the output.\r\n\r\n**How is `daysOnMarket` calculated?**\r\nIt uses the source value when present. Otherwise it is the number of days between the list date and today, or between the list date and the sale date for sold records. It is always non-negative.\r\n\r\n**Why did I get fewer records than `maxItems`?**\r\nThe location or filter combination may have fewer matches, the result set may have hit the source's 10,000-listing ceiling, or the pages ran out. Narrow or broaden the search accordingly.\r\n\r\n**Can I mix a location search and direct URLs?**\r\nYes. Direct detail URLs are resolved individually and de-duplicated against the search results by property id.\r\n\r\n**Does agent mode return phone numbers and email addresses?**\r\nProfile phone numbers are returned when Realtor.com publishes them and `scrapeDetails` is on, together with the office phone when available. Agent emails are not exposed by the public agent profile endpoint, so they are never fabricated; property advertiser emails are returned when the listing publishes them. Agent records always include a public profile URL so missing contact details can be checked at the source.\r\n\r\n**Is this affiliated with Realtor.com?**\r\nNo. It is an independent tool that reads publicly available Realtor.com pages and endpoints; it is not operated or endorsed by Realtor.com.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "realtor-com-listing-and-property-detail-extractor",
      "title": "Realtor.com Property & Agent Scraper",
      "description": "Search Realtor.com by city, ZIP, address, radius or polygon across sale, rent, sold, pending and off-market statuses, with MLS, HOA, mortgage, schools, tours, tax history and agent records.",
      "version": "1.2",
      "buildTag": "latest",
      "input": {
        "title": "Realtor.com Property & Agent Scraper",
        "description": "Search Realtor.com listings by city, ZIP, address, map radius or GeoJSON polygon, or pull full property/agent records. Filter by status, beds, baths, price, size, year, type, keywords, open houses and listing dates.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Listing status",
            "type": "string",
            "description": "Property status to search. `BUY` is active for-sale, `RENT` is for-rent, `SOLD` is recently sold, `PENDING`/`CONTINGENT` are under contract, `COMING_SOON` is not-yet-active inventory, `OFF_MARKET` is delisted and `READY_TO_BUILD` is new construction. Used in property mode; ignored in agent mode.",
            "editor": "select",
            "enum": [
              "BUY",
              "RENT",
              "SOLD",
              "PENDING",
              "CONTINGENT",
              "COMING_SOON",
              "OFF_MARKET",
              "READY_TO_BUILD"
            ],
            "enumTitles": [
              "For sale",
              "For rent",
              "Recently sold",
              "Pending",
              "Contingent",
              "Coming soon",
              "Off market",
              "Ready to build"
            ],
            "default": "BUY",
            "prefill": "BUY"
          },
          "recordType": {
            "title": "What to collect",
            "type": "string",
            "description": "Collect property listings or real-estate agent directory records.",
            "editor": "select",
            "enum": [
              "PROPERTIES",
              "AGENTS"
            ],
            "enumTitles": [
              "Properties",
              "Agents"
            ],
            "default": "PROPERTIES",
            "prefill": "PROPERTIES"
          },
          "search": {
            "title": "Location or address",
            "type": "string",
            "description": "City and state (`Houston, TX`), ZIP code (`77002`), neighborhood, county or a street address (`16142 Maladi Dr`). In agent mode this may be a city/state or ZIP.",
            "editor": "textfield",
            "prefill": "Houston, TX"
          },
          "agentName": {
            "title": "Agent name (agent mode)",
            "type": "string",
            "description": "Agent or team name to search in agent mode, e.g. `Pedro Casanova`. Leave empty to search agents by the location above.",
            "editor": "textfield"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Realtor.com property detail URLs or search-result URLs. Detail URLs are resolved directly; search URLs reuse their location, mode and page.",
            "editor": "requestListSources",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "Listing URL",
                  "description": "Realtor.com property or search URL."
                }
              }
            },
            "default": [],
            "prefill": []
          },
          "maxItems": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Maximum property or agent records to emit (1-10000). Property searches are limited by the source to 10,000 addressable rows per search.",
            "minimum": 1,
            "maximum": 10000,
            "default": 100,
            "prefill": 3
          },
          "endPage": {
            "title": "Maximum search pages",
            "type": "integer",
            "description": "Maximum GraphQL result pages per search. Each page holds up to 200 properties; set 50 to reach the 10,000-row search cap. Agents use their own page size.",
            "minimum": 1,
            "maximum": 50,
            "default": 50,
            "prefill": 1
          },
          "scrapeDetails": {
            "title": "Scrape full details",
            "type": "boolean",
            "description": "Fetch each property's full detail record: description, HOA, mortgage estimate, assigned schools, open houses, tours, photo tags, tax and price history, risk scores and extra agent contacts. In agent mode it also fetches each agent's profile phone numbers.",
            "default": true,
            "prefill": false
          },
          "bedsMin": {
            "title": "Beds (min)",
            "type": "integer",
            "description": "Minimum bedrooms. Applied server-side, then verified on each record.",
            "minimum": 0,
            "maximum": 30,
            "sectionCaption": "Search filters",
            "sectionDescription": "Optional property filters. They apply in property mode when searching by location, address, ZIP or map radius."
          },
          "bedsMax": {
            "title": "Beds (max)",
            "type": "integer",
            "description": "Maximum bedrooms.",
            "minimum": 0,
            "maximum": 30
          },
          "bathsMin": {
            "title": "Baths (min)",
            "type": "integer",
            "description": "Minimum bathrooms.",
            "minimum": 0,
            "maximum": 30
          },
          "bathsMax": {
            "title": "Baths (max)",
            "type": "integer",
            "description": "Maximum bathrooms.",
            "minimum": 0,
            "maximum": 30
          },
          "priceMin": {
            "title": "Price (min)",
            "type": "integer",
            "description": "Minimum list price in US dollars.",
            "minimum": 0,
            "maximum": 1000000000
          },
          "priceMax": {
            "title": "Price (max)",
            "type": "integer",
            "description": "Maximum list price in US dollars.",
            "minimum": 0,
            "maximum": 1000000000
          },
          "sqftMin": {
            "title": "Living area sqft (min)",
            "type": "integer",
            "description": "Minimum living area in square feet.",
            "minimum": 0,
            "maximum": 1000000
          },
          "sqftMax": {
            "title": "Living area sqft (max)",
            "type": "integer",
            "description": "Maximum living area in square feet.",
            "minimum": 0,
            "maximum": 1000000
          },
          "lotSqftMin": {
            "title": "Lot sqft (min)",
            "type": "integer",
            "description": "Minimum lot size in square feet.",
            "minimum": 0,
            "maximum": 100000000
          },
          "lotSqftMax": {
            "title": "Lot sqft (max)",
            "type": "integer",
            "description": "Maximum lot size in square feet.",
            "minimum": 0,
            "maximum": 100000000
          },
          "yearBuiltMin": {
            "title": "Year built (min)",
            "type": "integer",
            "description": "Minimum construction year.",
            "minimum": 1700,
            "maximum": 2100
          },
          "yearBuiltMax": {
            "title": "Year built (max)",
            "type": "integer",
            "description": "Maximum construction year.",
            "minimum": 1700,
            "maximum": 2100
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Limit results to one or more Realtor.com property types.",
            "editor": "select",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "commercial",
                "cond_op",
                "condo",
                "condo_townhome",
                "condo_townhome_rowhome_coop",
                "condop",
                "condos",
                "coop",
                "duplex_triplex",
                "farm",
                "investment",
                "land",
                "mobile",
                "multi_family",
                "other",
                "rental",
                "single_family",
                "townhomes",
                "townhouse"
              ],
              "enumTitles": [
                "Apartment",
                "Commercial",
                "Cond-op",
                "Condo",
                "Condo/townhome",
                "Condo/townhome/rowhome/co-op",
                "Condop",
                "Condos",
                "Co-op",
                "Duplex/triplex",
                "Farm",
                "Investment",
                "Land",
                "Mobile",
                "Multi-family",
                "Other",
                "Rental",
                "Single family",
                "Townhomes",
                "Townhouse"
              ]
            },
            "default": [],
            "prefill": []
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Free-text keywords matched by Realtor.com, e.g. `pool`, `waterfront`, `garage`, `new construction`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "hasPhotos": {
            "title": "Only listings with photos",
            "type": "boolean",
            "description": "Exclude listings that have no photos.",
            "default": false,
            "prefill": false
          },
          "comingSoonOnly": {
            "title": "Only coming-soon listings",
            "type": "boolean",
            "description": "Apply the source's coming-soon filter to for-sale modes. `COMING_SOON` mode enables it automatically.",
            "default": false,
            "prefill": false
          },
          "sortBy": {
            "title": "Sort results",
            "type": "string",
            "description": "Result ordering.",
            "editor": "select",
            "enum": [
              "relevant",
              "newest",
              "price_low",
              "price_high",
              "sqft_high",
              "beds_high"
            ],
            "enumTitles": [
              "Most relevant",
              "Newest listings",
              "Price: low to high",
              "Price: high to low",
              "Largest living area",
              "Most bedrooms"
            ],
            "default": "relevant",
            "prefill": "relevant"
          },
          "listedSince": {
            "title": "Listed since",
            "type": "string",
            "description": "Only listings added on or after this date (YYYY-MM-DD). Useful for delta monitoring.",
            "editor": "textfield"
          },
          "soldSince": {
            "title": "Sold since",
            "type": "string",
            "description": "In SOLD mode, only sales on or after this date (YYYY-MM-DD).",
            "editor": "textfield"
          },
          "openHouseFrom": {
            "title": "Open house from",
            "type": "string",
            "description": "Only listings with an open house on or after this date (YYYY-MM-DD).",
            "editor": "textfield",
            "sectionCaption": "Open houses & map",
            "sectionDescription": "Optional open-house date window and map-radius search."
          },
          "openHouseTo": {
            "title": "Open house to",
            "type": "string",
            "description": "Only listings with an open house on or before this date (YYYY-MM-DD).",
            "editor": "textfield"
          },
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "description": "Latitude for a radius search. Combine with longitude and radius miles.",
            "minimum": -90,
            "maximum": 90
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "description": "Longitude for a radius search. Combine with latitude and radius miles.",
            "minimum": -180,
            "maximum": 180
          },
          "radiusMiles": {
            "title": "Radius (miles)",
            "type": "integer",
            "description": "Search radius in miles around the latitude/longitude point.",
            "minimum": 1,
            "maximum": 100
          },
          "boundary": {
            "title": "Polygon boundary (GeoJSON)",
            "type": "object",
            "description": "Search inside a GeoJSON Polygon instead of a named location. Coordinates are [longitude, latitude]; rings may be open and are closed automatically. Example: {\"type\":\"Polygon\",\"coordinates\":[[[-95.6,29.6],[-95.0,29.6],[-95.0,30.1],[-95.6,30.1],[-95.6,29.6]]]}.",
            "editor": "json"
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Realtor.com Property & Agent Scraper Output",
        "description": "Property records with pricing, beds/baths/sqft, MLS and parcel ids, HOA, mortgage estimate, schools, open houses, tours, photo tags, tax and price history, risk scores and agent contacts; agent records with name, office, profile phones, license, bio, languages and profile URL. Placeholder zero prices are omitted.",
        "properties": {
          "properties": {
            "type": "string",
            "title": "Property & agent records",
            "description": "Dataset containing scraped property listings and/or agent records",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# Realtor.com Property & Agent Scraper\r\n\r\nTurn Realtor.com into structured data. Search active, rental, sold, pending, contingent, coming-soon, off-market or new-construction listings by city, ZIP, street address, map radius or GeoJSON polygon; apply real filters; and pull the full property record â€” MLS number, HOA, mortgage estimate, assigned schools, open houses, tours, photo tags, tax and price history, risk scores and agent contacts. Switch one field to collect real-estate agent directory records, including profile phone numbers.\r\n\r\nNo account, cookies, API key or proxy setup is required.\r\n\r\n## What this actor does\r\n\r\n- **Eight listing statuses** â€” `BUY` (for sale), `RENT`, `SOLD`, `PENDING`, `CONTINGENT`, `COMING_SOON`, `OFF_MARKET` and `READY_TO_BUILD`.\r\n- **Five ways to target** â€” free-form location (city, ZIP, neighborhood, county), street address, a map point with a mile radius, a GeoJSON polygon, or Realtor.com URLs.\r\n- **Real server-side filters** â€” beds, baths, price, living area, lot size, year built, property type, keywords, photos-only, coming-soon, open-house dates and listing/sold dates.\r\n- **Full detail records** â€” one detail lookup per property adds the marketing description, HOA fee, mortgage estimate, assigned and nearby schools, open houses, virtual tours, photo tags, categorized features, tax/price history, parcel ids and expanded agent contacts.\r\n- **Agent directory** â€” search agents by name, city/state or ZIP; returns name, office, profile phones, license, bio, languages, designations, avatar and public profile URL.\r\n- **Sorted and paginated deeply** â€” newest, price, size or bedroom ordering, up to 10,000 records per run (the source's addressable search window).\r\n- **Honest output** â€” a field the source does not publish for a listing is omitted, never guessed or filled with a sentinel. Zero placeholder prices from public records are removed rather than emitted.\r\n\r\n## Listing statuses\r\n\r\n| Mode | What it returns |\r\n|---|---|\r\n| `BUY` | Active for-sale listings |\r\n| `RENT` | Active rental listings |\r\n| `SOLD` | Recently sold properties with sale date and, where published, sale price |\r\n| `PENDING` | For-sale listings with an accepted offer |\r\n| `CONTINGENT` | For-sale listings still subject to a contingency |\r\n| `COMING_SOON` | Not-yet-active listings announced ahead of the market |\r\n| `OFF_MARKET` | Delisted / off-market listings |\r\n| `READY_TO_BUILD` | New-construction and build-ready listings |\r\n\r\n`PENDING`, `CONTINGENT` and `COMING_SOON` come back with `status: for_sale` and the matching `flags.isPending` / `flags.isContingent` / `flags.isComingSoon` set, because that is how the source models them. The same coming-soon filter is available as `comingSoonOnly` on the other for-sale modes.\r\n\r\n## Filters\r\n\r\n| Filter | Applies to |\r\n|---|---|\r\n| `bedsMin` / `bedsMax` | Bedroom range |\r\n| `bathsMin` / `bathsMax` | Bathroom range |\r\n| `priceMin` / `priceMax` | List price range (USD) |\r\n| `sqftMin` / `sqftMax` | Living area range |\r\n| `lotSqftMin` / `lotSqftMax` | Lot size range |\r\n| `yearBuiltMin` / `yearBuiltMax` | Construction year range |\r\n| `propertyTypes` | One or more of Realtor.com's 20 property types |\r\n| `keywords` | Free-text terms such as `pool`, `waterfront`, `garage` |\r\n| `hasPhotos` | Exclude listings without photos |\r\n| `comingSoonOnly` | Only coming-soon listings in the for-sale modes |\r\n| `openHouseFrom` / `openHouseTo` | Listings with an open house in the date window |\r\n| `listedSince` | Listings added on or after a date (delta monitoring) |\r\n| `soldSince` | In `SOLD` mode, sales on or after a date |\r\n| `latitude` + `longitude` + `radiusMiles` | Radius search around a map point |\r\n| `boundary` | GeoJSON Polygon search area (longitude/latitude rings) |\r\n| `sortBy` | Relevance, newest, price low/high, largest living area or most bedrooms |\r\n\r\nFilters are sent to Realtor.com and then verified on every returned record, so a filter cannot silently pass through unfiltered rows.\r\n\r\n## Output per property\r\n\r\nIdentity\r\n- `recordType` â€” always `property`\r\n- `url`, `id`, `listingId`, `permalink`\r\n- `mlsId`, `mlsSource`, `mlsType`, `mlsStatus`\r\n- `parcelId` plus `taxRecord.clId`, `.publicRecordId`, `.lastUpdateDate`, `.apn`, `.taxParcelId`\r\n- `status`\r\n\r\nPricing\r\n- `listPrice`, `listPriceMin`, `listPriceMax` (range-priced new builds have no single price)\r\n- `pricePerSqft` â€” from the source, or computed from list price and living area\r\n- `priceReduced` â€” reduction amount\r\n- `lastSoldPrice`, `soldOn`\r\n- `estimatedValue`, and `estimates[]` with `.estimate`, `.estimateLow`, `.estimateHigh`, `.date`, `.source`, `.sourceType` (multiple valuation providers when available)\r\n- `mortgage.monthlyPayment`, `.downPayment`, `.loanAmount`\r\n- `hoaFee`\r\n\r\nProperty facts\r\n- `beds`, `baths`, `bathsFull`, `bathsHalf`\r\n- `sqft`, `lotSqft`, `yearBuilt`, `yearRenovated`\r\n- `garage`, `garageType`, `stories`, `rooms`, `units`\r\n- `type`, `subType`, `name` (community/building name)\r\n- `listDate`, `pendingDate`, `lastStatusChangeDate`, `lastUpdateDate`\r\n- `daysOnMarket` â€” source value, or derived from the list date (and the sale date for sold records)\r\n\r\nLocation\r\n- `address.street`, `.city`, `.state`, `.postalCode`, `.county`, `.countyFips`, `.neighborhoods`\r\n- `coordinates.lat`, `.lng`\r\n\r\nMedia\r\n- `photos` â€” photo URLs\r\n- `photoTags` â€” `[{ url, tags: [\"kitchen\", \"exterior\", â€¦] }]`\r\n- `virtualTours` â€” `[{ href, type }]`\r\n\r\nFlags\r\n- `flags.isNewListing`, `.isPriceReduced`, `.isForeclosure`, `.isNewConstruction`, `.isPending`, `.isContingent`, `.isComingSoon`\r\n\r\nDetail sections (when `scrapeDetails` is on and the source publishes them)\r\n- `text` â€” full marketing description\r\n- `features` â€” cooling, heating, exterior, roofing, construction, fireplace, pool, zoning, styles, garage type\r\n- `tags` â€” source amenity tags\r\n- `details` â€” categorized feature lists, `[{ category, parentCategory, items }]`\r\n- `petPolicy`, `unitDetails`\r\n- `nearbySchools` â€” name, rating, distance, grades, type, levels, student count, `assigned`\r\n- `assignedSchools` â€” the assigned public schools for the address\r\n- `openHouses` â€” start, end, description, methods, time zone, DST\r\n- `local.flood`, `.noise`, `.wildfire` â€” risk scores, severity, FEMA zone, noise categories\r\n- `history` â€” listing/sale events with date, event, price and price per sqft; zero placeholder prices are omitted per row\r\n- `taxHistory` â€” year, tax, assessed and market values (total/land/building); zero placeholders are omitted\r\n- `agents` â€” name, email, phone, office, office phone, office email, type, license, NRDS id, fulfillment id, broker\r\n- `branding`, `products`, `leadAttributes`, `otherListings`\r\n\r\nEvery record ends with `scrapedAt` (ISO timestamp).\r\n\r\n## Output per agent\r\n\r\n- `recordType` â€” always `agent`\r\n- `agentId`, `fulfillmentId`\r\n- `name`, `profileUrl`, `website`\r\n- `officeName`, `licenseNumber`\r\n- `phone`, `phones[]` â€” profile phone numbers with their `type` (when Realtor.com publishes them and `scrapeDetails` is on)\r\n- `officePhone`, `officePhones[]` â€” office phone numbers from the same profile\r\n- `bio`, `languages`, `designations`\r\n- `avatarUrl`\r\n- `searchLocation` â€” the agent-name/city/ZIP query that produced the record\r\n- `scrapedAt`\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | Select | `BUY` | Listing status: `BUY`, `RENT`, `SOLD`, `PENDING`, `CONTINGENT`, `OFF_MARKET`, `READY_TO_BUILD` |\r\n| `recordType` | Select | `PROPERTIES` | Collect property listings or agent directory records |\r\n| `search` | String | - | City/state, ZIP, neighborhood, county or street address. In agent mode: city/state or ZIP |\r\n| `agentName` | String | - | Agent or team name (agent mode) |\r\n| `startUrls` | Array | `[]` | Realtor.com detail or search-result URLs |\r\n| `maxItems` | Integer | `100` | Maximum records to emit (1-10,000) |\r\n| `endPage` | Integer | `50` | Maximum result pages per search (200 properties per page; 50 reaches 10,000) |\r\n| `scrapeDetails` | Boolean | `true` | Fetch each property's full detail record; in agent mode, fetch profile phones |\r\n| `bedsMin`, `bedsMax` | Integer | - | Bedroom range |\r\n| `bathsMin`, `bathsMax` | Integer | - | Bathroom range |\r\n| `priceMin`, `priceMax` | Integer | - | List price range |\r\n| `sqftMin`, `sqftMax` | Integer | - | Living area range |\r\n| `lotSqftMin`, `lotSqftMax` | Integer | - | Lot size range |\r\n| `yearBuiltMin`, `yearBuiltMax` | Integer | - | Construction year range |\r\n| `propertyTypes` | Multi-select | `[]` | One or more property types |\r\n| `keywords` | String list | `[]` | Free-text keywords |\r\n| `hasPhotos` | Boolean | `false` | Only listings with photos |\r\n| `comingSoonOnly` | Boolean | `false` | Only coming-soon listings in for-sale modes |\r\n| `sortBy` | Select | `relevant` | `relevant`, `newest`, `price_low`, `price_high`, `sqft_high`, `beds_high` |\r\n| `listedSince` | Date | - | Listings added on/after `YYYY-MM-DD` |\r\n| `soldSince` | Date | - | Sales on/after `YYYY-MM-DD` (`SOLD` mode) |\r\n| `openHouseFrom`, `openHouseTo` | Date | - | Open-house date window |\r\n| `latitude`, `longitude` | Number | - | Map point for a radius search |\r\n| `radiusMiles` | Integer | - | Radius around the map point (1-100 miles) |\r\n| `boundary` | Object | - | GeoJSON Polygon: `{\"type\":\"Polygon\",\"coordinates\":[[[lon,lat],...]]}` |\r\n\r\nAt least one of `search`, `startUrls`, a complete latitude/longitude/radius point, or a `boundary` polygon is required for property mode. Agent mode needs `agentName` or `search`.\r\n\r\n### Example: active listings in a city\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"search\": \"Houston, TX\",\r\n    \"maxItems\": 100,\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\n### Example: comparable sales\r\n\r\n```json\r\n{\r\n    \"mode\": \"SOLD\",\r\n    \"search\": \"Denver, CO\",\r\n    \"soldSince\": \"2026-01-01\",\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\n### Example: filtered search with open houses\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"search\": \"Austin, TX\",\r\n    \"bedsMin\": 3,\r\n    \"priceMax\": 750000,\r\n    \"propertyTypes\": [\"single_family\"],\r\n    \"openHouseFrom\": \"2026-11-01\",\r\n    \"openHouseTo\": \"2026-11-30\",\r\n    \"sortBy\": \"newest\",\r\n    \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: radius search around coordinates\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"latitude\": 29.76,\r\n    \"longitude\": -95.36,\r\n    \"radiusMiles\": 5,\r\n    \"sqftMin\": 1500,\r\n    \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Example: coming-soon listings\r\n\r\n```json\r\n{\r\n    \"mode\": \"COMING_SOON\",\r\n    \"search\": \"Atlanta, GA\",\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": false\r\n}\r\n```\r\n\r\n`comingSoonOnly: true` applies the same filter inside `BUY`, `PENDING` or `CONTINGENT` mode.\r\n\r\n### Example: polygon search area\r\n\r\n```json\r\n{\r\n    \"mode\": \"BUY\",\r\n    \"boundary\": {\r\n        \"type\": \"Polygon\",\r\n        \"coordinates\": [\r\n            [[-95.6, 29.6], [-95.0, 29.6], [-95.0, 30.1], [-95.6, 30.1], [-95.6, 29.6]]\r\n        ]\r\n    },\r\n    \"maxItems\": 50,\r\n    \"scrapeDetails\": false\r\n}\r\n```\r\n\r\nRings may be open; the actor closes them automatically. Coordinates are `[longitude, latitude]`.\r\n\r\n### Example: agent directory by city or ZIP\r\n\r\n```json\r\n{\r\n    \"recordType\": \"AGENTS\",\r\n    \"search\": \"Houston, TX\",\r\n    \"maxItems\": 100\r\n}\r\n```\r\n\r\n```json\r\n{\r\n    \"recordType\": \"AGENTS\",\r\n    \"agentName\": \"Pedro Casanova\",\r\n    \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: direct property URLs\r\n\r\n```json\r\n{\r\n    \"startUrls\": [\r\n        { \"url\": \"https://www.realtor.com/realestateandhomes-detail/1802-Hamlin-Valley-Dr_Houston_TX_77090_M80144-71467\" }\r\n    ],\r\n    \"scrapeDetails\": true\r\n}\r\n```\r\n\r\nSearch-result URLs work too; their location, status and page are reused:\r\n\r\n```json\r\n{\r\n    \"startUrls\": [\r\n        { \"url\": \"https://www.realtor.com/realestateandhomes-search/Houston_TX/pg-2\" }\r\n    ],\r\n    \"maxItems\": 20\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Comparable-sales research** â€” pull `SOLD` records by ZIP or neighborhood with sale dates, assessed values and price per sqft.\r\n- **Buyer shortlists** â€” check flood, wildfire and noise scores, assigned schools, HOA and monthly mortgage estimates before a showing.\r\n- **Open-house planning** â€” filter by open-house dates and get start/end times, methods and time zone in one dataset.\r\n- **Investor screening** â€” compare list price, tax history and automated valuations to spot under- or over-assessed properties.\r\n- **Rental tracking** â€” run `RENT` on a schedule and use `listedSince` or `sortBy: newest` for deltas.\r\n- **Agent and brokerage mapping** â€” collect agent names, offices, licenses, languages and profile links for a market.\r\n- **Listing monitoring** â€” schedule a run with `listedSince` to pick up new inventory without re-scraping everything.\r\n\r\n## Data source and reliability\r\n\r\nThe actor reads Realtor.com's public web endpoints. It does not log in, and it does not need cookies, browser automation or a paid proxy. Detail enrichment costs one request per property (and one per agent in agent mode); turn `scrapeDetails` off when search-level fields are enough.\r\n\r\n## Limits and FAQ\r\n\r\n**How many results can one search return?**\r\nUp to 10,000 per run, which is Realtor.com's own addressable search window (200 per request, offset up to 10,000). The result total can be larger, but only the first 10,000 rows of one search are reachable. To go deeper, split the market with filters (price bands, property type, ZIP codes or smaller map radii) and run each slice.\r\n\r\n**Do I need a Realtor.com account or API key?**\r\nNo. Both property and agent searches use public data and run without credentials.\r\n\r\n**Why is `lastSoldPrice` empty for some sold properties?**\r\nSome US states do not disclose sale prices. The sale date and history events are still returned when published; price fields are omitted rather than guessed or filled with the `0` placeholder that public records sometimes carry. The same rule applies inside `history` and `taxHistory` rows.\r\n\r\n**Why are some detail fields missing on a property?**\r\nSections such as HOA, tax history, assigned schools, open houses, tours, risk scores and mortgage estimates exist only when Realtor.com publishes them for that listing. New construction and off-market properties often have fewer sections.\r\n\r\n**What is the difference between `PENDING` and `CONTINGENT`?**\r\nBoth are for-sale listings under contract; the source marks them with separate flags, which the actor filters on and exposes as `flags.isPending` and `flags.isContingent`.\r\n\r\n**Can I scrape coming-soon listings?**\r\nYes. Use `mode: COMING_SOON` or set `comingSoonOnly: true` in a for-sale mode. The actor applies Realtor.com's coming-soon filter, verifies `flags.isComingSoon` on each record and exposes the flag in the output.\r\n\r\n**How is `daysOnMarket` calculated?**\r\nIt uses the source value when present. Otherwise it is the number of days between the list date and today, or between the list date and the sale date for sold records. It is always non-negative.\r\n\r\n**Why did I get fewer records than `maxItems`?**\r\nThe location or filter combination may have fewer matches, the result set may have hit the source's 10,000-listing ceiling, or the pages ran out. Narrow or broaden the search accordingly.\r\n\r\n**Can I mix a location search and direct URLs?**\r\nYes. Direct detail URLs are resolved individually and de-duplicated against the search results by property id.\r\n\r\n**Does agent mode return phone numbers and email addresses?**\r\nProfile phone numbers are returned when Realtor.com publishes them and `scrapeDetails` is on, together with the office phone when available. Agent emails are not exposed by the public agent profile endpoint, so they are never fabricated; property advertiser emails are returned when the listing publishes them. Agent records always include a public profile URL so missing contact details can be checked at the source.\r\n\r\n**Is this affiliated with Realtor.com?**\r\nNo. It is an independent tool that reads publicly available Realtor.com pages and endpoints; it is not operated or endorsed by Realtor.com.\r\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Properties",
              "transformation": {
                "fields": [
                  "address",
                  "listPrice",
                  "beds",
                  "baths",
                  "sqft",
                  "pricePerSqft",
                  "type",
                  "status",
                  "mlsId",
                  "yearBuilt",
                  "daysOnMarket",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "listPrice": {
                    "label": "Price",
                    "format": "number"
                  },
                  "beds": {
                    "label": "Beds",
                    "format": "number"
                  },
                  "baths": {
                    "label": "Baths",
                    "format": "text"
                  },
                  "sqft": {
                    "label": "Sqft",
                    "format": "number"
                  },
                  "pricePerSqft": {
                    "label": "$/Sqft",
                    "format": "number"
                  },
                  "type": {
                    "label": "Type",
                    "format": "text"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "mlsId": {
                    "label": "MLS #",
                    "format": "text"
                  },
                  "yearBuilt": {
                    "label": "Year Built",
                    "format": "number"
                  },
                  "daysOnMarket": {
                    "label": "Days on market",
                    "format": "number"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "agents": {
              "title": "Agents",
              "transformation": {
                "fields": [
                  "name",
                  "officeName",
                  "phone",
                  "licenseNumber",
                  "languages",
                  "profileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "officeName": {
                    "label": "Office",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "licenseNumber": {
                    "label": "License",
                    "format": "text"
                  },
                  "languages": {
                    "label": "Languages",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.2.1",
    "imageDigest": "ba1d255d4576a27018d1e419152dfff37815ac117b5ff3a8b9ae24d8d86264bd",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.2"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.010721111111111112
    }
  }
}