Bien'ici Scraper — French Property Listings & Prices
Pricing
from $2.00 / 1,000 results
Bien'ici Scraper — French Property Listings & Prices
Scrape French property listings from Bien'ici: sale & rental prices, price per m², surface, rooms, DPE energy rating, price-drop signals, district & photos. Filter by city, price, area and type across France. Export to JSON, CSV or Excel for market research & valuation.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
Bien'ici Scraper — French Property Listings, Prices & DPE 🇫🇷🏠
Turn Bien'ici — one of France's largest real-estate portals — into clean, structured data. This Bien'ici scraper extracts sale and rental property listings with prices, price per m², surface area, rooms, DPE energy ratings, condominium fees, price-drop signals, agency name, location and photos. No login, no coding — just type a city, set your filters, and scrape Bien'ici at scale.
Export every result to JSON, CSV, Excel, or API.
Built for real-estate analysts, property investors, PropTech teams, estate agencies, valuation/CMA services, data journalists and market researchers who need reliable Bien'ici data without copy-pasting pages by hand.
🔎 Why scrape Bien'ici?
Bien'ici is a major French property marketplace listing hundreds of thousands of apartments, houses, land, offices and commercial premises for sale and rent across the whole of France. Each listing carries a rich set of attributes — price, €/m², surface, number of rooms, the official DPE (energy) and GES (greenhouse-gas) ratings, condominium charges, build year and the listing agency — making it one of the best sources of structured French housing-market data.
Collecting that data by hand is slow and error-prone: the site paginates endlessly, hides fields behind map views, and changes every day. A Bien'ici API-style feed does not exist publicly, so teams resort to manual research. This Bien'ici scraper automates the entire job — resolving your locations, paginating the catalogue, de-duplicating results and returning a tidy dataset you can load straight into a spreadsheet, database or BI tool.
Common reasons people scrape Bien'ici:
- 💶 Benchmark prices and €/m² by city, district, property type and transaction.
- 📉 Spot price reductions and motivated sellers before competitors do.
- 🏘️ Monitor the French housing market — supply, pricing and new listings over time.
- 🧮 Build valuation / CMA comparable-sales datasets for a target area.
- ⚡ Study DPE / GES energy distributions across the French housing stock.
- 🏢 Feed property portals and aggregators with fresh listing data.
- 📊 Power investment research, rental-yield models and PropTech products.
✨ What this Bien'ici scraper does
- 🏙️ Nationwide coverage — search any city, arrondissement/district, department or region in France by name (resolved automatically), or scan the whole country.
- 🔁 Automatic pagination — walks the full result set and returns hundreds to thousands of de-duplicated listings per run (0 duplicates), controlled by
maxItems. - 💶 Full pricing intelligence —
price,pricePerSquareMeter,priceWithoutFees,feesChargedTo,annualCondominiumFees, monthly rentalcharges, depositguaranteeAmount, and apriceHasDecreasedprice-drop flag. - 📐 Rich property detail —
surfaceArea,landSurfaceArea, rooms, bedrooms, bathrooms, shower rooms, toilets,floor,floorQuantity,yearOfConstruction,isInCondominium,condominiumPartsQuantity,heatingandopticalFiberStatus. - ⚡ DPE & GES energy ratings —
energyClassification+energyValue,greenhouseGazClassification+greenhouseGazValue, and theenergyPerformanceDiagnosticDate. - 🛋️ Amenities — a compact
featureslist (garden, pool, terrace, balcony, cellar, alarm, elevator, air-conditioning, caretaker, fireplace, intercom, door-code, charging stations) plusisFurnishedfor rentals. - 📍 Precise location —
city,postalCode,district/ neighborhood name,inseeCodeand approximate mapcoordinates. - 🏢 Seller signal —
accountType(agency vs. private), the agencyaccountName,createdByPro, plusisBienIciExclusive/isExclusiveSaleMandatemandate flags. - 🖼️ Media & dates —
photosURLs,photosCount,publicationDateandmodificationDate. - 🎯 Powerful filters — transaction type, property types, min/max price, min/max area, min rooms, sort order, and an only-price-reductions mode.
- ⚙️ Export anywhere — JSON, CSV, Excel, HTML, RSS or the Apify API; runs on demand or on a schedule.
- 🚀 Fast & reliable — pure JSON extraction with retry/back-off and optional proxy rotation.
🎯 Use cases
- Real-estate analysts — track €/m² and inventory trends across French cities and departments.
- Property investors & deal-hunters — surface price drops and undervalued listings automatically.
- Estate agencies — monitor competing listings, pricing and exclusive mandates in your market.
- PropTech & aggregators — enrich or backfill your own catalogue with Bien'ici data.
- Valuation / CMA providers — assemble comparable datasets for appraisals.
- Mortgage & insurance — model risk using DPE/GES energy ratings and condominium fees.
- Data journalists & researchers — quantify affordability, energy performance and supply.
- Rental platforms — collect rents, monthly charges and furnished status for yield analysis.
📥 Input
Configure a run with a few simple fields. Every parameter is optional except that you usually want at least one location.
| Field | Type | Description |
|---|---|---|
searchLocations | array of strings | Cities, districts, departments or regions, e.g. "Paris", "Lyon 6", "Bordeaux", "Hauts-de-Seine". Each is resolved automatically. Empty = all of France. |
filterType | string | buy (for sale) or rent (for rent). |
propertyTypes | array of strings | flat, house, loft, townhouse, castle, building, parking, terrain, office, shop, premises, others. Defaults to flats & houses. |
minPrice / maxPrice | integer | Price range (€). For rentals this is the monthly rent. |
minArea / maxArea | integer | Living-area range in m². |
minRooms | integer | Minimum number of rooms. |
sortBy | string | relevance, newest, price-asc, price-desc. |
onlyPriceDrops | boolean | Keep only listings whose price recently dropped. |
startUrls | array | Optional Bien'ici search-page URLs; any location encoded in the URL is merged with the filters. |
maxItems | integer | Maximum number of listings to collect (default 200). |
proxyConfiguration | object | Proxy settings. Optional for small runs; recommended for large ones. |
Example input
{"searchLocations": ["Paris"],"filterType": "buy","propertyTypes": ["flat"],"minPrice": 300000,"maxPrice": 600000,"minArea": 50,"sortBy": "newest","maxItems": 1000}
Find price reductions in a whole department
{"searchLocations": ["Hauts-de-Seine"],"filterType": "buy","onlyPriceDrops": true,"maxItems": 500}
Rentals across several cities
{"searchLocations": ["Lyon", "Villeurbanne"],"filterType": "rent","propertyTypes": ["flat", "house"],"maxPrice": 1500,"maxItems": 800}
📤 Output
Each listing is one clean JSON object. Empty / false fields are omitted automatically, so a small studio does not ship 20 null room fields. A single run returns a rich record — our latest verification observed 52 distinct fields across a 500-listing Paris sample. Below is a real for-sale item from that run.
{"id": "ag754691-538488038","url": "https://www.bienici.com/annonce/achat/paris-20e-75020/flat/ag754691-538488038","reference": "PR2-1901_b","adType": "buy","propertyType": "flat","title": "Cave bas Ménilmontant","description": "Paris XXème, rue de Ménilmontant dans un bel immeuble rénové…","price": 23000,"pricePerSquareMeter": 1438,"priceWithoutFees": 23000,"feesChargedTo": "seller","surfaceArea": 16,"roomsQuantity": 1,"energyClassification": "NS","greenhouseGazClassification": "NS","features": ["chargingStations"],"city": "Paris 20e","postalCode": "75020","district": "Paris 20e Arrondissement - Ménilmontant - Amandiers","inseeCode": "75120","coordinates": { "lat": 48.86709, "lon": 2.38554, "approximate": true },"addressKnown": true,"accountType": "agency","accountName": "PRIMAS immobilier","createdByPro": true,"isExclusiveSaleMandate": true,"photos": ["https://file.bienici.com/photo/ag754691-538488038_photos_1.jpg"],"photosCount": 1,"modificationDate": "2026-10-29T01:04:55.695Z"}
Richer listings additionally carry annualCondominiumFees, condominiumPartsQuantity, isInCondominium, floor, floorQuantity, yearOfConstruction, heating, opticalFiberStatus, energyValue, greenhouseGazValue, energyPerformanceDiagnosticDate, bedroomsQuantity, bathroomsQuantity, publicationDate and more — whenever Bien'ici publishes them. For a rental (filterType: "rent") you also get charges (monthly charges), guaranteeAmount (deposit) and isFurnished. Note the energy value NS means non soumis (DPE not applicable), and adType can be lifeAnnuitySale (viager) as well as buy/rent.
Field reference (main fields)
| Field | Description |
|---|---|
id, url, reference | Listing ID, canonical Bien'ici URL and the agency's own reference |
adType, propertyType | buy / rent, and flat / house / land / parking / office … |
title | Listing title (description is present when the source provides it) |
price, priceMin, priceMax | Price; a [min, max] range for new-build programmes |
pricePerSquareMeter | Price per m² (from the source, or derived from price ÷ area) |
priceWithoutFees, feesChargedTo | Net price and who pays the agency fee — present for most sales |
annualCondominiumFees | Annual condominium charges (€) — present for most sale condos |
charges, guaranteeAmount, isFurnished | Monthly charges, deposit and furnished flag — rental listings |
priceHasDecreased | true if the price recently dropped |
surfaceArea, landSurfaceArea | Living and land area (m²) |
roomsQuantity, bedroomsQuantity, bathroomsQuantity, showerRoomsQuantity, toiletQuantity | Room counts (present when available) |
terracesQuantity, balconyQuantity, parkingPlacesQuantity | Extra-space counts |
floor, floorQuantity, yearOfConstruction | Floor, building floors and build year |
isInCondominium, condominiumPartsQuantity | Condominium info |
heating, opticalFiberStatus | Heating type and fiber-internet status |
energyClassification, energyValue | DPE energy class and value |
greenhouseGazClassification, greenhouseGazValue | GES emissions class and value |
energyPerformanceDiagnosticDate | Date of the energy diagnostic |
features | Amenities present: garden, pool, terrace, balcony, cellar, alarm, elevator, airConditioning, caretaker, fireplace, intercom, doorCode, chargingStations |
city, postalCode, district, inseeCode | Location / administrative codes |
coordinates | Approximate map position (lat, lon, approximate: true) |
accountType, accountName, createdByPro | Agency vs. private, agency display name, pro flag |
isBienIciExclusive, isExclusiveSaleMandate, newProperty | Listing / mandate flags |
photos, photosCount | Image URLs and count |
publicationDate, modificationDate | Timestamps |
Fields marked present when available are data-dependent — Bien'ici does not publish every attribute for every listing, so the actor outputs each field only when the source provides it. In our fresh 500-listing Paris sample the identity fields (id, url, adType, propertyType, price, city, postalCode, district, coordinates, energyClassification) were populated at 100%, with surfaceArea at 98.8%, pricePerSquareMeter at 94.4% and title at 91.8%. Genuinely optional attributes vary with the listing: annualCondominiumFees and condominiumPartsQuantity appear on sale condos (~66%), charges/isFurnished on rentals, bathroomsQuantity only when stated (~17%), priceHasDecreased on reduced listings (~10%), and landSurfaceArea mostly on houses and land rather than flats.
🔁 Pagination & scale
The actor calls Bien'ici's listing endpoint in batches of up to 500 ads per request, advancing the from offset after each page and de-duplicating by listing ID as it goes. It keeps paging until it has collected your maxItems, reaches the end of the matching results (total), or hits the portal's maximum reachable offset. A single query can therefore return hundreds to thousands of listings in one run — in our latest verification it pulled 500 unique listings with 0 duplicates in about 33 seconds. Set maxItems to whatever volume you need. Searches that return more matches than one city can hold are easy to shard by district, department or price band.
⚙️ How to use
- Open the actor on the Apify Console.
- Enter one or more Locations (e.g.
Paris,Lyon 6,Bordeaux). - Choose the Transaction (for sale / for rent) and any property types.
- Add optional filters — price, area, rooms, or only price reductions — and set Maximum listings.
- Click Start, then download the dataset as JSON, CSV or Excel, or pull it via the Apify API.
- Automate it: run on a schedule, or integrate with Make, Zapier, Google Sheets or a webhook to keep a live feed of French property data.
Run via API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("haketa/bienici-scraper").call(run_input={"searchLocations": ["Marseille"],"filterType": "buy","propertyTypes": ["flat", "house"],"maxItems": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["city"], item.get("price"), "€", item.get("pricePerSquareMeter"), "€/m²")
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('haketa/bienici-scraper').call({searchLocations: ['Nice'],filterType: 'rent',maxItems: 400,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
💡 Tips
- Target by level — enter a region or department (
Île-de-France,Gironde) for the widest nets, or an arrondissement (Paris 15,Lyon 6) for precision. - Deal-hunting — combine
onlyPriceDrops: truewithsortBy: "newest"to catch fresh reductions first. - Benchmarking €/m² — pull flats for one city and group by
districtto map neighborhood price levels. - Rental yield — scrape
buyandrentfor the same area and comparepricePerSquareMeter,chargesand rents. - Keep it focused — the default
propertyTypes(flat + house) avoids flooding results with parking and cellars; add others explicitly when you want them. - Shard big markets — split very large cities by price band or district to blow past any single-query ceiling.
❓ FAQ
Is scraping Bien'ici legal? This Bien'ici scraper collects only publicly available listing information for legitimate uses such as market research, analytics and price benchmarking. You are responsible for using the data in line with applicable laws (including the GDPR) and the website's Terms of Service. It does not access private or personal accounts.
Do I need an account or login to scrape Bien'ici? No. There is no login and no coding required — set your filters and run.
How many listings can I collect and how fast?
As many as you need — set maxItems. The actor paginates 500 ads at a time and de-duplicates automatically, so a single run can return hundreds to thousands of listings. In testing it returned 500 unique listings in ~33 seconds with zero duplicates. Throughput depends on result size and proxy settings.
Do I need proxies?
Proxies are optional for small runs and recommended for large ones. The input includes a proxyConfiguration field; Apify Proxy is enabled by default.
Is there a Bien'ici API? Bien'ici does not offer a public data API. This actor is the practical alternative — it returns the same listing data as clean JSON / CSV / Excel or via the Apify API.
What export formats are supported? JSON, CSV, Excel, HTML and RSS, plus programmatic access through the Apify API. Data lives in the run's dataset until you delete it.
Can I get both sale and rental data?
Yes — set filterType to buy or rent. Run it twice (or on two schedules) to track both markets.
Can I filter by city, price, area or energy rating? You can filter by location, transaction, property type, price, area and rooms at input time, and sort by price or newest. DPE/GES energy ratings are returned on every listing (when published) so you can filter them downstream.
Are seller phone numbers included?
No — the source does not expose direct phone numbers in its listing data. You do get the seller type (agency vs. private), the agency display name (accountName) and the agency reference.
How fresh is the data?
Every run fetches live listings directly from Bien'ici, and each item carries publicationDate and modificationDate so you can track recency.
🔗 Related scrapers
Building a cross-market real-estate dataset? Pair this with other portal scrapers:
- Yad2 Scraper — Israel's leading classifieds & property portal.
- Zap Imóveis Scraper — Brazilian real-estate listings & prices.
- Boliga Scraper — Danish property sales, prices and history.
- Realtor.ca Scraper — Canadian MLS property listings.
- Domain.com.au Scraper — Australian real-estate listings.
- ImmobilienScout24 Scraper — German property listings & rents.
Ready to scrape Bien'ici? Set a city, choose sale or rent, and click Start to export French property listings, prices and DPE ratings to JSON, CSV, Excel or API. 🏠