{
  "data": {
    "id": "3iuYhFjMsqpWI3htR",
    "actId": "SQV9dedFVcwumS0gD",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-09T12:47:58.610Z",
    "finishedAt": "2026-11-09T12:48:08.382Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 9691,
      "runTimeSecs": 9.691,
      "computeUnits": 0.010767777777777777,
      "imageSizeBytes": 361482240
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Redfin Scraper Input\",\n  \"description\": \"Search Redfin for real estate listings — for sale, recently sold, or rental properties.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What type of listings to fetch.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"forSale\",\n        \"recentlySold\",\n        \"forRent\",\n        \"search\",\n        \"byUrl\"\n      ],\n      \"enumTitles\": [\n        \"For Sale — active listings\",\n        \"Recently Sold — sold within the chosen window\",\n        \"For Rent — rental listings\",\n        \"Search — keyword filter within a location\",\n        \"By URL — fetch a single Redfin listing URL\"\n      ],\n      \"default\": \"forSale\",\n      \"prefill\": \"forSale\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City and state (`Austin, TX`), ZIP (`90210`, `10001`, `78701`), neighborhood (`South Congress, Austin, TX`), Redfin search URL, or a region token such as `6_30818` (city region 30818).\",\n      \"editor\": \"textfield\",\n      \"default\": \"Austin, TX\",\n      \"prefill\": \"Austin, TX\"\n    },\n    \"listingUrl\": {\n      \"title\": \"Listing URL (mode=byUrl)\",\n      \"type\": \"string\",\n      \"description\": \"Full Redfin listing URL containing `/home/<id>`, e.g. `https://www.redfin.com/TX/Austin/123-Main-St-78701/home/12345678`.\",\n      \"editor\": \"textfield\"\n    },\n    \"keyword\": {\n      \"title\": \"Keyword\",\n      \"type\": \"string\",\n      \"description\": \"Case-insensitive keyword matched against address, description, listing tags, key facts, subdivision, and building name. Required in `search` mode and optional in other modes.\",\n      \"editor\": \"textfield\"\n    },\n    \"propertyType\": {\n      \"title\": \"Property type\",\n      \"type\": \"string\",\n      \"description\": \"Filter by property type. Applied server-side where Redfin supports it and re-checked in the actor.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"house\",\n        \"condo\",\n        \"townhouse\",\n        \"multifamily\",\n        \"land\",\n        \"other\"\n      ],\n      \"enumTitles\": [\n        \"All types\",\n        \"House\",\n        \"Condo / Apartment\",\n        \"Townhouse\",\n        \"Multi-family\",\n        \"Land\",\n        \"Other\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\",\n      \"sectionCaption\": \"Filters\",\n      \"sectionDescription\": \"Optional price, bedroom, bathroom, size, and sold-window filters.\"\n    },\n    \"minPrice\": {\n      \"title\": \"Min price ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum sale price, or minimum monthly rent in forRent mode.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"maxPrice\": {\n      \"title\": \"Max price ($)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum sale price, or maximum monthly rent in forRent mode.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"minBeds\": {\n      \"title\": \"Min bedrooms\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of bedrooms.\",\n      \"minimum\": 0,\n      \"maximum\": 20\n    },\n    \"minBaths\": {\n      \"title\": \"Min bathrooms\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of bathrooms.\",\n      \"minimum\": 0,\n      \"maximum\": 20\n    },\n    \"minSqft\": {\n      \"title\": \"Min square footage\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum interior square footage.\",\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"maxSqft\": {\n      \"title\": \"Max square footage\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum interior square footage.\",\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"soldWithinDays\": {\n      \"title\": \"Sold within (days)\",\n      \"type\": \"string\",\n      \"description\": \"How far back to search in recentlySold mode. Ignored in other modes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"30\",\n        \"90\",\n        \"180\",\n        \"365\",\n        \"1095\",\n        \"1825\"\n      ],\n      \"enumTitles\": [\n        \"Last 30 days\",\n        \"Last 90 days\",\n        \"Last 180 days\",\n        \"Last year\",\n        \"Last 3 years\",\n        \"Last 5 years\"\n      ],\n      \"default\": \"180\",\n      \"prefill\": \"180\"\n    },\n    \"sort\": {\n      \"title\": \"Sort order\",\n      \"type\": \"string\",\n      \"description\": \"Result ordering. Verified against Redfin's GIS and rental APIs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"recommended\",\n        \"newest\",\n        \"oldest\",\n        \"priceLowToHigh\",\n        \"priceHighToLow\"\n      ],\n      \"enumTitles\": [\n        \"Recommended\",\n        \"Newest (least time on Redfin)\",\n        \"Oldest (most time on Redfin)\",\n        \"Price: low to high\",\n        \"Price: high to low\"\n      ],\n      \"default\": \"recommended\",\n      \"prefill\": \"recommended\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records (1-20,000). This is a self-imposed cap; Redfin returned homes at a start offset of 19,950 in verification. Deep offsets in very large regions can return an empty page.\",\n      \"minimum\": 1,\n      \"maximum\": 20000,\n      \"default\": 20,\n      \"prefill\": 3,\n      \"sectionCaption\": \"Output\",\n      \"sectionDescription\": \"How many records to return.\"\n    },\n    \"includeDetails\": {\n      \"title\": \"Include detail enrichment\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each listing's below-the-fold detail payload: price history, tax history, public records (APN, county, year renovated), and amenities. Adds one request per emitted listing.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Redfin Sale, Rental & Sold Listings Scraper\r\n\r\nCollect property listings from [Redfin.com](https://www.redfin.com) for any supported US location — homes for sale, recently sold homes, rentals, keyword matches, or a single listing from its Redfin URL. No login, API key, or proxy setup is required.\r\n\r\n## What this actor does\r\n\r\n- Searches active for-sale listings by city, ZIP, neighborhood, US state, Redfin search URL, or explicit region ID\r\n- Searches recently sold homes with a configurable 30-day to 5-year window\r\n- Searches rental listings, including rent ranges, unit ranges, and availability\r\n- Filters listings by keyword across address, description, tags, key facts, subdivision, and building name\r\n- Fetches one specific listing from its Redfin URL\r\n- Sorts by recommended, newest, oldest, price ascending, or price descending\r\n- Pages through Redfin results for large pulls (up to 20,000 records)\r\n- Filters by property type, price, bedrooms, bathrooms, and square footage\r\n- Verifies that returned homes actually belong to the requested location, so a bad region ID cannot silently return another city\r\n- Optionally enriches each listing with price history, tax history, public records, and amenities\r\n- Emits clean records with empty fields omitted\r\n\r\n## Location input\r\n\r\n`location` accepts any of these forms:\r\n\r\n| Form | Example |\r\n|---|---|\r\n| City and state | `Austin, TX` |\r\n| US state | `Texas`, `TX` |\r\n| ZIP code | `90210`, `10001`, `78701` |\r\n| Neighborhood | `South Congress, Austin, TX` |\r\n| Redfin search URL | `https://www.redfin.com/city/30818/TX/Austin` |\r\n| Region token | `6_30818` (`<region_type>_<region_id>`) |\r\n\r\nRedfin's own autocomplete is tried first. When it is unavailable from the current network, the actor falls back to verified region IDs for major cities, common ZIPs, neighborhoods, and all 50 states plus DC. A city that is not in the offline seed is handled in two steps: the actor scans the state-level GIS region and keeps only records whose city matches, and reports the fallback in the run status. Very large states can return a Redfin GIS service timeout at state level; in that case the status message recommends a ZIP, city URL, or region ID. This is a state-level fallback, not a fix for Redfin autocomplete.\r\n\r\n## Output per listing\r\n\r\nCore fields:\r\n\r\n- `recordType` — always `listing`\r\n- `url` — direct Redfin listing URL\r\n- `propertyId` — Redfin's internal property ID\r\n- `listingId` — Redfin listing ID\r\n- `mlsId` — MLS number, when the listing carries one\r\n- `price` — sale price, or starting monthly rent in `forRent` mode\r\n- `listingType` — `sale`, `sold`, or `rent`\r\n- `status` — `Active`, `Pending`, `Sold`, `For Rent`, etc.\r\n- `propertyType` — `House`, `Condo`, `Townhouse`, `Multi-family`, `Land`, etc.\r\n- `beds`, `baths`, `fullBaths`, `partialBaths` — bedrooms and bathroom counts\r\n- `sqft` — interior square footage\r\n- `lotSize` — lot size in square feet\r\n- `yearBuilt`, `yearRenovated`, `stories`\r\n- `pricePerSqft` — for sale and sold listings\r\n- `daysOnMarket`, `timeOnRedfinDays`, `originalTimeOnRedfinDays`\r\n- `address`, `unit`, `city`, `state`, `zip`\r\n- `latitude`, `longitude`\r\n- `subdivision`\r\n- `hoaFee` — monthly HOA fee, when the property has one\r\n- `listingAgent`, `listingAgentId`, `brokerName`, `listingCoBroker`\r\n- `description`, `listingTags`, `keyFacts`, `badges`\r\n- `hasVirtualTour`, `hasVideoTour`, `has3DTour`, `scanUrl`, `posterFrameUrl`\r\n- `isNewConstruction`, `isHot`, `hotnessMessage`, `hotnessAction`, `hasInsight`\r\n- `poolTypeCode` — Redfin's raw `skPoolType` code; Redfin does not document the label mapping\r\n- `openHouseStart`, `openHouseEnd`, `openHouseEventName`\r\n- `imageUrls` — up to 10 property photo URLs\r\n- `photoCount`\r\n- `garageSpaces`, `parkingSpaces`\r\n- `scrapedAt` — ISO 8601 timestamp of the scrape\r\n\r\nSold listings also carry:\r\n\r\n- `soldPrice` — final sale price\r\n- `soldDate` — sale date in ISO format\r\n- `sellingAgent`, `sellingAgentId`, `sellingBroker` — when Redfin exposes them\r\n\r\nRental listings also carry:\r\n\r\n- `rentPrice` — starting monthly rent\r\n- `rentPriceMin`, `rentPriceMax`\r\n- `bedsMin`, `bedsMax`, `bathsMin`, `bathsMax`, `sqftMin`, `sqftMax`\r\n- `propertyName` — building or community name\r\n- `availableUnits` — number of available units\r\n- `lastUpdated` — feed update timestamp\r\n\r\nWhen `includeDetails` is enabled, each listing also carries:\r\n\r\n- `priceHistory` — dated price events (listed, pending, contingent, sold) with source and MLS status\r\n- `taxHistory` — yearly tax rows with taxes due, land value, and improvement value\r\n- `taxAnnualAmount`, `taxYear` — latest tax row\r\n- `apn`, `county`, `countyUrl` — public-record identifiers\r\n- `publicRecordUpdatedDate`\r\n- `amenities` — grouped public-record and listing amenities such as bathroom counts, heating, fireplace, parking, lot information, and subdivision\r\n- `priceEstimateUrl` — Redfin's estimate page for the property\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `forSale` | `forSale` / `recentlySold` / `forRent` / `search` / `byUrl` |\r\n| `location` | string | `Austin, TX` | City/state, US state, ZIP, neighborhood, Redfin URL, or region token (ignored for mode=byUrl) |\r\n| `listingUrl` | string | – | Full Redfin listing URL (mode=byUrl) |\r\n| `keyword` | string | – | Case-insensitive keyword filter; required in `search` mode |\r\n| `propertyType` | string | `all` | `all` / `house` / `condo` / `townhouse` / `multifamily` / `land` / `other` |\r\n| `minPrice` | integer | – | Minimum sale price, or minimum monthly rent |\r\n| `maxPrice` | integer | – | Maximum sale price, or maximum monthly rent |\r\n| `minBeds` | integer | – | Minimum bedrooms |\r\n| `minBaths` | integer | – | Minimum bathrooms |\r\n| `minSqft` | integer | – | Minimum interior square footage |\r\n| `maxSqft` | integer | – | Maximum interior square footage |\r\n| `soldWithinDays` | integer | `180` | Sold window in `recentlySold` mode: 30 / 90 / 180 / 365 / 1095 / 1825 days |\r\n| `sort` | string | `recommended` | `recommended` / `newest` / `oldest` / `priceLowToHigh` / `priceHighToLow` |\r\n| `maxItems` | integer | `20` | Maximum records to return (1–20,000) |\r\n| `includeDetails` | boolean | `false` | Add price history, tax history, public records, and amenities |\r\n\r\n### Example: 3-bed homes under $600K in Austin\r\n\r\n```json\r\n{\r\n  \"mode\": \"forSale\",\r\n  \"location\": \"Austin, TX\",\r\n  \"minBeds\": 3,\r\n  \"maxPrice\": 600000,\r\n  \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Example: homes sold in the last 90 days in 90210\r\n\r\n```json\r\n{\r\n  \"mode\": \"recentlySold\",\r\n  \"location\": \"90210\",\r\n  \"soldWithinDays\": 90,\r\n  \"maxItems\": 30\r\n}\r\n```\r\n\r\n### Example: rentals in South Congress\r\n\r\n```json\r\n{\r\n  \"mode\": \"forRent\",\r\n  \"location\": \"South Congress, Austin, TX\",\r\n  \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: keyword search inside a city\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"location\": \"Austin, TX\",\r\n  \"keyword\": \"pool\",\r\n  \"sort\": \"priceHighToLow\",\r\n  \"maxItems\": 20\r\n}\r\n```\r\n\r\n### Example: fetch one listing with detail enrichment\r\n\r\n```json\r\n{\r\n  \"mode\": \"byUrl\",\r\n  \"listingUrl\": \"https://www.redfin.com/TX/Austin/11307-Jack-Rabbit-Trl-78750/home/32784952\",\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n## How location resolution works\r\n\r\n1. **Direct request** — Redfin's location autocomplete, with no proxy.\r\n2. **Automatic connection fallback** — if the direct request is blocked, the actor retries through Apify's datacenter proxy pool. No user proxy configuration is needed.\r\n3. **Deterministic fallback** — if autocomplete is unavailable from both paths, the actor parses the ZIP, city/state, neighborhood, state, Redfin URL, or region ID from your input and resolves a verified Redfin region.\r\n4. **State-level fallback** — an unknown city with a known state uses the verified state region and keeps only records whose city matches. Large states can return a Redfin GIS timeout at state scope; the run status reports it.\r\n5. **Location verification** — every returned home is checked against the requested city/state or ZIP. Homes from another area are dropped and reported in the run status instead of being emitted as wrong-city data.\r\n\r\n## Use cases\r\n\r\n- **Home search** — filter active listings by price, size, and bedroom count across a city\r\n- **Comparable sales** — pull recently sold homes with sold price and sold date\r\n- **Rental market tracking** — monitor asking rents and available units by building\r\n- **Lead generation** — collect listing agents, brokerages, and property details\r\n- **Investment screening** — scan price-per-square-foot, days on market, lot size, tax history, and price history\r\n\r\n## FAQ\r\n\r\n**Does this require an account or API key?** No. It reads Redfin's public listing data with no login. Connections are handled automatically.\r\n\r\n**Which locations are supported?** Any US city, ZIP, neighborhood, or state that Redfin covers. Major metros, common ZIPs, neighborhoods, and states also work when Redfin's autocomplete is blocked. For a city outside the offline seed, the actor scans the state and keeps matching-city records; large states may return a source timeout. A Redfin URL or region ID always avoids that lookup.\r\n\r\n**How does `search` differ from `forSale`?** `search` requires a `keyword` and keeps only active listings whose address, description, tags, key facts, subdivision, or building name contains that keyword. `forSale` returns every active listing in the location.\r\n\r\n**What does `price` mean for rentals?** It is the starting monthly rent for that building. The full range is in `rentPriceMin` / `rentPriceMax`, and unit-size ranges are in the `*Min` / `*Max` fields.\r\n\r\n**Are sold prices the same as list prices?** No. `soldPrice` and `soldDate` are populated only for listings Redfin reports as sold. Active listings never carry a sold price.\r\n\r\n**Why are some fields missing?** Redfin does not expose every detail for every property. Empty fields are omitted, not filled with placeholders.\r\n\r\n**Can I get tax history, price history, and amenities?** Yes. Set `includeDetails: true` to call Redfin's cookieless below-the-fold detail API for each emitted listing. This adds one request per listing and returns price history, tax history, public-record fields, and grouped amenities. School ratings, climate scores, and buyer-agent contact details are not part of that payload and are not included.\r\n\r\n**How many listings can I get per run?** Up to 20,000, which is a self-imposed cap. Redfin returned homes at a start offset of 19,950 in verification; deeper offsets in very large regions can return an empty page. The actor de-duplicates by property ID.\r\n\r\n**Is this affiliated with Redfin?** No. This actor reads publicly available Redfin listing data and is not affiliated with or endorsed by Redfin.\r\n\r\n## Verification status\r\n\r\nThe local build was verified with `pytest` and local actor runs (sale, sold, rent, ZIP, neighborhood, state fallback, sort, keyword, detail enrichment, and by-URL). Cloud runs from an earlier build are recorded in `docs/FINAL-AUDIT.md`; this build has not been pushed to the test slug, and production was not promoted. Redfin HTML property pages return a 202 AWS WAF challenge to cookieless clients, while the GIS, rental, below-the-fold detail, region, sitemap, and CDN media endpoints used by this actor return 200.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "redfin-sale-rental-and-sold-listings-scraper",
      "title": "Redfin Sale, Rental & Sold Listings Scraper",
      "description": "Scrape Redfin listings for sale, recently sold, or rent by location, keyword, or URL. Get price, beds, baths, sqft, address, coordinates, agents, photos, open houses, tours, and optional price/tax history.",
      "version": "1.1",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Redfin Sale, Rental & Sold Listings Scraper\r\n\r\nCollect property listings from [Redfin.com](https://www.redfin.com) for any supported US location — homes for sale, recently sold homes, rentals, keyword matches, or a single listing from its Redfin URL. No login, API key, or proxy setup is required.\r\n\r\n## What this actor does\r\n\r\n- Searches active for-sale listings by city, ZIP, neighborhood, US state, Redfin search URL, or explicit region ID\r\n- Searches recently sold homes with a configurable 30-day to 5-year window\r\n- Searches rental listings, including rent ranges, unit ranges, and availability\r\n- Filters listings by keyword across address, description, tags, key facts, subdivision, and building name\r\n- Fetches one specific listing from its Redfin URL\r\n- Sorts by recommended, newest, oldest, price ascending, or price descending\r\n- Pages through Redfin results for large pulls (up to 20,000 records)\r\n- Filters by property type, price, bedrooms, bathrooms, and square footage\r\n- Verifies that returned homes actually belong to the requested location, so a bad region ID cannot silently return another city\r\n- Optionally enriches each listing with price history, tax history, public records, and amenities\r\n- Emits clean records with empty fields omitted\r\n\r\n## Location input\r\n\r\n`location` accepts any of these forms:\r\n\r\n| Form | Example |\r\n|---|---|\r\n| City and state | `Austin, TX` |\r\n| US state | `Texas`, `TX` |\r\n| ZIP code | `90210`, `10001`, `78701` |\r\n| Neighborhood | `South Congress, Austin, TX` |\r\n| Redfin search URL | `https://www.redfin.com/city/30818/TX/Austin` |\r\n| Region token | `6_30818` (`<region_type>_<region_id>`) |\r\n\r\nRedfin's own autocomplete is tried first. When it is unavailable from the current network, the actor falls back to verified region IDs for major cities, common ZIPs, neighborhoods, and all 50 states plus DC. A city that is not in the offline seed is handled in two steps: the actor scans the state-level GIS region and keeps only records whose city matches, and reports the fallback in the run status. Very large states can return a Redfin GIS service timeout at state level; in that case the status message recommends a ZIP, city URL, or region ID. This is a state-level fallback, not a fix for Redfin autocomplete.\r\n\r\n## Output per listing\r\n\r\nCore fields:\r\n\r\n- `recordType` — always `listing`\r\n- `url` — direct Redfin listing URL\r\n- `propertyId` — Redfin's internal property ID\r\n- `listingId` — Redfin listing ID\r\n- `mlsId` — MLS number, when the listing carries one\r\n- `price` — sale price, or starting monthly rent in `forRent` mode\r\n- `listingType` — `sale`, `sold`, or `rent`\r\n- `status` — `Active`, `Pending`, `Sold`, `For Rent`, etc.\r\n- `propertyType` — `House`, `Condo`, `Townhouse`, `Multi-family`, `Land`, etc.\r\n- `beds`, `baths`, `fullBaths`, `partialBaths` — bedrooms and bathroom counts\r\n- `sqft` — interior square footage\r\n- `lotSize` — lot size in square feet\r\n- `yearBuilt`, `yearRenovated`, `stories`\r\n- `pricePerSqft` — for sale and sold listings\r\n- `daysOnMarket`, `timeOnRedfinDays`, `originalTimeOnRedfinDays`\r\n- `address`, `unit`, `city`, `state`, `zip`\r\n- `latitude`, `longitude`\r\n- `subdivision`\r\n- `hoaFee` — monthly HOA fee, when the property has one\r\n- `listingAgent`, `listingAgentId`, `brokerName`, `listingCoBroker`\r\n- `description`, `listingTags`, `keyFacts`, `badges`\r\n- `hasVirtualTour`, `hasVideoTour`, `has3DTour`, `scanUrl`, `posterFrameUrl`\r\n- `isNewConstruction`, `isHot`, `hotnessMessage`, `hotnessAction`, `hasInsight`\r\n- `poolTypeCode` — Redfin's raw `skPoolType` code; Redfin does not document the label mapping\r\n- `openHouseStart`, `openHouseEnd`, `openHouseEventName`\r\n- `imageUrls` — up to 10 property photo URLs\r\n- `photoCount`\r\n- `garageSpaces`, `parkingSpaces`\r\n- `scrapedAt` — ISO 8601 timestamp of the scrape\r\n\r\nSold listings also carry:\r\n\r\n- `soldPrice` — final sale price\r\n- `soldDate` — sale date in ISO format\r\n- `sellingAgent`, `sellingAgentId`, `sellingBroker` — when Redfin exposes them\r\n\r\nRental listings also carry:\r\n\r\n- `rentPrice` — starting monthly rent\r\n- `rentPriceMin`, `rentPriceMax`\r\n- `bedsMin`, `bedsMax`, `bathsMin`, `bathsMax`, `sqftMin`, `sqftMax`\r\n- `propertyName` — building or community name\r\n- `availableUnits` — number of available units\r\n- `lastUpdated` — feed update timestamp\r\n\r\nWhen `includeDetails` is enabled, each listing also carries:\r\n\r\n- `priceHistory` — dated price events (listed, pending, contingent, sold) with source and MLS status\r\n- `taxHistory` — yearly tax rows with taxes due, land value, and improvement value\r\n- `taxAnnualAmount`, `taxYear` — latest tax row\r\n- `apn`, `county`, `countyUrl` — public-record identifiers\r\n- `publicRecordUpdatedDate`\r\n- `amenities` — grouped public-record and listing amenities such as bathroom counts, heating, fireplace, parking, lot information, and subdivision\r\n- `priceEstimateUrl` — Redfin's estimate page for the property\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `forSale` | `forSale` / `recentlySold` / `forRent` / `search` / `byUrl` |\r\n| `location` | string | `Austin, TX` | City/state, US state, ZIP, neighborhood, Redfin URL, or region token (ignored for mode=byUrl) |\r\n| `listingUrl` | string | – | Full Redfin listing URL (mode=byUrl) |\r\n| `keyword` | string | – | Case-insensitive keyword filter; required in `search` mode |\r\n| `propertyType` | string | `all` | `all` / `house` / `condo` / `townhouse` / `multifamily` / `land` / `other` |\r\n| `minPrice` | integer | – | Minimum sale price, or minimum monthly rent |\r\n| `maxPrice` | integer | – | Maximum sale price, or maximum monthly rent |\r\n| `minBeds` | integer | – | Minimum bedrooms |\r\n| `minBaths` | integer | – | Minimum bathrooms |\r\n| `minSqft` | integer | – | Minimum interior square footage |\r\n| `maxSqft` | integer | – | Maximum interior square footage |\r\n| `soldWithinDays` | integer | `180` | Sold window in `recentlySold` mode: 30 / 90 / 180 / 365 / 1095 / 1825 days |\r\n| `sort` | string | `recommended` | `recommended` / `newest` / `oldest` / `priceLowToHigh` / `priceHighToLow` |\r\n| `maxItems` | integer | `20` | Maximum records to return (1–20,000) |\r\n| `includeDetails` | boolean | `false` | Add price history, tax history, public records, and amenities |\r\n\r\n### Example: 3-bed homes under $600K in Austin\r\n\r\n```json\r\n{\r\n  \"mode\": \"forSale\",\r\n  \"location\": \"Austin, TX\",\r\n  \"minBeds\": 3,\r\n  \"maxPrice\": 600000,\r\n  \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Example: homes sold in the last 90 days in 90210\r\n\r\n```json\r\n{\r\n  \"mode\": \"recentlySold\",\r\n  \"location\": \"90210\",\r\n  \"soldWithinDays\": 90,\r\n  \"maxItems\": 30\r\n}\r\n```\r\n\r\n### Example: rentals in South Congress\r\n\r\n```json\r\n{\r\n  \"mode\": \"forRent\",\r\n  \"location\": \"South Congress, Austin, TX\",\r\n  \"maxItems\": 25\r\n}\r\n```\r\n\r\n### Example: keyword search inside a city\r\n\r\n```json\r\n{\r\n  \"mode\": \"search\",\r\n  \"location\": \"Austin, TX\",\r\n  \"keyword\": \"pool\",\r\n  \"sort\": \"priceHighToLow\",\r\n  \"maxItems\": 20\r\n}\r\n```\r\n\r\n### Example: fetch one listing with detail enrichment\r\n\r\n```json\r\n{\r\n  \"mode\": \"byUrl\",\r\n  \"listingUrl\": \"https://www.redfin.com/TX/Austin/11307-Jack-Rabbit-Trl-78750/home/32784952\",\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n## How location resolution works\r\n\r\n1. **Direct request** — Redfin's location autocomplete, with no proxy.\r\n2. **Automatic connection fallback** — if the direct request is blocked, the actor retries through Apify's datacenter proxy pool. No user proxy configuration is needed.\r\n3. **Deterministic fallback** — if autocomplete is unavailable from both paths, the actor parses the ZIP, city/state, neighborhood, state, Redfin URL, or region ID from your input and resolves a verified Redfin region.\r\n4. **State-level fallback** — an unknown city with a known state uses the verified state region and keeps only records whose city matches. Large states can return a Redfin GIS timeout at state scope; the run status reports it.\r\n5. **Location verification** — every returned home is checked against the requested city/state or ZIP. Homes from another area are dropped and reported in the run status instead of being emitted as wrong-city data.\r\n\r\n## Use cases\r\n\r\n- **Home search** — filter active listings by price, size, and bedroom count across a city\r\n- **Comparable sales** — pull recently sold homes with sold price and sold date\r\n- **Rental market tracking** — monitor asking rents and available units by building\r\n- **Lead generation** — collect listing agents, brokerages, and property details\r\n- **Investment screening** — scan price-per-square-foot, days on market, lot size, tax history, and price history\r\n\r\n## FAQ\r\n\r\n**Does this require an account or API key?** No. It reads Redfin's public listing data with no login. Connections are handled automatically.\r\n\r\n**Which locations are supported?** Any US city, ZIP, neighborhood, or state that Redfin covers. Major metros, common ZIPs, neighborhoods, and states also work when Redfin's autocomplete is blocked. For a city outside the offline seed, the actor scans the state and keeps matching-city records; large states may return a source timeout. A Redfin URL or region ID always avoids that lookup.\r\n\r\n**How does `search` differ from `forSale`?** `search` requires a `keyword` and keeps only active listings whose address, description, tags, key facts, subdivision, or building name contains that keyword. `forSale` returns every active listing in the location.\r\n\r\n**What does `price` mean for rentals?** It is the starting monthly rent for that building. The full range is in `rentPriceMin` / `rentPriceMax`, and unit-size ranges are in the `*Min` / `*Max` fields.\r\n\r\n**Are sold prices the same as list prices?** No. `soldPrice` and `soldDate` are populated only for listings Redfin reports as sold. Active listings never carry a sold price.\r\n\r\n**Why are some fields missing?** Redfin does not expose every detail for every property. Empty fields are omitted, not filled with placeholders.\r\n\r\n**Can I get tax history, price history, and amenities?** Yes. Set `includeDetails: true` to call Redfin's cookieless below-the-fold detail API for each emitted listing. This adds one request per listing and returns price history, tax history, public-record fields, and grouped amenities. School ratings, climate scores, and buyer-agent contact details are not part of that payload and are not included.\r\n\r\n**How many listings can I get per run?** Up to 20,000, which is a self-imposed cap. Redfin returned homes at a start offset of 19,950 in verification; deeper offsets in very large regions can return an empty page. The actor de-duplicates by property ID.\r\n\r\n**Is this affiliated with Redfin?** No. This actor reads publicly available Redfin listing data and is not affiliated with or endorsed by Redfin.\r\n\r\n## Verification status\r\n\r\nThe local build was verified with `pytest` and local actor runs (sale, sold, rent, ZIP, neighborhood, state fallback, sort, keyword, detail enrichment, and by-URL). Cloud runs from an earlier build are recorded in `docs/FINAL-AUDIT.md`; this build has not been pushed to the test slug, and production was not promoted. Redfin HTML property pages return a 202 AWS WAF challenge to cookieless clients, while the GIS, rental, below-the-fold detail, region, sitemap, and CDN media endpoints used by this actor return 200.\r\n",
      "input": {
        "title": "Redfin Scraper Input",
        "description": "Search Redfin for real estate listings — for sale, recently sold, or rental properties.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What type of listings to fetch.",
            "editor": "select",
            "enum": [
              "forSale",
              "recentlySold",
              "forRent",
              "search",
              "byUrl"
            ],
            "enumTitles": [
              "For Sale — active listings",
              "Recently Sold — sold within the chosen window",
              "For Rent — rental listings",
              "Search — keyword filter within a location",
              "By URL — fetch a single Redfin listing URL"
            ],
            "default": "forSale",
            "prefill": "forSale"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City and state (`Austin, TX`), ZIP (`90210`, `10001`, `78701`), neighborhood (`South Congress, Austin, TX`), Redfin search URL, or a region token such as `6_30818` (city region 30818).",
            "editor": "textfield",
            "default": "Austin, TX",
            "prefill": "Austin, TX"
          },
          "listingUrl": {
            "title": "Listing URL (mode=byUrl)",
            "type": "string",
            "description": "Full Redfin listing URL containing `/home/<id>`, e.g. `https://www.redfin.com/TX/Austin/123-Main-St-78701/home/12345678`.",
            "editor": "textfield"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Case-insensitive keyword matched against address, description, listing tags, key facts, subdivision, and building name. Required in `search` mode and optional in other modes.",
            "editor": "textfield"
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "Filter by property type. Applied server-side where Redfin supports it and re-checked in the actor.",
            "editor": "select",
            "enum": [
              "all",
              "house",
              "condo",
              "townhouse",
              "multifamily",
              "land",
              "other"
            ],
            "enumTitles": [
              "All types",
              "House",
              "Condo / Apartment",
              "Townhouse",
              "Multi-family",
              "Land",
              "Other"
            ],
            "default": "all",
            "prefill": "all",
            "sectionCaption": "Filters",
            "sectionDescription": "Optional price, bedroom, bathroom, size, and sold-window filters."
          },
          "minPrice": {
            "title": "Min price ($)",
            "type": "integer",
            "description": "Minimum sale price, or minimum monthly rent in forRent mode.",
            "minimum": 0,
            "maximum": 100000000
          },
          "maxPrice": {
            "title": "Max price ($)",
            "type": "integer",
            "description": "Maximum sale price, or maximum monthly rent in forRent mode.",
            "minimum": 0,
            "maximum": 100000000
          },
          "minBeds": {
            "title": "Min bedrooms",
            "type": "integer",
            "description": "Minimum number of bedrooms.",
            "minimum": 0,
            "maximum": 20
          },
          "minBaths": {
            "title": "Min bathrooms",
            "type": "integer",
            "description": "Minimum number of bathrooms.",
            "minimum": 0,
            "maximum": 20
          },
          "minSqft": {
            "title": "Min square footage",
            "type": "integer",
            "description": "Minimum interior square footage.",
            "minimum": 0,
            "maximum": 100000
          },
          "maxSqft": {
            "title": "Max square footage",
            "type": "integer",
            "description": "Maximum interior square footage.",
            "minimum": 0,
            "maximum": 100000
          },
          "soldWithinDays": {
            "title": "Sold within (days)",
            "type": "string",
            "description": "How far back to search in recentlySold mode. Ignored in other modes.",
            "editor": "select",
            "enum": [
              "30",
              "90",
              "180",
              "365",
              "1095",
              "1825"
            ],
            "enumTitles": [
              "Last 30 days",
              "Last 90 days",
              "Last 180 days",
              "Last year",
              "Last 3 years",
              "Last 5 years"
            ],
            "default": "180",
            "prefill": "180"
          },
          "sort": {
            "title": "Sort order",
            "type": "string",
            "description": "Result ordering. Verified against Redfin's GIS and rental APIs.",
            "editor": "select",
            "enum": [
              "recommended",
              "newest",
              "oldest",
              "priceLowToHigh",
              "priceHighToLow"
            ],
            "enumTitles": [
              "Recommended",
              "Newest (least time on Redfin)",
              "Oldest (most time on Redfin)",
              "Price: low to high",
              "Price: high to low"
            ],
            "default": "recommended",
            "prefill": "recommended"
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on emitted records (1-20,000). This is a self-imposed cap; Redfin returned homes at a start offset of 19,950 in verification. Deep offsets in very large regions can return an empty page.",
            "minimum": 1,
            "maximum": 20000,
            "default": 20,
            "prefill": 3,
            "sectionCaption": "Output",
            "sectionDescription": "How many records to return."
          },
          "includeDetails": {
            "title": "Include detail enrichment",
            "type": "boolean",
            "description": "Fetch each listing's below-the-fold detail payload: price history, tax history, public records (APN, county, year renovated), and amenities. Adds one request per emitted listing.",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Redfin Sale, Rental & Sold Listings Scraper Output",
        "description": "Real estate listings from Redfin — price, address, beds, baths, sqft, images, agent, listing type, sold price/date, rent ranges, open houses, tours, and optional price/tax history and amenities.",
        "properties": {
          "listings": {
            "type": "string",
            "title": "Redfin listings",
            "description": "Dataset containing all scraped Redfin property listings.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Listings",
              "transformation": {
                "fields": [
                  "address",
                  "city",
                  "state",
                  "zip",
                  "price",
                  "listingType",
                  "status",
                  "beds",
                  "baths",
                  "sqft",
                  "soldPrice",
                  "soldDate",
                  "rentPrice",
                  "propertyName",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.1.1",
    "imageDigest": "c6aa6c03b2ce0440ef68112d2628db71677f65548ae542e54e81a8cadbca9a54",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.010767777777777777
    }
  }
}