{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com [$1.5💰] API | Search&Detail Page | Agent | Scraper",
    "description": "💰$1.50 per 1,000 results. Effortlessly scrape real estate data from Realtor.com, including property listings AND agent profiles. Extract property details like prices, amenities, locations, and photos, plus agent information such as contact details, reviews, specializations, and performance metrics.",
    "version": "0.0",
    "x-build-id": "YybPBjixuFJajqtgG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~realtor-search-cheerio/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-realtor-search-cheerio",
        "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/memo23~realtor-search-cheerio/runs": {
      "post": {
        "operationId": "runs-sync-memo23-realtor-search-cheerio",
        "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/memo23~realtor-search-cheerio/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-realtor-search-cheerio",
        "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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 50,
            "type": "array",
            "description": "URLs to start with. Use a real Realtor.com search URL to mirror exactly what you see in the browser. Clear this list and use the 'Scrape with search filters' section below if you prefer a guided form.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "agentZipCodes": {
            "title": "Agent ZIP codes (Agent Search only)",
            "maxItems": 50,
            "type": "array",
            "description": "List of ZIP codes to search for agents (e.g. 32963, 90210). Each becomes a /realestateagents/{zip} URL. Leave empty when scraping listings.",
            "items": {
              "type": "string"
            }
          },
          "searchLocations": {
            "title": "Locations",
            "maxItems": 50,
            "type": "array",
            "description": "City, ZIP code, neighborhood or state to search. Examples: 'Las Vegas, NV', 'Corinth_TX', '90026', 'Brooklyn, NY'. Add as many as you need.",
            "items": {
              "type": "string"
            }
          },
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "for_sale",
              "sold"
            ],
            "type": "string",
            "description": "Top-level search mode. Choose 'For sale / Off market' to use the Statuses filter below, or 'Sold' for recently sold listings (last 6 months window).",
            "default": "for_sale"
          },
          "searchStatuses": {
            "title": "Statuses (only when 'For sale / Off market' mode)",
            "type": "array",
            "description": "Which listing statuses to include. Defaults to active 'For Sale' + 'Ready to Build'. Add 'Pending' or 'Coming Soon' to get the listings the client cares about. Ignored in 'Sold' mode.",
            "items": {
              "type": "string",
              "enum": [
                "for_sale",
                "ready_to_build",
                "pending",
                "coming_soon",
                "contingent"
              ],
              "enumTitles": [
                "For Sale",
                "Ready to Build (new construction)",
                "Pending",
                "Coming Soon",
                "Contingent"
              ]
            },
            "default": [
              "for_sale",
              "ready_to_build"
            ]
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Filter by one or more property types. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "single_family",
                "townhomes",
                "condo_townhome",
                "multi_family",
                "land",
                "farm",
                "manufactured",
                "mobile",
                "apartment",
                "coop",
                "duplex_triplex"
              ],
              "enumTitles": [
                "Single-family home",
                "Townhome",
                "Condo / Townhome",
                "Multi-family home",
                "Land",
                "Farm / Ranch",
                "Manufactured",
                "Mobile",
                "Apartment",
                "Co-op",
                "Duplex / Triplex"
              ]
            },
            "default": []
          },
          "priceMin": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum list price (or sold price when mode is 'Sold'). Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum list price (or sold price when mode is 'Sold'). Leave empty for no maximum."
          },
          "bedsMin": {
            "title": "Min beds",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms. Leave empty for any."
          },
          "bathsMin": {
            "title": "Min baths",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bathrooms. Leave empty for any."
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Free-text keyword that must appear in the listing description (e.g. 'roof', 'pool', 'new roof'). Leave empty to skip keyword filtering."
          },
          "maxItems": {
            "title": "Max results to scrape per crawl",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of listings/items/agents to scrape per crawl. Lower this for quick test runs; raise it (or leave the default) for full scrapes.",
            "default": 1000
          },
          "monitoringMode": {
            "title": "Monitoring mode (only newly listed items)",
            "type": "boolean",
            "description": "If checked, the scraper will only return listings that were not seen in previous runs (useful for daily/weekly delta runs).",
            "default": false
          },
          "fetchAgentListings": {
            "title": "Fetch active listings for each agent (Agent Search only)",
            "type": "boolean",
            "description": "If enabled, the scraper will fetch active listings for each agent. Only relevant when scraping agents.",
            "default": false
          },
          "additionalStats": {
            "title": "Fetch additional property stats",
            "type": "boolean",
            "description": "If enabled, the scraper will fetch additional property stats (price history, neighborhood stats) for each listing. Adds extra requests, so it slows the run down.",
            "default": false
          },
          "includePermitHistory": {
            "title": "Include permit history (paid add-on)",
            "type": "boolean",
            "description": "If enabled, the scraper will fetch the public-records 'Permit history' table for each property (date, type of work, project type, project name, status). A derived <code>has_roof_permit</code> flag is also added so you can spot roofing permits at a glance. Adds one extra request per property and is billed via the separate <code>permit-history</code> event, charged <strong>per permit row returned</strong> (e.g. a property with 3 permits = 3 charges; a property with no permits = 0 charges).",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time. Lower values (3-5) help prevent memory issues.",
            "default": 5
          },
          "minConcurrency": {
            "title": "Min concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}