# Changelog of PAP.fr Scraper 🇫🇷 Téléphone Propriétaire · Particulier FSBO (`tagadanar/french-real-estate-pap`) Actor

- **URL**: https://apify.com/tagadanar/french-real-estate-pap/changelog.md
- **Full Actor documentation**: https://apify.com/tagadanar/french-real-estate-pap.md

## Changelog

### 2026-09-23

- Fixed: a search URL whose location code PAP has retired is redirected by PAP
  to its nationwide listing, and it used to be scraped (and charged) as if it
  were your search. Every search page is now checked against the address it
  actually landed on. Such a search is skipped and the run status tells you to
  rebuild it on pap.fr. Pages past the last real one (PAP sends them back to
  page 1) now end the search too.
- The run's own status message is no longer occasionally replaced by the
  crawler's generic "Finished! Total N requests" line.

### 2026-09-14

- Platform usage is now included in the price: $1.00 per 1,000 listings,
  $3.00 per 1,000 listings with owner contact found, $0.001 per run (in
  effect since September 8). There is no separate platform usage bill any
  more.

### 2026-08-29

- Fixed: a short run timeout (180 s or less) reserved the whole budget for
  the finishing phase, so the run stopped immediately and returned nothing.
  Scraping now always keeps at least half of whatever time the run has.
- The run now watches its own clock. A deep search used to be killed by the
  platform timeout mid-page, losing every listing that had not been pushed yet
  — worst with owner-phone scraping on, where a listing only ships once its
  detail page comes back. The actor now stops taking on new pages while there
  is still time to finish and push what it has, and ends **successfully** with
  "Stopped at the run time limit: N rows delivered, raise the run timeout or
  lower maxResults."
- Page fetches are bounded by the time actually left: past the deadline a
  queued page is dropped without being fetched at all, and its retry ladder is
  cancelled rather than rotating proxy sessions into the timeout.
- **New input: Max result pages per search URL** (`maxPagesPerUrl`, default 20).
  It was always there in the code — the single biggest control over how long a
  run takes — but you could not see or set it.
- Honest limits in the input form: **Max listings** now tops out at 4,000
  instead of advertising 50,000 that no run could reach, **PAP search URLs**
  accepts up to 20 per run, and **Keywords** up to 50.
- Every run now ends with a status message. A run that was challenged by PAP,
  cut short by the clock, or emptied by your own filters says which — instead
  of reporting "no listings matched".

### 2026-08-19

- `energyClass` (DPE) is now also read from the listing's own page when detail
  scraping is on (`.energy-indice` active letter, validated A–G; GES is not
  confused with it). Search cards often omit the DPE tag, so this was the
  all-null column the 2026-08-09 note documented.
- `contactName` is removed from the output. PAP structurally never displays an
  owner name anywhere (detail page, JSON-LD, contact box — verified against a
  real page), so the column could only ever be null; the old selector union
  matched breadcrumbs that the guard regex then rightly rejected.

### 2026-08-09

- Store copy refresh (not yet pushed): title and card description now carry the
  `PAP.fr` exact-match token plus the English FSBO / owner-direct / private-seller
  wording the store search had no way to match before.
- README leads with the measured numbers behind the claims (83/83 runs succeeded
  over 30 days; owner phone on 17/20 and street address on 20/20 listings in the
  2026-08-02 probe) instead of unbacked adjectives.
- Honesty fix: the DPE / `energyClass` claim is removed from the headline copy
  and documented as a known limitation — it came back `null` on every row of the
  last measured run, as did `contactName`.

### 2026-07-12

- Invalid input no longer fails the run. The run now finishes cleanly with a clear explanation in its status message, so a typo or an empty list is easy to spot and fix.
- List inputs now accept datasets piped straight from another scraper: entries
  that are objects are read through their usual key names (url/link,
  query/keyword/title, name/company and similar) instead of being rejected.

### 2026-07-11

- Billing: on paid runs every row is billed before it is written, and a run
  now stops visibly if billing fails instead of continuing unbilled.

### 2026-07-09

- Input is now tolerant of common shapes that previously failed the run: a bare
  string / bare object / delimited string for searchUrls is coerced into a list
  instead of erroring. Empty input still errors.

### 2026-07-06

- Simplified input: pagination depth is now handled automatically (technical field removed).

### 2026-07-04

- Detail scraping option: owner PHONE NUMBER and full street address per listing.
- Published on Apify Store.

### 2026-07-03

- Initial release.
- Owner-direct (particulier) listings from PAP.fr — no agencies.
- Price, surface, rooms, €/m², DPE and photos for every ad; sales and rentals, all of France.
