# SeLoger Scraper — France Property Data & Market KPIs (`sian.agency/seloger-property-scraper`) Actor

Scrape SeLoger into clean structured data. Extract French sale and rental property listings by location, postal code, place id, radius, or URL — with price, €/m², area, rooms, DPE energy class, geo, built-in market KPIs, and optional owner/agent contact enrichment.

- **URL**: https://apify.com/sian.agency/seloger-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 property extracteds

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## SeLoger Scraper — France Property Sale + Rent · €/m² + DPE 🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store-Zillow Property Scraper](https://img.shields.io/badge/Store-Zillow%20Property%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![Store-Trulia Property Scraper](https://img.shields.io/badge/Store-Trulia%20Property%20Scraper-1AE392)](https://apify.com/sian.agency/trulia-property-scraper?fpr=sian) [![Store-Realtor Agent Scraper](https://img.shields.io/badge/Store-Realtor%20Agent%20Scraper-D92228)](https://apify.com/sian.agency/realtor-agent-scraper?fpr=sian)

#### 🎉 The only SeLoger dataset with 5 search modes + built-in €/m² market KPIs + native DPE energy — not just another URL dumper

##### For real estate investors, proptech teams, market analysts, green-lending, and CRM/lead-gen teams working French property data

***

### 📋 Overview

**Turn SeLoger into a clean, structured French real estate dataset in minutes** — sale and rental listings with price, €/m², area, rooms, DPE energy class, geo, and market KPIs, ready for analysis.

**Why professionals choose this scraper:**

- ✅ **5 first-class search modes**: free-text location, French postal code, SeLoger place id, radius-around-a-place, and paste-in seloger.com URL — most tools are URL-only
- ⚡ **Native DPE + GES energy data**: France's mandatory Diagnostic de Performance Énergétique energy class and greenhouse-gas class as first-class fields
- 🎯 **Built-in €/m² market KPIs**: median price, median €/m², area/rooms distributions, and city + property-type breakdowns computed in every run — no post-processing
- 💰 **Fair pay-per-result pricing**: cheap per-listing headline rate with a genuinely useful FREE tier — no monthly commitment
- 💎 **Cross-mode dedup**: one property is counted once even across sale+rent sweeps and overlapping place/radius queries
- ✨ **Optional owner/agent + agency contact enrichment**: the lead-gen layer no single SeLoger tool bundles with search + DPE

***

### ✨ Features

- 🧭 **Five search modes** — location, postal code, place id, radius, and search URL, each with sale/rent/both
- 📊 **Market KPIs in every run** — median price, €/m² distribution, area/rooms stats, city + type breakdowns
- ⚡ **DPE energy screening** — energy class + GES emissions surfaced on every enriched listing
- 📇 **Contact enrichment** — owner/agent name, phone, and agency contacts (PAID)
- 🏷 **Rich structured fields** — price, currency, €/m², area, rooms, bedrooms, floor, geo hierarchy, images
- 🔁 **Automatic deduplication** — no double-counted properties across modes or sale+rent runs
- 🔍 **Server-side filters** — property type, price, area, rooms, bedrooms, and sort order
- 📄 **HTML market report** — a shareable summary with KPIs and per-query totals in the key-value store
- 🆓 **Free tier included** — test the full feature set before you scale

***

### 🎬 Quick Start

Point the actor at a French city, choose sale or rent, and run. Results stream into the Apify dataset as clean JSON with market KPIs computed automatically. Export to JSON, CSV, or Excel in one click.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~seloger-property-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"searchMode": "location", "listingType": "sale", "location": "Bordeaux"}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose a search mode

Pick location, postal code, place id, radius, or a seloger.com URL — and pick sale, rent, or both.

#### Step 2: Add filters (optional)

Narrow by property type, price, area, rooms, bedrooms, or sort order — all applied server-side.

#### Step 3: Run and export

Launch the actor and download clean listings plus a market-KPI report as JSON, CSV, or Excel.

**That's it! In a couple of minutes, you'll have:**

- A deduped dataset of French sale or rent listings
- Median price, €/m², and city/type breakdowns
- Optional DPE energy data and owner/agent contacts (PAID)

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| searchMode | string | No | `location`, `zip`, `placeid`, `radius`, or `url` (default `location`) |
| listingType | string | No | `sale`, `rent`, or `both` (default `sale`) |
| location | string | No | French place name (location mode / radius centre) |
| zipCode | string | No | French 5-digit postal code (zip mode) |
| placeIds | string | No | SeLoger place id(s), comma-separated (placeid mode) |
| placeId | string | No | Radius-centre place id (radius mode) |
| radius | integer | No | Radius in km around the centre (radius mode) |
| url | string | No | A seloger.com search-results URL (url mode) |
| propertyType | string | No | House or Apartment, House, Apartment, Building, Land, Parking, Miscellaneous |
| minPrice / maxPrice | integer | No | Price bounds in € |
| minArea / maxArea | integer | No | Living-area bounds in m² |
| minRooms / maxRooms | integer | No | Room-count bounds |
| minBedrooms / maxBedrooms | integer | No | Bedroom-count bounds |
| sortOrder | string | No | Recommended, Newest, Price\_Low\_to\_High, Price\_High\_to\_Low |
| maxResults | integer | No | Max listings per query (FREE capped at 25/run) |
| includeDetails | boolean | No | Full detail + DPE + contact enrichment (PAID) |

