{
  "openapi": "3.0.1",
  "info": {
    "title": "Redfin Scraper - MLS Property Listings, Rentals, Market Stats",
    "description": "Redfin scraper with no pagination needed: 5876 Austin listings in one request where Redfin's own Download All export stops at 350. An unknown region answers HTTP 200 with homes in Seattle, so the state and ZIP of every row are checked against your address. Redfin property data, rentals.",
    "version": "0.1",
    "x-build-id": "xPrpix3sjTdvG6xMr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/snow_leo_data~redfin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-snow_leo_data-redfin-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/snow_leo_data~redfin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-snow_leo_data-redfin-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/snow_leo_data~redfin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-snow_leo_data-redfin-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "locations": {
            "title": "Locations (Redfin page addresses or ZIP codes)",
            "type": "array",
            "description": "Paste Redfin page addresses - city (https://www.redfin.com/city/30818/TX/Austin), county, neighborhood, ZIP (https://www.redfin.com/zipcode/78704) or a single property (/TX/Austin/3915-Idalia-Dr-78749/home/31804526). A bare five-digit ZIP code works too. One request returns the whole region: 5,876 Austin listings arrived in a single response, against the 350-row ceiling of Redfin's own CSV export.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "What to collect",
            "enum": [
              "forSale",
              "rentals",
              "propertyDetails",
              "marketStats"
            ],
            "type": "string",
            "description": "Homes for sale, rentals, property cards for the addresses you pasted, or one market-statistics row per region (median sale price, sale-to-list, compete score, mortgage rates).",
            "default": "forSale"
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many rows have been DELIVERED, not merely looked at - so a narrow filter still fills the quota. 0 means no limit.",
            "default": 100
          },
          "maxHomesPerLocation": {
            "title": "Listings to ask Redfin for, per location",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Redfin's search endpoint has no pages: page_number=2 returns the first page byte for byte (measured), and this is the only lever. 350 is what the website itself uses; 5,876 listings came back in one response when this was set high. Rentals are capped by the source at 350.",
            "default": 2000
          },
          "includeDetails": {
            "title": "Fetch the full property card",
            "type": "boolean",
            "description": "On: every listing is also read from its Redfin property page - parcel number, county tax rate, agent and brokerage, full agent description, schools, flood/fire/heat/wind/air risk, walk and transit scores, building permits, zoning, MLS feature list and photo links. Costs one extra request per listing (about 0.9 MB), so keep 'Property cards' below sane. Off: the search fields only.",
            "default": false
          },
          "maxDetails": {
            "title": "Property cards per run",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard ceiling on how many property pages are opened when the card is switched on. 0 means no ceiling.",
            "default": 50
          },
          "includeMarketStats": {
            "title": "Add a market row per region",
            "type": "boolean",
            "description": "Adds one extra row per location with Redfin's own regional numbers: median list and sale price, median sale-to-list, average offers, homes sold, homes on market, compete score and today's mortgage rates.",
            "default": false
          },
          "verifyRegion": {
            "title": "Verify the region Redfin answers with",
            "type": "boolean",
            "description": "Measured: an unknown region id answers HTTP 200, 'Success' and homes in Seattle. With this on, the state and ZIP of the returned homes are checked against the address you pasted and mismatched rows are dropped instead of being handed to you as your region.",
            "default": true
          },
          "minPrice": {
            "title": "Min price, USD",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings priced at or above this. 0 switches the filter off. Rentals are matched on the lowest advertised rent.",
            "default": 0
          },
          "maxPrice": {
            "title": "Max price, USD",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings priced at or below this. 0 switches the filter off.",
            "default": 0
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings with at least this many bedrooms. 0 switches the filter off.",
            "default": 0
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings with at most this many bedrooms. 0 switches the filter off.",
            "default": 0
          },
          "minBaths": {
            "title": "Min bathrooms",
            "minimum": 0,
            "type": "number",
            "description": "Keep listings with at least this many bathrooms, half baths included. 0 switches the filter off.",
            "default": 0
          },
          "minSqft": {
            "title": "Min living area",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings whose living area is at least this. 0 switches the filter off.",
            "default": 0
          },
          "maxSqft": {
            "title": "Max living area",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings whose living area is at most this. 0 switches the filter off.",
            "default": 0
          },
          "minLotSqft": {
            "title": "Min lot size",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings whose lot is at least this big. Redfin leaves the lot empty for most condos, and a listing with an empty lot passes the filter.",
            "default": 0
          },
          "minYearBuilt": {
            "title": "Built no earlier than",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings built in this year or later. 0 switches the filter off.",
            "default": 0
          },
          "maxYearBuilt": {
            "title": "Built no later than",
            "minimum": 0,
            "type": "integer",
            "description": "Keep listings built in this year or earlier. 0 switches the filter off.",
            "default": 0
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Redfin's own eight types. Empty means all of them. Rentals carry no property type at all, so this filter and the rentals mode together are refused before a single request is sent.",
            "items": {
              "type": "string",
              "enum": [
                "House",
                "Condo",
                "Townhouse",
                "Multi-family",
                "Land",
                "Other",
                "Manufactured",
                "Co-op"
              ],
              "enumTitles": [
                "House",
                "Condo",
                "Townhouse",
                "Multi-family",
                "Land",
                "Other",
                "Manufactured",
                "Co-op"
              ]
            },
            "default": []
          },
          "maxDaysOnMarket": {
            "title": "Max days on market",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only listings that have been on the market no longer than this. 0 switches the filter off.",
            "default": 0
          },
          "onlyOpenHouses": {
            "title": "Only with an open house",
            "type": "boolean",
            "description": "Keep only listings carrying an open house slot. Measured on a live Austin response: 90 of 350 listings had one.",
            "default": false
          },
          "onlyNewConstruction": {
            "title": "Only new construction",
            "type": "boolean",
            "description": "Keep only listings Redfin marks as new construction.",
            "default": false
          },
          "onlyWithPhotos": {
            "title": "Only with photos",
            "type": "boolean",
            "description": "Keep only listings that carry at least one photo.",
            "default": false
          },
          "addressContains": {
            "title": "Address contains",
            "type": "string",
            "description": "Plain text matched against the address, city, ZIP, neighborhood and region label.",
            "default": ""
          },
          "descriptionContains": {
            "title": "Description contains",
            "type": "string",
            "description": "Plain text matched against the agent description and the MLS feature list. The MLS description ships with the search response for most listings; the feature list needs the property card, so with the card off this filter is refused before any request.",
            "default": ""
          },
          "labelContains": {
            "title": "Label contains",
            "type": "string",
            "description": "Matched against Redfin's own badges - OPEN HOUSE, PRICE DROP, HOT HOME, NEW, COMING SOON - and the listing status.",
            "default": ""
          },
          "minWalkScore": {
            "title": "Min walk score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Property-card field. With the card off this filter is refused before any request instead of silently emptying the dataset.",
            "default": 0
          },
          "minTransitScore": {
            "title": "Min transit score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Property-card field, same rule as the walk score.",
            "default": 0
          },
          "minPermits": {
            "title": "Min building permits on record",
            "minimum": 0,
            "type": "integer",
            "description": "Property-card field: how many permits the county has on this parcel. Useful for spotting renovated stock.",
            "default": 0
          },
          "onlyChanged": {
            "title": "Only new or changed listings",
            "type": "boolean",
            "description": "Monitor mode. The Actor remembers every listing it has delivered in a named key-value store and, on the next run, writes only the ones that are new or whose price, status, open house or agent moved. Every row carries change_type and, when something moved, changed_fields with the before and after value.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Emit unchanged rows too",
            "type": "boolean",
            "description": "Keeps the change_type labels but writes every listing, changed or not.",
            "default": false
          },
          "compactOutput": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Twenty decision fields per row instead of sixty-three - address, price, beds, baths, size, type, status, days on market, coordinates. Made for LLM agents and for cheap storage.",
            "default": false
          },
          "dropEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Leaves out keys whose value is empty, so a row carries only what Redfin actually published for that listing.",
            "default": false
          },
          "includeRawRecord": {
            "title": "Include the raw Redfin record",
            "type": "boolean",
            "description": "Attaches Redfin's untouched object under 'raw' next to the flat columns, for anything this Actor does not map.",
            "default": false
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many property cards to fetch at once. The search itself is one request per location.",
            "default": 4
          },
          "timeoutSeconds": {
            "title": "Request timeout",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "A whole-region response can be several megabytes, so this is deliberately generous.",
            "default": 90
          },
          "inputDatasetId": {
            "title": "Read locations from a dataset",
            "type": "string",
            "description": "Dataset id from another Actor run. Every item's url field is treated as a location, which chains this Actor after any other one.",
            "default": ""
          },
          "urlField": {
            "title": "Field holding the URL in that dataset",
            "type": "string",
            "description": "Which field of that dataset holds the Redfin address. Defaults to url.",
            "default": "url"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}