{
  "openapi": "3.0.1",
  "info": {
    "title": "Redfin Real-Time Data Scraper — Listings & Agent Leads",
    "description": "Collect US property listings with listing-agent contact details — name, phone, email, brokerage, socials — across 60 metros. Filter by price, beds, baths, size, status, days on market. Structured JSON streams to your dataset in real time. Paid plans only; free accounts get a small sample.",
    "version": "0.0",
    "x-build-id": "HPNeuhMZluaN8nSmO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/b2b_leads~Redfin-Real-Time-Data-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-b2b_leads-Redfin-Real-Time-Data-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/b2b_leads~Redfin-Real-Time-Data-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-b2b_leads-Redfin-Real-Time-Data-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/b2b_leads~Redfin-Real-Time-Data-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-b2b_leads-Redfin-Real-Time-Data-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": {
          "searchLocations": {
            "title": "Metros to collect",
            "type": "array",
            "description": "One row per US metro. Supported metros: Austin TX, Albuquerque NM, Atlanta GA, Baltimore MD, Boise ID, Boston MA, Buffalo NY, Charleston SC, Charlotte NC, Chicago IL, Cincinnati OH, Cleveland OH, Colorado Springs CO, Columbus OH, Dallas TX, Denver CO, Des Moines IA, Detroit MI, Fresno CA, Fort Worth TX, Greenville SC, Hartford CT, Honolulu HI, Houston TX, Indianapolis IN, Jacksonville FL, Kansas City MO, Las Vegas NV, Louisville KY, Los Angeles CA, Memphis TN, Miami FL, Milwaukee WI, Minneapolis MN, Nashville TN, New Orleans LA, New York NY, Oklahoma City OK, Omaha NE, Orlando FL, Philadelphia PA, Phoenix AZ, Pittsburgh PA, Portland OR, Providence RI, Raleigh NC, Richmond VA, Riverside CA, Sacramento CA, Salt Lake City UT, San Antonio TX, San Diego CA, San Francisco CA, San Jose CA, Seattle WA, St. Louis MO, Tampa FL, Tucson AZ, Virginia Beach VA, Washington DC. Write them as \"City, ST\" (e.g. \"Miami, FL\"). Every listing found is exported to your dataset as it is collected.",
            "default": [
              "Austin, TX"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerSearch": {
            "title": "Max results per metro",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many listings to collect for each metro in the list above. The Actor keeps collecting for a metro until it reaches this number or runs out of matches — whichever comes first. NOTE: on the Apify free plan each metro is capped to a small free sample; paid plans get the full value. See the README for current free-tier limits.",
            "default": 10
          },
          "statusFilter": {
            "title": "Listing status",
            "type": "array",
            "description": "Keep only listings with these statuses. Leave empty (default) to keep every status. Values: active, coming_soon, pending.",
            "items": {
              "type": "string",
              "enum": [
                "active",
                "coming_soon",
                "pending"
              ],
              "enumTitles": [
                "Active",
                "Coming soon",
                "Pending"
              ]
            },
            "default": []
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Keep only these property types. Leave empty (default) to keep every residential and land type.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "condo",
                "townhouse",
                "multi_family",
                "land",
                "other"
              ],
              "enumTitles": [
                "House",
                "Condo",
                "Townhouse",
                "Multi-family",
                "Land",
                "Other"
              ]
            },
            "default": []
          },
          "enableLeadDetails": {
            "title": "Enable lead details",
            "type": "boolean",
            "description": "Attach the listing agent's contact details to every listing: agent name, direct phone, office phone, email address, agent profile link, agency/brokerage name, website, and social profiles. Every listing is exported whether or not lead details are found — results are never filtered by lead completeness, so your cost per result and runtime stay predictable. Adds a little extra time per property.",
            "default": true
          },
          "minPrice": {
            "title": "Minimum price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty for no lower bound. Listings without a published price are dropped when this is set."
          },
          "maxPrice": {
            "title": "Maximum price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave empty for no upper bound. Listings without a published price are dropped when this is set."
          },
          "minBeds": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at least this many bedrooms."
          },
          "maxBeds": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at most this many bedrooms."
          },
          "minBaths": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "type": "number",
            "description": "Only keep listings with at least this many bathrooms (decimals allowed, e.g. 2.5)."
          },
          "minSqft": {
            "title": "Minimum living area (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or above this living area."
          },
          "maxSqft": {
            "title": "Maximum living area (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or below this living area."
          },
          "maxDaysOnMarket": {
            "title": "Maximum days on market",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings that have been on the market for at most this many days. Great for spotting fresh inventory."
          },
          "maxItems": {
            "title": "Max total results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard ceiling on the total number of rows exported in this run, across every metro. This is the main cost lever and also the main runtime lever. NOTE: on the Apify free plan the global total is capped to a small free sample; paid plans get the full value you set here. See the README for current free-tier limits.",
            "default": 100
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional. Every row is always saved to the run's dataset — this webhook is an ADDITIONAL real-time push. When set, each new row is also POSTed to this URL (CRM, Slack incoming webhook, Zapier, Make, Google Sheets).",
            "default": ""
          },
          "webhookFormat": {
            "title": "Webhook format",
            "enum": [
              "json",
              "slack"
            ],
            "type": "string",
            "description": "json = the full row object; slack = a Slack-friendly message payload.",
            "default": "json"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}