Get Results
curl --request GET \
--url https://api.lobstr.io/v1/results \
--header 'Authorization: <authorization>'import requests
url = "https://api.lobstr.io/v1/results"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.lobstr.io/v1/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lobstr.io/v1/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lobstr.io/v1/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.lobstr.io/v1/results")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lobstr.io/v1/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"internal_id": "<string>",
"url": "<string>",
"title": "<string>",
"breadcrumb": "<string>",
"price": 123,
"currency": "<string>",
"ref": "<string>",
"publication_date": {},
"image_urls": "<string>",
"rooms": 123,
"bedrooms": 123,
"size": 123,
"neighborhood": "<string>",
"description": "<string>",
"phone": "<string>",
"energy": "<string>",
"ges": "<string>",
"lat": "<string>",
"lng": "<string>",
"price_per_sqm": 123,
"produit": "<string>",
"typebien": "<string>",
"typebien_label": "<string>",
"energy_description": "<string>",
"ges_description": "<string>",
"transports": "<string>",
"visite_virtuelle": "<string>",
"exclusive": true,
"has_email": true,
"prix_valide": true,
"affiche_demarchage_refuse": true,
"appel_video": true,
"video": "<string>"
}PAP Search Export
Get Results
Retrieve scraped data from PAP Search Export
GET
/
v1
/
results
Get Results
curl --request GET \
--url https://api.lobstr.io/v1/results \
--header 'Authorization: <authorization>'import requests
url = "https://api.lobstr.io/v1/results"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.lobstr.io/v1/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lobstr.io/v1/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lobstr.io/v1/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.lobstr.io/v1/results")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lobstr.io/v1/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"internal_id": "<string>",
"url": "<string>",
"title": "<string>",
"breadcrumb": "<string>",
"price": 123,
"currency": "<string>",
"ref": "<string>",
"publication_date": {},
"image_urls": "<string>",
"rooms": 123,
"bedrooms": 123,
"size": 123,
"neighborhood": "<string>",
"description": "<string>",
"phone": "<string>",
"energy": "<string>",
"ges": "<string>",
"lat": "<string>",
"lng": "<string>",
"price_per_sqm": 123,
"produit": "<string>",
"typebien": "<string>",
"typebien_label": "<string>",
"energy_description": "<string>",
"ges_description": "<string>",
"transports": "<string>",
"visite_virtuelle": "<string>",
"exclusive": true,
"has_email": true,
"prix_valide": true,
"affiche_demarchage_refuse": true,
"appel_video": true,
"video": "<string>"
}Retrieve scraped data from your PAP Search Export runs.
Headers
string
required
Your API authentication token. Value:
Token YOUR_API_KEYQuery Parameters
string
required
Hash of the squid to get results from
string
Hash of a specific run (optional)
integer
Page number (default: 1). Example:
1Result Fields
Each result object contains the following fields:string
Unique identifier for the listing on PAP (Particulier à Particulier). Example:
460201580string
Direct URL to the listing on PAP. Example:
https://www.pap.fr/annonces/maison-bourg-en-bresse-01000-r460201580string
Title of the property listing on PAP. Example:
Vente maison 122 m² Bourg-En-Bresse (01000)string
Breadcrumb navigation path indicating the listing’s category and location on PAP
integer
Listed price of the property
string
Currency of the listed price
string
PAP reference number for the listing. Example:
G02/1580datetime
Date the listing was published on PAP. Example:
2026-03-20string
List of property image URLs from the listing. Example:
https://cdn.pap.fr/photos/pap/84/e6/84e6846cf2588b1ddd8c4422e93eb447/8-p1.jpg, https://cdn.pap.fr/photos/pap/8e/96/8e96e04a6f71b9d765f776a622bfc7a8/8-p1.jpg, https://cdn.pap.fr/photos/pap/ac/b6/acb6e93116c4f857f08d4110ad95ca99/a-p1.jpg, https://cdn.pap.fr/photos/pap/36/59/36592cba805e27d997e3be34489a9133/3-p1.jpg, https://cdn.pap.fr/photos/pap/e2/ae/e2ae8afbecf9b31e4139ecbb8d578158/e-p1.jpg, https://cdn.pap.fr/photos/pap/9d/b7/9db7715952cd1b323d0246c6d867a84b/9-p1.jpginteger
Total number of rooms in the property. Example:
5integer
Number of bedrooms in the property. Example:
3integer
Living surface area of the property in square metres
string
Neighborhood or locality where the property is located. Example:
Bourg-en-Bresse (01000)string
Full description text provided by the seller on PAP. Example:
Maison à vendre dans le quartier des Vennes en face de l'école des Vennes de 100 m² avec un appartement indépendant en dessous de 22 m² indépendant. La maison à 3 chambres de 11 à 13 m² chacune + une cuisine de 13 m² avec cuisine incorporée une grande salle a manger salon avec beau parquet de 41 m² avec accès sur balcon de 7 m² avec volet roulant électrique. Salle de bain de 5 m² refaites à neuf avec douche italienne de juillet 2025 aménagée qui peut convenir pour personne âgée... / wc séparé. Grande cave sous presque toute la maison avec plusieurs pièces qui peuvent très bien être aménagées comme pièces de vie même si la hauteur ne permet pas que ces dernières soient considérées comme des pièces de vie mais aucun souci pour les aménager comme tel si besoin, elles sont pourvue de plusieurs placards de rangements...string
Contact phone number of the seller. Example:
06 12 02 24 61string
Energy performance class of the property (DPE rating, e.g. A to G). Example:
Estring
Greenhouse gas emissions class of the property (GES rating, e.g. A to G). Example:
Estring
Latitude coordinate of the property. Example:
46.189715string
Longitude coordinate of the property. Example:
5.228885integer
Price per square metre as computed by PAP. Example:
2459string
Transaction type for the listing. Example:
vente, locationstring
Property type as a lowercase slug. Example:
appartement, maisonstring
Property type in display form as shown on PAP. Example:
Appartementstring
Full sentence describing the energy performance (DPE) class. Example:
Logement très peu performantstring
Full sentence describing the greenhouse gas emissions (GES) class. Example:
Émissions très élevéesstring
Nearby public transit stations and their lines.
string
URL of the listing’s virtual tour, if any.
boolean
Whether the listing is marked as PAP-exclusive.
boolean
Whether the owner can be contacted by email (some owners accept phone contact only).
boolean
Whether PAP independently validated the listing’s asking price.
boolean
Whether the owner’s listing shows the “refuses commercial canvassing” flag.
boolean
Whether the owner offers a WhatsApp video-call viewing option.
string
URL of the listing’s YouTube video, if any.
Response
200
{
"total_results": 1,
"limit": 50,
"page": 1,
"total_pages": 1,
"result_from": 1,
"result_to": 1,
"data": [
{
"id": 27227,
"object": "result",
"squid": "ef94be05b736ba2a22478b3bd5b48617",
"run": "d1cb411736760627050af20746043c69",
"internal_id": "460201580",
"url": "https://www.pap.fr/annonces/maison-bourg-en-bresse-01000-r460201580",
"title": "Vente maison 122 m² Bourg-En-Bresse (01000)",
"breadcrumb": null,
"price": null,
"currency": null,
"ref": "G02/1580",
"publication_date": "2026-03-20",
"image_urls": [
"https://cdn.pap.fr/photos/pap/84/e6/84e6846cf2588b1ddd8c4422e93eb447/8-p1.jpg",
"https://cdn.pap.fr/photos/pap/8e/96/8e96e04a6f71b9d765f776a622bfc7a8/8-p1.jpg",
"https://cdn.pap.fr/photos/pap/ac/b6/acb6e93116c4f857f08d4110ad95ca99/a-p1.jpg"
],
"rooms": 5,
"bedrooms": 3,
"size": null,
"neighborhood": "Bourg-en-Bresse (01000)",
"description": "Maison à vendre dans le quartier des Vennes en face de l'école des Vennes de 100 m² avec un appartement indépendant en dessous de 22 m² indépendant. La maison à 3 chambres de 11 à 13 m² chacune + une cuisine de 13 m² avec cuisine incorporée une grande salle a manger salon avec beau parquet de 41 m² avec accès sur balcon de 7 m² avec volet roulant électrique. Salle de bain de 5 m² refaites à neuf avec douche italienne de juillet 2025 aménagée qui peut convenir pour personne âgée... / wc séparé. Grande cave sous presque toute la maison avec plusieurs pièces qui peuvent très bien être aménagées comme pièces de vie même si la hauteur ne permet pas que ces dernières soient considérées comme des pièces de vie mais aucun souci pour les aménager comme tel si besoin, elles sont pourvue de plusieurs placards de rangements...",
"phone": "06 12 02 24 61",
"energy": "E",
"ges": "E",
"lat": 46.189715,
"lng": 5.228885,
"price_per_sqm": 10417,
"produit": "vente",
"typebien": "appartement",
"typebien_label": "Appartement",
"energy_description": "Logement avec une consommation annuelle d'énergie comprise entre 251 et 330 kWh/m²/an.",
"ges_description": "Logement avec une émission de gaz à effet de serre comprise entre 51 et 70 kgéqCO2/m²/an.",
"transports": "Alexandra David-Néel (tram-0, tram-3a); Porte de Vincennes (metro-0, metro-1, tram-0, tram-3b, tram-3a)",
"visite_virtuelle": "https://my.matterport.com/show/?m=3RoVyvrsNMq&brand=0",
"exclusive": false,
"has_email": true,
"prix_valide": false,
"affiche_demarchage_refuse": true,
"appel_video": false,
"video": "https://www.youtube.com/watch?v=BHYfsB3y4n8",
"functions": null,
"native_id": 27227
}
],
"next": null,
"previous": null
}