SeLoger 🇫🇷 [$0.9💰] All-in-One — Search · Detail · Agencies avatar

SeLoger 🇫🇷 [$0.9💰] All-in-One — Search · Detail · Agencies

Pricing

from $0.90 / 1,000 results

Go to Apify Store
SeLoger 🇫🇷 [$0.9💰] All-in-One — Search · Detail · Agencies

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

4

Monthly active users

4 days ago

Last modified

Share

SeLoger.com All-in-One Scraper — Search, Properties & Agencies

How it works

How SeLoger Scraper 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:

InputRow(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}.htm1 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
  • MediaimageUrls (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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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-impersonate Chrome 131 TLS). First success wins.

Every property page is parsed via a mix of:

  • JSON-LD for the minimal RealEstateListing block (title + description) on detail pages, and the page-level AggregateOffer on listing pages (total count, price band, currency).
  • data-testid anchors for the rich React-rendered data: cdp-hardfacts-keyfacts, cdp-location-address, cdp-energy, cdp-price, cdp-co-ownership, cdp-classified-keys, plus the aviv.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

FieldTypeRequiredNotes
startUrlsstring[]yesAny mix of listing / detail / agency URLs. Auto-classified. The /list.htm?… query-style URL is rejected.
enrichAgencybooleannoWhen 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.
maxItemsintegernoHard cap on property rows. Agency-only rows do not count. Default 1000. Free-tier users are capped at 100.
maxConcurrencyintegernoMax parallel property fetches. Default 10.
minConcurrencyintegernoDefault 1.
maxRequestRetriesintegernoPer-URL retry budget. The 3-stack race kicks in after the first 3 impit-only attempts. Default 5.
useInternalHandlerbooleannotrue (default) → impit-only internal pipeline. false → CheerioCrawler with ImpitHttpClient.
proxyobjectnoApify 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-energy block — 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

TeamWhat they build
Real-estate analystsPrice-per-m² dashboards by arrondissement, neighborhood, DPE rating
Investors / property fundsDaily new-listing feeds for buy-to-let or value-add acquisitions
PropTech startupsComparable-sales engines fed by a clean French listing dataset
Sustainable-finance teamsDPE / GES distributions across Paris / Lyon / Marseille — input to green-mortgage products
Mortgage brokersLead pipelines from new high-end listings (monthlyMortgage + notaryFees already computed)
Agencies (competitive intel)What's listed where, by which competitor, at what price
Journalists / researchersLongitudinal 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.
  • imageUrls returns 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=N until a page returns zero property cards.
  • Listing-page JSON-LD is page-level metadata only. The RealEstateListing block on a search results page describes the search, not individual properties. Per-property data comes from the cards' data-testid anchors. (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 noindex directives 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

🛠 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.