{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com",
    "description": "Scrape real-estate listings from Realtor.com without the official API. Search by location or paste listing URLs and get price, address, beds, baths, size, lot, property type, year built, agent and broker info, photos, and listing URL as structured JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "zEmV6k1XyT1h7pKHR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lukass~realtor-com/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lukass-realtor-com",
        "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/lukass~realtor-com/runs": {
      "post": {
        "operationId": "runs-sync-lukass-realtor-com",
        "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/lukass~realtor-com/run-sync": {
      "post": {
        "operationId": "run-sync-lukass-realtor-com",
        "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": {
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "A single location to scrape, in plain text - a city (`Austin, TX`), ZIP code (`78701`), county (`Travis County, TX`) or state (`Texas`). Resolved by Realtor.com's own search. Leave empty if you use **Locations**, **Realtor.com URLs** or **Property IDs** instead."
          },
          "locations": {
            "title": "📍 Locations (multiple)",
            "type": "array",
            "description": "Several locations to scrape in one run - each a city, ZIP, county or state. Every entry is searched with the same filters and listing type.",
            "items": {
              "type": "string"
            }
          },
          "postalCodes": {
            "title": "📮 ZIP codes",
            "type": "array",
            "description": "US ZIP codes to scrape. An alias for **Locations** kept for the incremental ZIP-sweep workflow; each ZIP is searched the same way.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Realtor.com URLs",
            "type": "array",
            "description": "Realtor.com search or property URLs. A **search URL** (`/realestateandhomes-search/Austin_TX`) is turned back into a location search. A **property URL** (`/realestateandhomes-detail/…_M1234-56789`) is fetched directly by its ID. Filters below apply to search URLs too.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "propertyIds": {
            "title": "🆔 Property IDs",
            "type": "array",
            "description": "Realtor.com property IDs to fetch directly (e.g. `M1234-56789` or the numeric `property_id`). These skip the search entirely.",
            "items": {
              "type": "string"
            }
          },
          "zipCodesDatasetId": {
            "title": "🗂️ ZIP-code dataset",
            "type": "string",
            "description": "Dataset whose items hold ZIP codes (a `zip`, `postalCode` or `postal_code` field, or plain strings). For a scheduler that splits one big ZIP list across several runs - combine with the offset and limit below. Read-only."
          },
          "zipCodesOffset": {
            "title": "↪️ ZIP dataset offset",
            "minimum": 0,
            "type": "integer",
            "description": "Index of the first ZIP to take from the dataset above.",
            "default": 0
          },
          "zipCodesLimit": {
            "title": "🔢 ZIP dataset limit",
            "minimum": 1,
            "type": "integer",
            "description": "How many ZIPs to take from the dataset above. Empty means all of them from the offset onwards."
          },
          "searchType": {
            "title": "🏷️ Listing type",
            "enum": [
              "for_sale",
              "for_rent",
              "sold"
            ],
            "type": "string",
            "description": "Which listings to scrape.",
            "default": "for_sale"
          },
          "priceMin": {
            "title": "💰 Min price",
            "type": "integer",
            "description": "Lowest price to include. For **For rent** this is the monthly rent."
          },
          "priceMax": {
            "title": "💰 Max price",
            "type": "integer",
            "description": "Highest price to include."
          },
          "bedsMin": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms."
          },
          "bedsMax": {
            "title": "🛏️ Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms."
          },
          "bathsMin": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bathrooms."
          },
          "sqftMin": {
            "title": "📐 Min living area (sq ft)",
            "type": "integer",
            "description": "Smallest interior size in square feet."
          },
          "sqftMax": {
            "title": "📐 Max living area (sq ft)",
            "type": "integer",
            "description": "Largest interior size in square feet."
          },
          "lotSqftMin": {
            "title": "🌳 Min lot size (sq ft)",
            "type": "integer",
            "description": "Smallest lot in square feet. 1 acre = 43,560 sq ft."
          },
          "lotSqftMax": {
            "title": "🌳 Max lot size (sq ft)",
            "type": "integer",
            "description": "Largest lot in square feet."
          },
          "propertyTypes": {
            "title": "🏘️ Property types",
            "type": "array",
            "description": "Property types to include. Empty means every type.",
            "items": {
              "type": "string",
              "enum": [
                "single_family",
                "multi_family",
                "condo",
                "condos",
                "townhomes",
                "duplex_triplex",
                "mobile",
                "farm",
                "land",
                "coop"
              ],
              "enumTitles": [
                "🏡 Single family",
                "🏬 Multi-family",
                "🏢 Condo",
                "🏢 Condos",
                "🏘️ Townhomes",
                "🏘️ Duplex / triplex",
                "🚚 Mobile",
                "🚜 Farm",
                "🌳 Land",
                "🏙️ Co-op"
              ]
            }
          },
          "sort": {
            "title": "↕️ Sort by",
            "enum": [
              "relevance",
              "newest",
              "price_low",
              "price_high",
              "sqft",
              "lot_size",
              "sold_date"
            ],
            "type": "string",
            "description": "Order the results are requested in.",
            "default": "relevance"
          },
          "maxUpdatedHoursAgo": {
            "title": "🕗 Only listings updated in the last N hours",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only properties touched within this window - the incremental mode for a scraper scheduled several times a day. Empty scrapes everything regardless of age."
          },
          "fetchDetails": {
            "title": "🔬 Fetch full property details",
            "type": "boolean",
            "description": "Request each property's own record (year built, HOA, schools, tax history, price estimate, flood/noise, features) instead of only what the search result carries. Richer output, one extra request per property. Billed as a with-details property ($3.00 / 1,000); turn off for a fast, cheap sweep ($1.50 / 1,000).",
            "default": true
          },
          "maxItems": {
            "title": "🔢 Limit the number of items",
            "minimum": 1,
            "type": "integer",
            "description": "How many properties to scrape. Every returned property is billed, so this caps run cost. Empty scrapes everything the input covers."
          },
          "maxConcurrency": {
            "title": "⚡ Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "How many requests run in parallel.",
            "default": 10
          },
          "targetDatasetId": {
            "title": "📦 Target dataset",
            "type": "string",
            "description": "Push results into this dataset instead of the run's own. Lets several parallel runs of a split ZIP list write into one place."
          },
          "schedulerTaskId": {
            "title": "⏰ Scheduler task ID",
            "type": "string",
            "description": "Task to start once the crawl finishes - the scheduler that checks whether the other slices of the same fan-out are done. Empty starts nothing."
          },
          "proxy": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Realtor.com's mobile API needs no credentials, but sustained traffic from one datacenter IP eventually gets blocked. US residential proxies are recommended for large runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "debugLog": {
            "title": "🐛 Debug log",
            "type": "boolean",
            "description": "Log every request and page. Turn on when a run returns fewer results than expected.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}