
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape pap.fr real estate listings for sale and rent: price, surface, rooms, energy class, owner phone number, coordinates, photos and full description. Use pap.fr search URLs or a location with filters. No login needed.
Get every listing from pap.fr, the French owner-to-owner property site (De Particulier à Particulier), as clean data: price, m², rooms, bedrooms, DPE energy class, the owner's phone number, GPS coordinates, photos and the full description. Paste any pap.fr search URL or just type a city with a few filters. No login, no account, results in seconds, for $0.90 per 1,000 listings.
Lyon, 33000 or Bretagne) with the filters you want.| Field | What it does |
|---|---|
startUrls | pap.fr search URLs, listing URLs or listing ids (for example 464700536) |
maxItems | Maximum listings for the whole run (0 = no limit) |
locations | Cities, postal codes, departments or regions to search instead of a URL |
transaction | sale or rent (with locations) |
propertyTypes | Apartment, house, land, parking, building and more (with locations) |
minPrice / maxPrice, minRooms / maxRooms, minBedrooms, minSurface / maxSurface, minLandSurface / maxLandSurface, features | Filters for a location search |
scrapeDetails | Open every listing for phone, description, energy classes and coordinates (on by default). Off = faster, search-page data only |
includeNearby | Also keep the listings pap.fr suggests from nearby areas |
{
"startUrls": [{ "url": "https://www.pap.fr/annonce/vente-appartements-paris-75-g439" }],
"maxItems": 20
}
Search by location with filters:
{
"locations": ["Lyon"],
"transaction": "rent",
"propertyTypes": ["appartement"],
"maxPrice": 1200,
"minRooms": 2,
"maxItems": 50
}
One row per listing. The main fields:
| Field | Description |
|---|---|
id, reference, url | pap.fr listing id, reference and link |
transaction, propertyType, title | Sale or rent, property type, listing title |
price, pricePerSqm, priceWithNotaryFees | Asking price or monthly rent in EUR, € per m², price with notary fees |
rooms, bedrooms, surface, landSurface | Rooms, bedrooms, living area and land in m² |
city, postalCode, latitude, longitude, transports | Where it is, with nearby stations |
energyClass, ghgClass (+ descriptions) | DPE energy and greenhouse-gas classes A to G |
phones, contactEmails, contactText, ownerRefusesSolicitation | How to reach the owner |
monthlyCharges, deposit, chargesIncluded, furnished, rentCapReference | Rent details |
photos, photoCount, virtualTourUrl, videoUrl | Media |
publishedDate, badges, newPrice, exclusiveToPap | Listing status |
description | Full text of the listing |
Example (from a real run, contact details replaced with fictional ones, description and photos shortened):
{
"id": 465800223,
"reference": "G58/0223",
"url": "https://www.pap.fr/annonces/appartement-lyon-8e-69008-r465800223",
"transaction": "rent",
"propertyType": "Appartement",
"title": "Location meublée appartement 4 pièces 107 m² Lyon 8E (69008)",
"price": 1645,
"priceText": "1.645 €",
"currency": "EUR",
"rooms": 4,
"bedrooms": 3,
"surface": 107,
"location": "Lyon 8e (69008)",
"city": "Lyon 8e",
"postalCode": "69008",
"latitude": 45.745748,
"longitude": 4.863794,
"description": "Très bel appartement meublé situé dans le quartier de Monplaisir…",
"energyClass": "D",
"energyDescription": "Logement avec une consommation annuelle d'énergie comprise entre 181 et 250 kWh/m²/an.",
"ghgClass": "D",
"phones": ["06 12 34 56 78"],
"contactEmails": [],
"ownerRefusesSolicitation": true,
"photos": ["https://cdn.pap.fr/photos/pap/ed/1e/ed1ea720f9a85e657835358a74ff5d9e/e-p1.jpg"],
"photoCount": 12,
"furnished": true,
"chargesIncluded": true,
"monthlyCharges": 45,
"deposit": 1600,
"rentCapReference": 1776.2,
"publishedDate": "2026-10-21",
"tags": ["4 pièces", "3 chambres", "107 m²"],
"isNearby": false,
"searchUrl": "https://www.pap.fr/annonce/locations-appartement-lyon-69-g43590",
"scrapedAt": "2026-10-21T14:21:43.513Z"
}
The Contacts view of the dataset shows only the title, price, place and owner contact columns.
You pay $0.90 per 1,000 listings ($0.0009 per listing saved), with or without full details. Platform usage (compute and the French residential proxy) is billed on top and is small: in our test runs it came to about $0.05 per 1,000 listings, so 1,000 listings ≈ $0.95 in total. You never pay for listings that are not saved, and the run stops cleanly at your maximum charge.
Is it legal to scrape pap.fr? The actor reads only public pages that anyone can open without an account. Owner phone numbers and e-mails are personal data: use them in line with GDPR and the owner's "refuses commercial solicitation" flag, which is included in every row.
Do I need a pap.fr account or a proxy? No. No login is needed. pap.fr only lets French residential connections through, so the run uses the platform's French residential proxy by default; you don't need to set anything up.
How many listings can I get?
Everything a search has. pap.fr itself only pages through about 300 listings per search; bigger searches are split into price ranges automatically, so you still get all of them. Set maxItems to 0 for no limit.
Why is a field empty? Owners fill in what they want: some listings have no phone (contact by e-mail form only), no DPE yet or no bedrooms count. Rent fields are empty on sales and notary-fee fields on rentals. With Full listing details off, only the search-page fields are filled.
What are "nearby" listings?
When a search has few exact matches, pap.fr suggests listings from neighbouring areas ("à 3 km de …"). They are skipped unless you turn on Include nearby listings; each row then has isNearby and distanceKm.
Can I schedule it or use the API? Yes. Save your input as a task, schedule it daily, and send results to a webhook, Google Sheets or your own code through the API.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalpap.fr search or listing URLs
Search result URLs from pap.fr (run your search on pap.fr with any filters, then copy the address bar), or listing URLs like https://www.pap.fr/annonces/appartement-paris-16e-75016-r464700536. Listing ids (e.g. 464700536) work too.
maxItemsintegerOptionaldefault 20Maximum listings
Stop after this many listings in total for the run. 0 means no limit (every listing the searches return).
Optional. Build a search from a location and filters instead of pasting a pap.fr URL.
locationsarrayOptionalLocations
Search by location instead of a URL: French cities, postal codes, departments or regions, e.g. 'Lyon', '33000', 'Bretagne', 'Paris 11e'. Several locations are searched together. Uses the transaction, property type and filter fields below.
transactionenumOptionaldefault "sale"Transaction
Listings for sale or for rent. Used with 'Locations'.
propertyTypesarrayOptionalProperty types
Leave empty for all property types. Used with 'Locations'.
Used with 'Locations'. With a pap.fr URL, set the filters on pap.fr before copying the URL.
minPriceintegerOptionalMinimum price (€)
Sale price, or monthly rent for rentals.
maxPriceintegerOptionalMaximum price (€)
Sale price, or monthly rent for rentals.
minRoomsintegerOptionalMinimum rooms
Rooms (pièces). 1 = studio; 6 means 6 or more.
maxRoomsintegerOptionalMaximum rooms
Rooms (pièces). 6 means 6 or more.
minBedroomsintegerOptionalMinimum bedrooms
Bedrooms (chambres).
minSurfaceintegerOptionalMinimum surface (m²)
Living area in m².
maxSurfaceintegerOptionalMaximum surface (m²)
Living area in m².
minLandSurfaceintegerOptionalMinimum land / garden (m²)
Plot or garden size in m².
maxLandSurfaceintegerOptionalMaximum land / garden (m²)
Plot or garden size in m².
featuresarrayOptionalMust have
Only listings with all of these features.
scrapeDetailsbooleanOptionaldefault trueFull listing details
Open every listing for the full description, owner phone number, energy and GHG classes, coordinates, transport, all photos and rent details. Turn off for a faster run with only what the search page shows (price, location, rooms, surface, short description, photos).
includeNearbybooleanOptionaldefault falseInclude nearby listings
When a search has few or no exact matches, pap.fr suggests listings from nearby areas ('à 3km de ...'). Turn on to include them; each row then has isNearby and distanceKm.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
pap.fr only lets French residential connections through, so the default is the residential proxy in France.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | number | pap.fr listing id |
| reference | string | null | pap.fr reference, e.g. G47/0536 |
| url | string | null | Listing URL |
| transaction | string | null | sale or rent |
| propertyType | string | null | |
| title | string | null | |
| price | number | null | Sale price or monthly rent in EUR |
| priceText | string | null | |
| currency | string | null | |
| pricePerSqm | number | null | |
| rooms | number | null | |
| bedrooms | number | null | |
| surface | number | null | Living area in m² |
| landSurface | number | null | Land or garden in m² |
| location | string | null | |
| city | string | null | |
| postalCode | string | null | |
| latitude | number | null | |
| longitude | number | null | |
| description | string | null | |
| energyClass | string | null | |
| ghgClass | string | null | |
| phones | array | null | |
| photos | array | null | |
| publishedDate | string | null | |
| scrapedAt | string | null | |
| geoId | number | null | pap.fr location id of the area |
| contactText | string | null | Owner's contact instructions shown on the listing (may include an e-mail) |
| contactEmails | array | null | E-mail addresses the owner published in the listing |
| acceptsEmail | boolean | null | The listing has pap.fr's contact form |
| ownerRefusesSolicitation | boolean | null | Owner refuses commercial solicitation |
| transports | array | null | Nearby stations with line ids |
| virtualTourUrl | string | null | |
| videoUrl | string | null | |
| isNearby | boolean | null | Suggested by pap.fr from a nearby area |
| distanceKm | number | null | |
| badges | array | null | |
| thumbnail | string | null | |
| searchUrl | string | null | The search this listing came from |
| detailsScraped | boolean | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Listing | One pap.fr listing saved to the dataset | $0.0009 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/pap-scraper').call({
"startUrls": [
{
"url": "https://www.pap.fr/annonce/vente-appartements-paris-75-g439"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
],
"scrapelyProxyCountry": "FR"
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/pap-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/pap-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
A pap.fr search URL with full details: rent, charges, deposit, energy class and owner phone
Search by city with price, room and property-type filters, no URL needed
Search-page data only (price, place, rooms, m², photos) for a fast, light run
Keeps the listings pap.fr suggests from neighbouring areas, with their distance
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.