# SeLoger Scraper - France Property Listings (Sale & Rent), Cheap (`fabrikit/seloger-scraper`) Actor

Scrape SeLoger.com, France's #1 property portal: apartments, houses, land, parking, offices and shops for sale or rent in any French city. Price, area, rooms, energy class, photos, agency. Crawls neighbouring areas to reach more ads. No login.

- **URL**: https://apify.com/fabrikit/seloger-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listing scrapeds

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

## SeLoger Scraper - France property listings

Scrape **SeLoger.com**, France's number one property portal: apartments, houses, land, parking, offices, storage and shops for sale or rent in any French city. Type a city name (or paste any SeLoger result page) and get structured listings with price, area, rooms, energy class (DPE), agency and photos. No login, no cookies, no API key.

**How coverage works:** SeLoger shows 30 listings per result page and its deeper pages sit behind a bot-protected search API that the site's robots.txt closes to crawlers. This Actor therefore reads the public result pages only and, with *Expand to nearby areas* on, follows the site's own links (districts, neighbourhoods, nearby cities, room counts, property types) to collect as many distinct listings as you ask for. It is built for samples, monitoring of fresh listings, agency lead lists and market snapshots, not for an exhaustive dump of a whole city.

### What you get

- Price, price per m², living area, plot area, rooms, bedrooms, floor, energy class (DPE), construction year
- City, postcode, department, region
- Seller type (professional / private) and the agency name, logo and SeLoger profile
- Headline, description excerpt, photos, publication and update dates, new-build flag, source page

Agent names are removed (from the agency name and from the description), phone numbers and e-mails are masked, agencies' legal registration details are not collected, and private owners stay anonymous. SeLoger does not publish exact coordinates, so none are returned.

### Input examples

Listings for sale in Lyon (the default):

```json
{ "locations": ["Lyon"], "transaction": "sale", "propertyType": "all", "maxItems": 50 }
```

Studios and small flats to rent in Paris under 1,200 EUR:

```json
{
  "locations": ["Paris"],
  "transaction": "rent",
  "propertyType": "apartment",
  "maxPrice": 1200,
  "maxArea": 30,
  "maxItems": 300
}
```

One specific district page, no expansion:

```json
{ "startUrls": [{ "url": "https://www.seloger.com/recherche/achat/appartement/paris-75000/paris-16eme-arrondissement-75016/ad09fr41" }], "expandSearch": false }
```

