Spitogatos.gr Real Estate Scraper — Greece Properties
Pricing
from $3.50 / 1,000 results
Spitogatos.gr Real Estate Scraper — Greece Properties
Scrape real estate listings from Spitogatos.gr — Greece's #1 property portal. Extract apartments, houses, land and commercial space by area, price, size and bedrooms. Returns price, €/m², lat/lng, agency, images and dates per property. Bypasses F5/Reese84 bot protection automatically.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Spitogatos.gr Real Estate Scraper
Extract property listings from Spitogatos.gr — Greece's #1 real estate portal. Scrape apartments, houses, studios, commercial space and land by area, listing type, price range, surface area and bedroom count.
How It Works
Spitogatos.gr is protected by F5/Distil (Reese84), an enterprise behavioral bot defense. Plain HTTP requests — even with rotating residential proxies and matched TLS fingerprints — get a 2.7KB JS challenge page instead of data. This actor handles the challenge with a hybrid strategy:
- Launch a real Chromium browser (headed via xvfb on Apify infra) through a sticky residential GR IP.
- Navigate to a real listings page so the SPA fires its natural API calls and the F5 challenge resolves.
- Generate behavioral signals (mouse movement, scroll, networkidle wait) so Reese84 issues a valid
reese84session token. - Run all subsequent /n_api/v1 calls via
page.evaluate(fetch)from inside the warmed page — same TLS fingerprint, same cookies, same IP, same behavioral profile. Every call sails through. - On block: rotate sticky IP, relaunch browser, re-warm.
The endpoint itself is straightforward — Spitogatos exposes a single search endpoint that powers both its map view and its results list: GET /n_api/v1/properties/search-results-map ?listingType=&category=&areaIDs[]=&priceFrom=&priceTo= &sqmFrom=&sqmTo=&bedroomsFrom=&bedroomsTo= &sortBy=&sortOrder=&offset=
Each call returns up to ~300 properties grouped by geohash cluster. The actor flattens clusters, dedupes by id, and paginates offset until maxListings is reached or the area is exhausted.
Input
{"areaIDs": [100],"listingType": "rent","category": "residential","priceFrom": 500,"priceTo": 2000,"sqmFrom": 40,"sqmTo": 150,"bedroomsFrom": 1,"bedroomsTo": 3,"sortBy": "rankingscore","sortOrder": "desc","language": "en","maxListings": 500,"maxOffsetPerTask": 2000,"offsetIncrement": 50,"requestDelay": 1500,"maxRetries": 4,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "GR" }}
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
areaIDs | int[] | [100] | Spitogatos numeric area IDs. Each runs as a separate task. |
listingType | enum | rent | rent or sale |
category | enum | residential | residential / commercial / land / business |
priceFrom / priceTo | int | 0 | EUR range (0 = no bound) |
sqmFrom / sqmTo | int | 0 | m² range (0 = no bound) |
bedroomsFrom / bedroomsTo | int | 0 | Bedroom range (0 = no bound) |
sortBy | enum | rankingscore | rankingscore / price / sq_meters / modified |
sortOrder | enum | desc | asc / desc |
language | enum | en | en / el (affects detailUrl only) |
maxListings | int | 200 | Total cap across all area tasks (0 = unlimited) |
maxOffsetPerTask | int | 1000 | Pagination depth per area |
offsetIncrement | int | 50 | Step size per page |
requestDelay | int (ms) | 1500 | Delay between API calls |
maxRetries | int | 4 | Retries on block (rotates IP each retry) |
proxyConfiguration | object | RESIDENTIAL+GR | Must be RESIDENTIAL. Datacenter IPs are blocked; GR country is forced by default for cleaner reputation. |
Finding Area IDs
Open any area page on spitogatos.gr (e.g. /en/to_rent-homes/glyfada), open DevTools → Network → look for the search-results-map XHR. The areaIDs[] query parameter is the ID you want.
Common Area IDs
| Area | ID |
|---|---|
| Athens — Center | 100 |
| Athens — North | 5 |
| Athens — South | 6 |
| Athens — West | 4 |
| Athens — East | 7 |
| Piraeus | 8 |
| Thessaloniki — Center | 14 |
| Thessaloniki — East | 15 |
| Thessaloniki — West | 16 |
| Glyfada | 21 |
| Voula | 22 |
| Vouliagmeni | 23 |
| Kifisia | 73 |
| Marousi | 84 |
| Halandri | 60 |
| Nea Smyrni | 41 |
| Palaio Faliro | 40 |
(IDs are stable across the site. Always verify via DevTools for areas not listed above.)
Output
Example record:
{"adId": "19520564","detailUrl": "https://www.spitogatos.gr/en/property/19520564","title": "Kolonaki (Kolonaki - Lykavittos)","price": 750,"currency": "EUR","priceText": "€750","pricePerSqm": 25,"priceReduced": false,"category": "house","subtype": 1,"listingType": "rent","sqMeters": 30,"rooms": 1,"bathrooms": 1,"kitchens": 1,"livingRooms": 1,"floorNumber": 9,"newDevelopment": false,"withinCityPlan": false,"geography": "Kolonaki (Kolonaki - Lykavittos)","geocodeType": "offset","latitude": 37.978008,"longitude": 23.749901,"modified": "2026-05-04 14:23:50","uploaded": "2026-03-10 16:05:06","firstPublishDate": "2026-03-10 16:17:54","mainImageUrl": "https://m3.spitogatos.gr/347328308_300x220.jpg?v=20130730","imageIds": [347328308, 347328270, 347328280],"images": ["https://m3.spitogatos.gr/347328308_300x220.jpg?v=20130730","https://m3.spitogatos.gr/347328270_300x220.jpg?v=20130730"],"imageCount": 25,"adTypeCode": "vip","adTypeCodes": ["vip", "prime", "up"],"agentId": 19970,"agencyName": "Gastons Real Estate Athens","searchAreaId": 100,"searchListingType": "rent","searchCategory": "residential","scrapedAt": "2026-05-04T12:59:35.001Z"}
Notes
geocodeType:exact= the lat/lng is the actual property location;offset= a randomized point in the same neighborhood (Spitogatos masks coords for some listings).descriptionis empty in the listing API. Full descriptions live on the detail page (planned for v1.1).- Image URLs are reconstructed from
imageIdsusing the same CDN host asmainImageURLat300x220. Replace with_900x600or_1280x960for higher resolution. subtypeis a numeric code:1= apartment,2= maisonette,3= building,4= loft,5= studio,6= detached house,7= villa (codes vary bycategory).listingTypeis derived frombuy_or_rent:1→ rent,2→ sale.- The API returns up to ~300 properties per call regardless of
offsetIncrement. Most areas are fully covered in 1-3 calls.
Use Cases
- Market research — rent prices by neighborhood, €/m² heatmaps, time-on-market trends
- Investment analysis — yield calculations from sale + rent data per area
- Real estate analytics — geo-cluster listings using lat/lng + filter
geocodeType: "exact"for trustworthy coordinates - Agency monitoring — filter by
agencyNameoragentIdto track competitors' inventory - Price tracking — re-run periodically and diff
price/priceReduced/pricePreReduction - Lead generation — find active agencies in a target area and category
Cost & Performance
- Architecture: Playwright session warm-up (~30s once per run) + browser-context fetch for pagination.
- Throughput: ~200 listings in ~90 seconds at default settings (most of that is per-record dataset push, not network).
- Memory: 1024MB minimum (browser-bound). 2048MB recommended for runs >1000 listings.
- Block rate: <5% on Apify residential GR IPs; built-in retries handle blocks transparently with full session rotation.
Limitations
- Description, energy class, year built, parking, heating require a detail-page visit and are not extracted in v1.0.
- F5/Reese84 can throttle bursty access — if you hit persistent blocks, lower
maxRetries, raiserequestDelay, or split your job across runs. - Pagination ceiling — Spitogatos's API returns up to ~300 listings per filter set per area. For exhaustive coverage of large areas, narrow with
priceFrom/priceTo.
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05-04 | Initial release — Playwright + browser-context fetch to bypass F5/Reese84, sticky residential GR IP, area-based pagination, image URL reconstruction. |