# Spitogatos.gr Scraper — Greek Real Estate Property Listings (`haketa/spitogatos-scraper`) Actor

Scrape Spitogatos.gr for Greek real estate listings by location and type. Extract property price, area, rooms, location, agent info, images, and full details. For real estate market research, property investment analysis, and lead generation in Greece.

- **URL**: https://apify.com/haketa/spitogatos-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Spitogatos.gr Scraper — Greek Real Estate Property Listings

Extract real estate property listings from Spitogatos.gr, Greece's largest property portal. Get residential and commercial listings for sale and rent — price, area, rooms, location, agency details, images, and GPS coordinates.

### Why This Scraper?

Spitogatos is Greece's #1 real estate marketplace, used by all major agencies and private sellers. However, the site uses enterprise-grade anti-bot protection (Distil/Imperva on AWS CloudFront) that blocks all non-browser HTTP requests — including curl, got-scraping, and even curl_cffi's TLS emulation.

This scraper uses a real Chromium browser via Playwright to pass the anti-bot check, then calls Spitogatos' internal REST API from within the browser context. This hybrid approach delivers fast, structured JSON data without HTML parsing — all while maintaining a natural browser fingerprint.

### What Data Does It Extract?

| Field | Description |
|---|---|
| `id` | Spitogatos property ID |
| `category` | Property type (house, apartment, maisonette, etc.) |
| `listingType` | Sale or rent |
| `price` | Price in Euros (€) |
| `sqMeters` | Living area in m² |
| `rooms` | Number of rooms |
| `bathrooms` | Number of bathrooms |
| `floorNumber` | Floor number |
| `geography` | Area/neighborhood name |
| `latitude` / `longitude` | GPS coordinates |
| `mainImageURL` | Main property image |
| `imageCount` | Number of listing images |
| `hasVTour` | Virtual tour availability |
| `newDevelopment` | New development flag |
| `agencyName` | Real estate agency name |
| `agentProfilePath` | Agent profile URL |
| `url` | Property listing URL |
| `searchArea` | Area ID searched |
| `scrapedAt` | Extraction timestamp |

### Use Cases

#### Real Estate Market Research
Monitor property prices, availability, and trends across Greek cities and neighborhoods. Track price per m² by area, property type, and listing age.

#### Investment Analysis
Identify undervalued areas, track new developments, and compare rental yields across Athens, Thessaloniki, and regional markets.

#### Agency & Competitor Monitoring
Track which agencies are active in which areas. Monitor new listings, price changes, and market share by agency.

#### Lead Generation
Build lists of properties matching specific criteria (price range, area, type). Identify motivated sellers through listing age and price reductions.

### Input Parameters

| Parameter | Type | Description |
|---|---|---|
| `areaIDs` | string[] | Spitogatos area IDs. 100=Athens Center, 4933=Thessaloniki Center, 6=Glyfada, etc. |
| `listingTypes` | string[] | 'sale' or 'rent' |
| `categories` | string[] | 'residential', 'commercial', 'land' |
| `startUrls` | string[] | Direct Spitogatos URLs |
| `maxItemsPerSearch` | integer | Max per area+type+category (default 300) |
| `maxTotalItems` | integer | Global cap (0 = unlimited) |
| `sortBy` | select | rankingscore (relevance), price, date |
| `proxyConfiguration` | proxy | Optional — browser passes anti-bot without proxy |

### Popular Area IDs

| ID | Area |
|---|---|
| 100 | Athens Center |
| 6 | Glyfada |
| 215 | Kifissia |
| 103 | Kolonaki |
| 203 | Piraeus |
| 4933 | Thessaloniki Center |
| 111 | Marousi |
| 4 | Voula |
| 20021 | Chalandri |

### Output Format