Locations are French city names (larger cities resolve instantly, others are found by browsing SeLoger's region and department pages) or `France`. Price, area and rooms filters are applied to the listings collected.

### Output example

```json
{
  "id": "2653RFX1E15S",
  "legacyId": "281399375",
  "url": "https://www.seloger.com/annonce/achat/ile-de-france/paris-75/paris-75000/2653RFX1E15S",
  "title": "Appartement à vendre",
  "headline": "PARIS 19ÈME | GASTON TESSIER | STUDIO | 18,49 M² | 7ÈME ÉTAGE |",
  "transaction": "sale",
  "propertyType": "apartment",
  "propertyTypeLabel": "Appartement",
  "price": 130000,
  "currency": "EUR",
  "priceDisplay": "130 000 €",
  "pricePerSqm": 7030.83,
  "areaSqm": 18.49,
  "plotAreaSqm": null,
  "rooms": 1,
  "bedrooms": null,
  "floor": "Étage 7/8",
  "energyClass": "D",
  "constructionYear": 2016,
  "city": "Paris 19ème arrondissement",
  "postalCode": "75019",
  "department": "Paris",
  "region": "Ile-de-France",
  "country": "France",
  "sellerType": "professional",
  "agencyName": "AVL immobilier Laumière",
  "agencyUrl": "https://www.seloger.com/professionnels-immobilier/Qhp8KD7xtwoXeNt5FZDRwe",
  "agencyLogo": "https://cdnihddipa.cloudimg.io/e/9/e/c/e9ec804c-998b-4927-a6c1-d2e9192f6e14.jpg?ci_seal=5659a0cad928d7cdc8e3587398dfa08af2f9f27e",
  "agencyLocation": "118 rue de Meaux, 75019 Paris",
  "publisherType": "agency",
  "description": "PARIS 19ÈME | GASTON TESSIER | STUDIO | 18,49 M² | 7ÈME ÉTAGE | EXPOSITION SUD | RÉSIDENCE RÉCENTE | BAIL COMMERCIAL NEXITY | INVESTISSEMENT LOCATIF Situé rue Gaston Tessier, dans le 19ème arrondissement de Paris, venez découvrir ce studio ...",
  "imageUrl": "https://cdnihddipa.cloudimg.io/8/f/4/5/8f45dd54-d57e-44c9-aafe-954eb1e12608.jpg?ci_seal=0e7e1371fd3846174f371f03cb5162a1d610446e",
  "imageCount": 9,
  "images": [
    "https://cdnihddipa.cloudimg.io/8/f/4/5/8f45dd54-d57e-44c9-aafe-954eb1e12608.jpg?ci_seal=0e7e1371fd3846174f371f03cb5162a1d610446e",
    "https://cdnihddipa.cloudimg.io/1/0/0/9/10091617-2f5a-4c3b-a048-2786a34fbd43.jpg?ci_seal=75210f0490f725cf335201fc8d17458751eba103"
  ],
  "isNewBuild": false,
  "publishedAt": "2026-10-03T18:02:00Z",
  "updatedAt": "2026-10-05T01:06:50.464Z",
  "sourcePage": "https://www.seloger.com/recherche/achat/immobilier/ile-de-france/paris-75000/ad08fr31096",
  "scrapedAt": "2026-10-13T18:30:00.000Z"
}
```

### Pricing

Pay per event, no subscription:

| Event | When |
|---|---|
| Listing scraped | every listing saved to the dataset |
| Actor start | once per run |

See the Pricing tab for current prices; paid Apify plans get lower rates.

### FAQ

**How many listings can I get?** Each result page holds 30 listings; with *Expand to nearby areas* the Actor opens dozens of different result pages (districts, neighbourhoods, nearby cities, room counts) until it reaches `maxItems` or finds nothing new. Expect a few hundred distinct listings for one big city and more for a multi-city list.

**Does it need a proxy?** Yes. SeLoger uses DataDome bot protection. Apify Proxy is on by default and the Actor moves to residential French IPs automatically if datacenter IPs are blocked.

**Why no exact addresses or coordinates?** SeLoger does not publish them in result pages and the Actor does not guess.

**Why 30 per page?** It is how the site serves its public result pages; deeper pagination needs the protected search API, which this Actor does not use.

### Use cases

Fresh-listing monitoring in chosen cities, agency lead lists, price snapshots by district, rental market samples, training data for valuation models.

***

### En español

Extrae anuncios de **SeLoger.com**, el portal inmobiliario nº 1 de Francia: venta y arriendo de departamentos, casas, terrenos, estacionamientos, oficinas y locales. Escribe una ciudad (o pega una página de resultados de SeLoger) y obtén precio, superficie, ambientes, clase energética (DPE), inmobiliaria y fotos. Sin login. SeLoger entrega 30 anuncios por página de resultados; con "Expand to nearby areas" el actor sigue los enlaces del propio sitio (barrios, ciudades cercanas, número de ambientes, tipos) para reunir más anuncios distintos. Consulta la pestaña Pricing para ver los precios actuales; los planes de pago de Apify tienen tarifas más bajas. Los nombres de agentes, teléfonos y emails se omiten.

# Actor input Schema

## `transaction` (type: `string`):

Buy or rent.

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

What to search for.

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

French cities, one search per entry (for example: Lyon, Paris, Bordeaux, Annecy, Nice), or "France" for nationwide. Cities are looked up on SeLoger automatically.

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

Paste SeLoger result pages such as https://www.seloger.com/recherche/achat/appartement/... (district, neighbourhood or criteria pages work). They are scraped in addition to the locations above.

## `sellerType` (type: `string`):

Professionals (agencies, developers), private owners, or all.

## `expandSearch` (type: `boolean`):

SeLoger shows 30 listings per result page. When on, the Actor also visits the site's own links (districts, neighbourhoods, nearby cities, room counts, property types) to reach your Max listings. Turn off to only read the pages you asked for.

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

Keep only listings at or above this price.

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

Keep only listings at or below this price.

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

Keep only listings at or above this living area.

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

Keep only listings at or below this living area.

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

Keep only listings with at least this many rooms.

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

Stop after this many listings in total.

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

Apify Proxy is used by default. SeLoger uses bot protection: if datacenter IPs are blocked, the Actor switches to residential French IPs automatically.

## Actor input object example

```json
{
  "transaction": "sale",
  "propertyType": "all",
  "locations": [
    "Lyon"
  ],
  "sellerType": "all",
  "expandSearch": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All records collected during the run

# 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 = {
    "locations": [
        "Lyon"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/seloger-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 = {
    "locations": ["Lyon"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/seloger-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 '{
  "locations": [
    "Lyon"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/seloger-scraper --silent --output-dataset

```

## MCP server setup

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