Bien'ici Scraper — French Property Listings & Prices avatar

Bien'ici Scraper — French Property Listings & Prices

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Bien'ici Scraper — French Property Listings & Prices

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Categories

Security

Limited permissions

Share

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 rental charges, deposit guaranteeAmount, and a priceHasDecreased price-drop flag.
  • 📐 Rich property detail — surfaceArea, landSurfaceArea, rooms, bedrooms, bathrooms, shower rooms, toilets, floor, floorQuantity, yearOfConstruction, isInCondominium, condominiumPartsQuantity, heating and opticalFiberStatus.
  • ⚡ DPE & GES energy ratings — energyClassification + energyValue, greenhouseGazClassification + greenhouseGazValue, and the energyPerformanceDiagnosticDate.
  • 🛋️ Amenities — a compact features list (garden, pool, terrace, balcony, cellar, alarm, elevator, air-conditioning, caretaker, fireplace, intercom, door-code, charging stations) plus isFurnished for rentals.
  • 📍 Precise location — city, postalCode, district / neighborhood name, inseeCode and approximate map coordinates.
  • 🏢 Seller signal — accountType (agency vs. private), the agency accountName, createdByPro, plus isBienIciExclusive / isExclusiveSaleMandate mandate flags.
  • 🖼️ Media & dates — photos URLs, photosCount, publicationDate and modificationDate.
  • 🎯 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.

FieldTypeDescription
searchLocationsarray of stringsCities, districts, departments or regions, e.g. "Paris", "Lyon 6", "Bordeaux", "Hauts-de-Seine". Each is resolved automatically. Empty = all of France.
filterTypestringbuy (for sale) or rent (for rent).
propertyTypesarray of stringsflat, house, loft, townhouse, castle, building, parking, terrain, office, shop, premises, others. Defaults to flats & houses.
minPrice / maxPriceintegerPrice range (€). For rentals this is the monthly rent.
minArea / maxAreaintegerLiving-area range in m².
minRoomsintegerMinimum number of rooms.
sortBystringrelevance, newest, price-asc, price-desc.
onlyPriceDropsbooleanKeep only listings whose price recently dropped.
startUrlsarrayOptional Bien'ici search-page URLs; any location encoded in the URL is merged with the filters.
maxItemsintegerMaximum number of listings to collect (default 200).
proxyConfigurationobjectProxy 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)

FieldDescription
id, url, referenceListing ID, canonical Bien'ici URL and the agency's own reference
adType, propertyTypebuy / rent, and flat / house / land / parking / office …
titleListing title (description is present when the source provides it)
price, priceMin, priceMaxPrice; a [min, max] range for new-build programmes
pricePerSquareMeterPrice per m² (from the source, or derived from price ÷ area)
priceWithoutFees, feesChargedToNet price and who pays the agency fee — present for most sales
annualCondominiumFeesAnnual condominium charges (€) — present for most sale condos
charges, guaranteeAmount, isFurnishedMonthly charges, deposit and furnished flag — rental listings
priceHasDecreasedtrue if the price recently dropped
surfaceArea, landSurfaceAreaLiving and land area (m²)
roomsQuantity, bedroomsQuantity, bathroomsQuantity, showerRoomsQuantity, toiletQuantityRoom counts (present when available)
terracesQuantity, balconyQuantity, parkingPlacesQuantityExtra-space counts
floor, floorQuantity, yearOfConstructionFloor, building floors and build year
isInCondominium, condominiumPartsQuantityCondominium info
heating, opticalFiberStatusHeating type and fiber-internet status
energyClassification, energyValueDPE energy class and value
greenhouseGazClassification, greenhouseGazValueGES emissions class and value
energyPerformanceDiagnosticDateDate of the energy diagnostic
featuresAmenities present: garden, pool, terrace, balcony, cellar, alarm, elevator, airConditioning, caretaker, fireplace, intercom, doorCode, chargingStations
city, postalCode, district, inseeCodeLocation / administrative codes
coordinatesApproximate map position (lat, lon, approximate: true)
accountType, accountName, createdByProAgency vs. private, agency display name, pro flag
isBienIciExclusive, isExclusiveSaleMandate, newPropertyListing / mandate flags
photos, photosCountImage URLs and count
publicationDate, modificationDateTimestamps

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

  1. Open the actor on the Apify Console.
  2. Enter one or more Locations (e.g. Paris, Lyon 6, Bordeaux).
  3. Choose the Transaction (for sale / for rent) and any property types.
  4. Add optional filters — price, area, rooms, or only price reductions — and set Maximum listings.
  5. Click Start, then download the dataset as JSON, CSV or Excel, or pull it via the Apify API.
  6. 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 ApifyClient
client = 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: true with sortBy: "newest" to catch fresh reductions first.
  • Benchmarking €/m² — pull flats for one city and group by district to map neighborhood price levels.
  • Rental yield — scrape buy and rent for the same area and compare pricePerSquareMeter, charges and 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.


Building a cross-market real-estate dataset? Pair this with other portal scrapers:


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