{
  "openapi": "3.0.1",
  "info": {
    "title": "XE Property Scraper",
    "description": "Scrape xe.gr (Χρυσή Ευκαιρία) for Greek homes, commercial space, land and parking. Every row says whether a private owner or an agency placed the ad, with asking price, €/m², size, bedrooms, floor, energy class, GPS and photos. Sale and rent, in Greek or English.",
    "version": "1.0",
    "x-build-id": "fRBcxGBurZbM1Xcy1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~xe-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-xe-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/sian.agency~xe-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-xe-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/sian.agency~xe-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-xe-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Pick one per run. Property Search sweeps a result set and returns one row per advert; Property Detail expands adverts you already have URLs for. Turning on the detail switch inside a search does both in one pass.",
            "default": "search"
          },
          "transaction": {
            "title": "🤝 Sale or rent",
            "enum": [
              "rent",
              "buy"
            ],
            "type": "string",
            "description": "Whether to read the rent side of xe.gr or the sale side. Live today: 32,200 homes to rent and 128,500 for sale, 61,700 commercial spaces to rent and 258,500 for sale, 96,000 plots of land for sale.",
            "default": "rent"
          },
          "propertyKind": {
            "title": "🏘️ Kind of property",
            "enum": [
              "residence",
              "commercial",
              "land",
              "parking"
            ],
            "type": "string",
            "description": "xe.gr splits its property section four ways and they do not overlap. Homes covers apartments, maisonettes, detached houses and villas; Commercial covers offices, shops, industrial and craft space; Land covers plots and parcels.",
            "default": "residence"
          },
          "listedBy": {
            "title": "👤 Placed by an owner or an agency",
            "enum": [
              "any",
              "owner",
              "agency"
            ],
            "type": "string",
            "description": "The reason to scrape xe.gr rather than a dedicated portal: it is where Greek private owners still advertise directly. About a third of the freshest rental adverts are placed by an owner rather than an agency, against roughly one in ten on the sale side. Agencies only is filtered by xe.gr itself. Private owners only is not offered to visitors, so the run reads the result set and keeps the owner adverts — you are billed only for the rows you keep, never for the ones discarded.",
            "default": "any"
          },
          "locations": {
            "title": "📍 Areas",
            "type": "array",
            "description": "Greek place names, in Greek or in English — Αθήνα, Thessaloniki, Γλυφάδα, Chania, Κολωνάκι. Each is resolved against xe.gr's own place index before the search runs, so a name the portal does not know is reported rather than silently ignored. Leave empty to sweep the whole of Greece.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "propertyType": {
            "title": "🏠 Narrow to one type",
            "enum": [
              "",
              "apartment",
              "maisonette",
              "detached_house",
              "villa",
              "bungalow",
              "block_of_flats",
              "residential_complex",
              "farm",
              "office",
              "store",
              "industrial_space",
              "craft_space",
              "plot",
              "parcel",
              "island"
            ],
            "type": "string",
            "description": "The first nine types apply to Homes, the next four to Commercial space, the last three to Land. Picking a type that does not belong to the kind you chose returns nothing, so the run checks the pair first and tells you. Leave empty for every type.",
            "default": ""
          },
          "maxResults": {
            "title": "🔢 How many properties",
            "minimum": 1,
            "maximum": 9996,
            "type": "integer",
            "description": "Stop after this many rows. xe.gr serves 34 per page and refuses to paginate past 9,996 rows in any one result set, so that is the ceiling — to go deeper, split the search by area or price band and run it again.",
            "default": 50
          },
          "includeDetails": {
            "title": "📄 Add the street address and the full listing text",
            "type": "boolean",
            "description": "Open each advert's own page to add the street address, the seller's full text, the energy class, the condition and up to 62 characteristics, plus the complete photo, video and virtual-tour set. One extra request per property, and it bills the Property Detail event on top of the search row.",
            "default": false
          },
          "minPrice": {
            "title": "💶 Minimum price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Monthly rent for rentals, total asking price for sales. Leave at 0 for no floor. Worth setting: xe.gr carries placeholder adverts priced at €10, and a floor is the cleanest way past them.",
            "default": 0
          },
          "maxPrice": {
            "title": "💶 Maximum price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave at 0 for no ceiling.",
            "default": 0
          },
          "minSizeSqm": {
            "title": "📐 Minimum size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Interior floor area in square metres — τετραγωνικά μέτρα, τ.μ. on the site. Leave at 0 for no floor.",
            "default": 0
          },
          "maxSizeSqm": {
            "title": "📐 Maximum size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave at 0 for no ceiling.",
            "default": 0
          },
          "minBedrooms": {
            "title": "🛏️ Minimum bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Bedrooms, not total rooms. Leave at 0 for any.",
            "default": 0
          },
          "maxBedrooms": {
            "title": "🛏️ Maximum bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Leave at 0 for any. Set to 1 for studios and one-bedroom flats (γκαρσονιέρα).",
            "default": 0
          },
          "minBathrooms": {
            "title": "🛁 Minimum bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Leave at 0 for any.",
            "default": 0
          },
          "minFloor": {
            "title": "🪜 Lowest floor",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "0 is the ground floor (ισόγειο), 1 is the first floor above it. Leave at -1 to accept any floor, including basements.",
            "default": -1
          },
          "maxFloor": {
            "title": "🪜 Highest floor",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "Leave at -1 for no ceiling. Set both to 0 to see only ground-floor property.",
            "default": -1
          },
          "minConstructionYear": {
            "title": "🏗️ Built no earlier than",
            "minimum": 0,
            "maximum": 2035,
            "type": "integer",
            "description": "Four-digit year. Leave at 0 for any age. Greek stock skews old — a floor of 2015 leaves about 2,300 of the 32,200 live rentals.",
            "default": 0
          },
          "maxConstructionYear": {
            "title": "🏗️ Built no later than",
            "minimum": 0,
            "maximum": 2035,
            "type": "integer",
            "description": "Leave at 0 for no ceiling.",
            "default": 0
          },
          "minEnergyClass": {
            "title": "⚡ Energy class at least",
            "enum": [
              "",
              "A+",
              "A",
              "B+",
              "B",
              "C",
              "D",
              "E",
              "F",
              "G"
            ],
            "type": "string",
            "description": "The Greek energy certificate (ενεργειακή κλάση), A+ down to G. Only about 1,700 of the 32,200 live rentals are certified A+ — most Greek stock is unrated or low, so a strict floor cuts hard.",
            "default": ""
          },
          "maxEnergyClass": {
            "title": "⚡ Energy class at most",
            "enum": [
              "",
              "A+",
              "A",
              "B+",
              "B",
              "C",
              "D",
              "E",
              "F",
              "G"
            ],
            "type": "string",
            "description": "Useful the other way round: cap at C or below to find the poorly rated stock that a renovation buyer wants.",
            "default": ""
          },
          "condition": {
            "title": "🔨 Condition",
            "enum": [
              "",
              "newly_built",
              "renovated",
              "under_construction",
              "needs_renovation"
            ],
            "type": "string",
            "description": "Newly built is xe.gr's own νεόδμητα filter and covers about 2,150 live rentals; renovated covers 12,600.",
            "default": ""
          },
          "onlyFurnished": {
            "title": "🛋️ Furnished only",
            "type": "boolean",
            "description": "Only adverts marked furnished (επιπλωμένο) — 13,500 of the 32,200 live rentals.",
            "default": false
          },
          "onlyPetsAllowed": {
            "title": "🐕 Pets allowed only",
            "type": "boolean",
            "description": "Only adverts that accept pets — 4,200 live rentals, and one of the hardest things to find in Greece.",
            "default": false
          },
          "onlyWithParking": {
            "title": "🚗 Parking only",
            "type": "boolean",
            "description": "Only adverts with a parking space (θέση στάθμευσης) — 7,270 live rentals.",
            "default": false
          },
          "onlyWithElevator": {
            "title": "🛗 Lift only",
            "type": "boolean",
            "description": "Only adverts in a building with a lift (ασανσέρ) — 12,200 live rentals. Worth pairing with a high floor filter.",
            "default": false
          },
          "onlyWithAirConditioning": {
            "title": "❄️ Air conditioning only",
            "type": "boolean",
            "description": "Only adverts with air conditioning (κλιματισμός) — 20,100 live rentals.",
            "default": false
          },
          "onlyWithGarden": {
            "title": "🌳 Garden only",
            "type": "boolean",
            "description": "Only adverts with a garden (κήπος) — 6,920 live rentals.",
            "default": false
          },
          "onlyWithPool": {
            "title": "🏊 Pool only",
            "type": "boolean",
            "description": "Only adverts with a pool (πισίνα) — 1,070 live rentals, most of them coastal.",
            "default": false
          },
          "onlyWithView": {
            "title": "🌅 A view only",
            "type": "boolean",
            "description": "Only adverts that claim a view (θέα) — 6,250 live rentals.",
            "default": false
          },
          "onlyWithPhotos": {
            "title": "📸 Has photos only",
            "type": "boolean",
            "description": "Only adverts carrying photographs — 30,300 of 32,200. The quiet one: it removes the thinnest adverts at almost no cost to the result count.",
            "default": false
          },
          "onlyShortTermAvailable": {
            "title": "🗓️ Short-term lets only",
            "type": "boolean",
            "description": "Only adverts offered for short stays (βραχυχρόνια μίσθωση) — 1,656 live rentals. Rent side only.",
            "default": false
          },
          "keywords": {
            "title": "🔤 Words in the advert",
            "type": "string",
            "description": "Free text searched inside the adverts, in Greek or English — γκαρσονιέρα, πισίνα, ρετιρέ, loft. xe.gr runs this server-side against the listing text, so it narrows the sweep rather than filtering afterwards.",
            "default": ""
          },
          "addedInLastDays": {
            "title": "🗓️ Posted in the last N days",
            "minimum": 0,
            "maximum": 90,
            "type": "integer",
            "description": "Only adverts published within this many days. 1 leaves about 970 live rentals, 7 leaves 3,980, 30 leaves 8,580. Leave at 0 for every advert regardless of age.",
            "default": 0
          },
          "sortBy": {
            "title": "↕️ Order",
            "enum": [
              "created_desc",
              "price_asc",
              "price_desc",
              ""
            ],
            "type": "string",
            "description": "Order matters more than it looks: a search is capped at 9,996 rows, so on a large result set the order decides which 9,996 you get. Newest first is the right default for monitoring; cheapest first surfaces the €10 placeholder adverts, so pair it with a price floor.",
            "default": "created_desc"
          },
          "outputLanguage": {
            "title": "🗣️ Language of the text fields",
            "enum": [
              "el",
              "en"
            ],
            "type": "string",
            "description": "xe.gr publishes the same adverts in both languages and the run reads whichever you pick — Πειραιάς (Νέο Φάληρο) or Piraeus (Neo Faliro), 53 τ.μ. or 53 sq.m., πριν από 1 ημέρα or 1 day ago. Same adverts, same ids, same numbers: the numeric price, size and coordinates are identical either way, so only the human-readable text moves. The seller's own listing text is whatever the seller wrote and is not translated.",
            "default": "el"
          },
          "listingUrls": {
            "title": "🔗 Property URLs",
            "type": "array",
            "description": "Used by the Property Detail operation: xe.gr advert URLs to expand, e.g. https://www.xe.gr/property/d/enoikiaseis-katoikion/5e67c7ef-6f76-4c5b-bc85-3dcb421d0b3c/glyfada-paniwnia-1950-119. The bare advert id works too.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchUrls": {
            "title": "🌐 xe.gr search URLs",
            "type": "array",
            "description": "Paste result URLs from xe.gr instead of filling the form — build the search you want in your browser, copy the address, drop it here. Everything already in the URL is kept exactly as the portal wrote it, and the filters above are ignored for that URL. Both https://www.xe.gr/property/results?… and the category pages under /property/r/ work.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}