# Index.cy Cyprus Real Estate Scraper: Sales, Rentals, Auctions (`recordsdata/index-cy-scraper`) Actor

Scrape index.cy Cyprus real estate: sale and rent listings, price drops, new-build projects, agencies and bank auctions. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/recordsdata/index-cy-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (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 $20.00 / 1,000 listing rows

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/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

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## 🏠 Index.cy Cyprus Real Estate Scraper: Listings, Price Drops, Projects, Agencies & Auctions

> **Index.cy Cyprus Real Estate Scraper exports property data from index.cy, the Cyprus real estate portal: sale and rent listings with price, price drops, area, bedrooms, location, energy class, photos and the agency behind each ad, plus new-build projects, agencies, developers and bank auctions. Export CSV, Excel, JSON or XML. No login, no API key, no proxy.**

The Index.cy Cyprus Real Estate Scraper turns the Cyprus property market into a dataset you can filter, sort and join. On 2026-10-11 the live catalog held 33,515 listings for sale and 3,094 for rent, 2,181 new-build projects, 398 agencies, 640 developers and 399 upcoming bank and Land Registry auctions. The Actor reads the search results the website itself uses and the public listing pages with plain HTTP requests, so a run is fast: no browser and no proxy. The whole sale catalog, 1,397 result pages, is reachable.

### 🎯 What does the Index.cy scraper do?

- Scrapes **index.cy listings** for sale and for rent: apartments, houses and villas, land and plots, offices, commercial premises and whole buildings, in all five districts (Limassol, Paphos, Larnaca, Nicosia, Famagusta) and about 520 towns and areas.
- Returns **price, currency, price per square meter, price drops (amount, previous price, percent), covered area, plot area, bedrooms, bathrooms, floor, energy class, furnishing, parking, pool, view and amenities** for every listing.
- Adds the **purchase cost estimate** the site shows for sales (VAT range, transfer fee, total) and the **monthly cost estimate and deposit** it shows for rentals.
- Gives **location, postal code, coordinates where the site publishes them, distance to the nearest beach, airport and school, and the listed places nearby**.
- Returns **all photos, the full description and the publication date** of each ad (Fetch full listing details on, the default).
- Tells you **who sells**: agency, developer or private seller, and for businesses the agency name, page, logo, registration number, license number and active listing count.
- Filters by **operation, property type, district, town or area, bedrooms, bathrooms, price, covered area, plot area, condition, seller type, view, energy class, furnishing, pool, amenities, construction year, pets, keywords, good deals, price drops and posted within N days**, and sorts by relevance, newest or price.
- Reads **new-build projects** (developer, delivery status, price from, unit types, bedrooms range, completion), **agencies and developers** (registration, license, listing counts, opening hours) and **bank auctions** (reserve price, auction date, bidding window, guarantee, conditions, notice text).
- Adds optional **market insight** per listing from the site's own listing API: price history, percent against the area average, median price per square meter, estimate range and withdrawn status.
- Has an **only-new mode** for scheduled runs: you get just the rows that were not in your previous run of the same search.

### 📊 Index.cy property data: which fields do you get?

Every row is one record with `recordType` set to `listing`, `project`, `agency` or `auction`. A listing row carries about 60 of the 126 listing columns, depending on what the ad states; the whole dataset has 188 columns over the four record types.

| Field | Columns |
|---|---|
| Identity | `listingId`, `url`, `title`, `recordType`, `operation`, `sourceSite`, `scrapedAt` |
| Price | `price`, `priceOnRequest`, `currency`, `pricePeriod`, `vatOnTop`, `pricePerM2`, `priceChange`, `previousPrice`, `priceChangePct`, `isGoodDeal` |
| Property | `propertyType`, `propertyTypeLabel`, `condition`, `bedrooms`, `bathrooms`, `areaBuilt`, `areaLand`, `areaInternal`, `areaCoveredVeranda`, `floor`, `totalFloors`, `yearBuilt`, `energyCertificate`, `furnishing`, `parking`, `pool`, `view`, `heating`, `airConditioning`, `titleDeed`, `hasTitleDeed`, `amenities` |
| Location | `locationText`, `region`, `city`, `neighborhood`, `address`, `postalCode`, `country`, `latitude`, `longitude`, `nearestBeachKm`, `nearestAirportKm`, `nearestSchoolKm`, `nearbyPlaces` |
| Cost estimates | `vatEstimateMin`, `vatEstimateMax`, `transferFeeEstimate`, `totalCostEstimate`, `utilitiesEstimateMin`, `monthlyTotalEstimateMin`, `deposit`, `minimumTermMonths`, `moveInCostEstimate` |
| Seller | `sellerType`, `isPrivateSeller`, `agencyName`, `agencyUrl`, `agencyLogoUrl`, `agencyRegistration`, `agencyLicense`, `agencySaleCount`, `agencyRentCount`, `referenceCode` |
| Ad status | `publishedAt`, `postedAgo`, `postedDaysAgo`, `updatedAgo`, `views`, `listingBadges`, `isPromoted`, `isJustListed`, `similarAdvertCount`, `similarListingIds` |
| Media and text | `imageUrl`, `images`, `imageCount`, `description`, `descriptionPreview`, `videoUrl` |
| Market insight (optional) | `status`, `priceBadge`, `vsAveragePct`, `priceHistory`, `priceHistoryCount`, `firstListedPrice`, `priceChangeSinceFirstListed`, `marketMedian`, `marketDiffPct`, `marketComparables`, `estimateLow`, `estimateHigh`, `estimateVerdict`, `alsoListedByCount` |
| Projects | `projectId`, `completionStatus`, `projectType`, `priceFrom`, `bedroomsMin`, `bedroomsMax`, `areaBuiltMin`, `areaBuiltMax`, `unitTypes`, `distanceToSeaM`, `developerName`, `listingCount` |
| Agencies and developers | `agencyId`, `companyType`, `agencyName`, `registrationNumber`, `licenseNumber`, `legalName`, `agentCount`, `projectCount`, `openingHours`, `website`, `socialLinks`, `recentListingIds` |
| Auctions | `auctionId`, `auctionKind`, `auctionDate`, `biddingWindow`, `guaranteeDueText`, `minimumBidIncrement`, `completionTerm`, `auctioneer`, `conditions`, `noticeUrl`, `noticeText` |
| Business contact (optional) | `phone`, `email` on agency rows, `auctioneerEmail` on auction rows |

On 55 live listings, price, title, location, photos and publication date were filled 100 percent of the time, bedrooms 75 percent (land has none) and energy certificate 49 percent. A missing value means the ad does not state it: the key is left out, never filled with a placeholder.

### 🧾 Index.cy listing example: what does a real result look like?

A real listing row from 2026-10-11 (the photo list, the description, the nearby places and the other adverts of the same developer are shortened or left out):

```json
{
  "imageUrl": "https://index.cy/wp-content/uploads/2026/10/Renderings_night2.jpg",
  "recordType": "listing",
  "listingId": "11753963",
  "url": "https://index.cy/sale/11753963-1-bedroom-apartment-for-sale-in-geroskipou-paphos-district/",
  "title": "1 Bedroom Apartment for Sale in Geroskipou, Paphos District",
  "agencyName": "G & V Hadjidemosthenous Ltd",
  "operation": "sale",
  "propertyType": "apartment",
  "propertyTypeLabel": "Apartment",
  "condition": "under-construction",
  "price": 185000,
  "currency": "EUR",
  "vatOnTop": true,
  "pricePerM2": 3083,
  "isPromoted": true,
  "bedrooms": 1,
  "bathrooms": 1,
  "areaBuilt": 60,
  "areaInternal": 52,
  "areaCoveredVeranda": 8,
  "floor": 1,
  "totalFloors": 3,
  "energyCertificate": "A",
  "parking": "Covered",
  "pool": "No",
  "amenities": ["Balcony", "Parking", "Storage room"],
  "locationText": "Geroskipou, Paphos district",
  "region": "Paphos",
  "city": "Geroskipou",
  "address": "Geroskipou, 8201 Paphos, Cyprus",
  "postalCode": "8201",
  "country": "CY",
  "latitude": 34.761796,
  "longitude": 32.453596,
  "nearestBeachKm": 3,
  "nearestAirportKm": 6.7,
  "nearestSchoolKm": 0.4,
  "nearbyPlaces": [{ "category": "Beaches", "name": "CTO Plage", "distanceKm": 3 }],
  "vatEstimateMin": 9250,
  "vatEstimateMax": 35150,
  "totalCostEstimate": 194250,
  "description": "Apartment 102 at Georgia 12, a new two-block development in Geroskipou, Paphos by G & V Hadjidemosthenous Ltd, a Paphos family developer bui...",
  "publishedAt": "2026-10-05T09:35:47.000Z",
  "postedAgo": "6 days ago",
  "postedDaysAgo": 6.01,
  "updatedAgo": "6 days ago",
  "views": 11,
  "listingBadges": ["Under Construction", "Special"],
  "sellerType": "developer",
  "isPrivateSeller": false,
  "agencyUrl": "https://index.cy/company/g-v-hadjidemosthenous/",
  "agencyLogoUrl": "https://index.cy/wp-content/uploads/2026/10/gv_logo_square.png",
  "agencySaleCount": 74,
  "referenceCode": "GV-G12-102",
  "imageCount": 12,
  "images": ["https://index.cy/wp-content/uploads/2026/10/Renderings_night2.jpg", "https://index.cy/wp-content/uploads/2026/10/Renderings_night3.jpg"],
  "similarAdvertCount": 5,
  "similarListingIds": ["11818962", "11729804", "11719213"],
  "sourceSite": "index.cy",
  "scrapedAt": "2026-10-11T09:52:46.656Z"
}
```

Prices are plain numbers in euros (rentals are per month, `pricePeriod` says `month`). Areas are square meters, distances kilometers. Dates are ISO 8601 in UTC. Titles and descriptions are in English as the site shows them. An ad priced at a placeholder of 1 euro (exchange offers, price on request) has `priceOnRequest: true` and no `price`.

### ⚙️ Index.cy scraper input

| Field | Type | Example |
|---|---|---|
| `operation` | string | `"rent"` |
| `districts` | array | `["limassol"]` |
| `maxPrice` | integer (EUR) | `1500` |
| `fetchDetails` | boolean | `true` |
| `maxItems` | integer | `50` |

```json
{"operation": "sale", "districts": ["paphos"], "propertyTypes": ["house"], "priceDropsOnly": true, "maxItems": 50}
```

### 🚀 How to scrape Index.cy in 4 steps

1. Create a free account at [console.apify.com](https://console.apify.com) and open this Actor.
2. Pick what to collect (listings, projects, agencies or auctions), the operation (sale or rent), property types, district, town and the other filters. Leave everything empty to get the newest listings across the whole island.
3. Set **Max Items** and press Start. A 3-listing run with full details finishes in about 3 seconds.
4. Download the dataset as CSV, Excel, JSON or XML, or read it through the Apify API.

To read one listing, one project, one agency or one auction, paste its index.cy URL in **Start URLs** or the listing id in **Listing IDs**. To reuse a search you built on index.cy, paste the search page URL: district, property type, bedrooms, price and the other filters in the address are understood.

### 📈 Index.cy scraper vs alternatives

No Actor on the Apify Store reads index.cy (store search read on 2026-10-11), so the closest alternatives are Actors for other Cyprus and Greece portals.

| | This Actor | Bazaraki Actors | Spitogatos Actor |
|---|---|---|---|
| Source site | index.cy | bazaraki.com | spitogatos.gr (Greece) |
| Price per 1,000 results | $20.00 list, $40.00 with details | From $1.95 to $1.99 | From $0.71 |
| Price drops | Filter plus amount and percent | Diff between runs | Not stated |
| Projects, agencies, auctions | Yes, own record types | Seller flag only | Agency name only |
| New-only monitoring | Built in | Change flags (one Actor) | Not stated |

This Actor is the most expensive per row of the three, roughly ten times Bazaraki. The others read different sites, so they cannot replace it for index.cy data. The extra cost buys the detail page (description, photos, coordinates, cost estimates) as a second event, price drop fields, own record types for projects, agencies and auctions, and built-in new-only monitoring. Prices and features read on 2026-10-11 from each Store page; features marked not stated may exist.

### 💰 How much does the Index.cy scraper cost?

Pay per event, no subscription. Live prices on 2026-10-11:

| Event | Price |
|---|---|
| Listing row | $0.02 |
| Listing details (default on) | $0.02 |
| New-build project row | $0.025 |
| Agency or developer row | $0.025 |
| Auction row | $0.03 |
| Market insight (optional) | $0.05 |

- 100 listings with full details: 100 x ($0.02 + $0.02) = **$4.00**.
- 1,000 listings, list only (details off): **$20.00**.
- A daily only-new run that finds 20 new listings with details: **$0.80** per day.
- 399 auctions: 399 x $0.03 = **$11.97**.
- 25 listings with market insight (the default cap): 25 x $0.05 = **$1.25** on top.

Runs that return nothing, or end with an input error row, are not charged.

### 💼 Index.cy scraper use cases

- **Real estate investors**: compare `pricePerM2` and `vsAveragePct` across districts and towns, spot price drops and good deals, and export the shortlist with coordinates.
- **Agents and brokers**: watch new listings in a town with the only-new mode and send them to a CRM or spreadsheet.
- **Developers and builders**: read competitor projects (delivery status, price from, unit types, bedrooms range) and the stock of each developer.
- **Auction and distressed-asset buyers**: list upcoming bank and Land Registry auctions with reserve price, date, guarantee and notice text.
- **Market researchers and analysts**: track asking prices, price drops and listing counts by district, type and operation over time with scheduled runs.

### 🔌 Index.cy scraper API, MCP and integrations

Run it from any language through the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/RecordsData~index-cy-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operation":"rent","districts":["limassol"],"bedrooms":["2"],"maxPrice":2000,"maxItems":50}'
```

Connect it to Make, Zapier, n8n, Google Sheets or Slack with Apify integrations.

#### Use it from an AI agent (MCP)

Add the Actor to the Apify MCP server at `https://mcp.apify.com?tools=RecordsData/index-cy-scraper`. The agent sees one tool, `RecordsData/index-cy-scraper`, described as: "Scrape index.cy, the Cyprus property portal: sale and rent listings with price drops, new-build projects, agencies and bank auctions." Example prompt:

> Find 2-bedroom apartments for rent in Limassol under 1,500 euros on index.cy, only listings published in the last 7 days, and list price, area and agency.

The agent calls the tool with `operation: rent`, `districts: ["limassol"]`, `bedrooms: ["2"]`, `maxPrice: 1500`, `postedWithinDays: 7` and reads the dataset rows.

### ⚖️  Is it legal to scrape Index.cy?

The Actor reads public pages that index.cy shows to every visitor, without logging in, at about four requests per second, and it identifies itself in the request header. The site terms of use restrict systematic automated collection, so check them for your use case before you run large or recurring jobs. Private sellers' names, phone numbers, street addresses and reference codes are never output, their map pins are rounded to about 100 meters, and phone numbers or e-mail addresses typed into an ad text are masked. Agency, developer and auction data is business information. Business phone numbers and e-mails are returned only if you turn on the contact option. This is not legal advice: check the site terms and the rules that apply to your use of the data.

### FAQ: Index.cy scraper questions and answers

**Does the Index.cy scraper need a proxy or an index.cy account?**
No. It uses plain HTTP requests, a few at a time with a short pause between them. It needs no login, no API key and no proxy, and it runs from the Apify cloud without blocked requests, at about four requests per second.

**How many listings does index.cy have?**
On 2026-10-11 the live catalog held 33,515 listings for sale and 3,094 for rent: Limassol district 18,471, Larnaca 5,236, Paphos 5,150, Nicosia 3,250 and Famagusta 1,267 for sale. It also lists 2,181 projects, 398 agencies, 640 developers and 399 auctions. The numbers move daily, so schedule the Actor.

**Can I scrape index.cy rental listings?**
Yes. Set **Operation** to rent. Rentals have their own fields: monthly price, deposit, minimum term, estimated utilities and monthly total, pets policy. Filters that only exist for sales (views, good deals) or only for rentals (pets) return one free error row instead of a wrong result.

**How do I find price drops on index.cy?**
Turn on **Price drops only**. The site marks a listing whose price went down, and each row carries `priceChange`, `previousPrice` and `priceChangePct`. For the full price history of a listing, turn on **Add market insight**: it returns every price the listing had and the percent against the area average.

**How do I get only the new index.cy listings every day?**
Turn on **Only new rows** and schedule the Actor. It remembers the listings it already returned for the same search in a store of your own account and skips them, so each run returns just the new ones. **Posted within days** is the other way: it keeps listings first published in the last N days and ignores old ads that were only renewed.

**Does it return phone numbers or owner names?**
Not for private sellers: no name, no phone, no street address, no reference code, and a rounded map pin. For agencies and developers you get the name, page, registration and license numbers, and the listing counts. Business phone numbers and e-mails are returned only when you turn on **Include business contact data**.

**Why is market insight limited to a few listings per run?**
Market insight calls the site's own listing API, which allows about 30 calls an hour per IP address, so the Actor limits it with **Max insights** (25 by default) and keeps going without insight when the budget is used up. Use it for a shortlist, not for the whole catalog.

**What are the project, agency and auction rows?**
A project row is a new-build development with its developer, delivery status, price from and unit sizes. An agency row is a real estate agency or a developer with registration, license, listing counts and opening hours. An auction row is a bank or Land Registry property auction with reserve price, date, bidding window, guarantee, completion term and the official notice text.

**Why are some fields empty on a listing?**
Because the ad does not state them. Land has no bedrooms, rentals have no exact map, and only some ads fill energy class, floor or year built. Keep Fetch full listing details on: the search list alone has no description, photo gallery, coordinates, cost estimates or publication date.

**How do I get help or ask for a missing field?**
Write to contact.punkrecordsdata@gmail.com with the search you ran and the field you need. Bug reports with a run link are the fastest to fix. Say whether you need sale or rent rows, so the fix can be tested on the right search.

Last updated: 2026-10-11

# Actor input Schema

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

Optional index.cy pages to read: a listing (index.cy/sale/5088755-3-bedroom-house-for-sale-in-dhekelia-larnaca-district/), a search page such as index.cy/for-rent/?district=limassol-district\&bedrooms=2, a new-build project (index.cy/complex/<name>/), an agency or developer page (index.cy/company/<name>/), a bank auction (index.cy/auction/<name>/) or an index page (index.cy/complex/, index.cy/companies/agencies/, index.cy/auctions/). A search page brings its own filters, so the filters below are ignored for it. Leave empty to search with the filters below.

## `listingIds` (type: `array`):

Optional list of listing ids (the number at the start of the listing URL, for example 5088755) or full listing URLs. These listings are fetched directly with full detail and the search filters are not applied to them. An id that is gone or expired returns one free error row.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `recordTypes` (type: `array`):

What to return. Listings: one row per sale or rent ad (price, price drops, areas, rooms, place, seller type, energy class, photos). Projects: one row per new-build development (developer, price from, units, delivery). Agencies: one row per real estate agency or developer (registration, license, listing counts). Auctions: one row per bank or Land Registry property auction (reserve price, auction date, notice). Every row counts toward Max Items; rows come in the order listed here.

## `fetchDetails` (type: `boolean`):

Open every listing page for the full description, all photos, coordinates, nearby places, price per square meter, title deed, taxes and fee estimates, and the agency behind it. Billed as the listing-detail event on top of the listing. Turn off for a cheaper list-only pass from the search cards (price, price change, rooms, place, one photo, seller type).

## `includeMarketInsights` (type: `boolean`):

Add price history, the market comparison (median per square meter, percent above or below the area average), the estimate range and the withdrawn status from index.cy's own listing API. Billed as the market-insight event on top of the listing, only for listings where data was returned. The API allows about 30 calls an hour per IP address, so use it for a few dozen listings per run (see Max insights).

## `maxInsights` (type: `integer`):

Most listings per run that get market insight. The listing API allows about 30 calls an hour per IP address; when its budget is used up the run continues without insight and without that charge.

## `operation` (type: `string`):

Properties for sale or for rent. Rows say which one in the operation field.

## `propertyTypes` (type: `array`):

Only these property types. Leave empty for all.

## `districts` (type: `array`):

Only these districts of Cyprus. Also narrows new-build projects and auctions. Leave empty for the whole island.

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

Towns or areas as written on index.cy, for example Germasogeia, Peyia, Strovolos or "Limassol - Agios Athanasios", or the slug (germasogeia). A short name such as Limassol matches every area named "Limassol - ...". An unknown place returns a free error row instead of the whole catalog.

## `bedrooms` (type: `array`):

Only listings with these bedroom counts. Studio is a separate value. Leave empty for any.

## `bathrooms` (type: `array`):

Only listings with these bathroom counts. Leave empty for any.

## `minPrice` (type: `integer`):

Only listings priced at least this much, in euros. For rent it is the monthly rent. 0 means no limit.

## `maxPrice` (type: `integer`):

Only listings priced at most this much, in euros. For rent it is the monthly rent. 0 means no limit.

## `minArea` (type: `integer`):

Only listings with at least this covered area, in square meters. 0 means no limit.

## `maxArea` (type: `integer`):

Only listings with at most this covered area, in square meters. 0 means no limit.

## `minPlotArea` (type: `integer`):

Only listings with at least this plot area, in square meters. 0 means no limit.

## `maxPlotArea` (type: `integer`):

Only listings with at most this plot area, in square meters. 0 means no limit.

## `conditions` (type: `array`):

Only listings in these building conditions. Leave empty for any.

## `sellerTypes` (type: `array`):

Only listings from these kinds of sellers. Private sellers never leave a name, address or contact in the rows. Leave empty for all.

## `views` (type: `array`):

Only listings with these views. Exists for sale listings only; with rent it returns a free error row.

## `energyClasses` (type: `array`):

Only listings with these energy performance classes. Leave empty for any.

## `furnishing` (type: `array`):

Only listings with this furnishing. Leave empty for any.

## `pool` (type: `array`):

Only listings with this pool setup. Leave empty for any.

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

Only listings that have every selected amenity. Leave empty for any.

## `constructionYears` (type: `array`):

Only buildings from these construction years or ranges. Leave empty for any.

## `pets` (type: `array`):

Only rentals with this pet policy. Exists for rent listings only; with sale it returns a free error row.

## `keywords` (type: `string`):

Free text matched against the listing text, for example "sea view villa" or "title deed". Leave empty for none.

## `goodDealsOnly` (type: `boolean`):

Only listings the site flags as a good deal (priced below the area average). Exists for sale listings only; with rent it returns a free error row.

## `priceDropsOnly` (type: `boolean`):

Only listings whose price recently went down (the card shows a price change). The row carries priceChange, previousPrice and priceChangePct.

## `postedWithinDays` (type: `integer`):

Only listings first published in the last N days (a renewed old ad does not count). The scan reads newest first and stops once listings are older. The publication date is on the listing page, so full details are fetched and billed for this knob even when Fetch full listing details is off. 0 means no cutoff.

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

Order of the listings. Monitor mode and Posted within days always read newest first, whatever is chosen here.

## `agencyKinds` (type: `array`):

When Agencies is among the record types: read the agency list, the developer list or both.

## `agencyQuery` (type: `string`):

Only agencies and developers whose name contains this text, for example "karimco". Leave empty for all.

## `auctionTypes` (type: `array`):

When Auctions is among the record types: only these property types. Leave empty for all.

## `auctionSort` (type: `string`):

Order of the auctions.

## `maxRunSeconds` (type: `integer`):

Stop collecting after this many seconds and return what was gathered, so a very wide search never runs unbounded.

## `onlyNew` (type: `boolean`):

Only new rows: skip every listing, project, agency or auction this same search already returned in an earlier run, so a scheduled run returns just the new ones and you are not charged for skipped rows. Max Items then means N new rows. Off by default.

## `stateKey` (type: `string`):

Optional label that separates two monitors of otherwise identical searches (for example one per client). Leave empty to use only the search filters.

## `resetSeen` (type: `boolean`):

Forget everything this monitor remembered and start again. Use once after changing your mind about what counts as new.

## `includeContactDetails` (type: `boolean`):

Keep business contact data of agencies, developers and auctioneers: phone and e-mail on agency rows, the developer phone on project rows, the auctioneer e-mail on auction rows, and phone numbers or e-mails inside the text of agency and developer listings. Private sellers' contact details are always removed. Off by default.

## Actor input object example

```json
{
  "startUrls": [],
  "listingIds": [],
  "maxItems": 10,
  "recordTypes": [
    "listings"
  ],
  "fetchDetails": true,
  "includeMarketInsights": false,
  "maxInsights": 25,
  "operation": "sale",
  "propertyTypes": [],
  "districts": [],
  "locations": [],
  "bedrooms": [],
  "bathrooms": [],
  "minPrice": 0,
  "maxPrice": 0,
  "minArea": 0,
  "maxArea": 0,
  "minPlotArea": 0,
  "maxPlotArea": 0,
  "conditions": [],
  "sellerTypes": [],
  "views": [],
  "energyClasses": [],
  "furnishing": [],
  "pool": [],
  "amenities": [],
  "constructionYears": [],
  "pets": [],
  "keywords": "",
  "goodDealsOnly": false,
  "priceDropsOnly": false,
  "postedWithinDays": 0,
  "sortBy": "newest",
  "agencyKinds": [
    "agencies",
    "developers"
  ],
  "agencyQuery": "",
  "auctionTypes": [],
  "auctionSort": "soonest",
  "maxRunSeconds": 1800,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false,
  "includeContactDetails": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "startUrls": [],
    "listingIds": [],
    "maxItems": 10,
    "recordTypes": [
        "listings"
    ],
    "operation": "sale",
    "locations": [],
    "sortBy": "newest",
    "auctionSort": "soonest"
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/index-cy-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 = {
    "startUrls": [],
    "listingIds": [],
    "maxItems": 10,
    "recordTypes": ["listings"],
    "operation": "sale",
    "locations": [],
    "sortBy": "newest",
    "auctionSort": "soonest",
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/index-cy-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 '{
  "startUrls": [],
  "listingIds": [],
  "maxItems": 10,
  "recordTypes": [
    "listings"
  ],
  "operation": "sale",
  "locations": [],
  "sortBy": "newest",
  "auctionSort": "soonest"
}' |
apify call recordsdata/index-cy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/index-cy-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/sidecYsBcg9gyUpYL/builds/reDDiFO2vmgnbnXdJ/openapi.json
