{
  "openapi": "3.0.1",
  "info": {
    "title": "Greece & Cyprus Real Estate - Spitogatos.gr",
    "description": "Scrape real estate listings from Spitogatos.gr, Greece's largest property platform. Rent & buy across 20,000+ areas. Returns prices, photos, location, rooms, agent info, and optional enrichment with phone numbers, amenities, and descriptions.",
    "version": "1.0",
    "x-build-id": "AAd0AUKAYpH0L7Jek"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/swerve~spitogatos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-swerve-spitogatos-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/swerve~spitogatos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-swerve-spitogatos-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/swerve~spitogatos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-swerve-spitogatos-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": {
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region, or area name (e.g. 'Athens', 'Thessaloniki', 'Crete', 'Mykonos', 'Glyfada'). The scraper will auto-match to the closest Spitogatos area. Required unless 'Listing IDs' is set."
          },
          "listingIds": {
            "title": "Listing IDs (track-list mode)",
            "type": "array",
            "description": "Re-check specific listings by ID. When provided, the scraper skips the area search and fetches ONLY these listings via the detail API — useful for monitoring price changes on a known set of properties. Each listing is returned with full data (basic + enrichment fields). Cost scales with the number of IDs, not the size of the city.",
            "items": {
              "type": "integer"
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "rent",
              "sale"
            ],
            "type": "string",
            "description": "Rent or sale listings",
            "default": "rent"
          },
          "propertyCategory": {
            "title": "Property Category",
            "enum": [
              "residential",
              "commercial",
              "land"
            ],
            "type": "string",
            "description": "Type of property",
            "default": "residential"
          },
          "maxItems": {
            "title": "Max Listings (optional cap)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap on how many listings to return. Leave blank to scrape ALL matching listings for the location and filters (big cities like Athens can be thousands, so cost scales with the result set). Set a number only to limit the pull, for example 15 for a quick test or 500 to bound cost. With enrichment enabled, roughly 100 listings finish in 3 to 4 minutes."
          },
          "minPrice": {
            "title": "Min Price (€)",
            "type": "integer",
            "description": "Minimum price filter in EUR (optional)"
          },
          "maxPrice": {
            "title": "Max Price (€)",
            "type": "integer",
            "description": "Maximum price filter in EUR (optional)"
          },
          "minArea": {
            "title": "Min Area (sqm)",
            "type": "integer",
            "description": "Minimum area in square meters (optional)"
          },
          "maxArea": {
            "title": "Max Area (sqm)",
            "type": "integer",
            "description": "Maximum area in square meters (optional)"
          },
          "minRooms": {
            "title": "Min Rooms",
            "type": "integer",
            "description": "Minimum number of rooms (optional)"
          },
          "maxRooms": {
            "title": "Max Rooms",
            "type": "integer",
            "description": "Maximum number of rooms (optional)"
          },
          "publishedAfter": {
            "title": "Published After",
            "type": "string",
            "description": "Only include listings first published on or after this date. Dramatically reduces cost for daily monitoring / delta scraping. Accepts ISO (YYYY-MM-DD) or d/m/Y."
          },
          "modifiedAfter": {
            "title": "Modified After",
            "type": "string",
            "description": "Only include listings whose agent modified them on or after this date. Applied as a client-side filter after fetch, so it does NOT reduce credit cost (use 'Published After' for cost savings)."
          },
          "enrichListings": {
            "title": "Enrich Listings (full property details)",
            "type": "boolean",
            "description": "When enabled (default), each listing is enriched with description, amenities (elevator, AC, balcony, garden, pool, parking, storage), energy class, year built, and agent contact info. Adds ~1 second per listing and an upfront ~20s to solve Spitogatos's anti-bot. Disable to get just the basic search fields (price, area, rooms, location, images, agent name) for faster, cheaper runs.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}