Spitogatos.gr Real Estate Scraper — Greece Properties avatar

Spitogatos.gr Real Estate Scraper — Greece Properties

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Spitogatos.gr Real Estate Scraper — Greece Properties

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

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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.

Apify Actor


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:

  1. Launch a real Chromium browser (headed via xvfb on Apify infra) through a sticky residential GR IP.
  2. Navigate to a real listings page so the SPA fires its natural API calls and the F5 challenge resolves.
  3. Generate behavioral signals (mouse movement, scroll, networkidle wait) so Reese84 issues a valid reese84 session token.
  4. 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.
  5. 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

ParameterTypeDefaultDescription
areaIDsint[][100]Spitogatos numeric area IDs. Each runs as a separate task.
listingTypeenumrentrent or sale
categoryenumresidentialresidential / commercial / land / business
priceFrom / priceToint0EUR range (0 = no bound)
sqmFrom / sqmToint0m² range (0 = no bound)
bedroomsFrom / bedroomsToint0Bedroom range (0 = no bound)
sortByenumrankingscorerankingscore / price / sq_meters / modified
sortOrderenumdescasc / desc
languageenumenen / el (affects detailUrl only)
maxListingsint200Total cap across all area tasks (0 = unlimited)
maxOffsetPerTaskint1000Pagination depth per area
offsetIncrementint50Step size per page
requestDelayint (ms)1500Delay between API calls
maxRetriesint4Retries on block (rotates IP each retry)
proxyConfigurationobjectRESIDENTIAL+GRMust 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

AreaID
Athens — Center100
Athens — North5
Athens — South6
Athens — West4
Athens — East7
Piraeus8
Thessaloniki — Center14
Thessaloniki — East15
Thessaloniki — West16
Glyfada21
Voula22
Vouliagmeni23
Kifisia73
Marousi84
Halandri60
Nea Smyrni41
Palaio Faliro40

(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).
  • description is empty in the listing API. Full descriptions live on the detail page (planned for v1.1).
  • Image URLs are reconstructed from imageIds using the same CDN host as mainImageURL at 300x220. Replace with _900x600 or _1280x960 for higher resolution.
  • subtype is a numeric code: 1 = apartment, 2 = maisonette, 3 = building, 4 = loft, 5 = studio, 6 = detached house, 7 = villa (codes vary by category).
  • listingType is derived from buy_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 agencyName or agentId to 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, raise requestDelay, 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

VersionDateNotes
1.0.02026-05-04Initial release — Playwright + browser-context fetch to bypass F5/Reese84, sticky residential GR IP, area-based pagination, image URL reconstruction.