```json
{
    "id": "17457966",
    "category": "house",
    "listingType": "sale",
    "price": 175659,
    "sqMeters": 42,
    "rooms": 1,
    "bathrooms": 1,
    "floorNumber": 9,
    "geography": "Stathmos Larisis (Kolonos - Kolokynthous)",
    "latitude": 37.995461,
    "longitude": 23.71983,
    "mainImageURL": "https://m1.spitogatos.gr/313327008_300x220.jpg",
    "imageCount": 3,
    "agencyName": "LUX&EASY RESIDENCES",
    "agentProfilePath": "https://www.spitogatos.gr/find-agents/LUX-EASY-RESIDENCES/8650",
    "url": "https://www.spitogatos.gr/en/listing/17457966",
    "searchArea": "100",
    "scrapedAt": "2026-06-26T15:00:00.000Z"
}
````

### Performance

| Metric | Typical Value |
|---|---|
| Speed | ~500ms per API page (30 properties) |
| 300 results | ~5-8 seconds |
| Memory | ~300-500 MB (Chromium) |
| Proxy | Not required |

### Limitations

- **Browser required** — Playwright Chromium needed for anti-bot bypass
- **API rate limits** — 500ms delay between pages to be respectful
- **Area IDs** — Must know the numeric area IDs. Use the autocomplete API or browse spitogatos.gr to discover IDs
- **Greek market only** — Properties in Greece only. Site is in Greek/English.

### Tips

- **Find area IDs** — Search on spitogatos.gr and check the URL or use `POST /n_api/v1/geographies/autocomplete`
- **Start small** — Begin with 1 area, 1 type, 30 results
- **Multiple areas** — Add multiple areaIDs to scrape multiple neighborhoods in one run
- **Rent + Sale** — Add both 'sale' and 'rent' to listingTypes for full coverage
- **Monitor prices** — Schedule daily/weekly runs to track price changes

### Legal & Responsible Use

This scraper extracts publicly available property listings from Spitogatos.gr. Use in compliance with Spitogatos' Terms of Service and applicable Greek/EU law. This tool is for legitimate real estate market research and analysis purposes only.

# Actor input Schema

## `areaIDs` (type: `array`):

Spitogatos area IDs to search, e.g. 100=Athens Center, 4933=Thessaloniki Center. Use autocomplete API or startUrls to discover IDs.

## `listingTypes` (type: `array`):

Property listing types. 'sale' = for sale (πώληση), 'rent' = for rent (ενοικίαση).

## `categories` (type: `array`):

Property categories. 'residential' = residential, 'commercial' = commercial, 'land' = plots/land.

## `startUrls` (type: `array`):

Direct Spitogatos search URLs or API URLs to scrape.

## `maxItemsPerSearch` (type: `integer`):

Max properties per area+type+category combo. 0 = unlimited.

## `maxTotalItems` (type: `integer`):

Global cap. 0 = unlimited.

## `sortBy` (type: `string`):

Sort order for results.

## `proxyConfiguration` (type: `object`):

Spitogatos API uses Distil/Imperva anti-bot. Browser required, proxy optional for IP rotation.

## Actor input object example

```json
{
  "areaIDs": [
    "100",
    "4933"
  ],
  "listingTypes": [
    "sale",
    "rent"
  ],
  "categories": [
    "residential",
    "commercial"
  ],
  "maxItemsPerSearch": 300,
  "maxTotalItems": 0,
  "sortBy": "rankingscore",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `id` (type: `string`):

Spitogatos property ID

## `category` (type: `string`):

Property type (house, apartment, etc.)

## `listingType` (type: `string`):

Sale or rent

## `price` (type: `string`):

Price in Euros

## `sqMeters` (type: `string`):

Property area in square meters

## `rooms` (type: `string`):

Number of rooms

## `bathrooms` (type: `string`):

Number of bathrooms

## `floorNumber` (type: `string`):

Floor number

## `geography` (type: `string`):

Area/neighborhood name

## `latitude` (type: `string`):

GPS latitude

## `longitude` (type: `string`):

GPS longitude

## `mainImageURL` (type: `string`):

Main property image URL

## `imageCount` (type: `string`):

Number of images

## `hasVTour` (type: `string`):

Has virtual tour

## `newDevelopment` (type: `string`):

Is new development

## `agencyName` (type: `string`):

Real estate agency name

## `agentProfilePath` (type: `string`):

Agent profile URL

## `url` (type: `string`):

Property listing URL

## `searchArea` (type: `string`):

Area ID searched

## `scrapedAt` (type: `string`):

Extraction timestamp

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "areaIDs": [
        "100"
    ],
    "listingTypes": [
        "sale"
    ],
    "categories": [
        "residential"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/spitogatos-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "areaIDs": ["100"],
    "listingTypes": ["sale"],
    "categories": ["residential"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/spitogatos-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "areaIDs": [
    "100"
  ],
  "listingTypes": [
    "sale"
  ],
  "categories": [
    "residential"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call haketa/spitogatos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=haketa/spitogatos-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Spitogatos.gr Scraper — Greek Real Estate Property Listings",
        "description": "Scrape Spitogatos.gr for Greek real estate listings by location and type. Extract property price, area, rooms, location, agent info, images, and full details. For real estate market research, property investment analysis, and lead generation in Greece.",
        "version": "0.1",
        "x-build-id": "RJRA6MVaflSVsPaDh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/haketa~spitogatos-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-haketa-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/haketa~spitogatos-scraper/runs": {
            "post": {
                "operationId": "runs-sync-haketa-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/haketa~spitogatos-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-haketa-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": {
                    "areaIDs": {
                        "title": "Area IDs",
                        "type": "array",
                        "description": "Spitogatos area IDs to search, e.g. 100=Athens Center, 4933=Thessaloniki Center. Use autocomplete API or startUrls to discover IDs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingTypes": {
                        "title": "Listing types",
                        "type": "array",
                        "description": "Property listing types. 'sale' = for sale (πώληση), 'rent' = for rent (ενοικίαση).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categories": {
                        "title": "Property categories",
                        "type": "array",
                        "description": "Property categories. 'residential' = residential, 'commercial' = commercial, 'land' = plots/land.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct Spitogatos search URLs or API URLs to scrape.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerSearch": {
                        "title": "Max items per search",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Max properties per area+type+category combo. 0 = unlimited.",
                        "default": 300
                    },
                    "maxTotalItems": {
                        "title": "Max total items",
                        "type": "integer",
                        "description": "Global cap. 0 = unlimited.",
                        "default": 0
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "rankingscore",
                            "price",
                            "date"
                        ],
                        "type": "string",
                        "description": "Sort order for results.",
                        "default": "rankingscore"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Spitogatos API uses Distil/Imperva anti-bot. Browser required, proxy optional for IP rotation.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
