# JamesEdition Real Estate Scraper (`solidcode/james-edition-real-estate-scraper`) Actor

\[💰 $6.5 / 1K] Extract luxury property listings from JamesEdition. Search 830,000+ homes across 60+ countries by location, price, type, bedrooms, living and land area, year built, and features like pool or sea view. Get EUR/USD prices, photos, map coordinates and brokerage details.

- **URL**: https://apify.com/solidcode/james-edition-real-estate-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## JamesEdition Real Estate Scraper

Pull luxury property listings from JamesEdition at scale — asking prices in euros and dollars, bedrooms, living and land area, map coordinates, seller descriptions, high-resolution photography, and the listing brokerage behind every property. One marketplace covers Côte d'Azur villas, Alpine chalets, Tuscan estates, Caribbean private islands, and Dubai penthouses in a single, consistent schema. Built for luxury brokerages, property investors, relocation advisors, and PropTech teams who need a structured prime-property dataset without clicking through hundreds of gallery pages by hand.

### Why This Scraper?

- **830,000+ luxury listings across 60+ countries** — the world's largest prime-property marketplace, from EUR 200,000 apartments to nine-figure estates, in one uniform dataset.
- **54 amenity and setting filters that genuinely stack** — combine Pool + Sea view + Helipad + Ski-in / Ski-out and you get properties matching *all* of them. Cross-referencing several trophy amenities at once is where most property datasets fall apart.
- **15 named luxury brokerage networks** — Sotheby's International Realty, Christie's International, Engel & Volkers, Savills, Douglas Elliman, Coldwell Banker Global Luxury, Corcoran, Barnes International Realty, John Taylor, Fine & Country, Luxury Portfolio International and more. Pick several and each network is collected separately, then merged and deduplicated.
- **17 property types including the ones nobody else indexes** — Castle, Chateau, Finca, Private island, Farm / Ranch, Chalet, Estate, Penthouse, Country house and Land / Plot alongside the usual houses and apartments.
- **Every price in EUR and USD, side by side** — plus the seller's original listing currency and a dedicated "price on request" flag, so cross-border comparisons need no exchange-rate work on your side.
- **Latitude and longitude on every property** — drop the whole result set straight onto a heat map or into a GIS layer without a geocoding step.
- **Up to 10 photographs per listing at 2,200px** — full-resolution marketing imagery, plus the true gallery size so you know how many more exist.
- **Nine sort orders including price per square metre** — rank a market by price per m² lowest or highest first, by living area, by newest, or by JamesEdition's own Featured and Most popular ordering.
- **Location matching that finds the real market** — type "Miami" and you get Miami, Florida with its 3,600+ prime listings, not the same-named village with one. Works identically across the English, German, French, Spanish and Italian editions of the site.

### Use Cases

**Luxury Market Research**
- Track asking prices and price per m² across Marbella, Saint-Tropez, Aspen and Dubai side by side
- Measure inventory depth by property type in any prime market
- Compare Alpine ski-in/ski-out supply against Mediterranean waterfront supply
- Benchmark new-build versus historic stock using the year-built filters

**Brokerage & Competitive Intelligence**
- Map how many properties each of the 15 major luxury networks lists in your territory
- Monitor a competitor brokerage's inventory, pricing, and photography quality
- Identify which offices dominate a niche such as vineyards, equestrian estates, or private islands
- Build agent and office directories with profile links for target regions

**Investment & Portfolio Sourcing**
- Screen for undervalued stock by sorting a market by price per m² lowest first
- Filter estates by minimum land area to find vineyard, ranch, and development opportunities
- Isolate properties tagged as investment property or new build
- Track how much high-end supply sits behind a "price on request" wall in each market

**Relocation & Buyer Advisory**
- Build client-ready shortlists filtered on exact bedroom, bathroom, and living-area requirements
- Surface only properties with a video tour or 3D walkthrough for remote buyers
- Assemble gated-community or private-beach options for privacy-sensitive clients
- Deliver localized shortlists using the German, French, Spanish, or Italian site edition

