# Kyero.com Scraper 1$/1k - Property Listings & Estate Agents (`trev0n/kyero-scraper`) Actor

Scrape kyero.com property listings across Spain, Portugal, France & Italy. Get prices, beds & baths, areas, descriptions, photos, features, map coordinates and estate-agent contacts. Paste any search, property or agent URL.

- **URL**: https://apify.com/trev0n/kyero-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Features:** Limited permissions
- **Stats:** 8 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## 🏠 Kyero.com Scraper

🎯 **Turn Europe's biggest overseas-property portal into a clean, structured dataset — in minutes.**

This scraper collects property listings from **Kyero.com** across Spain, Portugal, France and Italy: villas, apartments, country houses, townhouses, plots and new builds — for sale or long-let. For every property you get the price, bedrooms and bathrooms, built and plot size, full description, photo gallery, features, map coordinates, reference number and the estate agent's contact details. You can also pull complete **estate-agent profiles**.

### 🚀 What Does It Do?

This scraper automatically browses Kyero search results and collects **structured, ready-to-use data** — no manual copy-pasting, no missed listings. Just paste a URL, set how many results you want, and hit Start.

It accepts any Kyero URL and figures out the right thing to do:

1. **🔍 Search & Listing Pages** — paste a country, region, town or fully-filtered search URL and it walks every results page, collecting each property.
2. **🏡 Single Property Pages** — paste one or more property URLs to get the complete detail record for each.
3. **🏢 Estate-Agent Profiles** — paste an agent profile URL to capture their contact details, languages and listing counts.

### 👥 Who Is This For?

| 🏢 Use Case                              | 💬 How It Helps                                                         |
| ---------------------------------------- | ----------------------------------------------------------------------- |
| 📊 **Real-estate investors**             | Track new listings, prices and price drops across whole regions at once |
| 🔎 **Property portals & aggregators**    | Feed fresh, structured inventory into your own site or app              |
| 📣 **Estate agents & lead-gen agencies** | Build prospect lists of agents with phone, WhatsApp and languages       |
| 🧮 **Market analysts & researchers**     | Analyse €/m², inventory volume and location trends with clean data      |
| 🤝 **Relocation & buyer's agents**       | Shortlist matching homes for clients without endless manual searching   |

### ✨ Features

- 🌍 **Four countries in one** — Spain, Portugal, France and Italy listings from a single tool
- 🏡 **Rich property data** — price, beds, baths, built & plot size, type, features and full descriptions
- 📸 **Full photo galleries** — every listing image URL, ready to download or display
- 📍 **Map coordinates** — exact latitude & longitude for every property (with full details enabled)
- 📞 **Agent contacts** — name, phone, WhatsApp and spoken languages
- 🔗 **Any URL works** — searches, single properties and agent profiles are auto-detected
- 🎛️ **Smart Filters** — keep the filters from your Kyero URL (price, beds, type, location…) and they're respected automatically
- 💸 **Cost-optimised** — a real browser gets past Kyero's bot protection, but images, fonts and scripts are blocked so every page uses as little proxy traffic as possible
- ⚡ **Fast & Scalable** — collect hundreds or thousands of listings per run
- 🧹 **Deduplication** — the same property is never exported twice, even across pages
- 📤 **Export Anywhere** — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                             | What It Does                                                                                                                    |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| 🔗 **Start URLs**                  | Any Kyero search, property or agent profile URL — filters in the URL are kept                                                   |
| 🏡 **Fetch Full Property Details** | Open each listing for the complete record (full description, map coordinates, every photo, grouped features and agent contacts) |
| 🔢 **Max Results**                 | Control how many records to extract per run                                                                                     |
| ⚙️ **Concurrency**                 | Tune how many pages are fetched in parallel                                                                                     |
| 🌐 **Proxy**                       | Built-in support for residential proxies for reliable results                                                                   |

### 📦 What You Get (Output Fields)

Every property includes:

#### Listing

