{
  "openapi": "3.0.1",
  "info": {
    "title": "The Ultimate Property Scraper",
    "description": "Scrape clean, structured property listings from multiple real estate websites in one run.\nBuilt for scale with smart filtering (price, beds, baths, size, market, country), duplicate control, and output-ready records for database pipelines.",
    "version": "0.0",
    "x-build-id": "FaQh0aIxuusQLNklT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/thescrapelab~the-ultimate-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-thescrapelab-the-ultimate-property-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/thescrapelab~the-ultimate-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-thescrapelab-the-ultimate-property-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/thescrapelab~the-ultimate-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-thescrapelab-the-ultimate-property-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": {
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Best starting point. Leave websites empty to query the stored source websites in these countries.",
            "items": {
              "type": "string",
              "enum": [
                "AE",
                "BH",
                "BR",
                "CA",
                "CH",
                "DK",
                "EG",
                "ES",
                "FI",
                "FR",
                "GB",
                "IE",
                "IT",
                "JP",
                "KZ",
                "MA",
                "MX",
                "NG",
                "NL",
                "NZ",
                "PH",
                "PK",
                "PL",
                "PT",
                "QA",
                "RO",
                "SA",
                "SE",
                "TR",
                "UA",
                "US",
                "ZA"
              ],
              "enumTitles": [
                "United Arab Emirates (AE)",
                "Bahrain (BH)",
                "Brazil (BR)",
                "Canada (CA)",
                "Switzerland (CH)",
                "Denmark (DK)",
                "Egypt (EG)",
                "Spain (ES)",
                "Finland (FI)",
                "France (FR)",
                "United Kingdom (GB)",
                "Ireland (IE)",
                "Italy (IT)",
                "Japan (JP)",
                "Kazakhstan (KZ)",
                "Morocco (MA)",
                "Mexico (MX)",
                "Nigeria (NG)",
                "Netherlands (NL)",
                "New Zealand (NZ)",
                "Philippines (PH)",
                "Pakistan (PK)",
                "Poland (PL)",
                "Portugal (PT)",
                "Qatar (QA)",
                "Romania (RO)",
                "Saudi Arabia (SA)",
                "Sweden (SE)",
                "Turkey (TR)",
                "Ukraine (UA)",
                "United States (US)",
                "South Africa (ZA)"
              ]
            },
            "default": []
          },
          "websites": {
            "title": "Websites (Optional)",
            "type": "array",
            "description": "Optional. Choose specific source websites already stored in Supabase. If left empty, the actor uses countries or a lightweight default.",
            "items": {
              "type": "string",
              "enum": [
                "property24",
                "privateproperty",
                "hemnetse",
                "rightmoveukproperty",
                "onthemarketuk",
                "casait",
                "century21usproperty",
                "centriscaproperty",
                "imovirtualptproperty",
                "daftieproperty",
                "mercadolibrearproperty",
                "mercadolibremxproperty",
                "mercadolibredoproperty",
                "mercadolibregtproperty",
                "mercadolibrehnproperty",
                "mercadolibreniproperty",
                "mercadolibrepaproperty",
                "mercadolibreecproperty",
                "mercadolibrepyproperty",
                "mercadolibresvproperty",
                "vivarealbrproperty",
                "olxbrproperty",
                "propertynewsni",
                "propertypalni",
                "craigslistusproperty",
                "redfinusproperty",
                "coldwellbankerusproperty",
                "newhomesourceusproperty",
                "movotousproperty",
                "harusproperty",
                "zillowusproperty",
                "estatelyusproperty",
                "royallepagecaproperty",
                "srealityczproperty",
                "dotpropertyph",
                "etuovifiproperty",
                "vuokraovifiproperty",
                "lamudiph",
                "lamudimxproperty",
                "argenproparproperty",
                "bayutbhproperty",
                "bayutsaproperty",
                "betterhomesuaeproperty",
                "emiratesestateuaeproperty",
                "engeluaeproperty",
                "mubawabmaproperty",
                "papfrproperty",
                "fazwazth",
                "providentuaeproperty",
                "zooplaukproperty",
                "fundanlproperty",
                "boligsidendkproperty",
                "fotocasaesproperty",
                "propertyfinderbhproperty",
                "propertyfinderuae",
                "propertyfinderegproperty",
                "propertyfinderqaproperty",
                "propertyfindersaproperty",
                "propertygurumyproperty",
                "propertygurusgproperty",
                "otodompl",
                "myhomeieproperty",
                "homegatechproperty",
                "emlakjettrproperty",
                "pisosesproperty",
                "propertyprongproperty",
                "quintoandarbrproperty",
                "realestateconzproperty",
                "rumah123idproperty",
                "gumtreeukproperty",
                "olxptproperty",
                "olxkzproperty",
                "olxegproperty",
                "olxpkproperty",
                "olxroproperty",
                "olxuaproperty",
                "olxuzproperty",
                "suumojpproperty",
                "sothebysuaeproperty",
                "squareyardsuaeproperty",
                "zameenpkproperty",
                "bayutomproperty",
                "bayutuaeproperty",
                "dotpropertyidproperty",
                "dotpropertymyproperty",
                "dotpropertyvnproperty",
                "fazwazaeproperty",
                "fazwazarproperty",
                "fazwazegproperty",
                "fazwazidproperty",
                "fazwazmxproperty",
                "fazwazpeproperty",
                "fazwazphproperty",
                "fazwazvnproperty",
                "lamudipkproperty",
                "mercadolibreclproperty",
                "mercadolibrecoproperty",
                "mercadolibrecrproperty",
                "mercadolibrepeproperty",
                "mercadolibreuyproperty",
                "mercadolibreveproperty",
                "buyrentkenyaproperty",
                "dotpropertythproperty",
                "dubizzlebhproperty",
                "dubizzlejoproperty",
                "dubizzlelbproperty",
                "dubizzleomproperty",
                "dubizzleqaproperty",
                "olxbgproperty",
                "olxplproperty",
                "propertycozwproperty"
              ],
              "enumTitles": [
                "Property24 (ZA)",
                "Private Property (ZA)",
                "Hemnet (SE)",
                "Rightmove UK (GB)",
                "OnTheMarket UK (GB)",
                "Casa.it (IT)",
                "Century 21 US Property (US)",
                "Centris Canada Property (CA)",
                "Imovirtual Portugal (PT)",
                "Daft Ireland Property (IE)",
                "Mercado Libre Property Argentina (AR)",
                "Mercado Libre Property Mexico (MX)",
                "Mercado Libre Property Dominican Republic (DO)",
                "Mercado Libre Property Guatemala (GT)",
                "Mercado Libre Property Honduras (HN)",
                "Mercado Libre Property Nicaragua (NI)",
                "Mercado Libre Property Panama (PA)",
                "Mercado Libre Property Ecuador (EC)",
                "Mercado Libre Property Paraguay (PY)",
                "Mercado Libre Property El Salvador (SV)",
                "Viva Real Brazil Property (BR)",
                "OLX Brazil Property (BR)",
                "Propertynews NI (GB)",
                "PropertyPal NI (GB)",
                "Craigslist US Property (US)",
                "Redfin US Property (US)",
                "Coldwell Banker US Property (US)",
                "NewHomeSource US Property (US)",
                "Movoto US Property (US)",
                "HAR US Property (US)",
                "Zillow US Property (US)",
                "Estately US Property (US)",
                "Royal LePage Canada Property (CA)",
                "Sreality Czech Property (CZ)",
                "DotProperty Philippines (PH)",
                "Etuovi Finland Property (FI)",
                "Vuokraovi Finland Property (FI)",
                "Lamudi Philippines (PH)",
                "Lamudi Mexico Property (MX)",
                "Argenprop Argentina Property (AR)",
                "Bayut Bahrain Property (BH)",
                "Bayut Saudi Arabia Property (SA)",
                "Betterhomes UAE Property (AE)",
                "Emirates.Estate UAE Property (AE)",
                "Engel & Volkers UAE Property (AE)",
                "Mubawab Morocco Property (MA)",
                "PAP France Property (FR)",
                "FazWaz Thailand (TH)",
                "Provident UAE Property (AE)",
                "Zoopla UK Property (GB)",
                "Funda Netherlands Property (NL)",
                "Boligsiden Denmark Property (DK)",
                "Fotocasa Spain Property (ES)",
                "Property Finder Bahrain Property (BH)",
                "Property Finder UAE (AE)",
                "Property Finder Egypt (EG)",
                "Property Finder Qatar Property (QA)",
                "Property Finder Saudi Arabia Property (SA)",
                "PropertyGuru Malaysia (MY)",
                "PropertyGuru Singapore (SG)",
                "Otodom Poland (PL)",
                "MyHome Ireland Property (IE)",
                "Homegate Switzerland Property (CH)",
                "Emlakjet Turkey Property (TR)",
                "Pisos Spain Property (ES)",
                "PropertyPro Nigeria Property (NG)",
                "QuintoAndar Brazil Property (BR)",
                "RealEstate NZ Property (NZ)",
                "Rumah123 Indonesia Property (ID)",
                "Gumtree UK Property (GB)",
                "OLX Portugal Property (PT)",
                "OLX Kazakhstan Property (KZ)",
                "Dubizzle Egypt Property (EG)",
                "OLX Pakistan Property (PK)",
                "OLX Romania Property (RO)",
                "OLX Ukraine Property (UA)",
                "OLX Uzbekistan Property (UZ)",
                "SUUMO Japan Property (JP)",
                "Sotheby's UAE Property (AE)",
                "Square Yards UAE Property (AE)",
                "Zameen Pakistan Property (PK)",
                "Bayut Oman Property (OM)",
                "Bayut UAE Property (AE)",
                "DotProperty Indonesia (ID)",
                "DotProperty Malaysia (MY)",
                "DotProperty Vietnam (VN)",
                "FazWaz UAE (AE)",
                "FazWaz Argentina (AR)",
                "FazWaz Egypt (EG)",
                "FazWaz Indonesia (ID)",
                "FazWaz Mexico (MX)",
                "FazWaz Peru (PE)",
                "FazWaz Philippines (PH)",
                "FazWaz Vietnam (VN)",
                "Lamudi Pakistan Property (PK)",
                "Mercado Libre Property Chile (CL)",
                "Mercado Libre Property Colombia (CO)",
                "Mercado Libre Property Costa Rica (CR)",
                "Mercado Libre Property Peru (PE)",
                "Mercado Libre Property Uruguay (UY)",
                "Mercado Libre Property Venezuela (VE)",
                "BuyRentKenya Property (KE)",
                "DotProperty Thailand (TH)",
                "Dubizzle Bahrain Property (BH)",
                "Dubizzle Jordan Property (JO)",
                "Dubizzle Lebanon Property (LB)",
                "Dubizzle Oman Property (OM)",
                "Dubizzle Qatar Property (QA)",
                "OLX Bulgaria Property (BG)",
                "OLX Poland Property (PL)",
                "Property.co.zw Property (ZW)"
              ]
            },
            "default": []
          },
          "estimateOnly": {
            "title": "Estimate Results Only",
            "type": "boolean",
            "description": "Recommended before large exports. Runs a count query for the selected filters, shows about how many rows this exact run would return with the current limit and offset, and exports no dataset rows.",
            "default": false
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Defaults to for-sale. Add to-rent if you also want rental listings.",
            "items": {
              "type": "string",
              "enum": [
                "for-sale",
                "to-rent"
              ]
            },
            "default": [
              "for-sale"
            ]
          },
          "areaQuery": {
            "title": "Area / City / Suburb",
            "type": "string",
            "description": "Optional text filter. Matches suburb, city, location, title, or address.",
            "default": ""
          },
          "propertyTypeQuery": {
            "title": "Property Type",
            "type": "string",
            "description": "Optional text match. Example: apartment, house, villa, land.",
            "default": ""
          },
          "minPrice": {
            "title": "Min Price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional minimum price in the listing's own currency. Use 0 to ignore.",
            "default": 0
          },
          "maxPrice": {
            "title": "Max Price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional maximum price in the listing's own currency. Use 0 to ignore.",
            "default": 0
          },
          "minBedrooms": {
            "title": "Min Bedrooms",
            "type": "number",
            "description": "Optional minimum bedrooms. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "maxBedrooms": {
            "title": "Max Bedrooms",
            "type": "number",
            "description": "Optional maximum bedrooms. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "minBathrooms": {
            "title": "Min Bathrooms",
            "type": "number",
            "description": "Optional minimum bathrooms. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "maxBathrooms": {
            "title": "Max Bathrooms",
            "type": "number",
            "description": "Optional maximum bathrooms. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "minSizeM2": {
            "title": "Min Size (m²)",
            "type": "number",
            "description": "Optional minimum floor size in square metres. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "maxSizeM2": {
            "title": "Max Size (m²)",
            "type": "number",
            "description": "Optional maximum floor size in square metres. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "includeHistory": {
            "title": "Include History",
            "type": "boolean",
            "description": "Switch from current inventory rows to historical listing snapshots. Current mode returns the latest row per listing; history mode can return multiple observations for the same listing over time.",
            "default": false
          },
          "limit": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum rows to return. Start small while testing filters, or use Estimate Results Only first.",
            "default": 1000
          },
          "offset": {
            "title": "Skip Results",
            "minimum": 0,
            "type": "integer",
            "description": "Skip this many matching rows before returning results. Useful for paging through large result sets.",
            "default": 0
          },
          "orderBy": {
            "title": "Order By",
            "enum": [
              "last_seen_desc",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Sort order for Supabase results.",
            "default": "last_seen_desc"
          },
          "seenSince": {
            "title": "Seen Since",
            "type": "string",
            "description": "Only return rows seen after this ISO timestamp, for example 2026-05-01T00:00:00Z. In history mode this applies to history observations; in current mode it applies to the latest listing state timestamps.",
            "default": ""
          },
          "currencyCodes": {
            "title": "Currency Codes",
            "type": "array",
            "description": "Optional currency filters such as ZAR, USD, GBP, or EUR.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "listingStatus": {
            "title": "Listing Status",
            "type": "array",
            "description": "Optional listing status filters such as active, sold, removed, or unknown.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "minParkingSpaces": {
            "title": "Min Parking",
            "type": "number",
            "description": "Optional minimum parking spaces. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          },
          "maxParkingSpaces": {
            "title": "Max Parking",
            "type": "number",
            "description": "Optional maximum parking spaces. Works for current listings and history snapshots. Use 0 to ignore.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}