SeLoger Scraper — Annonces, Prix & Agence avatar

SeLoger Scraper — Annonces, Prix & Agence

Pricing

from $1.00 / 1,000 property listings

Go to Apify Store
SeLoger Scraper — Annonces, Prix & Agence

SeLoger Scraper — Annonces, Prix & Agence

Scrape SeLoger immobilier annonces (achat or location): price EUR, m², rooms and agency name. Search by city or postcode — a clean listing schema, not a pasted search URL. France residential proxy recommended.

Pricing

from $1.00 / 1,000 property listings

Rating

0.0

(0)

Developer

Noah Adler

Noah Adler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

SeLoger Scraper — Annonces Immobilier

SeLoger scraper for seloger immobilier annonces: price in euros, living area in m², rooms, agency name, agency profile and price drops. One Dataset row per listing, from a city, a postcode, or a SeLoger place id.

Search pages on seloger.com already embed the card payload (price, m², agency, price history). This Actor reads that payload over HTTP. It does not paste a raw search URL and dump the page. France residential proxy is the default because SeLoger uses DataDome.

seloger api shape for buyers who want annonces, not a generic crawl: price is the asking price, areaSqm is the living area, pricePerSqm is computed from those two, and agencyName is the agency on the card.

Table of contents

What you get

Listing

  • listingId, title, url on seloger.com
  • transaction (buy / rent) and propertyType
  • price in EUR (not the €/m² string)
  • previousPrice, priceChangePercent, priceDropped when SeLoger shows a price change
  • areaSqm, rooms, bedrooms, pricePerSqm, energyLabel (DPE)

Place

  • city, zipcode, district
  • placeId (the SeLoger id that was actually searched, e.g. AD08FR28808)
  • locationQuery (what you typed)

Agence

  • sellerType (agency or private)
  • agencyName, agencyUrl (professionnels-immobilier profile), agencyPhone when the card exposes it

A dedicated seloger agence lead Actor is a later step in the same racimo, after this hero has runs. This scraper already returns the agency printed on the annonce.

How it works

StepAction
1Resolve location to a SeLoger place id. A city or postcode goes through the French communes API, then SeLoger's own city URL. A value like AD08FR28808 is used as-is.
2Open classified-search with transaction, property type, price, m², rooms and sort.
3Read the embedded search JSON and map each card to one row.
4Paginate until maxItems or the last page (~30 annonces per page, cap 300).

Features

Structured searchCity, postcode or place id. Filters for price, m² and rooms.
Clean schemaPrice, m² and €/m² are separate fields. A price drop is a boolean plus the previous price.
Agence on the cardAgency name, profile URL and phone when SeLoger prints them on the result.
Achat and locationbuy or rent.
HTTPNo Playwright. Residential FR proxy when DataDome blocks the IP.

Input

FieldRequiredDescription
locationYesLyon, 69003, AD08FR28808, or a seloger.com URL that contains a place id
transactionNobuy (default) or rent
propertyTypeNoapartment (default), house, parking, land, office, commercial, any
maxItemsNo1–300 (default 30)
minPrice / maxPriceNoEUR. Monthly rent when transaction is rent
minSurface / maxSurfaceNoLiving area, m²
minRoomsNoMinimum pièces
sortNorelevance, newest, price_asc, price_desc
onlyPrivateNoDrop agency cards
proxyConfigurationNoDefault RESIDENTIAL + FR

Example — Lyon apartments for sale

{
"location": "Lyon",
"transaction": "buy",
"propertyType": "apartment",
"maxItems": 50,
"minPrice": 150000,
"maxPrice": 400000,
"minSurface": 40,
"sort": "newest",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "FR"
}
}

Example — rentals by postcode

{
"location": "33000",
"transaction": "rent",
"propertyType": "apartment",
"maxItems": 30,
"maxPrice": 1200
}

Output

{
"listingId": "26N55L7BPHGJ",
"title": "Appartement à vendre",
"url": "https://www.seloger.com/annonce/achat/nouvelle-aquitaine/gironde-33/bordeaux-33000/26N55L7BPHGJ",
"transaction": "buy",
"propertyType": "Appartement",
"price": 235000,
"previousPrice": null,
"priceChangePercent": null,
"priceDropped": false,
"pricePerSqm": 3615.38,
"areaSqm": 65,
"rooms": 3,
"bedrooms": 2,
"energyLabel": "C",
"city": "Bordeaux",
"zipcode": "33100",
"district": "La Bastide",
"sellerType": "agency",
"agencyName": "HOMKI",
"agencyUrl": "https://www.seloger.com/professionnels-immobilier/Vfr29yp7tcCfp2xFQZvNBR",
"agencyPhone": "04 13 68 02 02",
"placeId": "AD08FR13100",
"locationQuery": "33000",
"error": false
}
FieldMeaning
priceAsking price in euros. Sale or monthly rent. Never the €/m² line.
pricePerSqmprice / areaSqm, rounded. Empty when area is missing.
priceDroppedTrue when SeLoger shows a downward price arrow, or the previous price is higher.
priceChangePercentSigned percent. Negative means a drop.
agencyNameAgency printed on the card, or the private-seller label.
errortrue only on a hard failure (block or unknown location), with errorMessage.

An empty search pushes one row with error: false and a short message. A DataDome block pushes error: true and tells you to use residential FR.

Use cases

  • Track seloger annonces in one city for pricing and new stock
  • Spot price drops (priceDropped) for acquisition lists
  • Attach an agence to each annonce without opening the detail page
  • Feed a CRM with Lyon, Bordeaux or Paris listings on a schedule
  • Compare achat vs location by running the Actor twice with transaction

API quick start

apify call noahadler/seloger-scraper --input '{
"location": "Lyon",
"transaction": "buy",
"propertyType": "apartment",
"maxItems": 20
}'
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("noahadler/seloger-scraper").call(run_input={
"location": "Lyon",
"transaction": "buy",
"propertyType": "apartment",
"maxItems": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["price"], item["areaSqm"], item["agencyName"], item["url"])

Proxy

SeLoger often answers a home IP and blocks a datacenter IP. The default input enables Apify RESIDENTIAL with country FR. If you clear the proxy and the run returns error: true mentioning DataDome, turn residential FR back on. Do not switch to a headless browser as a first fix.

FAQ

City or place id? Either. Lyon and 69003 resolve to a place id. AD08FR28808 skips resolution. Ambiguous names use the most populous commune.

Is this a search-URL scraper? No. You set city, transaction, type, price and m². A seloger.com URL is accepted only as a way to pass a place id.

Where is the full description and every photo? On the search card we keep the fields that are stable: price, m², rooms, DPE, agency, one photo URL. A detail Actor is the next piece of the racimo, after this one has runs.

Rent prices look small. They are monthly rents, not sale prices. transaction tells you which.

Private sellers only? Set onlyPrivate. Most SeLoger stock is agencies, so the result can be short.

Limitations

  • France, seloger.com annonces only. Sister brands linked from a card are skipped.
  • Cap 300 rows per run (~10 pages).
  • Phone and agency URL are whatever the search card shows. A full agency directory is a separate Actor.
  • Strong antibot: residential FR is the supported setup.
  • City resolution picks one commune. For a neighbourhood, pass its place id.

Racimo

This is the hero. Same site, not built yet:

ActorWhen
seloger-scraperNow. Search annonces. Volume PPE.
seloger-detailAfter this hero has runs (7–14 days). Full fiche.
seloger-agencesSame gate. Agency leads, higher PPE.

Keywords

seloger scraper, seloger api, seloger immobilier, seloger annonces, seloger agence