Bien'ici Property Listings - France Rent and Sale avatar

Bien'ici Property Listings - France Rent and Sale

Pricing

from $1.40 / 1,000 listing scrapeds

Go to Apify Store
Bien'ici Property Listings - France Rent and Sale

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

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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 (-120965 is 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, or zone:-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

FieldTypeDefaultWhat it does
locationsarrayLyonCity, arrondissement, 5-digit postal code or zone id, one per line. Required.
transactionstringrentrent (location) or buy (vente).
propertyTypesarrayflat, houseAny of flat, house, loft, parking, terrain, shop, office, premises, building, townhouse.
minPrice, maxPriceinteger-EUR: per month when renting, total when buying. Ads with no price are dropped when a bound is set.
sortstringnewestnewest, updated, price_asc, price_desc.
maxItemsinteger100Most ads per location. Each ad is billed, so this is a spending cap.
proxyConfigurationproxyApify datacenterMeasured 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 URL
search_location, resolved_place what you typed, and the place Bien'ici matched
ad_type, transaction_type, property_type, property_subtype
title, description
price, price_max, price_per_m2, charges, price_decreased EUR (charges: monthly, rentals)
surface_area_m2, surface_area_max_m2 m2
rooms, bedrooms, bathrooms, floor, year_of_construction
new_property, is_furnished, has_elevator, has_terrace, has_pool
energy_class, ghg_class, available_date
city, postal_code, district
latitude, longitude, location_type, location_radius_m
published_at, modified_at ISO-8601 UTC
account_type, agency_name, reference
photo_count, photo_urls

Dataset views: Listings and Energy, location and agency.

Null means "not given", never zero

  • price is 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_at is null on about 30% of ads. Bien'ici stores 1970-01-01 for 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_at is nearly always present, and sort = updated orders by it. Note that an ad with no publication date can still be brand new, so a new-listing alert should key on id (what you have not seen before) rather than only on published_at.
  • rooms is null when Bien'ici sends 0. bedrooms keeps a 0: a studio has none.
  • Programmes (new builds) are one ad for many units: price and surface_area_m2 hold the lowest value and price_max and surface_area_max_m2 the highest. On every other ad the *_max fields are null.
  • Coordinates are blurred by Bien'ici, not the address. location_type says how (disk around the property, or the whole cityOrArrondissement) and location_radius_m the size of the disk.
  • energy_class, year_of_construction, floor, agency_name, charges and 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.