{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.com Scraper - Listings, Sold Homes, Rentals & Prices",
    "description": "Scrape Realtor.com listings by city, ZIP, radius or search URL (for sale, new homes, rent, sold) for $0.76 per 1,000: price, beds, baths, sqft, lot, MLS #, coordinates, photos. Add-ons: price and tax history, schools, 3 home-value estimates, climate risk, permits. Past the 10,000 cap, no login.",
    "version": "0.1",
    "x-build-id": "GnrLpEczxX5qrLKfr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~realtor-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-realtor-listings-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/topapi~realtor-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-realtor-listings-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/topapi~realtor-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-realtor-listings-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": "📍 Locations",
            "type": "array",
            "description": "Cities, ZIP codes, counties, neighborhoods or states, one per line, e.g. \"Austin, TX\", \"78704\", \"Travis County, TX\", \"Zilker, Austin, TX\", \"TX\".",
            "items": {
              "type": "string"
            }
          },
          "listingStatus": {
            "title": "🏷️ Listing status",
            "enum": [
              "for_sale",
              "for_rent",
              "sold",
              "off_market",
              "ready_to_build"
            ],
            "type": "string",
            "description": "Which listings to search for Locations. Search URLs keep the status set in the URL.",
            "default": "for_sale"
          },
          "startUrls": {
            "title": "🔗 Realtor.com URLs",
            "type": "array",
            "description": "Search pages (filters in the URL are kept), e.g. https://www.realtor.com/realestateandhomes-search/Austin_TX/beds-3/price-na-900000, or property pages (/realestateandhomes-detail/..._M98926-80270) for one row with full details. One URL per line.",
            "items": {
              "type": "string"
            }
          },
          "propertyIds": {
            "title": "🆔 Property IDs",
            "type": "array",
            "description": "Realtor.com property IDs, e.g. 9892680270 or M98926-80270. Each becomes one row with full property details.",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "📫 Addresses",
            "type": "array",
            "description": "Street addresses, e.g. \"244 Zonetail Cv, Austin, TX 78737\". Each is matched to its Realtor.com property and returned with full details.",
            "items": {
              "type": "string"
            }
          },
          "mlsListingIds": {
            "title": "🗂️ MLS listing numbers",
            "type": "array",
            "description": "MLS numbers, e.g. 1014136. MLS numbers are not unique across MLSs, so one number can return more than one home.",
            "items": {
              "type": "string"
            }
          },
          "radiusMiles": {
            "title": "📏 Radius (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Also search this many miles around each location, e.g. 5. 0 = the location's own boundary."
          },
          "propertyTypes": {
            "title": "🏘️ Property types",
            "type": "array",
            "description": "Only these property types. Empty = all types.",
            "items": {
              "type": "string",
              "enum": [
                "single_family",
                "condos",
                "townhomes",
                "condo_townhome_rowhome_coop",
                "multi_family",
                "mobile",
                "land",
                "farm",
                "coop",
                "condop",
                "apartment",
                "duplex_triplex"
              ],
              "enumTitles": [
                "Single family home",
                "Condo",
                "Townhome",
                "Condo / townhome / row home / co-op",
                "Multi family",
                "Mobile / manufactured",
                "Land",
                "Farm / ranch",
                "Co-op",
                "Condop",
                "Apartment",
                "Duplex / triplex"
              ]
            }
          },
          "minPrice": {
            "title": "💲 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price in USD, e.g. 300000. Monthly rent for rentals; the sold price for sold listings."
          },
          "maxPrice": {
            "title": "💲 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price in USD, e.g. 900000. Monthly rent for rentals; the sold price for sold listings."
          },
          "minBeds": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "At least this many bedrooms, e.g. 3. 0 includes studios."
          },
          "maxBeds": {
            "title": "🛏️ Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "At most this many bedrooms."
          },
          "minBaths": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "number",
            "description": "At least this many bathrooms, e.g. 2."
          },
          "maxBaths": {
            "title": "🛁 Max bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "number",
            "description": "At most this many bathrooms."
          },
          "minSqft": {
            "title": "📐 Min square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest living area in square feet, e.g. 1500."
          },
          "maxSqft": {
            "title": "📐 Max square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Largest living area in square feet."
          },
          "minLotSqft": {
            "title": "🌳 Min lot size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest lot in square feet (1 acre = 43,560), e.g. 5000."
          },
          "maxLotSqft": {
            "title": "🌳 Max lot size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest lot in square feet."
          },
          "minYearBuilt": {
            "title": "🏗️ Built in or after",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest year built, e.g. 2000."
          },
          "maxYearBuilt": {
            "title": "🏗️ Built in or before",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest year built, e.g. 2020."
          },
          "maxHoaFee": {
            "title": "🏢 Max HOA fee / month",
            "minimum": 0,
            "type": "integer",
            "description": "Highest monthly HOA fee in USD, e.g. 200."
          },
          "listedWithinDays": {
            "title": "📅 Listed within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only listings that went live in the last N days, e.g. 7. Pairs well with a daily schedule."
          },
          "soldWithinMonths": {
            "title": "📆 Sold within",
            "enum": [
              "1",
              "3",
              "6",
              "12",
              "24",
              "36",
              "all"
            ],
            "type": "string",
            "description": "For Recently sold: how far back to look. Default 6 months.",
            "default": "6"
          },
          "onlyWith": {
            "title": "✅ Only listings that are / have",
            "type": "array",
            "description": "Narrow to listings with all of these. Empty = no requirement.",
            "items": {
              "type": "string",
              "enum": [
                "pending",
                "contingent",
                "foreclosure",
                "newConstruction",
                "openHouse",
                "priceReduced",
                "virtualTour",
                "matterport",
                "seniorCommunity",
                "noHoa"
              ],
              "enumTitles": [
                "Pending",
                "Contingent",
                "Foreclosure",
                "New construction",
                "Open house (next 30 days)",
                "Price reduced (last 30 days)",
                "Virtual tour",
                "3D tour (Matterport)",
                "55+ community",
                "No HOA fee"
              ]
            }
          },
          "excludeListingTypes": {
            "title": "🚫 Hide",
            "type": "array",
            "description": "Leave these listings out. Pending and contingent listings are included by default, as on realtor.com.",
            "items": {
              "type": "string",
              "enum": [
                "pending",
                "contingent",
                "foreclosure",
                "newConstruction",
                "seniorCommunity"
              ],
              "enumTitles": [
                "Pending",
                "Contingent",
                "Foreclosures",
                "New construction",
                "55+ communities"
              ]
            }
          },
          "tags": {
            "title": "🏷️ Feature tags",
            "type": "array",
            "description": "Realtor.com feature tags every listing must carry, e.g. swimming_pool, garage_2_or_more, waterfront, single_story, central_air, fireplace, horse_facilities.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "🔎 Keywords",
            "type": "string",
            "description": "Realtor.com's keyword filter on the listing text, e.g. \"pool\" or \"pool, guest house\" (comma = all of them)."
          },
          "pets": {
            "title": "🐾 Pets allowed (rentals)",
            "type": "array",
            "description": "For rent only: rentals that allow these pets.",
            "items": {
              "type": "string",
              "enum": [
                "cats",
                "dogs"
              ],
              "enumTitles": [
                "Cats allowed",
                "Dogs allowed"
              ]
            }
          },
          "moveInBy": {
            "title": "📦 Move-in ready by (new construction)",
            "type": "string",
            "description": "New-construction homes ready to move in on or before this date, e.g. 2026-12-01. Realtor.com publishes no move-in dates for rentals, so this is ignored for For rent."
          },
          "sortBy": {
            "title": "🔀 Sort by",
            "enum": [
              "relevant",
              "newest",
              "recently-updated",
              "lowest-price",
              "highest-price",
              "sold-date",
              "recently-reduced",
              "open-house-date",
              "largest-sqft",
              "lot-size",
              "most-beds",
              "photo-count",
              "newest-built"
            ],
            "type": "string",
            "description": "Order of the results. With a result limit, this decides which listings you get. Realtor.com's own relevant order changes on every call, so the default returns the newest listings first (sold homes: latest sale first; off-market homes: Realtor.com's own fixed order). Ties are broken by price (by list date when sorting by price), so pages do not reshuffle between calls.",
            "default": "relevant"
          },
          "customQuery": {
            "title": "🧩 Custom Realtor.com filters (advanced)",
            "type": "object",
            "description": "Extra keys for realtor.com's search criteria, merged last, e.g. {\"garage\": {\"min\": 2}, \"has_tour\": true}."
          },
          "minDaysOnMarket": {
            "title": "⏳ Min days on market",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only active listings on the market at least this many days, e.g. 60 for stale listings."
          },
          "withPhotosOnly": {
            "title": "📷 With photos only",
            "type": "boolean",
            "description": "Keep only listings that have at least one photo.",
            "default": false
          },
          "includeDetails": {
            "title": "🧾 Include property details",
            "type": "boolean",
            "description": "Adds price history, tax history, nearby schools, 3 home-value estimates and their history, mortgage estimate, flood / fire / heat / wind / air risk, features and all photos. $0.00095 per listing that gets them.",
            "default": false
          },
          "includeListingStats": {
            "title": "📈 Include listing stats",
            "type": "boolean",
            "description": "Adds Realtor.com views, clicks, saves, shares and inquiries for the last 1, 7, 14, 21 and 28 days. $0.00095 per listing that has them.",
            "default": false
          },
          "includePermitHistory": {
            "title": "🛠️ Include building permits",
            "type": "boolean",
            "description": "Adds the building-permit history (date, type of work, project, status) and a hasRoofPermit flag. $0.0019 per permit record returned; homes without permits cost nothing.",
            "default": false
          },
          "includeFloorplans": {
            "title": "📐 Include floor plans",
            "type": "boolean",
            "description": "Adds 2D / 3D / interactive floor-plan links (mostly new-construction and community listings). $0.00095 per listing that has floor plans.",
            "default": false
          },
          "includePhotos": {
            "title": "🖼️ Include all photo URLs",
            "type": "boolean",
            "description": "Adds every listing photo URL (with Realtor.com's room tags) to each row. No extra charge.",
            "default": false
          },
          "monitorMode": {
            "title": "🔁 Only new listings",
            "type": "boolean",
            "description": "Remember delivered listings per search (named key-value store) and skip them next time. Pairs with a daily schedule. A search is the location or URL, status, filters as you set them and sort, so relative windows (sold within 6 months, listed within 7 days) keep their memory from day to day. Up to 500,000 listings remembered per search; past that the oldest are forgotten.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "💹 Also return price / status changes",
            "type": "boolean",
            "description": "With monitoring: also return a listing seen before when its price or status changed, with monitorChange, previousPrice and previousStatus.",
            "default": false
          },
          "monitorStoreName": {
            "title": "🗄️ Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the memory. Use a different name per independent schedule.",
            "default": "realtor-listings-monitor"
          },
          "maxItems": {
            "title": "🔢 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Total rows for the run. 0 = no limit: the run then ends when the search is finished, when your maximum charge is reached, or 40 seconds before the run's timeout (1 hour by default), and the status message says which. Realtor.com serves 10,000 results per search; past that the actor splits the search into price (or sold-date) bands.",
            "default": 100
          },
          "maxItemsPerSearch": {
            "title": "🔢 Max results per search",
            "minimum": 0,
            "type": "integer",
            "description": "Limit per location or URL when you pass several. 0 = no per-search limit.",
            "default": 0
          },
          "compact": {
            "title": "🤏 Compact output",
            "type": "boolean",
            "description": "Core fields only (price, address, beds, baths, sqft, estimate, link) as flat columns - sized for AI assistants and MCP. Add-ons you turn on stay in each row, so you get every add-on you are charged for.",
            "default": false
          },
          "flatOutput": {
            "title": "🧮 Flat output",
            "type": "boolean",
            "description": "Nested objects become dot-named columns (address.street, coordinates.latitude) for spreadsheets.",
            "default": false
          },
          "customMapFunction": {
            "title": "🧪 Custom map function",
            "type": "string",
            "description": "Optional JavaScript that receives each row and returns the row to keep, e.g. (object) => ({ id: object.id, price: object.listPrice }). Returning null drops the row (not charged)."
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Leave as is: the actor starts on Apify's own connection and adds Apify datacenter proxy sessions by itself. Choosing a proxy here replaces both.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "⚡ Parallel connections",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Requests in flight at once. Default 4.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}