SeLoger 🇫🇷 [$0.9💰] All-in-One — Search · Detail · Agencies
Pricing
from $0.90 / 1,000 results
SeLoger 🇫🇷 [$0.9💰] All-in-One — Search · Detail · Agencies
🔥 $0.9/1K · SeLoger.com all-in-one scraper français — search URLs + property URLs + agency profiles in ONE actor. Auto-classifies 3 URL kinds. Extracts price · fees · mortgage · m² · DPE/GES · lat-lng · 5+ agency fields. Apify Residential FR mandatory. JSON + CSV. No browser
Pricing
from $0.90 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
4
Monthly active users
4 days ago
Last modified
Categories
Share
SeLoger.com All-in-One Scraper — Search, Properties & Agencies
How it works
All-in-one SeLoger.com scraper — 75+ data points per property row, pulled directly from SeLoger's React server-state blob (no DOM scraping). Paste any mix of the 4 URL kinds below and the actor auto-classifies each one:
| Input | Row(s) emitted |
|---|---|
SEO listing URL — /immobilier/{transaction}/immo-{city-dept}/ (e.g. /immobilier/achat/immo-paris-75/) | N property rows — one per property card. Paginates via ?LISTING-LISTpg=N. Stops on empty page. |
Filter search URL — /classified-search?classifiedBusiness=…&distributionTypes=…&locations=…&priceMin=…&priceMax=… (the new SeLoger search shape with full filter support) | N property rows, same fields as the SEO shape. Paginates via ?page=N. DataDome-bypassed via impit-chrome + Apify Residential FR. |
Property detail URL — /annonces/{type}/{slug}/{city-dept}[/{neighborhood}]/{id}.htm | 1 property row: price, fees, mortgage, m², rooms, bedrooms, floor, address, neighborhood, postal code, DPE/GES energy ratings, construction year, lat/lng, agency name + profile URL, features, image URLs. |
Agency profile URL — /professionnels-immobilier/{opaque-id} | 1 agency row + N property rows for every property the agency has listed. |
Pagination is handled automatically — the actor detects the URL kind and bumps LISTING-LISTpg or page accordingly. The older /list.htm?projects=… query-style URL is WAF-blocked at the edge and rejected up-front by the URL classifier — use /classified-search?... instead (it's the modern replacement and works). JSON + CSV out.
Pure HTTP. No Puppeteer, no Playwright, no headless Chromium, no third-party Cloudflare-bypass service.
Why 75+ fields per row?
Every SeLoger detail page server-renders a window["__UFRN_LIFECYCLE_SERVERREQUEST__"] JSON blob — 66 KB of structured property + agency data that the React frontend hydrates from. The actor parses that JSON directly, not the rendered DOM, which is why each row carries far more than HTML scrapers can pull:
- Property core — propertyId, externalRef, title, propertyType, transactionType, rooms, bedrooms, livingArea (m²), plotSurface (m²), floor, neighborhood/district, city, postalCode, country, region
- Pricing — price (€), priceFormatted, pricePerM2, notaryFees, totalProjectCost, monthlyMortgage
- Energy — dpeRating (A–G), gesRating, dpeIndex (0–6), primaryEnergyKwh, finalEnergyKwh, co2EmissionsKgPerM2, annualEnergyCost (€ band), energyDiagnosticDate, energySources, constructionYear, buildingState
- Geo — latitude, longitude, isAddressPublished, geoIdHierarchy (7-level SeLoger location IDs)
- Transport — metro, bus, tramway, RER lines (with line numbers and brand colors) within walking distance
- Co-ownership — coOwnershipLots, coOwnershipChargesPerYear, coOwnershipProceedings
- Media —
imageUrls(full carousel, up to 30 images) +images[].classification(AI-tagged:BEDROOM/KITCHEN/LIVING_ROOM/BATHROOM/BALCONY/ …), floorplanImageUrls, photosCount - Tags — isExclusive, has3DVisit, hasBrokerageFee, isNew
- Agency — agencyName, agencyType (Agence / Mandataire / Network), agencyProfileUrl, agencyWebsiteUrl, agencyFeeUrl, agencyImprintUrl, agencyLogoUrl, agencyAddress (street), agencyRcs, agencySiret, clientType (pro/particulier), clientId, publisherType, isPrivateOwner, phoneNumbers
- Agency enrichment (when
enrichAgency: true) — agencyDescription (full bio), agencyServices, agencyOpeningHours (structured per day), agencyTeamMembers (with names + roles), agencyEmailAddresses, intermediaryType, network, spokenLanguages, memberships, social links - Timestamps — createdAt, updatedAt (ISO)
Pipeline
SeLoger is geo-fenced to France and uses TLS fingerprinting at the edge — non-FR residential IPs are blocked outright, and impit-firefox fingerprints through a proxy are rejected. The actor handles this with a hardened 3-stack approach:
- Apify Residential FR, mandatory. The default proxy is
RESIDENTIAL+apifyProxyCountry: "FR"— UK / DE / US residential combos all return 403 in our recon. Override at your own risk. - impit Chrome fingerprint. All requests use the impit Chrome TLS profile (the firefox profile is blocked on this site). Real Chrome 144 ClientHello — no header spoofing.
- Sliding-window parallelism. Up to 10 property pages crawl in parallel via a global concurrency window. Listing pages are streamed: as soon as a listing page returns, its 25 detail URLs fan out into the window while page N+1 fetches in parallel.
- Per-agency cache. Each unique agency profile (
/professionnels-immobilier/{id}) is fetched once, with all properties from that agency awaiting the same promise — a 50-property batch from one agency costs one extra fetch, not 50. - 3-stack fallback race. If the first 3 impit attempts fail (CF challenge / 5xx / timeout), the request escalates to a parallel race across three independent HTTP stacks: impit (Rust + rustls) + gotScraping (Node http/2 + header generator) + impers (libcurl FFI with
curl-impersonateChrome 131 TLS). First success wins.
Every property page is parsed via a mix of:
- JSON-LD for the minimal
RealEstateListingblock (title + description) on detail pages, and the page-levelAggregateOfferon listing pages (total count, price band, currency). data-testidanchors for the rich React-rendered data:cdp-hardfacts-keyfacts,cdp-location-address,cdp-energy,cdp-price,cdp-co-ownership,cdp-classified-keys, plus theaviv.CDP.Contacting.ProviderSection.*family for agency contact.- Inline Mapbox static-map URL for lat/lng (handles both Point and MultiPolygon GeoJSON shapes).
No DOM execution, no DOMContentLoaded wait, no headless browser.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
startUrls | string[] | yes | Any mix of listing / detail / agency URLs. Auto-classified. The /list.htm?… query-style URL is rejected. |
enrichAgency | boolean | no | When true (default), each unique agency profile is fetched once and merged into every property row from that agency. Adds agencyAddress, agencyDescription, agencyServices, agencyOpeningHours, agencyTeamMembers, agencyLogoUrl. |
maxItems | integer | no | Hard cap on property rows. Agency-only rows do not count. Default 1000. Free-tier users are capped at 100. |
maxConcurrency | integer | no | Max parallel property fetches. Default 10. |
minConcurrency | integer | no | Default 1. |
maxRequestRetries | integer | no | Per-URL retry budget. The 3-stack race kicks in after the first 3 impit-only attempts. Default 5. |
useInternalHandler | boolean | no | true (default) → impit-only internal pipeline. false → CheerioCrawler with ImpitHttpClient. |
proxy | object | no | Apify Residential FR is the default and recommended setting. Non-FR proxies fail. |
Example input
{"startUrls": ["https://www.seloger.com/immobilier/achat/immo-paris-75/","https://www.seloger.com/annonces/achat/appartement/paris-75/269476619.htm","https://www.seloger.com/professionnels-immobilier/FEW3VPchH8roDn265N8Hnj"],"enrichAgency": true,"maxItems": 50,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "FR"}}
That yields up to 50 property rows from the Paris listing (with the direct detail and agency URLs interleaved). One row per property, each enriched with the agency profile when enrichAgency is on.
Output schema
Two row shapes, distinguishable by the presence of kind: "agency":
Property row (one per property URL)
{"propertyId": "269476619","externalRef": "26Q15FM7UI2B","title": "Appartement à vendre","propertyType": "Appartement","transactionType": "achat","rooms": 3,"bedrooms": 2,"livingArea": 65,"floor": "RDC/5","address": "Clignancourt-Jules Joffrin, Paris 18ème arrondissement (75018)","neighborhood": "Clignancourt-Jules Joffrin","city": "Paris 18ème arrondissement","postalCode": "75018","description": "IMOSS Immobilier vous présente cet appartement idéalement situé…","features": ["Rez-de-chaussée/5 étages", "Kitchenette, Cuisine intégrée", "Calme", "Exposition: sud", "…"],"constructionYear": 1880,"energySources": "Électrique","dpeRating": "E","gesRating": "C","price": 455000,"notaryFees": 36400,"totalProjectCost": 491400,"monthlyMortgage": 2291,"coOwnershipLots": 24,"coOwnershipChargesPerYear": 1200,"coOwnershipProceedings": "Pas de procédure en cours","latitude": 48.8918,"longitude": 2.3465,"agencyName": "IMOSS","agencyType": "Agence","agencyProfileUrl": "https://www.seloger.com/professionnels-immobilier/FEW3VPchH8roDn265N8Hnj","agencyWebsiteUrl": null,"agencyFeeUrl": null,// Filled when `enrichAgency: true` — one cached fetch per unique agency."agencyAddress": "Lundi 09:00–13:00 14:00–17:00 / Mardi–Vendredi 09:00–13:00 14:00–19:00 / …","agencyDescription": "Depuis 1984, IMOSS Immobilier accompagne les vendeurs et acquéreurs…","agencyServices": ["Services de courtage immobilier", "Vente d'actifs commerciaux", "Gestion locative", "Estimation"],"agencyOpeningHours": ["09:00–13:00", "14:00–17:00", "…"],"agencyTeamMembers": ["Keyvan Miri — Directeur d'agence", "Ismael Yigitler — Directeur associé", "…"],"agencyLogoUrl": "https://mms.seloger.com/…","imageUrls": ["https://mms.seloger.com/d/e/6/4/…", "https://mms.seloger.com/3/c/8/e/…"],"url": "https://www.seloger.com/annonces/achat/appartement/paris-75/269476619.htm","jsonLd": { "@type": "RealEstateListing", "name": "…", "description": "…" },"scrapedAt": "2026-05-20T05:38:00.000Z"}
Agency row (one per agency URL, emitted only when an agency URL is in startUrls)
{"kind": "agency","agencyId": "FEW3VPchH8roDn265N8Hnj","name": "IMOSS","address": "…","description": "…","services": ["…"],"openingHours": ["…"],"teamMembers": ["…"],"propertyUrls": ["https://www.seloger.com/annonces/…/269476619.htm", "…"],"websiteUrl": null,"profileUrl": "https://www.seloger.com/professionnels-immobilier/FEW3VPchH8roDn265N8Hnj","imageUrl": "https://mms.seloger.com/…","jsonLd": { "@type": "RealEstateAgent", "name": "IMOSS", "address": "…", "image": "…" },"scrapedAt": "2026-05-20T05:38:00.000Z"}
When you paste an agency URL into startUrls, the actor emits this row and then enqueues every property URL visible on the agency profile page as a detail fetch — so one agency URL becomes 1 agency row + N property rows.
✨ Why use this scraper?
Trying to track the French property market without paying for a real-estate-data SaaS? Building a comp tool for a Paris arrondissement? Need clean DPE / GES energy-rating data for sustainable-finance work?
- 🇫🇷 France-native. Real fr-FR Accept-Language, Apify Residential FR proxy, French currency / surface units (€ + m²) preserved verbatim.
- 🎯 Three URL kinds, one actor. Search URLs, individual property URLs, agency profile URLs — paste any mix and the actor classifies and routes each.
- 📋 DPE / GES first-class. Energy diagnostic letters (A–G) and construction year are parsed from the
cdp-energyblock — most competitors skip this entirely. - 📍 Latitude / longitude on every row. Decoded from the inline Mapbox static-map URL — handles both Point and MultiPolygon GeoJSON shapes.
- 🏢 Per-agency cache. Each unique agency profile is fetched once, even if 50 of your properties are from the same agency. Costs scale with unique agencies, not properties.
- 🛡️ Geo-fence + WAF aware. Drops the
/list.htm?…URL shape (WAF-blocked) and forces FR proxy by default. Recon-proven combos baked into the URL classifier. - 🔁 3-stack HTTP fallback. When impit alone hits a wall, the request escalates to a parallel race across impit + gotScraping + impers. No headless browser ever.
- 📤 Clean exports. Dataset rows are stable JSON; CSV export is generated automatically.
🎯 Use cases
| Team | What they build |
|---|---|
| Real-estate analysts | Price-per-m² dashboards by arrondissement, neighborhood, DPE rating |
| Investors / property funds | Daily new-listing feeds for buy-to-let or value-add acquisitions |
| PropTech startups | Comparable-sales engines fed by a clean French listing dataset |
| Sustainable-finance teams | DPE / GES distributions across Paris / Lyon / Marseille — input to green-mortgage products |
| Mortgage brokers | Lead pipelines from new high-end listings (monthlyMortgage + notaryFees already computed) |
| Agencies (competitive intel) | What's listed where, by which competitor, at what price |
| Journalists / researchers | Longitudinal datasets on FR housing-market shifts |
Notes & limitations
- Geo-fence is real. SeLoger blocks non-FR IPs at the edge. The default proxy config (
RESIDENTIAL+country: FR) is the only proven combo from our 3-stack recon. Datacenter and non-FR residential proxies fail. imageUrlsreturns the SSR-rendered subset — typically 1–3 of the full carousel. The remaining images lazy-load via JS after hydration, which a no-browser HTTP scraper can't trigger. The hero image is always present.- Phone numbers are not extracted. SeLoger gates direct-dial phone behind a "Show number" interaction that requires JS. Email and contact-form CTAs are reachable; the agency profile URL is always present and contains opening hours + website.
- Pagination stops on empty page. SeLoger doesn't server-render a total-page count — the actor follows
?LISTING-LISTpg=Nuntil a page returns zero property cards. - Listing-page JSON-LD is page-level metadata only. The
RealEstateListingblock on a search results page describes the search, not individual properties. Per-property data comes from the cards'data-testidanchors. (Detail-page JSON-LD is thin but populated for the row.) - The
/list.htm?projects=…URL shape is WAF-blocked at the edge and rejected by the URL classifier. Use the SEO/immobilier/{transaction}/immo-{city-dept}/shape instead — it's what SeLoger.com itself routes to when you submit a filter. - Agency URL must be the new shape
/professionnels-immobilier/{opaque-id}. The old/professionnels/agences-immobilieres/{city-slug}/city-directory URL returns 404 today and is rejected.
Support
Issues, feature requests, or custom output shapes? Open a ticket on the actor's Apify Console issues page or message the maintainer.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by SeLoger.com, AVIV Group, Axel Springer SE, or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper extracts only publicly visible data from SeLoger.com — property listings, individual property pages, and agency profiles as they appear to any logged-out visitor. No login, no CAPTCHA solving, no API-key forgery, no private-endpoint probing. The actor uses an Apify Residential FR proxy with TLS-fingerprinted HTTP requests, honouring robots.txt and rate-limits via concurrency cap to avoid burdening SeLoger's infrastructure.
Users are responsible for:
- Complying with SeLoger.com's Terms of Service and French law (loi Hoguet, Code de la consommation, RGPD)
- Following GDPR / French CNIL guidance when storing or processing data about private individuals (vendors, agents)
- Not contacting agents, vendors, or team members listed in scraped data without their consent
- Not republishing scraped data in a way that competes commercially with SeLoger or misrepresents listing authorship
- Honouring any opt-out signals or
noindexdirectives on the source pages - Refreshing scraped data regularly — property availability, prices, and energy ratings change frequently
SEO Keywords
seloger scraper, scrape seloger, seloger.com scraper, seloger api, seloger immobilier scraper, scraping seloger, seloger.fr scraper, french real estate scraper, paris property scraper, immobilier scraper, scrape paris real estate, paris listings scraper, france real estate api, real estate france scraper, seloger achat scraper, seloger location scraper, seloger annonces scraper, seloger agences scraper, french housing data scraper, DPE scraper, GES scraper, energy rating scraper, real estate listings france, french property data, real estate market data france, paris housing market scraper, real estate analytics france, comparable sales scraper france, seloger.com data extraction, french housing market api, real estate intelligence france, JSON-LD real estate scraper, RealEstateListing scraper, RealEstateAgent scraper, Apify seloger, seloger cheerio scraper, seloger HTTP scraper, no-browser seloger scraper, Apify Residential FR, french rental market, paris rental scraper, neuf scraper, viager scraper, colocation scraper, prestige scraper, french property investment, parisian real estate, real estate lead generation france, agent immobilier scraper, agence immobilière scraper, ile-de-france property scraper, lyon property scraper, marseille property scraper, bordeaux property scraper
💬 Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
🛠 Additional services
- Custom output shape, additional fields, or a private build: muhamed.didovic@gmail.com
- Need other DACH property platforms (Immowelt, Immonet, Immobilien.de, Wohnungsbörse, Comparis, Homegate, willhaben.at)? Drop an email — most are already in the portfolio.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
🔎 Explore more scrapers
If this ImmoScout24 scraper was useful, see other real-estate scrapers at memo23's Apify profile — Immowelt (DE), Immonet (DE), Immobiliare (IT), Immoweb (BE), LoopNet US + UK, Rightmove UK, and more.
