# Spitogatos.gr Greece Property Scraper (`parsebird/spitogatos-property-scraper`) Actor

Scrape Spitogatos.gr property listings in Greece: price, m², rooms, floor, amenities, energy class, GPS, photos and a resolved agent or agency phone for every listing.

- **URL**: https://apify.com/parsebird/spitogatos-property-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.69 / 1,000 property listings

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Spitogatos.gr Greece Property Scraper

Spitogatos.gr Greece Property Scraper extracts property listings from [Spitogatos.gr](https://www.spitogatos.gr/en), one of Greece's largest real estate portals: prices, m², rooms, floor, energy class, amenities, GPS coordinates, photos and a phone number for every listing.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Paste any Spitogatos search, property or agency URL (or just type a place name and pick filters) and get 130+ fields per listing, including the named agent's or agency's phone, full agency details, 45+ amenity flags and high-resolution photos.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Use the Apify actor "parsebird/spitogatos-property-scraper" (actor ID: parsebird~spitogatos-property-scraper) to scrape Spitogatos.gr (Greece) real estate listings via the ApifyClient: client.actor("parsebird/spitogatos-property-scraper").call(run_input={"start_urls": [{"url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center"}], "max_depth": 2}). Two input modes: (1) start_urls (array of {url}) with Spitogatos search pages, property pages (/en/property/...) or agency pages (/en/find-agents/...), in English or Greek; start_urls always win over filters; max_depth (integer, result pages of 30 per search, empty = all); max_items (integer, total cap). (2) Leave start_urls empty and search by filters: locations (array of place names, English or Greek, e.g. "Kolonaki", "Kolonaki (Thiva)"), listing_type ("sale"|"rent", default sale), category ("residential"|"commercial"|"land"|"other"|"new_development"|"student_housing"), property_types (one of 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; must match the category), price_min/price_max (EUR, monthly rent for rentals), area_min/area_max (m²), rooms_min/rooms_max, construction_year_min/construction_year_max, floor_min/floor_max ("basement"|"semi_basement"|"ground_floor"|"semi_ground_floor"|floor number), heating_controllers (array: with_heating, autonomous, central, individual, none), heating_media (array: natural_gas, gas, petrol, current, pellet, wood, thermal_accumulator, ...), energy_class ("ap","a","bp","b","c".."g", this class or better), amenities (array: hasMainImage, reductions, garage, storage, elevator, furnished, airConditioning, balcony, garden, fireplace, secureDoor, alarm, penthouse, corner, petsAllowed, accessibleForDisabled, loadingDock, auction, view, swimmingPool, solarHeater), posted_within/updated_within ("24hours".."3years" or "dd/mm/yyyy"), sort_by ("rankingscore"|"datemodified"|"price"|"pricepersqmeters"|"size"), sort_order ("asc"|"desc"). Output: one JSON object per listing with url, id, title, listing_type, property_type, price, pricePerSqMeters, sq_meters, rooms, no_of_bathrooms, floorNumber, floor_level, floor_label, year_of_construction, renovationYear, energy_class, heating_type, heating_medium, amenities (list) plus boolean flags (parking, storage, elevator, air_conditioning, balcony, garden...), description, region/area/neighborhood, geographiesByLevel_*_fullName, address, latitude, longitude, contact_name, contact_telephone, contact_type ("agent employee"|"agency"|"private seller"), agentEmployee_firstName/lastName/telephone, agency_name, agency_telephone, agency_telephones, agency_contact_person, agency_address, agency_area, agency_website, agency_membership_type, agency_url, agent_id, images (1600x1200 URLs), first_published, modified. Pricing: pay per property scraped. Full API spec: https://apify.com/parsebird/spitogatos-property-scraper/api. Get your token: https://console.apify.com/account/integrations.
```

### What is Spitogatos.gr Greece Property Scraper?

**Spitogatos.gr Greece Property Scraper** is a **Spitogatos scraper and unofficial Spitogatos API** that turns listings from [spitogatos.gr](https://www.spitogatos.gr/en) into clean, structured data. Spitogatos does not offer a public API, and every page sits behind bot protection. This actor handles that for you and returns each listing as one flat record you can export to **JSON, CSV or Excel**.

The easiest way to try it: open a search on Spitogatos.gr, copy the URL from your browser, paste it into **Start URLs** and click **Start**.

### What can Spitogatos.gr Greece Property Scraper do?

- 🔗 **Scrape any Spitogatos URL**: search result pages (with every filter you set on the site), single property pages and agency profile pages. English (`/en/...`) and Greek URLs both work, and you can mix them in one run.
- 🔎 **Search without a URL**: type place names such as `Kolonaki`, `Glyfada` or `Κηφισιά` and filter by sale or rent, category, property type, price, area, rooms, construction year, floor, heating, energy class, features and listing date, just like the site's own search form.
- 📞 **A phone number for every listing**: when the agency named a specific agent for the listing you get that person's name and mobile; otherwise you get the agency's own number, plus the agency's full contact details.
- 🏠 **Full listing details**: price and price per m², living area, rooms, bathrooms, floor, construction and renovation year, energy class, heating type and fuel, orientation, flooring, window frames, 45+ yes/no amenity flags, the full description and all photos in 1600x1200.
- 📍 **Location data**: region, area and neighbourhood names, Spitogatos' geography hierarchy and GPS coordinates (when the advertiser publishes them).
- ⏱️ **Runs on Apify**: [schedule](https://docs.apify.com/platform/schedules) daily runs to track new listings and price changes, call it through the [Apify API](https://docs.apify.com/api/v2), and push results to Google Sheets, Slack, Make, Zapier or webhooks with [integrations](https://apify.com/integrations).

### What data can you extract from Spitogatos.gr?

A record carries 130+ keys. The most useful ones:

| Field | Description |
|-------|-------------|
| `url`, `id`, `title` | Listing URL, Spitogatos property ID and a readable title |
| `listing_type`, `property_type`, `category_label` | Sale or rent; Apartment, Store, Land plot, Parking space...; Home, Commercial, Land, Other |
| `price`, `pricePerSqMeters`, `price_reduced` | Asking price in EUR (monthly rent for rentals), price per m², reduction flag |
| `sq_meters`, `rooms`, `no_of_bathrooms`, `lot_size` | Living area in m², rooms, bathrooms, plot size |
| `floorNumber`, `floor_level`, `floor_label` | Spitogatos' raw floor code, the actual floor (e.g. `3`) and a label (`3rd floor`, `Ground floor`) |
| `year_of_construction`, `renovationYear` | Year built and year renovated |
| `energy_class`, `heating_type`, `heating_medium` | Energy certificate (A+ to G), Autonomous/Central, Natural gas/Petrol/... |
| `amenities` + flags | List of features present, plus booleans such as `parking`, `storage`, `elevator`, `air_conditioning`, `balcony`, `garden`, `fireplace`, `pets_allowed` |
| `description` | Full listing text (`description_language` tells you if only a Greek version exists) |
| `region`, `area`, `neighborhood`, `address` | Location names, e.g. Thessaloniki - Municipality / Faliro - Ippokratio / Agia Triada |
| `latitude`, `longitude` | GPS coordinates when the advertiser shows the exact or approximate position |
| `contact_name`, `contact_telephone`, `contact_type` | The phone to call and who it belongs to: `agent employee`, `agency` or `private seller` |
| `agentEmployee_firstName`, `agentEmployee_lastName`, `agentEmployee_telephone` | The named agent, when there is one |
| `agency_name`, `agency_telephones`, `agency_contact_person`, `agency_address`, `agency_website`, `agency_url` | Agency details and its Spitogatos profile |
| `images` | High-resolution photo URLs |
| `first_published`, `modified` | When the listing went live and when it was last updated |

### How to scrape Spitogatos.gr

1. Open [Spitogatos.gr Greece Property Scraper](https://apify.com/parsebird/spitogatos-property-scraper) in Apify Console and click **Try for free**.
2. **Option A:** run a search on [spitogatos.gr](https://www.spitogatos.gr/en), set your filters, copy the URL and paste it into **Start URLs**. You can also paste property pages (`/en/property/...`) or agency pages (`/en/find-agents/...`).
3. **Option B:** leave Start URLs empty, type one or more **Locations** and pick filters such as listing type, category, property type and price range.
4. Set **Max result pages per search** to control how many pages of 30 listings are scraped (leave it empty for all pages).
5. Click **Start**. When the run finishes, download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

### Input

There are two ways to tell the actor what to scrape. **Start URLs always win**: if you fill them in, the filter section is ignored. Leave them empty and the actor searches by filters instead.

#### 1. Start URLs

```json
{
  "start_urls": [
    { "url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center/order_datemodified_desc" },
    { "url": "https://www.spitogatos.gr/en/to_rent-apartments/athens-center" },
    { "url": "https://www.spitogatos.gr/en/property/1219633385" }
  ],
  "max_depth": 10
}
```

Rental searches on Spitogatos live under `/to_rent-...`. If you paste a `/for_rent-...` address, the actor corrects it for you.

#### 2. Search by filters

```json
{
  "start_urls": [],
  "locations": ["Analipsi - Mpotsari - Nea Paralia"],
  "listing_type": "sale",
  "category": "commercial",
  "property_types": "store",
  "price_min": 10000,
  "price_max": 160000,
  "area_min": 20,
  "area_max": 90
}
```

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `start_urls` | array of `{ "url": ... }` | No | — | Search, property or agency pages. When filled, filters are ignored |
| `max_depth` | integer | No | all pages | Result pages (30 listings each) per search URL, filter search or agency. Ignored for property URLs |
| `max_items` | integer | No | no limit | Stop after this many properties in total |
| `locations` | array of strings | Yes, for filter search | — | Place names in English or Greek. Partial names work, postcodes do not |
| `listing_type` | `sale` / `rent` | No | `sale` | Properties for sale or to rent |
| `category` | string | No | `residential` | `residential` (Home), `commercial`, `land`, `other`, `new_development`, `student_housing` |
| `property_types` | string | No | — | One type that belongs to the category (see below) |
| `price_min` / `price_max` | integer | No | — | Price range in EUR; monthly rent for rentals |
| `area_min` / `area_max` | integer | No | — | Living area range in m² |
| `rooms_min` / `rooms_max` | integer | No | — | Room count range |
| `construction_year_min` / `construction_year_max` | integer | No | — | Year built range |
| `floor_min` / `floor_max` | string | No | — | `basement`, `semi_basement`, `ground_floor`, `semi_ground_floor` or a floor number |
| `heating_controllers` | array | No | — | `with_heating`, `autonomous`, `central`, `individual`, `none` |
| `heating_media` | array | No | — | `natural_gas`, `gas`, `petrol`, `current`, `thermal_accumulator`, `stove`, `pellet`, `infrared`, `fan_coil`, `wood`, `teleheating`, `geothermal_energy`, `heating_pump` |
| `energy_class` | string | No | — | `ap` (A+), `a`, `bp` (B+), `b` to `g`: this class or better |
| `amenities` | array | No | — | `hasMainImage`, `reductions`, `garage`, `storage`, `elevator`, `furnished`, `airConditioning`, `balcony`, `garden`, `fireplace`, `secureDoor`, `alarm`, `penthouse`, `corner`, `petsAllowed`, `accessibleForDisabled`, `loadingDock`, `auction`, `view`, `swimmingPool`, `solarHeater` |
| `posted_within` / `updated_within` | string | No | — | `24hours`, `3days`, `1week`, `1month`, `3months`, `6months`, `1year`, `3years`, or a date like `25/09/2026` |
| `sort_by` / `sort_order` | string | No | `rankingscore` | `rankingscore`, `datemodified`, `price`, `pricepersqmeters`, `size`; `asc` or `desc` |

**Property types by category** (pick one, from the right category):

| Category | Property types |
|----------|----------------|
| Home (`residential`) | Apartment, Studio, Maisonette, Detached house, Villa, Loft, Bungalow, Building, Apartment complex, Farm, Houseboat, Other residential properties |
| Commercial | Office, Store, Warehouse, Industrial space, Craft space, Hotel, Business building, Hall, Showroom, Other commercial properties |
| Land | Land plot, Parcel, Island, Other types of land |
| Other | Parking space, Business, Prefabricated, Detachable, Air, Other property types |
| New development | Same as Home |
| Student housing | Same as Home |

A few things worth knowing about filter searches:

- Several locations are searched together. Add both `Kolonaki` and `Glyfada` and you get both, with no duplicates.
- Names repeat around Greece. "Kolonaki" exists in Athens and in Thiva. Type the full name as the site shows it, `Kolonaki (Thiva)`, to pin down the other one. The run log always says which place it picked.
- Each feature you add narrows the search, so a long feature list on a small area can legitimately match nothing.
- Proxies, concurrency, retries and session handling are tuned inside the actor. There is nothing to configure.

### Output example

Trimmed to the most useful fields. A real record carries 130+ keys, including every amenity flag.

```json
{
  "url": "https://www.spitogatos.gr/en/property/1119559034",
  "id": 19559034,
  "title": "Sale, Apartment, 140m² Faliro - Ippokratio, Agia Triada",
  "listing_type": "sale",
  "property_type": "Apartment",
  "price": 310000,
  "pricePerSqMeters": 2214.29,
  "sq_meters": 140,
  "rooms": 3,
  "no_of_bathrooms": 1,
  "floorNumber": 7,
  "floor_level": 2,
  "floor_label": "2nd floor",
  "year_of_construction": 1980,
  "energy_class": "D",
  "heating_type": "Autonomous",
  "heating_medium": "Petrol",
  "amenities": ["Elevator", "View", "Secure door", "Facade", "Bright", "Airy", "Pets welcome", "Investment property"],
  "elevator": true,
  "parking": false,
  "region": "Thessaloniki - Municipality",
  "area": "Faliro - Ippokratio",
  "neighborhood": "Agia Triada",
  "geographiesByLevel_4_fullName": "Faliro - Ippokratio (Thessaloniki - Municipality)",
  "latitude": 40.616428,
  "longitude": 22.959925,
  "contact_name": "Στέλιος Βουγιουκλούδης",
  "contact_telephone": "6972446442",
  "contact_type": "agent employee",
  "agentEmployee_firstName": "Στέλιος",
  "agentEmployee_lastName": "Βουγιουκλούδης",
  "agentEmployee_telephone": "6972446442",
  "agent_id": 10353,
  "agency_name": "Clock Real Estate",
  "agency_telephone": "+302310288022",
  "agency_telephones": "+302310288022",
  "agency_address": "G.PAPANDREOU 10 (ANTHEON)",
  "agency_website": "http://www.clockrealestate.gr",
  "agency_membership_type": "brandPlus",
  "agency_url": "https://www.spitogatos.gr/en/find-agents/Clock-Real-Estate/10353",
  "images": [
    "https://m1.spitogatos.gr/347960715_1600x1200.jpg?v=20130730",
    "https://m2.spitogatos.gr/347960719_1600x1200.jpg?v=20130730"
  ],
  "description": "Apartment for sale in Ippokratio of Thessaloniki - Center for 310.000€ ...",
  "first_published": "2026-03-17",
  "modified": "2026-09-30"
}
```

Download the dataset in **JSON, CSV, Excel, XML or HTML** from the Storage tab, or fetch it with the [Apify API](https://apify.com/parsebird/spitogatos-property-scraper/api). The Console shows two ready-made views: **Overview** (price, size, location, contact) and **Contacts** (agent and agency details).

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

The actor uses **pay-per-event** pricing: you pay only for properties saved to your dataset. Proxy and browser costs are included.

| Event | Apify plan | Price per property | Price per 1,000 properties |
|-------|-----------|--------------------|----------------------------|
| `property-scraped` | Free | $0.00099 | **$0.99** |
| `property-scraped` | Bronze | $0.00089 | **$0.89** |
| `property-scraped` | Silver | $0.00079 | **$0.79** |
| `property-scraped` | Gold | $0.00069 | **$0.69** |

One page of search results (30 properties) costs about $0.03 on the Free plan, and 1,000 properties cost $0.99. Apify's free plan includes monthly platform credits you can spend on this actor. Set a spending limit on the run and the actor stops as soon as it is reached.

### Use cases

- **Market research**: compare asking prices and price per m² across Athens, Thessaloniki, the islands or any Greek neighbourhood.
- **Lead generation**: build call lists of agents and agencies active in an area, with phone numbers and websites.
- **Investment analysis**: filter by price, size, construction year and energy class to spot undervalued properties.
- **Price monitoring**: schedule a search sorted by last update and track new listings and price reductions.
- **Agency monitoring**: scrape a competitor's full portfolio from its Spitogatos agency page.
- **Data enrichment**: feed listings into a CRM, spreadsheet or BI dashboard.

### How it works

1. Every start URL is read the way Spitogatos itself reads it: search pages keep all their filters, property pages are fetched directly, and agency pages list every property the agency has published.
2. For filter searches, each place name is matched against Spitogatos' own location search and the chosen area is written to the run log.
3. Result pages (30 listings each) are walked until `max_depth` or the last page is reached. Listings that appear in more than one search are saved once.
4. Each listing's full details are fetched: description, amenities, agent and agency contact data and all photos. Listings written only in Greek keep their Greek description.
5. The contact is resolved: the named agent's mobile when the agency assigned one, otherwise the agency's phone.

### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/spitogatos-property-scraper").call(run_input={
    "locations": ["Kolonaki", "Glyfada"],
    "listing_type": "rent",
    "category": "residential",
    "property_types": "apartment",
    "price_max": 2000,
    "max_depth": 2,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["contact_telephone"])
```

### JavaScript example

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/spitogatos-property-scraper').call({
    start_urls: [{ url: 'https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center' }],
    max_depth: 3,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(item.title, item.price, item.contact_telephone));
