# Spitogatos Scraper - Greek Real Estate Listings (`studio-amba/spitogatos-scraper`) Actor

Scrape real estate listings from Spitogatos.gr — Greece's #1 property portal. Extract apartments, houses, studios, land, and commercial properties for sale or rent with prices, locations, areas, and photos.

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

## Pricing

from $5.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper

Extract property listings from [Spitogatos.gr](https://www.spitogatos.gr) -- Greece's #1 real estate portal with over 100,000 active listings -- into structured JSON with prices, locations, areas, energy ratings, photos, and full property details.

### What is Spitogatos Scraper?

**Spitogatos Scraper** lets you extract structured real estate data from Greece's largest property platform, helping you monitor the market, compare prices, and automate property research -- all without manual browsing or login.

- **Track market prices across Greece:** extract listings with prices, surface areas, and price-per-m2 to build comprehensive price maps across Athens, Thessaloniki, islands, and every Greek region
- **Monitor new listings in real time:** schedule daily runs and get alerted the moment a property matching your criteria hits the market
- **Build property datasets for analysis:** export thousands of listings with areas, rooms, energy classes, and floor data for valuation models, academic research, or investment screening
- **Compare sale vs. rental markets:** switch between sale and rent listings to analyse yield gaps and rental demand across locations
- **Golden Visa research:** track properties meeting investment thresholds for Greece's Golden Visa programme
- **Feed your CRM or dashboard:** export structured data to Google Sheets, Airtable, or any BI tool via Apify integrations

Spitogatos.gr has **no public API and no bulk export feature**. This scraper is the only way to get structured data out of Greece's dominant property platform at scale.

### What data does Spitogatos Scraper extract?

Each listing returns the following fields:

- **Property Title** -- the listing headline
- **Property Type** -- apartment, house, studio, land, or commercial
- **Transaction Type** -- sale or rent
- **Price** -- asking price or monthly rent in EUR
- **Price per m2** -- calculated price per square meter
- **Area** -- living area in square meters
- **Rooms** -- total number of rooms
- **Bedrooms** -- number of bedrooms
- **Bathrooms** -- number of bathrooms
- **Floor** -- floor number or level
- **Location** -- area name and region
- **District** -- neighbourhood or district
- **Year Built** -- year of construction
- **Energy Class** -- energy efficiency rating (A+ to H)
- **Image URL** -- main property photo
- **URL** -- direct link to the listing on Spitogatos.gr
- **Scraped At** -- ISO 8601 timestamp

### How to scrape Spitogatos data

The input is simple: choose your **location, property type, and transaction type** and hit run. You can configure the scraper through the Apify Console UI or programmatically via the API.

#### Input fields

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| **location** | String | `"athens"` | Location slug, e.g. `"athens"`, `"thessaloniki-center"`, `"crete"`, `"mykonos"` |
| **transactionType** | String | `"sale"` | `"sale"` or `"rent"` |
| **propertyType** | String | `"any"` | `"any"`, `"apartments"`, `"homes"`, `"studios"`, `"land"`, `"commercial"` |
| **priceFrom** | Integer | -- | Minimum price in EUR |
| **priceTo** | Integer | -- | Maximum price in EUR |
| **startUrls** | Array | -- | Spitogatos search or listing URLs (overrides filters) |
| **maxResults** | Integer | `50` | Maximum number of listings to return (1--10,000) |
| **proxyConfiguration** | Object | -- | Not needed -- the actor has built-in unblocking for Spitogatos bot protection |

#### Tips for best results

- **Use `location` for quick searches:** type a location slug like `"athens-center"`, `"thessaloniki"`, `"mykonos"`, or `"crete"` to target a specific area
- **Use `startUrls` for advanced filtering:** apply filters on Spitogatos.gr (price range, rooms, newly built, etc.), copy the URL, and paste it as a start URL to preserve all filters
- **No proxy setup needed.** Spitogatos uses strong bot protection, but the actor ships with built-in unblocking that handles it automatically
- **Start with a small `maxResults`** (e.g. 50) to verify the output, then scale up
- **Schedule daily runs** to track new listings -- Spitogatos sees hundreds of new properties per day
- **Empty input works:** running with `{}` defaults to residential properties for sale in Athens Center

#### Location slugs

Common location values (use the English slug from Spitogatos URLs):

| Location | Slug |
|----------|------|
| Athens Center | `athens-center` |
| Athens North | `athens-north` |
| Athens South | `athens-south` |
| Athens East | `athens-east` |
| Athens West | `athens-west` |
| Thessaloniki Center | `thessaloniki-center` |
| Piraeus | `piraeus` |
| Glyfada | `glyfada` |
| Kifisia | `kifisia` |
| Crete | `crete` |
| Mykonos | `mykonos` |
| Santorini | `santorini` |
| Corfu | `corfu` |
| Rhodes | `rhodes` |

### Output

Results are stored in a **dataset** that you can download in JSON, CSV, Excel, XML, or HTML format directly from the Apify Console.

#### JSON example

```json
{
    "propertyTitle": "Apartment for sale in Athens Center",
    "propertyType": "apartment",
    "transactionType": "sale",
    "price": 185000,
    "currency": "EUR",
    "pricePerSqm": 2313,
    "area": 80,
    "rooms": 3,
    "bedrooms": 2,
    "bathrooms": 1,
    "floor": "3rd",
    "location": "Athens Center, Kolonaki",
    "district": "Kolonaki",
    "yearBuilt": 2005,
    "energyClass": "C",
    "imageUrl": "https://images.spitogatos.gr/photos/12345678/main.jpg",
    "url": "https://www.spitogatos.gr/en/for_sale-apartments/athens-center/12345678",
    "scrapedAt": "2026-06-09T10:30:00.000Z"
}
```

### How much does it cost to scrape Spitogatos?

Spitogatos Scraper uses a built-in unblocking service to get past Spitogatos' anti-bot protection, then parses the server-rendered listing pages directly. That keeps runs fast and affordable.

| Scenario | Est. cost | Time |
|----------|-----------|------|
| 50 listings | ~$0.15 | ~2 min |
| 500 listings | ~$1.50 | ~15 min |
| 2,000 listings | ~$6.00 | ~1 hr |

**Pricing breakdown:**

- Per result: $0.005

### Can I integrate Spitogatos Scraper with other apps?

Yes. Spitogatos Scraper connects with any tool through [Apify integrations](https://apify.com/integrations):

- **Google Sheets** -- automatically export property data to a spreadsheet
- **Slack / Email** -- get notified when new listings match your criteria
- **Zapier / Make** -- trigger workflows when data is ready
- **Airtable** -- build a searchable property database
- **REST API** -- call the scraper programmatically from any language
- **Webhooks** -- get notified when a run finishes

### Can I use Spitogatos Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) to run Spitogatos Scraper programmatically.

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/spitogatos-scraper").call(run_input={
    "location": "athens-center",
    "transactionType": "sale",
    "propertyType": "apartments",
    "maxResults": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['propertyTitle']} -- EUR {item['price']:,} -- {item['location']}")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/spitogatos-scraper').call({
    location: 'athens-center',
    transactionType: 'sale',
    propertyType: 'apartments',
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Check the [API tab](https://apify.com/studio-amba/spitogatos-scraper/api) for full documentation.

### FAQ

#### What is Spitogatos.gr?

Spitogatos.gr is Greece's largest and most-visited real estate platform, with over 100,000 active property listings. It covers the entire Greek market -- mainland, islands, and all regions -- for both sales and rentals across all property types including apartments, houses, studios, land, and commercial properties. It also covers Cyprus through Spitogatos.com.cy.

#### How does Spitogatos Scraper work?

It loads Spitogatos search result pages through a built-in unblocking service (Spitogatos blocks plain HTTP requests) and extracts structured data from the server-rendered HTML: title, price, area, location, floor, bedrooms, and bathrooms per listing. Individual listing URLs get an extended extraction with year built, energy class, and full feature details.

#### Can I scrape both sale and rental listings?

Yes. Set `transactionType` to `"sale"` or `"rent"`. You can also filter by property type: `"apartments"`, `"homes"`, `"studios"`, `"land"`, `"commercial"`, or `"any"` for all types.

#### Can I filter by price range?

Yes. Use `priceFrom` and `priceTo` to set a price range in EUR. For example, set `priceFrom: 100000` and `priceTo: 300000` to find properties between 100K and 300K EUR.

#### Do I need proxies?

No. Spitogatos.gr uses strong bot protection, but the actor handles unblocking automatically. You don't need to configure anything.

#### Is it legal to scrape Spitogatos?

This scraper extracts publicly available listing data that Spitogatos.gr displays to all visitors. The data is factual (prices, addresses, property specifications) and does not contain private personal information. As with any scraping tool, use the data responsibly and in compliance with applicable laws. No login or cookies are required.

### Limitations

- **Greece only.** Spitogatos.gr covers exclusively Greek real estate (and some Cyprus listings).
- **Sequential crawling.** Pages are fetched one at a time to stay reliable, so very large runs take longer.
- **Search-page price filters run client-side.** Spitogatos ignores price filters in the URL, so `priceFrom`/`priceTo` are applied after extraction. Listings without a listed price are skipped when a price filter is set.
- **Some fields may be null.** Not all sellers fill in every field -- `yearBuilt`, `energyClass`, or `floor` may be missing on some listings.

### Other European real estate scrapers

Combine Spitogatos Scraper with these actors for comprehensive European property market coverage:

- [Immoweb Scraper](https://apify.com/studio-amba/immoweb-scraper) -- Belgian real estate listings
- [Funda Scraper](https://apify.com/studio-amba/funda-scraper) -- Dutch property listings
- [Immobiliare Scraper](https://apify.com/studio-amba/immobiliare-scraper) -- Italian real estate
- [ImmoScout24 Scraper](https://apify.com/studio-amba/immoscout24-scraper) -- German property listings
- [Idealista Scraper](https://apify.com/studio-amba/idealista-scraper) -- Spanish real estate
- [Otodom Scraper](https://apify.com/studio-amba/otodom-scraper) -- Polish property listings
- [Willhaben Scraper](https://apify.com/studio-amba/willhaben-scraper) -- Austrian real estate
- [SeLoger Scraper](https://apify.com/studio-amba/seloger-scraper) -- French property listings

### Your feedback

Found a bug or have a feature request? Please open an issue on the [Issues tab](https://apify.com/studio-amba/spitogatos-scraper/issues). We actively maintain this scraper and respond to all reports.

# Actor input Schema

## `location` (type: `string`):

Search location, e.g. 'athens-center', 'thessaloniki', 'athens-south', 'mykonos'. Use the English area slug from Spitogatos URLs. Common city names like 'athens' are mapped automatically.

## `transactionType` (type: `string`):

Search for properties for sale or for rent.

## `propertyType` (type: `string`):

Type of property to search for.

## `priceFrom` (type: `integer`):

Minimum price filter in EUR. Leave empty for no minimum.

## `priceTo` (type: `integer`):

Maximum price filter in EUR. Leave empty for no maximum.

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

Spitogatos search or listing URLs to scrape. Overrides location/type filters if provided.

## `maxResults` (type: `integer`):

Maximum number of listings to return.

## `brightDataApiKey` (type: `string`):

Optional override for the built-in unblocking service credentials. Leave empty to use the default.

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

Not used — the actor ships with built-in unblocking that handles Spitogatos bot protection automatically. Kept for compatibility.

## Actor input object example

```json
{
  "location": "athens",
  "transactionType": "sale",
  "propertyType": "any",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GR"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "location": "athens",
    "transactionType": "sale",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/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 = {
    "location": "athens",
    "transactionType": "sale",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/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 '{
  "location": "athens",
  "transactionType": "sale",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GR"
  }
}' |
apify call studio-amba/spitogatos-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/F9CgIVZtVhuS3y0Lw/builds/h4m5JjcqWWLvSQGhZ/openapi.json
