{
  "openapi": "3.0.1",
  "info": {
    "title": "XE.gr Property Scraper",
    "description": "Scrape Greek real estate listings from XE.gr: prices, size, rooms, GPS coordinates, amenities, photos and advertiser phone numbers. Works in every language XE.gr publishes: Greek, English, German, French and Spanish, both for the URLs you paste in and for the data you get back.",
    "version": "0.0",
    "x-build-id": "l0tU2Rc2VQVvQ25aC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~xe-gr-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-xe-gr-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/fayoussef~xe-gr-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-xe-gr-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/fayoussef~xe-gr-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-xe-gr-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Search on XE.gr as you normally would, then copy the URL from your browser and paste it here. Works with a results page, a map search with filters, an SEO location page, or a single listing page. Leave empty to build the search from the fields in Search without a URL instead.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum listings",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many listings. Leave empty to scrape everything the search returns."
          },
          "includeDetails": {
            "title": "Fetch full listing details",
            "type": "boolean",
            "description": "Adds the description, the exact street address, the publication date and the complete amenities list by opening each listing. Turn this off for a faster, cheaper run that keeps only the search result fields.",
            "default": true
          },
          "includePhone": {
            "title": "Get the advertiser's phone number",
            "type": "boolean",
            "description": "Adds the contact phone numbers published on each listing, owner or agency, exactly the ones XE.gr shows when you click Show phone. Works on its own, so you can keep this on and Fetch full listing details off. Listings whose advertiser hides their number simply come back with no phone.",
            "default": true
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, area, suburb or region to search, for example Athens, Glyfada, Thessaloniki or Kolonaki. Greek spelling works too. The closest match on XE.gr is used and its full name is written to the log so you can check it."
          },
          "transactionType": {
            "title": "Rent or buy",
            "enum": [
              "rent",
              "buy",
              "auction",
              "valuable-consideration"
            ],
            "type": "string",
            "description": "Whether to collect rentals or properties for sale.",
            "default": "rent"
          },
          "propertyCategory": {
            "title": "Category",
            "enum": [
              "residence",
              "prof",
              "land",
              "parking"
            ],
            "type": "string",
            "description": "The kind of property to search for.",
            "default": "residence"
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price, or lowest monthly rent for rentals. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price, or highest monthly rent for rentals. Leave empty for no maximum."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bedrooms a property must have. Leave empty for any."
          },
          "searchTerm": {
            "title": "Keyword",
            "type": "string",
            "description": "Optional free text matched against the listing, for example penthouse, seaview or renovated."
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "any",
              "apartment",
              "studio",
              "maisonette",
              "detached_house",
              "villa",
              "bungalow",
              "block_of_flats",
              "residential_complex",
              "farm",
              "air_rights"
            ],
            "type": "string",
            "description": "Narrow to one specific type. The options below are for Homes. For Commercial property, Land or Parking, leave this on Any and use the Category field, or set property_type in Extra search parameters.",
            "default": "any"
          },
          "minArea": {
            "title": "Minimum area (sq.m.)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest floor area to include."
          },
          "maxArea": {
            "title": "Maximum area (sq.m.)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest floor area to include."
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Most bedrooms a property may have."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Fewest bathrooms a property must have."
          },
          "minConstructionYear": {
            "title": "Built after",
            "minimum": 1800,
            "type": "integer",
            "description": "Earliest construction year to include, for example 2010."
          },
          "minEnergyClass": {
            "title": "Minimum energy class",
            "enum": [
              "any",
              "A+",
              "A",
              "B+",
              "B",
              "C",
              "D",
              "E",
              "F",
              "G"
            ],
            "type": "string",
            "description": "Lowest acceptable Greek energy performance rating.",
            "default": "any"
          },
          "amenities": {
            "title": "Must have",
            "type": "array",
            "description": "Only return properties that have all of the selected features.",
            "items": {
              "type": "string",
              "enum": [
                "furnished",
                "parking",
                "garden",
                "pool",
                "elevator",
                "petsAllowed",
                "shortTerm",
                "studentFriendly",
                "hasPhotos"
              ],
              "enumTitles": [
                "Furnished",
                "Parking",
                "Garden",
                "Pool",
                "Elevator",
                "Pets allowed",
                "Short-term rental",
                "Student friendly",
                "Has photos"
              ]
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "any",
              "publication_date_desc",
              "price_asc",
              "price_desc",
              "price_per_unit_area_asc",
              "price_per_unit_area_desc",
              "property_area_in_sq_m_desc",
              "property_area_in_sq_m_asc"
            ],
            "type": "string",
            "description": "Order XE.gr picks results in. Matters when you cap the run with Maximum listings, because you get the top of this order, for example the 100 cheapest. Rows arrive in the dataset in whatever order they finish, so sort the dataset itself if you need the output ordered too.",
            "default": "any"
          },
          "maxPages": {
            "title": "Maximum result pages",
            "minimum": 1,
            "type": "integer",
            "description": "How many result pages to go through, 34 listings per page. Leave empty for all of them. XE.gr itself serves at most 295 pages (about 10,000 listings) per search, so split very large searches by area or price."
          },
          "language": {
            "title": "Output language",
            "enum": [
              "auto",
              "en",
              "el",
              "de",
              "fr",
              "es"
            ],
            "type": "string",
            "description": "Language of the text XE.gr returns: property type, floor, condition, amenity names and page titles. Prices, sizes, coordinates and photos are the same in every language. Auto follows your Start URL, or uses English when you search without one.",
            "default": "auto"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}