| Field         | Example                                                           |
| ------------- | ----------------------------------------------------------------- |
| id            | `18025947`                                                        |
| url           | `https://www.kyero.com/en/property/18025947-villa-for-sale-calpe` |
| reference     | `41/13949`                                                        |
| name          | `Villa in Calpe, Alicante`                                        |
| propertyType  | `villa`                                                           |
| paymentScheme | `for_sale`                                                        |

#### Price & Size

| Field          | Example       |
| -------------- | ------------- |
| price          | `2450000`     |
| priceFormatted | `€ 2,450,000` |
| currency       | `EUR`         |
| bedrooms       | `4`           |
| bathrooms      | `5`           |
| builtArea      | `349`         |
| plotArea       | `1079`        |

#### Location

| Field     | Example     |
| --------- | ----------- |
| town      | `Calpe`     |
| province  | `Alicante`  |
| region    | `Valencia`  |
| country   | `Spain`     |
| latitude  | `38.646372` |
| longitude | `0.046349`  |

#### Media & Features

| Field       | Example                                                                                |
| ----------- | -------------------------------------------------------------------------------------- |
| images      | `["https://images.kyero.com/.../340671980_original.jpg", ...]`                         |
| imagesCount | `9`                                                                                    |
| features    | `[{ "group": "Pool", "name": "Pool" }, { "group": "Location", "name": "Near beach" }]` |
| description | `This stunning villa offers modern living nestled in a peaceful landscape...`          |

#### Agent

| Field | Example                                                                                                                                |
| ----- | -------------------------------------------------------------------------------------------------------------------------------------- |
| agent | `{ "name": "Hamiltons Of London", "phone": "+34966491883", "whatsapp": "+34665635731", "languages": ["de","en","es","fr","nl","ru"] }` |

### 📊 Example Output