**Example — search by location:**

```json
{
  "searchMode": "location",
  "listingType": "sale",
  "location": "Bordeaux",
  "minPrice": 200000,
  "maxPrice": 600000,
  "propertyType": "Apartment"
}
```

**Example — bulk postal-code sweep (PAID):**

```json
{
  "searchMode": "zip",
  "listingType": "rent",
  "zipCodes": ["75001", "75002", "75003"],
  "includeDetails": true
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **25+ fields** per listing including:

| Field | Type | Description |
|-------|------|-------------|
| propertyId | string | Unique SeLoger classified id |
| propertyTitle | string | Listing headline |
| listingType | string | `sale` or `rent` |
| propertyType | string | House / Apartment / Building / Land / … |
| url | string | Listing URL on seloger.com |
| pricing | object | Price, currency (EUR), €/m², rent admin fee |
| specs | object | Area (m²), rooms, bedrooms, floor |
| location | object | City, region, postal code, district, hierarchy |
| images | array | Full-size photo URLs |
| energy | object | *(enriched)* DPE energy class + GES emissions |
| characteristics | object | *(enriched)* full flattened listing characteristics |
| coordinates | object | *(enriched)* latitude, longitude, department |
| contact | object | *(enriched)* owner/agent + agency name and phones |

**Example:**

```json
{
  "propertyId": "263KK19CF4XA",
  "propertyTitle": "Appartement 3 pièces, 68 m², Bordeaux",
  "listingType": "sale",
  "propertyType": "Apartment",
  "url": "https://www.seloger.com/annonces/achat/appartement/bordeaux-33000/263KK19CF4XA.htm",
  "pricing": { "price": 320000, "currency": "EUR", "pricePerSquareMeter": 4706 },
  "specs": { "areaInSquareMeters": 68, "rooms": 3, "bedrooms": 2 },
  "location": { "city": "Bordeaux", "postalCode": "33000", "district": "Chartrons" },
  "energy": { "energyClass": "C", "gasEmissionClass": "D" },
  "contact": { "agencyName": "Agence Bordeaux Centre", "agencyPhones": ["+33 5 56 00 00 00"] }
}
```

An HTML market report (median price, €/m² distribution, city + type breakdowns) is saved to the key-value store as `report.html`.

***

### 💼 Use Cases & Examples

#### 1. France market analysis

**Analysts and proptech teams tracking the French housing market.**

**Input:** A city or region + sale/rent.
**Output:** Median price, €/m², and city/property-type breakdowns.
**Use:** Feed dashboards and market reports without manual aggregation.

#### 2. Property comparables (comps)

**Appraisers and investors pricing a deal.**

**Input:** A location, postal code, place id, radius, or URL.
**Output:** A deduped set of structured sale or rent comps.
**Use:** Valuation, underwriting, and offer pricing.

#### 3. DPE / energy screening

**Green-lending, retrofit, and compliance teams.**

**Input:** Listings + `includeDetails`.
**Output:** Energy class + GES emissions on every listing.
**Use:** Screen stock by energy performance for financing and regulation.

#### 4. Agent & owner lead generation

**CRM and outreach teams building a French contact list.**

**Input:** A search + `includeDetails`.
**Output:** Owner/agent name, phone, and agency contacts.
**Use:** Build and enrich a CRM for prospecting.

#### 5. Real-estate data pipelines

**Data engineers powering AVMs and monitoring.**

**Input:** Scheduled searches by location or postal code.
**Output:** Clean, consistent listing data over time.
**Use:** Feed price-prediction models and change monitoring.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/seloger-property-scraper').call({
  searchMode: 'location',
  listingType: 'sale',
  location: 'Bordeaux'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/seloger-property-scraper').call(
    run_input={'searchMode': 'location', 'listingType': 'sale', 'location': 'Bordeaux'}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~seloger-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchMode": "zip", "listingType": "rent", "zipCode": "75001"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call the actor API
3. **Process**: Handle JSON results
4. **Action**: Save to a database, notify, or transform

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — full feature access, same data quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** listings and queries per run
- Bulk sweeps, sale+rent in one run, and full detail + DPE + contact enrichment
- Pay-per-result: you're only charged for listings actually written

💰 **Fair, transparent pricing** — a cheap per-listing rate with detail enrichment as an optional add-on. No monthly minimum.

🔗 [View current pricing](https://apify.com/sian.agency/seloger-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many listings can I scrape?**
A: FREE tier: 25 per run. PAID tier: unlimited.

**Q: Can I get sale and rent in one run?**
A: Yes — set `listingType` to `both` on a PAID tier; each query runs once per side and is deduped.

**Q: Do I get DPE energy data?**
A: Yes — enable `includeDetails` (PAID) to add the DPE energy class and GES emissions to every listing.

**Q: What output formats are available?**
A: JSON, CSV, and Excel — export directly from the Apify dataset.

**Q: Can I search by postal code or a search URL?**
A: Yes — choose `zip`, `placeid`, `radius`, or `url` as the search mode.

**Q: Is this legal?**
A: We only extract publicly available data. See the legal section below.

***

### 🐛 Troubleshooting

**No results returned**

- Confirm the location, postal code, place id, or URL is valid and spelled correctly
- For postal codes use the 5-digit French format (e.g. `33000`)

**FREE tier stopped at 25 listings**

- That's the FREE cap per run — upgrade to a paying Apify plan for unlimited results and enrichment

**Detail fields are empty**

- Detail/DPE/contact fields only appear when `includeDetails` is ON (PAID tier)

***

### ⚠️ Trademark Disclaimer

SeLoger® is a registered trademark of its respective owner. This actor and SIÁN Agency are **not affiliated with, endorsed by, or sponsored by** SeLoger or its parent company. "SeLoger" is used here only to describe the public data source this tool works with. All product names, logos, and brands are the property of their respective owners. Use this tool responsibly and in compliance with applicable terms and laws.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's Issues tab
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `listingType` (type: `string`):

Which side of the market to scrape.

• **sale** — for-sale listings
• **rent** — rental listings
• **both** — runs each query twice, once for sale and once for rent (PAID — doubles the query count)

## `searchMode` (type: `string`):

How to specify where to search.

• **location** — free-text place name (e.g. Bordeaux)
• **zip** — French postal code (5 digits)
• **placeid** — one or more SeLoger place ids
• **radius** — a distance (km) around a place or location
• **url** — a seloger.com search-results URL

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

French place name — a city, borough, department, or region. Examples: 'Bordeaux', 'Lyon 3e', 'Paris'. Also used as the radius-mode centre when no Place ID is given.

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

Array of French place names. PAID tier only.

## `zipCode` (type: `string`):

French postal code (5 digits). Example: '33000' or '75001'.

## `zipCodes` (type: `array`):

Array of French postal codes (5 digits). PAID tier only.

## `placeIds` (type: `string`):

One or more SeLoger place ids, comma-separated. Example: 'AD08FR13100'. Discover ids by name or postcode using the autocomplete on seloger.com.

## `placeIdList` (type: `array`):

Array of SeLoger place id strings. PAID tier only.

## `placeId` (type: `string`):

SeLoger place id to use as the radius centre. If empty, the Location field is used as the centre instead.

## `radius` (type: `integer`):

Search radius in kilometres around the centre. Defaults to 10 km.

## `url` (type: `string`):

A seloger.com search-results URL (starts with https://www.seloger.com/). All filters encoded in the URL are respected.

## `urls` (type: `array`):

Array of seloger.com search-results URLs. PAID tier only.

## `propertyType` (type: `string`):

Filter by property type. Leave empty for all types.

## `sortOrder` (type: `string`):

Ordering of the search results.

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

Minimum price. For sale this is the asking price; for rent it is the monthly rent. Leave empty for no minimum.

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

Maximum price. Leave empty for no maximum.

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

Minimum living area in square metres. Leave empty for no minimum.

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

Maximum living area in square metres. Leave empty for no maximum.

## `minRooms` (type: `integer`):

Minimum number of rooms. Leave empty for any.

## `maxRooms` (type: `integer`):

Maximum number of rooms. Leave empty for any.

## `minBedrooms` (type: `integer`):

Minimum number of bedrooms. Leave empty for any.

## `maxBedrooms` (type: `integer`):

Maximum number of bedrooms. Leave empty for any.

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

Hard cap on listings returned per query. Auto-paginates until the cap is reached or the search is fully drained. FREE tier is always capped at 25 listings per run.

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

When ON, fetches the full detail record for each listing (DPE energy class + GES emissions, owner/agent name + phone, agency contacts, full characteristics, and description). Adds a ListingEnriched charge per listing. Disabled on FREE tier.

## Actor input object example

```json
{
  "listingType": "sale",
  "searchMode": "location",
  "location": "Bordeaux",
  "zipCode": "33000",
  "placeIds": "AD08FR13100",
  "placeId": "AD08FR13100",
  "radius": 10,
  "maxResults": 100,
  "includeDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

Structured SeLoger sale and rent listings with price, €/m², specs, DPE energy class, location, and (optional) owner/agent contact + full-detail enrichment.

## `htmlReport` (type: `string`):

HTML summary with run stats, market KPIs (median price, €/m² distribution), city + property-type breakdowns, and per-query totals.

# 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": "Bordeaux"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/seloger-property-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": "Bordeaux" }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/seloger-property-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": "Bordeaux"
}' |
apify call sian.agency/seloger-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/seloger-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fiKReQAFoEY2R7OXe/builds/sflAEnmaEn1oM4IvN/openapi.json