```

See the [Python client](https://docs.apify.com/api/client/python/) and [JavaScript client](https://docs.apify.com/api/client/js/) docs for more.

### Is it legal to scrape Spitogatos.gr?

This actor collects only data that Spitogatos.gr publishes openly on its listing pages. Listings can include personal data such as agent names and phone numbers, which is protected by the GDPR in Greece and the EU. Make sure you have a legitimate reason to process it, and follow Spitogatos' terms of use. If you are unsure, consult a lawyer. Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other real estate scrapers

- [Immobiliare.it Scraper](https://apify.com/parsebird/immobiliare-it-scraper): property listings from Italy
- [Fotocasa Scraper](https://apify.com/parsebird/fotocasa-scraper): property listings from Spain
- [Habitaclia.com Scraper](https://apify.com/parsebird/habitaclia-scraper): property listings from Spain
- [Homegate.ch Swiss Real Estate Scraper](https://apify.com/parsebird/homegate-ch-scraper): property listings from Switzerland
- [ImmoScout24 Scraper](https://apify.com/parsebird/immoscout24-scraper): property listings from Germany
- [Zoopla Property Scraper](https://apify.com/parsebird/zoopla-property-scraper): property listings from the UK
- [Daft.ie Property Scraper](https://apify.com/parsebird/daft-ie-property-scraper): property listings from Ireland

### FAQ

**Do I need a Spitogatos account or my own proxy?**
No. The actor works with public listings, and proxies, retries and bot protection are handled inside it.

**Can I scrape rentals?**
Yes. Paste a `/to_rent-...` search URL or set `listing_type` to `rent`. For rentals, `price` is the monthly rent.

**Why do some listings have no GPS coordinates?**
Advertisers choose whether to show the exact position, an approximate one or none. `geocode_type` tells you which (`exact`, `offset` or `hidden`). Hidden listings have `latitude` and `longitude` set to null.

**Why is the contact sometimes the agency instead of a person?**
Spitogatos only attaches a named agent to some listings. For the rest the site shows the agency's own number, so `contact_type` is `agency` and `contact_telephone` holds the agency's phone. All agency numbers are in `agency_telephones`.

**Why did my filter search return nothing?**
Each filter narrows the results, so a small area with several features may have no matches. Check the run log to see which place each location was matched to, then loosen the filters.

**How many listings can I get from one search?**
All of them. Leave `max_depth` empty to walk every result page, or use `max_items` to cap the total.

**Why did I get a few less than 30 properties per page?**
Spitogatos' default ranking can reshuffle while a run walks through the pages, so the same listing sometimes shows up on two pages. The actor saves each listing only once. Sort by last update (`order_datemodified_desc` in the URL, or `sort_by: datemodified`) for the most stable paging.

**Can I run it on a schedule?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to run the actor daily or weekly, and [integrations](https://apify.com/integrations) to send new data to Google Sheets, Slack or your own webhook.

**Can I use it through an API?**
Yes. Start runs and fetch results through the [API tab](https://apify.com/parsebird/spitogatos-property-scraper/api) or the official Python and JavaScript clients shown above.

**Something is missing or broken. What should I do?**
Open an issue on the actor's Issues tab with the input you used. Feedback helps keep the scraper in line with Spitogatos.gr changes.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/spitogatos-property-scraper/changelog.md

# Actor input Schema

## `start_urls` (type: `array`):

Add Spitogatos search pages, single property pages or agency pages, in English or Greek. Mix them freely. Search pages keep every filter you set on the site, e.g. https://www.spitogatos.gr/en/for\_sale-homes/thessaloniki-center

## `max_depth` (type: `integer`):

Set how many result pages (30 listings each) to walk per search URL, filter search or agency. Leave empty to scrape every page. Ignored for single property URLs.

## `max_items` (type: `integer`):

Stop after this many properties in total across all inputs. Leave empty for no limit.

## `locations` (type: `array`):

Type place names as the site shows them, in English or Greek, e.g. Kolonaki, Glyfada or Analipsi - Mpotsari - Nea Paralia. Several places are searched together without duplicates. For a name that exists in more than one place, add the parent in brackets, e.g. Kolonaki (Thiva). Postcodes do not work.

## `listing_type` (type: `string`):

Choose properties for sale or to rent.

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

Pick the property category. New development and Student housing use the Home property types.

## `property_types` (type: `string`):

Optionally pick one property type. It must belong to the chosen category.

## `price_min` (type: `integer`):

Set the minimum price in EUR. For rentals this is the monthly rent.

## `price_max` (type: `integer`):

Set the maximum price in EUR. For rentals this is the monthly rent.

## `area_min` (type: `integer`):

Set the minimum living area in m².

## `area_max` (type: `integer`):

Set the maximum living area in m².

## `rooms_min` (type: `integer`):

Set the minimum room count (bedrooms for homes).

## `rooms_max` (type: `integer`):

Set the maximum room count (bedrooms for homes).

## `construction_year_min` (type: `integer`):

Set the earliest construction year.

## `construction_year_max` (type: `integer`):

Set the latest construction year.

## `floor_min` (type: `string`):

Pick the lowest floor.

## `floor_max` (type: `string`):

Pick the highest floor.

## `heating_controllers` (type: `array`):

Keep only listings with these heating types.

## `heating_media` (type: `array`):

Keep only listings heated with these fuels.

## `energy_class` (type: `string`):

Keep listings with this energy class or better, like the energy slider on the site.

## `amenities` (type: `array`):

Keep only listings that have every feature you pick. Each feature narrows the search.

## `posted_within` (type: `string`):

Keep listings first published within this period: 24hours, 3days, 1week, 1month, 3months, 6months, 1year, 3years, or since a date like 25/09/2026.

## `updated_within` (type: `string`):

Keep listings updated within this period: 24hours, 3days, 1week, 1month, 3months, 6months, 1year, 3years, or since a date like 25/09/2026.

## `sort_by` (type: `string`):

Pick the order of the search results.

## `sort_order` (type: `string`):

Pick ascending or descending. Default ranking and Last update are always descending.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center/order_datemodified_desc"
    }
  ],
  "max_depth": 1,
  "listing_type": "sale",
  "category": "residential",
  "sort_by": "rankingscore"
}
```

# Actor output Schema

## `dataset` (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 = {
    "start_urls": [
        {
            "url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center/order_datemodified_desc"
        }
    ],
    "max_depth": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/spitogatos-property-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 = {
    "start_urls": [{ "url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center/order_datemodified_desc" }],
    "max_depth": 1,
}

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

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

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

```

## CLI example

```bash
echo '{
  "start_urls": [
    {
      "url": "https://www.spitogatos.gr/en/for_sale-homes/thessaloniki-center/order_datemodified_desc"
    }
  ],
  "max_depth": 1
}' |
apify call parsebird/spitogatos-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/spitogatos-property-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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