Scrappa's GET /api/green-acres/search returns Green-Acres property for sale in one French location as structured JSON. Green-Acres.fr sells property only, so there is no rent mode.
What you get
One request returns one page of up to 24 listings and the site's own match count in pagination.total. Each item has listing_id, url, title, price in EUR, price_on_request, price_from (a starting price for a new-build programme), price_per_m2, price_drop_percent, city, department, property_type, is_new_build, is_exclusive, rooms, bedrooms, living_area_m2, land_area_m2 (always in m2), description_snippet, photo_count, thumbnails and the agency. A programme with several units shows a range: the _max field holds the upper end. Fields a card does not show are null, never 0. Call the listing endpoint for bathrooms, features, energy label and the whole photo gallery.
Filters are honoured
Every filter is applied by Green-Acres and checked again on each item. An item that shows a value breaking a filter is removed and counted in items_dropped. A card that shows no value for a field is kept, because Green-Acres already filtered it. A price filter also removes a card with a price on request. Bathrooms cannot be checked on a card, so that filter relies on Green-Acres. pagination.total stays the site's count, and total_includes_dropped says when it contains removed items.
Pagination
page is 1 to 20. Green-Acres serves 480 results per query: when pagination.capped is true, narrow the filters, for example with a price band. A page past the last page returns 422 PAGE_OUT_OF_RANGE. It never returns another page's listings under that page number.
Sort
relevance (default), price_asc, price_desc, surface_asc, surface_desc, price_per_m2_asc, price_per_m2_desc or newest.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
15 optional filters available.
string
Required
Location id from the autocomplete endpoint, for example dp_07 (department), city_36662 (city) or gr_3252 (city group).
dp_07
string
Optional
house, apartment, castle, land, commercial, new_build, building, parking or other. Leave out for all types.
house
integer
Optional
Minimum price in EUR. Checked again on every item.
10
integer
Optional
Maximum price in EUR. Checked again on every item.
400000
integer
Optional
Minimum living area in m2. Checked again on every item.
10
integer
Optional
Maximum living area in m2. Checked again on every item.
10
integer
Optional
Minimum land area in m2. Checked again on every item.
10
integer
Optional
Maximum land area in m2. Checked again on every item.
10
integer
Optional
Minimum number of rooms (pieces). Checked again on every item.
10
integer
Optional
Maximum number of rooms (pieces). Checked again on every item.
10
integer
Optional
Minimum number of bedrooms. Checked again on every item.
3
integer
Optional
Maximum number of bedrooms. Checked again on every item.
10
integer
Optional
Minimum number of bathrooms and shower rooms.
10
integer
Optional
Maximum number of bathrooms and shower rooms.
10
string
Optional
relevance (default), price_asc, price_desc, surface_asc, surface_desc, price_per_m2_asc, price_per_m2_desc or newest.
price_asc
integer
Optional
Result page, 1 to 20. A page holds up to 24 listings.
1
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/green-acres/search?location=dp_07&property_type=house&bedrooms_min=3&price_max=400000&sort=price_asc")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
success
data
meta
{
"success": true,
"data": {
"items": [
{
"listing_id": "A3nj6wezmd7cep29",
"url": "https://www.green-acres.fr/fr/properties/immobilier/chassiers/A3nj6wezmd7cep29.htm",
"title": "Sud Ardeche-Chassiers 07110",
"price": 233000,
"currency": "EUR",
"price_on_request": false,
"price_from": false,
"price_per_m2": 3107,
"price_drop_percent": null,
"city": "Chassiers",
"department": "Ard\u00e8che",
"property_type": "Mas proven\u00e7al",
"is_new_build": false,
"is_exclusive": true,
"rooms": 4,
"rooms_max": null,
"bedrooms": 2,
"bedrooms_max": null,
"living_area_m2": 75,
"living_area_max_m2": null,
"land_area_m2": 4160,
"lots": null,
"description_snippet": "Mas en pierre avec vue d\u00e9gag\u00e9e Chassiers (07110)...",
"photo_count": 12,
"thumbnails": [
"https://lb1.green-acres.com/1140632a/A3nj6wezmd7cep29/miniPhotos/A3nj6wezmd7cep29_1.jpg"
],
"agency": {
"name": "Said El marrahi",
"parent": "Renaissance Immobilier",
"logo": "https://lb1.green-acres.com/ClientLogos/386262.png",
"account_id": "1140632a"
}
}
],
"pagination": {
"page": 1,
"per_page": 24,
"total": 172,
"total_pages": 8,
"max_pages": 20,
"capped": false,
"has_next_page": true
},
"items_dropped": 0,
"total_includes_dropped": false,
"applied_filters": {
"location": "dp_07",
"sort": "price_asc",
"property_type": "house",
"bedrooms_min": 3,
"price_max": 400000
}
},
"meta": {
"endpoint_family": "search",
"billable": true,
"attempts": 1,
"items_dropped": 0
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Not Found
Green-Acres has no results page for that location or filter combination (`NOT_FOUND`). Non-billable.
{
"meta": {
"billable": false,
"retryable": false,
"endpoint_family": "search"
},
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
},
"success": false
}Validation Error
A query parameter is missing, unknown or unusable. Unknown parameters and unknown values are rejected, never ignored. Non-billable.
{
"errors": {
"sort": [
"The selected sort is invalid."
]
},
"message": "The selected sort is invalid."
}Page Out of Range
The page is past the last page of results (`PAGE_OUT_OF_RANGE`). Green-Acres serves at most 20 pages (480 results) per query: narrow the filters, for example with a price band. Non-billable.
{
"meta": {
"billable": false,
"retryable": false,
"endpoint_family": "search"
},
"error": {
"code": "PAGE_OUT_OF_RANGE",
"message": "That page is past the last page of results. Use a lower page or narrow the filters."
},
"success": false
}Upstream Unavailable
Green-Acres could not be reached, refused the request or answered with a page this API could not read (`UPSTREAM_UNAVAILABLE`). Retryable and never billed. Clients are never rate limited.
{
"meta": {
"billable": false,
"retryable": true,
"endpoint_family": "search"
},
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "Green-Acres could not be reached. Please retry shortly."
},
"success": false
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.