Bien'ici Property Listings - France Rent and Sale
Pricing
from $1.40 / 1,000 listing scrapeds
Bien'ici Property Listings - France Rent and Sale
French property ads from Bien'ici, for sale or to rent, by city name or postal code: price, surface, rooms, energy label, agency, photos and publication dates. Newest first, so a daily run is a new-listing alert.
Pricing
from $1.40 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Bien'ici Property Listings Scraper - France, Rent and Sale
French property ads from Bien'ici, one flat, typed dataset row per ad: price, surface, rooms, bedrooms, energy and greenhouse-gas labels, floor, year built, district, agency, photos and the publication and update dates. For rent or for sale, by city name, postal code or Bien'ici zone id, newest first - so a daily run is a new-listing alert.
What you are paying for, honestly
The data comes from the JSON endpoint behind bienici.com's own map and search
(/realEstateAds.json). It needs no login or API key, and anyone who finds it
can read the same JSON. What this actor adds:
- You type a place, not an id. Bien'ici filters on internal zone ids
(
-120965is Lyon). This actor resolves a city name (Lyon,Saint-Etienne), an arrondissement (Lyon 3e) or a postal code (69003) with Bien'ici's own place search and tells you in the log which place each line became. If you already hold a zone id, paste it (-7444, orzone:-7444) and no lookup is made. - One row per ad, flat. Prices that are
[min, max]lists on new-build programmes, blurred coordinates in a nested object, photos as objects: here they are named columns and a list of photo URLs. - Checked input. The API does not validate what it is sent: an unknown property type or zone returns zero ads, a mistyped transaction type is silently dropped, and a search with no zone returns every ad in France. This actor refuses all of those before a request, so a typo is an error message and not an empty or enormous run.
- Several places in one run, on a schedule. Run a list of cities daily and send the dataset to Sheets, a webhook, S3 or a warehouse. An ad that matches two of your places is returned and charged once.
- The refusal handling. A refused (403/429/5xx) request, a timeout, or a 200 that is not the data is retried from a fresh proxy address.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
locations | array | Lyon | City, arrondissement, 5-digit postal code or zone id, one per line. Required. |
transaction | string | rent | rent (location) or buy (vente). |
propertyTypes | array | flat, house | Any of flat, house, loft, parking, terrain, shop, office, premises, building, townhouse. |
minPrice, maxPrice | integer | - | EUR: per month when renting, total when buying. Ads with no price are dropped when a bound is set. |
sort | string | newest | newest, updated, price_asc, price_desc. |
maxItems | integer | 100 | Most ads per location. Each ad is billed, so this is a spending cap. |
proxyConfiguration | proxy | Apify datacenter | Measured 2026-10-09: the API answered 200 from the Apify platform on datacenter and residential exits. |
New-build programmes are returned under flat (a programme is one ad for many
units; see the price range fields below). buy also returns life-annuity sales
(viager, ad_type = lifeAnnuitySale) and, for commercial property types, lease
transfers and business take-overs; filter on ad_type if you want plain sales.
The 2,500-ad window
Bien'ici serves at most the first 2,500 matches of any one search: asking past
that is refused by the API. For a bigger market (a flat search in Paris has
thousands of ads) the run stops at 2,500 and the log says how many more exist.
Split the market with minPrice/maxPrice bands or by property type to read all
of it; ads are de-duplicated across the run, so overlapping bands cost nothing extra.
Output
One row per ad. The same ad found from two of your locations is one row.
id, url Bien'ici ad id and the ad page URLsearch_location, resolved_place what you typed, and the place Bien'ici matchedad_type, transaction_type, property_type, property_subtypetitle, descriptionprice, price_max, price_per_m2, charges, price_decreased EUR (charges: monthly, rentals)surface_area_m2, surface_area_max_m2 m2rooms, bedrooms, bathrooms, floor, year_of_constructionnew_property, is_furnished, has_elevator, has_terrace, has_poolenergy_class, ghg_class, available_datecity, postal_code, districtlatitude, longitude, location_type, location_radius_mpublished_at, modified_at ISO-8601 UTCaccount_type, agency_name, referencephoto_count, photo_urls
Dataset views: Listings and Energy, location and agency.
Null means "not given", never zero
priceis null when the ad has none (a commercial lease on request, an unpriced building). It is never 0. Money can carry cents (424.77), so prices are numbers with decimals.published_atis null on about 30% of ads. Bien'ici stores1970-01-01for ads without a recorded first-publication date (measured: 736 of 2,419 ads, 2026-10-09). That is a gap, not a date, so it is null here;modified_atis nearly always present, andsort = updatedorders by it. Note that an ad with no publication date can still be brand new, so a new-listing alert should key onid(what you have not seen before) rather than only onpublished_at.roomsis null when Bien'ici sends 0.bedroomskeeps a 0: a studio has none.- Programmes (new builds) are one ad for many units:
priceandsurface_area_m2hold the lowest value andprice_maxandsurface_area_max_m2the highest. On every other ad the*_maxfields are null. - Coordinates are blurred by Bien'ici, not the address.
location_typesays how (diskaround the property, or the wholecityOrArrondissement) andlocation_radius_mthe size of the disk. energy_class,year_of_construction,floor,agency_name,chargesand the rest are null whenever the advertiser did not fill them in, which is common (more than a third of ads have no energy label: 907 of 2,419 measured).- A place Bien'ici does not know, or a search with no ads, returns no rows, costs only the actor start fee and is named in the run log.
Pricing
Pay per event: a small actor start fee plus one listing scraped event per
row. Set maxItems to cap spend.
Limits
- France only, as far as Bien'ici covers it. Nothing is geocoded here.
- A snapshot: Bien'ici's search index lags the site by minutes, and an ad can be withdrawn between two runs.
- Photos and agency names are what the advertiser provided. Phone numbers and contact details are not part of the search data and are not returned.
- Not affiliated with Bien'ici.