{
  "openapi": "3.0.1",
  "info": {
    "title": "Spitogatos Scraper - Greek Property Listings",
    "description": "Scrape Spitogatos.gr, Greece's largest property portal: asking price, price per square metre, size, rooms, floor, energy class, year built, GPS, every photo and the listing agency's phone numbers. Sale and rent, all of Greece. JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "Ww17JIaI1gjlwaixJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~spitogatos-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-spitogatos-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~spitogatos-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-spitogatos-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~spitogatos-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-spitogatos-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 operation per run. Property Search returns 30 rows per call and is where the value is; Property Detail expands one advert and is priced as an add-on.",
            "default": "search"
          },
          "site": {
            "title": "🌍 Market",
            "enum": [
              "GR"
            ],
            "type": "string",
            "description": "Which marketplace to query.",
            "default": "GR"
          },
          "locations": {
            "title": "📍 Places in Greece",
            "type": "array",
            "description": "Places to search, in Greek or English: Athens, Θεσσαλονίκη, Κολωνάκι, Glyfada, Chania, Mykonos. Each name is resolved against Spitogatos's own place index, so a region, a city, a district or a single neighbourhood all work. The place actually matched is printed in the log and stamped on every row as searchLocation, so a near-match is visible rather than silent. One search runs per place.",
            "default": [
              "Athens"
            ],
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "🏷️ Sale or rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Which side of the market to search. For sale is by far the larger pool nationwide.",
            "default": "sale"
          },
          "category": {
            "title": "🏘️ Asset class",
            "enum": [
              "residential",
              "commercial",
              "land",
              "other"
            ],
            "type": "string",
            "description": "Homes covers apartments, maisonettes, detached houses and villas. Commercial covers offices, shops, warehouses and hotels. Land covers plots and parcels. Other property covers parking spaces, air rights and prefabricated units. The property types below must belong to the class you pick here.",
            "default": "residential"
          },
          "propertyTypes": {
            "title": "🏡 Property types",
            "uniqueItems": true,
            "type": "array",
            "description": "Narrow to particular kinds of property. Leave empty to take every type in the asset class you chose. Each entry is labelled with the class it belongs to — picking a Commercial type while the asset class is Homes is refused rather than silently ignored.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "studio",
                "maisonette",
                "detached",
                "villa",
                "loft",
                "bungalow",
                "building",
                "apartment complex",
                "farm",
                "houseboat",
                "other residential",
                "office",
                "store",
                "warehouse",
                "industrial space",
                "craft space",
                "hotel",
                "business building",
                "hall",
                "showroom",
                "other commercial",
                "plot",
                "parcel",
                "island",
                "other land",
                "parking spot",
                "business",
                "prefabricated",
                "detachable",
                "air",
                "other"
              ],
              "enumTitles": [
                "🏠 Homes · Apartment",
                "🚪 Homes · Studio",
                "🪜 Homes · Maisonette",
                "🏡 Homes · Detached house",
                "🏝️ Homes · Villa",
                "🎨 Homes · Loft",
                "🛖 Homes · Bungalow",
                "🏢 Homes · Whole building",
                "🏙️ Homes · Apartment complex",
                "🌾 Homes · Farmhouse",
                "⛵ Homes · Houseboat",
                "🏘️ Homes · Other residential",
                "💼 Commercial · Office",
                "🛍️ Commercial · Shop",
                "📦 Commercial · Warehouse",
                "🏭 Commercial · Industrial space",
                "🔧 Commercial · Craft space",
                "🏨 Commercial · Hotel",
                "🏛️ Commercial · Business building",
                "🎪 Commercial · Hall",
                "🪟 Commercial · Showroom",
                "🏢 Commercial · Other commercial",
                "🌳 Land · Plot",
                "🗺️ Land · Parcel",
                "🏖️ Land · Island",
                "🌱 Land · Other land",
                "🅿️ Other · Parking space",
                "💱 Other · Business",
                "🧱 Other · Prefabricated",
                "🔩 Other · Detachable",
                "🌤️ Other · Air rights",
                "❓ Other · Other"
              ]
            },
            "default": []
          },
          "maxResults": {
            "title": "🔢 Max properties",
            "minimum": 1,
            "maximum": 30000,
            "type": "integer",
            "description": "Stop after this many properties across all places. Each call returns 30 rows, so the run stops at the first call that crosses your limit.",
            "default": 100
          },
          "searchUrls": {
            "title": "🌐 Spitogatos search URLs",
            "type": "array",
            "description": "Paste finished Spitogatos search links instead of filling the fields above, e.g. https://www.spitogatos.gr/pwliseis-diamerismata/athina-kentro. Every filter on the link is read from the portal's own reply, so you can build the search on the site and hand the result over. Given here, these replace the place and filter fields.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🔗 Property URLs",
            "type": "array",
            "description": "Used by the Property Detail operation: Spitogatos property links to expand, e.g. https://www.spitogatos.gr/aggelia/1113403816. Full links only. Apify validates this field before the run starts and rejects anything that is not a URL, so a bare advert number is refused by the platform, not by this actor.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "minPrice": {
            "title": "💵 Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price to include. For rentals this is euro per month. 0 means no lower bound.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price to include. For rentals this is euro per month. 0 means no upper bound.",
            "default": 0
          },
          "minAreaSqm": {
            "title": "📐 Min size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest floor area to include, in square metres. 0 means no lower bound.",
            "default": 0
          },
          "maxAreaSqm": {
            "title": "📏 Max size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest floor area to include, in square metres. 0 means no upper bound.",
            "default": 0
          },
          "minRooms": {
            "title": "🛏️ Min rooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Fewest rooms to include. On homes this counts bedrooms; on commercial property it counts rooms. 0 means no lower bound.",
            "default": 0
          },
          "maxRooms": {
            "title": "🛌 Max rooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Most rooms to include. 0 means no upper bound.",
            "default": 0
          },
          "minFloor": {
            "title": "🪜 Lowest floor",
            "enum": [
              "",
              "basement",
              "semi_basement",
              "ground_floor",
              "semi_ground_floor",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9",
              "10",
              "15",
              "20",
              "30",
              "40",
              "51"
            ],
            "type": "string",
            "description": "Only properties on this floor or higher. Spitogatos offers these steps and no others, so 11th to 14th is reached by choosing 10th and filtering the results yourself.",
            "default": ""
          },
          "maxFloor": {
            "title": "🏢 Highest floor",
            "enum": [
              "",
              "basement",
              "semi_basement",
              "ground_floor",
              "semi_ground_floor",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9",
              "10",
              "15",
              "20",
              "30",
              "40",
              "51"
            ],
            "type": "string",
            "description": "Only properties on this floor or lower. Ground floor is the usual choice for shops and for buyers who want no stairs.",
            "default": ""
          },
          "minYearBuilt": {
            "title": "🧱 Built from",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest construction year to include. 0 means no lower bound. Properties still under construction carry no year and are excluded once you set this.",
            "default": 0
          },
          "maxYearBuilt": {
            "title": "🏚️ Built up to",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest construction year to include. 0 means no upper bound. Useful for finding pre-1980 stock that qualifies for Greek renovation grants.",
            "default": 0
          },
          "energyClassAtLeast": {
            "title": "⚡ Minimum energy class",
            "enum": [
              "",
              "ap",
              "a",
              "bp",
              "b",
              "c",
              "d",
              "e",
              "f",
              "g"
            ],
            "type": "string",
            "description": "Only properties rated at least this well on Greece's ΠΕΑ energy certificate scale. Exempt and pending certificates are excluded once this is set.",
            "default": ""
          },
          "listedWithin": {
            "title": "🆕 First listed within",
            "enum": [
              "",
              "24hours",
              "3days",
              "1week",
              "1month",
              "3months",
              "6months",
              "1year"
            ],
            "type": "string",
            "description": "Only adverts first published inside this window. Set it to the last 24 hours and schedule the run daily to pay for new supply only.",
            "default": ""
          },
          "updatedWithin": {
            "title": "♻️ Updated within",
            "enum": [
              "",
              "24hours",
              "3days",
              "1week",
              "1month",
              "3months",
              "6months",
              "1year"
            ],
            "type": "string",
            "description": "Only adverts the advertiser has touched inside this window. A stale advert is often a stale price, so this is the cleaner filter for a live-market snapshot.",
            "default": ""
          },
          "priceReducedOnly": {
            "title": "📉 Price cuts only",
            "type": "boolean",
            "description": "Return only properties whose asking price has been cut, with the old price and the size of the cut on every row. This is the closest signal Spitogatos publishes to a motivated seller.",
            "default": false
          },
          "features": {
            "title": "✨ Must have",
            "uniqueItems": true,
            "type": "array",
            "description": "Every property returned must have all of these. Each one was checked against the live portal and changes the result count, so nothing here is decorative. Auction applies to sales only.",
            "items": {
              "type": "string",
              "enum": [
                "newDevelopment",
                "studentHome",
                "furnished",
                "elevator",
                "garage",
                "storage",
                "balcony",
                "garden",
                "swimmingPool",
                "view",
                "fireplace",
                "airConditioning",
                "solarHeater",
                "alarm",
                "secureDoor",
                "penthouse",
                "accessibleForDisabled",
                "auction",
                "hasMainImage"
              ],
              "enumTitles": [
                "🏗️ Newly built",
                "🎓 Student housing",
                "🛋️ Furnished",
                "🛗 Lift",
                "🚗 Parking",
                "📦 Storage room",
                "🌇 Balcony",
                "🌳 Garden",
                "🏊 Swimming pool",
                "🏔️ View",
                "🔥 Fireplace",
                "❄️ Air conditioning",
                "☀️ Solar water heater",
                "🚨 Alarm",
                "🔐 Security door",
                "🏙️ Penthouse",
                "♿ Step-free access",
                "⚖️ Auction (sale only)",
                "🖼️ Has a photo"
              ]
            },
            "default": []
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "best_match",
              "newest",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Best match is the portal's own ranking and is right for a one-off sweep. Most recently updated is what you want for monitoring.",
            "default": "best_match"
          },
          "includeDetails": {
            "title": "📄 Add street address, energy class and every photo",
            "type": "boolean",
            "description": "Open each property's own record to add the street address, energy class, construction year, heating system, floor and window materials, the full photo set and around 130 amenity attributes. Costs one extra request per property and bills the Property Detail event on top of the search row.",
            "default": false
          },
          "includeAgentContact": {
            "title": "📞 Add agency phone numbers",
            "type": "boolean",
            "description": "Attach the listing agency's phone numbers, office address, website and contact name to every row. Each agency is looked up once and reused across the whole run, and the Agency Contact event is billed once per unique agency — not per property, and never when the lookup returns no contact details. Property Detail rows already carry the agency's phones, so this costs nothing extra there.",
            "default": false
          },
          "language": {
            "title": "🌍 Place-name language",
            "enum": [
              "el",
              "en"
            ],
            "type": "string",
            "description": "Greek returns place names as Greeks write them: Αθήνα - Κέντρο, Κουκάκι. English returns the portal's own transliteration: Athens - Center, Koukaki. Descriptions are written by advertisers and stay in whatever language they wrote them in.",
            "default": "el"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}