**Data Products & Integration**
- Feed a luxury property portal or comparison site with fresh, structured inventory
- Enrich an existing CRM with coordinates, imagery, and brokerage attribution
- Power map-based search products using the latitude/longitude on every row
- Run scheduled refreshes and diff the results to detect new listings and price changes

### Getting Started

#### Simplest Possible Run

A location and a cap — nothing else:

```json
{
    "location": "Marbella, Spain",
    "maxResults": 100
}
````

#### A Filtered Market Search

Waterfront villas and estates in Tuscany between EUR 2M and EUR 9M, largest homes first:

```json
{
    "location": "Tuscany, Italy",
    "propertyTypes": ["villa", "estate"],
    "priceMin": 2000000,
    "priceMax": 9000000,
    "bedroomsMin": 4,
    "sortBy": "living_area_desc",
    "maxResults": 300
}
```

#### Trophy Amenities Across Named Brokerages

Pool *and* sea view *and* helipad, listed by three of the biggest luxury networks:

```json
{
    "location": "French Riviera",
    "features": ["pool", "sea-view", "helipad"],
    "brands": ["68", "76", "87"],
    "priceOnRequest": "exclude",
    "sortBy": "price_desc",
    "maxResults": 500
}
```

#### Full Detail, Several Markets At Once

Paste ready-made JamesEdition links — search pages or single property pages — and enrich each one:

```json
{
    "startUrls": [
        "https://www.jamesedition.com/real_estate/aspen-co-usa",
        "https://www.jamesedition.com/real_estate/lake-como-italy",
        "https://www.jamesedition.com/real_estate/limonta-italy/lakefront-elegance-on-lake-como-18025908"
    ],
    "includeDetails": true,
    "maxResultsPerUrl": 500,
    "maxResults": 0,
    "language": "en"
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Prefill | Description |
|-----------|------|---------|-------------|
| `location` | string | `Marbella, Spain` | Country, region, or city — for example "Marbella, Spain", "French Riviera", "Dubai", or "Tuscany". Leave empty to search every country at once. |
| `startUrls` | string\[] | `[]` | Paste JamesEdition links — search-result pages or single property pages, in any site language. When provided, these replace the search fields. |

#### Property Type, Price & Size

| Parameter | Type | Prefill | Description |
|-----------|------|---------|-------------|
| `propertyTypes` | select\[] | all types | House, Villa, Apartment, Penthouse, Condo, Co-op, Townhouse, Bungalow, Chalet, Country house, Finca, Estate, Farm / Ranch, Castle, Chateau, Private island, Land / Plot. |
| `priceMin` / `priceMax` | integer | none | Price range in euros. JamesEdition compares in euros no matter which currency a seller lists in. |
| `bedroomsMin` / `bedroomsMax` | integer | none | Bedroom count range, 0–20. |
| `bathroomsMin` / `bathroomsMax` | integer | none | Bathroom count range, 0–20. |
| `livingAreaMin` / `livingAreaMax` | integer | none | Indoor living space in square metres. |
| `landAreaMin` / `landAreaMax` | integer | none | Plot size in square metres — the filter to reach for on estates, vineyards, and ranches. |
| `yearBuiltMin` / `yearBuiltMax` | integer | none | Construction year range, e.g. `2020` for recent builds or `1900` and earlier for historic homes. |

#### Features, Brands & Media

| Parameter | Type | Prefill | Description |
|-----------|------|---------|-------------|
| `features` | select\[] | none | 54 features and settings — Pool, Indoor pool, Wine cellar, Cinema, Helipad, Airstrip / Private airport, Equestrian, Vineyard / Winery, Private beach, Ski-in / Ski-out, Gated community, Sea view, Golf view and more. Properties must offer **all** the features you pick. |
| `brands` | select\[] | all brokerages | 15 luxury brokerage networks. Pick several and each is searched separately, then merged. |
| `hasVideo` | boolean | `false` | Only properties that come with a video tour. |
| `hasVirtualTour` | boolean | `false` | Only properties with a 3D or virtual walkthrough. |
| `priceOnRequest` | select | `Include everything` | Three-way control: include everything, only properties with a published price, or only "price on request" properties. |

#### Sorting, Detail & Language

| Parameter | Type | Prefill | Description |
|-----------|------|---------|-------------|
| `sortBy` | select | `Featured (site default)` | Featured, Most popular, Newest first, Price low→high, Price high→low, Living area smallest/largest first, Price per m² lowest/highest first. |
| `includeDetails` | boolean | `false` | Open every property page to add the seller description, amenity list, year built, exact living and land area, and extra photography. Richer, but slower. |
| `language` | select | `English` | English, German, French, Spanish, or Italian edition of the site. Affects site-generated labels; seller descriptions stay in their original language. |

#### Limits

| Parameter | Type | Prefill | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Total properties to collect across every search and URL. Set to `0` to collect everything available. |
| `maxResultsPerUrl` | integer | `0` | Cap per individual search or URL. `0` means no per-search limit. |

The **Prefill** column is what the run form starts with, so those are the values you get when you press Start without changing anything. They are not applied to a run started through the API or a schedule with an empty input — such a run searches every country and collects up to **1,000 properties**. Send the fields you want whenever you start a run programmatically.

### Output

Every property is one row. Here is a real result with full details enabled:

```json
{
    "listingId": "18025908",
    "url": "https://www.jamesedition.com/real_estate/limonta-italy/lakefront-elegance-on-lake-como-18025908",
    "title": "Villa in Oliveto Lario, Lombardy, Italy",
    "propertyType": "Villa",
    "price": 7000000,
    "currency": "EUR",
    "priceEur": 7000000,
    "priceUsd": 7963549,
    "priceOnRequest": false,
    "bedrooms": 5,
    "bathrooms": 4,
    "livingAreaSqm": 500,
    "landAreaSqm": 1500,
    "yearBuilt": 1971,
    "address": "Oliveto Lario, Lombardy, Italy",
    "city": "Oliveto Lario",
    "region": "Lombardia",
    "country": "Italy",
    "countryCode": "IT",
    "latitude": 45.9569456,
    "longitude": 9.2688213,
    "description": "In Limonta, a hamlet of Oliveto Lario along the western shore of Lake Como, stands a property that embodies the area's most authentic and secluded character...",
    "amenities": ["Lakefront", "Waterfront", "Lake View", "Panoramic / Scenic View", "Pool", "Garden", "Terrace", "Fireplace", "Open Kitchen", "Modern"],
    "badges": ["Video"],
    "tags": ["5 Beds", "4 Baths", "500 sqm"],
    "primaryImageUrl": "https://img.jamesedition.com/listing_images/2026/05/28/15/54/05/a8a045bf-89be-46dc-825d-60a5156e2224/je/2200xxs.jpg",
    "imageUrls": ["https://img.jamesedition.com/listing_images/2026/05/28/15/54/05/a8a045bf-89be-46dc-825d-60a5156e2224/je/2200xxs.jpg", "https://img.jamesedition.com/listing_images/2026/05/29/13/25/38/434e7544-e2f0-4331-88bf-6db61799f3b7/je/2200xxs.jpg"],
    "imageCount": 43,
    "agentName": "Yana Kovalenko",
    "agentUrl": "https://www.jamesedition.com/agents/yana-kovalenko-1594798",
    "officeName": "JARVES",
    "officeId": "241596",
    "officeUrl": "https://www.jamesedition.com/offices/real_estate/jarves-241596",
    "isPromoted": false,
    "searchUrl": "https://www.jamesedition.com/real_estate/lake-como-italy?real_estate_type[]=villa&order=premium",
    "scrapedAt": "2026-07-25T10:28:04.882893+00:00"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Unique JamesEdition listing identifier — stable across runs, ideal as a primary key |
| `url` | string | Direct link to the property page |
| `title` | string | Listing headline as published |
| `propertyType` | string | Villa, Estate, Penthouse, Chalet, Castle, Private island, etc. |
| `badges` | string\[] | Marketplace badges such as `Video`, `Virtual tour`, `New` |
| `tags` | string\[] | Short spec chips shown on the card, e.g. `5 Beds`, `500 sqm` |
| `isPromoted` | boolean | `true` if the property is a paid featured placement rather than an organic match |
| `searchUrl` | string | The search this row came from — useful when you run many searches in one job |
| `scrapedAt` | string | ISO timestamp of data extraction |

#### Pricing

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Asking price in the seller's own listing currency |
| `currency` | string | Currency code of `price`, e.g. `EUR`, `USD`, `GBP`, `AED` |
| `priceEur` | number | Asking price converted to euros — the field to sort and compare on |
| `priceUsd` | number | Asking price converted to US dollars |
| `priceOnRequest` | boolean | `true` when the seller publishes no asking price |

#### Size, Layout & Description

| Field | Type | Description |
|-------|------|-------------|
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Bathroom count |
| `livingAreaSqm` | number | Indoor living space in square metres |
| `landAreaSqm` | number | Plot size in square metres |
| `yearBuilt` | number | Construction year |
| `description` | string | Full seller-written property description |
| `amenities` | string\[] | Complete amenity and setting list, e.g. `Lakefront`, `Wine Cellar`, `Helipad` |

`landAreaSqm`, `yearBuilt`, `description` and `amenities` come from the property page — switch on **Include Full Property Details** to populate them.

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Full location line as published |
| `city` | string | City or locality |
| `region` | string | Region, province, or state |
| `country` | string | Country name |
| `countryCode` | string | Two-letter country code, e.g. `IT`, `ES`, `AE` |
| `latitude` | number | Map latitude |
| `longitude` | number | Map longitude |

#### Photography

| Field | Type | Description |
|-------|------|-------------|
| `primaryImageUrl` | string | Lead marketing photograph at 2,200px |
| `imageUrls` | string\[] | Up to 10 photographs, each at 2,200px |
| `imageCount` | number | Size of the listing's gallery when JamesEdition publishes a photo counter for it — otherwise the number of photographs returned in `imageUrls` |

#### Brokerage & Agent

| Field | Type | Description |
|-------|------|-------------|
| `agentName` | string | Listing agent name |
| `agentUrl` | string | Link to the agent's JamesEdition profile |
| `officeName` | string | Brokerage or office name |
| `officeId` | string | Brokerage identifier |
| `officeUrl` | string | Link to the brokerage's JamesEdition profile |

Agent name and profile link are published on most but not all properties — some brokerages list the office only. `officeName` is present on virtually every row, so use it as the reliable seller field.

### Tips for Best Results

- **Split large markets into several searches.** JamesEdition serves at most 1,500 properties per individual search. To go beyond that, list several entries under Start URLs — one per city, per price band, or per property type — because each entry gets its own 1,500-property allowance. Four price bands across one country gets you four times the depth.
- **Let sorting choose your slice.** Because a single search tops out at 1,500 properties, `sortBy` decides *which* 1,500 you get. `Price: high to low` gives you the trophy end of a market; `Price per m²: lowest first` gives you the value end.
- **Pick several brokerage brands for extra depth.** Each brand is collected as its own search and merged, so selecting three networks in a busy market can return well over 1,500 properties in a single run.
- **Turn on Include Full Property Details only when you need the narrative.** Descriptions, the full amenity list, year built, and exact land area live on the property page. Everything else — prices in three currencies, bedrooms, bathrooms, living area, city, country, coordinates, 10 photographs, agent and brokerage — already arrives without it, so leave it off for fast bulk collection.
- **Set Price Visibility to "Only properties with a published price"** when the output feeds a valuation model or a price index. Roughly the top slice of any luxury market hides its asking price, and this guarantees every row carries a number.
- **Enter prices in euros, always.** JamesEdition normalizes to euros regardless of the seller's listing currency, so `priceMin: 2000000` means EUR 2M whether the property is priced in dirhams, pounds, or dollars.
- **Be specific with location text.** "Marbella, Spain" or "Lake Como, Italy" beats a bare "Marbella" or "Como" — the actor ranks candidate markets by how well they match your words and then by market size, so a precise "City, Country" lands you on the real market every time.

### Pricing

**From $6.50 per 1,000 results** — flat pay-per-result, so a run's cost is fully predictable before you start it. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.78 | $0.74 | $0.70 | $0.65 |
| 1,000 | $7.80 | $7.35 | $6.95 | $6.50 |
| 10,000 | $78.00 | $73.50 | $69.50 | $65.00 |
| 100,000 | $780.00 | $735.00 | $695.00 | $650.00 |

A "result" is one property row in the output dataset. **No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.**

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is built for legitimate luxury real estate research, market analysis, and business intelligence. You are responsible for complying with applicable laws and JamesEdition's Terms of Service. Collect only what you need, do not use extracted agent or brokerage details for unsolicited outreach or harassment, and respect the copyright of listing photography and seller-written descriptions when you republish or redistribute anything.

# Actor input Schema

## `location` (type: `string`):

Country, region, or city to search, for example "Marbella, Spain", "French Riviera", "Dubai", or "Tuscany". Leave empty to search every country at once. Ignored when Start URLs are provided. Worth knowing: JamesEdition serves at most 1,500 properties per search, so for a large country you will get a 1,500-property slice rather than everything - search city by city, or by price band, to cover more.

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

Paste one or more JamesEdition links, either search-result pages or single property pages. Any language version of the site works. When provided, these replace the search fields above and below. Each search link is collected separately and each one gets its own 1,500-property allowance from JamesEdition, so splitting a big market across several links is the way to collect more than 1,500 properties.

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

Only include these kinds of property. Leave empty to include every type.

## `priceMin` (type: `integer`):

Only include properties at or above this price, in euros. JamesEdition compares prices in euros no matter which currency a seller lists in. Leave empty for no minimum.

## `priceMax` (type: `integer`):

Only include properties at or below this price, in euros. Leave empty for no maximum.

## `bedroomsMin` (type: `integer`):

Only include properties with at least this many bedrooms. Leave empty for any.

## `bedroomsMax` (type: `integer`):

Only include properties with at most this many bedrooms. Leave empty for any.

## `bathroomsMin` (type: `integer`):

Only include properties with at least this many bathrooms. Leave empty for any.

## `bathroomsMax` (type: `integer`):

Only include properties with at most this many bathrooms. Leave empty for any.

## `livingAreaMin` (type: `integer`):

Only include properties with at least this much indoor living space, in square metres. Leave empty for any.

## `livingAreaMax` (type: `integer`):

Only include properties with at most this much indoor living space, in square metres. Leave empty for any.

## `landAreaMin` (type: `integer`):

Only include properties on a plot of at least this size, in square metres. Useful for estates, vineyards and ranches. Leave empty for any.

## `landAreaMax` (type: `integer`):

Only include properties on a plot of at most this size, in square metres. Leave empty for any.

## `yearBuiltMin` (type: `integer`):

Only include properties built in this year or later, for example 2020 for recent builds. Leave empty for any age.

## `yearBuiltMax` (type: `integer`):

Only include properties built in this year or earlier, for example 1900 for historic homes. Leave empty for any age.

## `features` (type: `array`):

Only include properties that offer all of these features or settings. Leave empty to include everything.

## `brands` (type: `array`):

Only include properties listed by these luxury brokerage networks. Pick several and each one is searched separately, then the results are merged - so each brand also gets its own 1,500-property allowance. Leave empty to include every brokerage.

## `hasVideo` (type: `boolean`):

Only include properties that come with a video tour.

## `hasVirtualTour` (type: `boolean`):

Only include properties that come with a 3D or virtual walkthrough.

## `priceOnRequest` (type: `string`):

Many top-end properties hide their asking price. Choose whether to include them, skip them, or collect only those.

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

How JamesEdition orders the results. Because a search returns at most 1,500 properties, sorting decides which slice of a large market you get.

## `includeDetails` (type: `boolean`):

Open every property page to add the full seller description, the amenity list, the year built, exact living and land area, and extra high-resolution photos. This makes one extra request per property, so runs take longer. Leave off for faster runs that still include price in three currencies, bedrooms, bathrooms, living area, type, city, country, map coordinates, up to 10 full-size photos, agent and brokerage.

## `language` (type: `string`):

Language version of JamesEdition used while collecting. This affects site-generated wording such as property type labels; descriptions written by the seller stay in their original language.

## `maxResults` (type: `integer`):

Total number of properties to collect across every search and URL. Set to 0 to collect as many as are available. If this field is left out of the input entirely - which happens when a run is started through the API or a schedule with an empty input rather than from this form - the run collects up to 1,000 properties. Note that JamesEdition itself stops any single search at 1,500 properties, so a value above 1,500 only pays off when you list several Start URLs.

## `maxResultsPerUrl` (type: `integer`):

Maximum properties to collect from each individual search or URL. Set to 0 for no per-search limit, in which case only the overall Maximum Results and JamesEdition's own 1,500-per-search ceiling apply.

## Actor input object example

```json
{
  "location": "Marbella, Spain",
  "priceOnRequest": "any",
  "sortBy": "premium",
  "language": "en",
  "maxResults": 100
}
```

# Actor output Schema

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

Table of collected properties with price, size, type and location.

## `detail` (type: `string`):

Full per-property detail including description, amenities, photos, coordinates and agent contact.

# 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 = {
    "location": "Marbella, Spain",
    "hasVideo": false,
    "hasVirtualTour": false,
    "priceOnRequest": "any",
    "sortBy": "premium",
    "includeDetails": false,
    "language": "en",
    "maxResults": 100,
    "maxResultsPerUrl": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/james-edition-real-estate-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 = {
    "location": "Marbella, Spain",
    "hasVideo": False,
    "hasVirtualTour": False,
    "priceOnRequest": "any",
    "sortBy": "premium",
    "includeDetails": False,
    "language": "en",
    "maxResults": 100,
    "maxResultsPerUrl": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/james-edition-real-estate-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "location": "Marbella, Spain",
  "hasVideo": false,
  "hasVirtualTour": false,
  "priceOnRequest": "any",
  "sortBy": "premium",
  "includeDetails": false,
  "language": "en",
  "maxResults": 100,
  "maxResultsPerUrl": 0
}' |
apify call solidcode/james-edition-real-estate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/james-edition-real-estate-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JamesEdition Real Estate Scraper",
        "description": "[💰 $6.5 / 1K] Extract luxury property listings from JamesEdition. Search 830,000+ homes across 60+ countries by location, price, type, bedrooms, living and land area, year built, and features like pool or sea view. Get EUR/USD prices, photos, map coordinates and brokerage details.",
        "version": "1.0",
        "x-build-id": "AeMW94N5gc2PnXAhR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~james-edition-real-estate-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-james-edition-real-estate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~james-edition-real-estate-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-james-edition-real-estate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~james-edition-real-estate-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-james-edition-real-estate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Country, region, or city to search, for example \"Marbella, Spain\", \"French Riviera\", \"Dubai\", or \"Tuscany\". Leave empty to search every country at once. Ignored when Start URLs are provided. Worth knowing: JamesEdition serves at most 1,500 properties per search, so for a large country you will get a 1,500-property slice rather than everything - search city by city, or by price band, to cover more."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste one or more JamesEdition links, either search-result pages or single property pages. Any language version of the site works. When provided, these replace the search fields above and below. Each search link is collected separately and each one gets its own 1,500-property allowance from JamesEdition, so splitting a big market across several links is the way to collect more than 1,500 properties.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyTypes": {
                        "title": "Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include these kinds of property. Leave empty to include every type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "house",
                                "villa",
                                "apartment",
                                "penthouse",
                                "condo",
                                "co_op",
                                "townhouse",
                                "bungalow",
                                "chalet",
                                "country_house",
                                "finca",
                                "estate",
                                "farm_ranch",
                                "castle",
                                "chateau",
                                "private_island",
                                "land"
                            ],
                            "enumTitles": [
                                "House",
                                "Villa",
                                "Apartment",
                                "Penthouse",
                                "Condo",
                                "Co-op",
                                "Townhouse",
                                "Bungalow",
                                "Chalet",
                                "Country house",
                                "Finca",
                                "Estate",
                                "Farm / Ranch",
                                "Castle",
                                "Chateau",
                                "Private island",
                                "Land / Plot"
                            ]
                        }
                    },
                    "priceMin": {
                        "title": "Minimum Price (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or above this price, in euros. JamesEdition compares prices in euros no matter which currency a seller lists in. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price (EUR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or below this price, in euros. Leave empty for no maximum."
                    },
                    "bedroomsMin": {
                        "title": "Minimum Bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at least this many bedrooms. Leave empty for any."
                    },
                    "bedroomsMax": {
                        "title": "Maximum Bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at most this many bedrooms. Leave empty for any."
                    },
                    "bathroomsMin": {
                        "title": "Minimum Bathrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at least this many bathrooms. Leave empty for any."
                    },
                    "bathroomsMax": {
                        "title": "Maximum Bathrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at most this many bathrooms. Leave empty for any."
                    },
                    "livingAreaMin": {
                        "title": "Minimum Living Area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties with at least this much indoor living space, in square metres. Leave empty for any."
                    },
                    "livingAreaMax": {
                        "title": "Maximum Living Area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties with at most this much indoor living space, in square metres. Leave empty for any."
                    },
                    "landAreaMin": {
                        "title": "Minimum Land Area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties on a plot of at least this size, in square metres. Useful for estates, vineyards and ranches. Leave empty for any."
                    },
                    "landAreaMax": {
                        "title": "Maximum Land Area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties on a plot of at most this size, in square metres. Leave empty for any."
                    },
                    "yearBuiltMin": {
                        "title": "Built From Year",
                        "minimum": 1000,
                        "maximum": 2100,
                        "type": "integer",
                        "description": "Only include properties built in this year or later, for example 2020 for recent builds. Leave empty for any age."
                    },
                    "yearBuiltMax": {
                        "title": "Built Up To Year",
                        "minimum": 1000,
                        "maximum": 2100,
                        "type": "integer",
                        "description": "Only include properties built in this year or earlier, for example 1900 for historic homes. Leave empty for any age."
                    },
                    "features": {
                        "title": "Features & Setting",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include properties that offer all of these features or settings. Leave empty to include everything.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "pool",
                                "indoor-pool",
                                "jacuzzi",
                                "sauna",
                                "steam-room",
                                "fitness-center",
                                "tennis-court",
                                "garden",
                                "terrace",
                                "balcony",
                                "garage",
                                "elevator",
                                "fireplace",
                                "air-conditioning",
                                "open-kitchen",
                                "outdoor-kitchen",
                                "kitchen-bar",
                                "wine-cellar",
                                "cinema",
                                "library",
                                "game-room",
                                "office",
                                "duplex",
                                "helipad",
                                "private-airport",
                                "equestrian",
                                "vineyard",
                                "private-beach",
                                "waterfront",
                                "beachfront",
                                "oceanfront",
                                "lakefront",
                                "riverfront",
                                "seafront",
                                "coastal",
                                "ski-in-ski-out",
                                "hilltop",
                                "high-altitude",
                                "gated-community",
                                "privacy",
                                "scenic-view",
                                "sea-view",
                                "ocean-view",
                                "water-view",
                                "lake-view",
                                "river-view",
                                "mountain-view",
                                "golf-view",
                                "city-view",
                                "mansion",
                                "modern",
                                "new-built",
                                "renovated",
                                "investment-property"
                            ],
                            "enumTitles": [
                                "Pool",
                                "Indoor pool",
                                "Jacuzzi",
                                "Sauna",
                                "Steam room",
                                "Fitness centre / Gym",
                                "Tennis court",
                                "Garden",
                                "Terrace",
                                "Balcony",
                                "Garage",
                                "Elevator",
                                "Fireplace",
                                "Air conditioning",
                                "Open kitchen",
                                "Outdoor kitchen",
                                "Bar",
                                "Wine cellar",
                                "Cinema",
                                "Library",
                                "Game room",
                                "Home office",
                                "Duplex",
                                "Helipad",
                                "Airstrip / Private airport",
                                "Equestrian",
                                "Vineyard / Winery",
                                "Private beach",
                                "Waterfront",
                                "Beachfront",
                                "Oceanfront",
                                "Lakefront",
                                "Riverfront",
                                "Seafront",
                                "Coastal",
                                "Ski-in / Ski-out",
                                "Hilltop",
                                "High altitude",
                                "Gated community",
                                "Privacy",
                                "Panoramic / Scenic view",
                                "Sea view",
                                "Ocean view",
                                "Water view",
                                "Lake view",
                                "River view",
                                "Mountain view",
                                "Golf view",
                                "City view",
                                "Mansion",
                                "Modern",
                                "New build",
                                "Renovated",
                                "Investment property"
                            ]
                        }
                    },
                    "brands": {
                        "title": "Brokerage Brands",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include properties listed by these luxury brokerage networks. Pick several and each one is searched separately, then the results are merged - so each brand also gets its own 1,500-property allowance. Leave empty to include every brokerage.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "68",
                                "76",
                                "87",
                                "1057",
                                "84",
                                "86",
                                "81",
                                "91",
                                "69",
                                "70",
                                "85",
                                "93",
                                "88",
                                "82",
                                "83"
                            ],
                            "enumTitles": [
                                "Sotheby's International Realty",
                                "Christie's International",
                                "Engel & Volkers",
                                "Savills",
                                "Douglas Elliman",
                                "Coldwell Banker Global Luxury",
                                "Corcoran",
                                "Keller Williams",
                                "Century 21",
                                "Barnes International Realty",
                                "John Taylor",
                                "Fine & Country",
                                "Luxury Portfolio International",
                                "ERA Real Estate",
                                "Better Homes and Gardens"
                            ]
                        }
                    },
                    "hasVideo": {
                        "title": "Only Properties With A Video",
                        "type": "boolean",
                        "description": "Only include properties that come with a video tour."
                    },
                    "hasVirtualTour": {
                        "title": "Only Properties With A Virtual Tour",
                        "type": "boolean",
                        "description": "Only include properties that come with a 3D or virtual walkthrough."
                    },
                    "priceOnRequest": {
                        "title": "Price Visibility",
                        "enum": [
                            "any",
                            "exclude",
                            "only"
                        ],
                        "type": "string",
                        "description": "Many top-end properties hide their asking price. Choose whether to include them, skip them, or collect only those."
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "premium",
                            "popular",
                            "recent",
                            "price_asc",
                            "price_desc",
                            "living_area_asc",
                            "living_area_desc",
                            "price_per_sqm_asc",
                            "price_per_sqm_desc"
                        ],
                        "type": "string",
                        "description": "How JamesEdition orders the results. Because a search returns at most 1,500 properties, sorting decides which slice of a large market you get."
                    },
                    "includeDetails": {
                        "title": "Include Full Property Details",
                        "type": "boolean",
                        "description": "Open every property page to add the full seller description, the amenity list, the year built, exact living and land area, and extra high-resolution photos. This makes one extra request per property, so runs take longer. Leave off for faster runs that still include price in three currencies, bedrooms, bathrooms, living area, type, city, country, map coordinates, up to 10 full-size photos, agent and brokerage."
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "de",
                            "fr",
                            "es",
                            "it"
                        ],
                        "type": "string",
                        "description": "Language version of JamesEdition used while collecting. This affects site-generated wording such as property type labels; descriptions written by the seller stay in their original language."
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total number of properties to collect across every search and URL. Set to 0 to collect as many as are available. If this field is left out of the input entirely - which happens when a run is started through the API or a schedule with an empty input rather than from this form - the run collects up to 1,000 properties. Note that JamesEdition itself stops any single search at 1,500 properties, so a value above 1,500 only pays off when you list several Start URLs."
                    },
                    "maxResultsPerUrl": {
                        "title": "Maximum Results Per Search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum properties to collect from each individual search or URL. Set to 0 for no per-search limit, in which case only the overall Maximum Results and JamesEdition's own 1,500-per-search ceiling apply."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