```json
{
    "type": "property",
    "id": 18025947,
    "url": "https://www.kyero.com/en/property/18025947-villa-for-sale-calpe",
    "reference": "41/13949",
    "name": "Villa in Calpe, Alicante",
    "propertyType": "villa",
    "status": "live",
    "paymentScheme": "for_sale",
    "price": 2450000,
    "priceFormatted": "€ 2,450,000",
    "currency": "EUR",
    "bedrooms": 4,
    "bathrooms": 5,
    "builtArea": 349,
    "plotArea": 1079,
    "newBuild": false,
    "hasPool": true,
    "description": "This stunning villa offers modern living nestled in a peaceful landscape with breathtaking sea and forest views. Open floor plan with gourmet kitchen, living room with fireplace, and inviting porches for outdoor entertaining.",
    "features": [
        { "group": "Pool", "name": "Pool" },
        { "group": "Location", "name": "Near beach" },
        { "group": "Quality", "name": "Modern" }
    ],
    "images": [
        "https://images.kyero.com/crop/480x320/https://production-kyero-property-images.s3.amazonaws.com/18025/18025947/340671980_original.jpg"
    ],
    "imagesCount": 9,
    "virtualTourUrl": null,
    "videoUrl": null,
    "latitude": 38.646372,
    "longitude": 0.046349,
    "town": "Calpe",
    "province": "Alicante",
    "region": "Valencia",
    "country": "Spain",
    "agent": {
        "id": 3067,
        "name": "Hamiltons Of London",
        "phone": "+34966491883",
        "whatsapp": "+34665635731",
        "languages": ["de", "en", "es", "fr", "nl", "ru"],
        "profileUrl": "https://www.kyero.com/en/spain/estate-agents/profile/hamiltons-of-london-a3067"
    },
    "createdAt": "2024-09-11",
    "scrapedAt": "2026-06-17T12:00:00.000Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **4 ready-made table views** to quickly browse your results:

| View                  | What It Shows                                             |
| --------------------- | --------------------------------------------------------- |
| 📊 **Overview**       | Name, price, type, beds, baths, sizes, town and link      |
| 📍 **Location & map** | Town, province, region, country and coordinates           |
| 🏢 **Estate agents**  | Agent name, phone, WhatsApp, languages and listing counts |
| 📋 **Full Details**   | Every single field — the complete dataset                 |

### ❓ FAQ

**🤔 Which countries does it cover?**
All Kyero markets — Spain, Portugal, France and Italy — for both sale and long-let listings.

**🤔 Can I use my own filtered search?**
Yes. Build a search on Kyero with any filters (price, bedrooms, property type, location, pool, near beach…), copy the URL, and paste it in. Your filters are kept exactly.

**🤔 What's the difference between the two detail levels?**
By default you get around 20 rich fields straight from the listing cards — fast and cheap. Turn on "Fetch Full Property Details" to also collect the full description, map coordinates, every photo, grouped features and agent contacts for each property. That opens one extra page per property, so detail runs are noticeably slower and cost more than listing-only runs.

**🤔 How many properties can I get from one search?**
Kyero shows up to 1,000 properties per search. For larger markets, split your search by region, price band or property type and add several start URLs.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
Yes — residential proxies are required: Kyero sits behind Cloudflare bot protection that blocks datacenter IPs. The scraper uses Apify's residential proxies by default, passes the check once per browser session and retries blocked pages on a fresh IP. If every page is blocked, the run fails instead of finishing with an empty dataset.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (specific regions, price bands, new-builds only, properties with a pool or near the beach)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication and price-change tracking
- 🌐 Scraping from other property portals alongside Kyero

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from Kyero.com. It does not access private data, bypass authentication, or log in to any account. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

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

kyero.com URLs to scrape. Any shape is accepted and auto-classified: search/listing pages (e.g. https://www.kyero.com/en/spain-property-for-sale-0l55529, country pages, or any filtered search), individual property pages (/en/property/...), or estate-agent profiles (/en/.../estate-agents/profile/...). Filters in the URL query string (max_price, min_beds, property types, etc.) are respected automatically.

## `fetchPropertyDetails` (type: `boolean`):

When enabled, every property found on a listing page is opened to collect the full record: complete description, map coordinates (latitude/longitude), all photos, grouped features, location hierarchy and agent contact details. This opens one extra browser page per property, so it is roughly 20x slower and more expensive than listing mode. When disabled (default, cheapest), only the ~20 rich fields already present on the listing card are returned.

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

Hard cap on the number of records pushed to the dataset. Kyero returns up to 20 properties per listing page and up to 50 pages (1,000 properties) per search URL — use narrower searches or more start URLs to go beyond that.

## `maxConcurrency` (type: `integer`):

Maximum number of pages open in parallel. Each parallel page runs in its own browser on its own proxy IP and has to pass the Cloudflare check once (~2 MB of residential traffic), so a low value is cheaper. 2 is the best cost/speed balance; raise it together with the run memory only for very large runs.

## `minConcurrency` (type: `integer`):

Minimum number of parallel requests.

## `maxRequestRetries` (type: `integer`):

How many times a page blocked by the Cloudflare challenge is retried on a fresh proxy session (new IP, new browser fingerprint) before being given up. The run fails loudly if every page was blocked.

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

kyero.com is behind a Cloudflare challenge that blocks datacenter IPs — Apify RESIDENTIAL proxies are required for reliable results. Each proxy session gets its own browser, which passes the challenge once and then reuses its clearance for further pages.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.kyero.com/en/spain-property-for-sale-0l55529"
    }
  ],
  "fetchPropertyDetails": false,
  "maxItems": 100,
  "maxConcurrency": 2,
  "minConcurrency": 1,
  "maxRequestRetries": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `agents` (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 = {
    "startUrls": [
        {
            "url": "https://www.kyero.com/en/spain-property-for-sale-0l55529"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/kyero-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": [{ "url": "https://www.kyero.com/en/spain-property-for-sale-0l55529" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("trev0n/kyero-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": [
    {
      "url": "https://www.kyero.com/en/spain-property-for-sale-0l55529"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call trev0n/kyero-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trev0n/kyero-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/vh0JYHuTHbzuFg3iw/builds/zLcfkEuV6zdyBoTsC/openapi.json
