Search UK property listings by location name or location identifier. Returns sale, rental and commercial listings with price, bedrooms, tenure, photos, floor area and agent contact details. One search sweep reaches 1025 records across 41 pages; narrow the location to go deeper. A search on a location identifier you already resolved costs 1 API request. A search by place name costs 2 the first time for that name, because the name has to be resolved into an identifier first, and 1 once that resolution is cached. Set enrich=1 to merge the mobile listing family for rent cadence, listing status, thumbnail counts and the inline branch contact — that costs 2 API requests, or 3 on the first search for a place name whose location is not cached yet.
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.
13 optional filters available.
string
Required
BUY, RENT, COMMERCIAL_BUY or COMMERCIAL_RENT.
BUY
string
Optional
Place name to search, e.g. "London". Resolved to a location identifier for you. The first search for a given name resolves it and costs 2 API requests; the resolution is cached, so later searches cost 1. Pass location_identifier instead to always cost 1.
London
string
Optional
A resolved identifier such as REGION^87490. Always costs 1 API request.
example
integer
Optional
Search radius in miles.
10
string
Optional
Optional display name sent alongside the identifier so the listing cards show a place. Ignored when location_identifier is omitted.
example
integer
Optional
Minimum price filter, applied upstream.
10
integer
Optional
Maximum price filter, applied upstream.
10
integer
Optional
Minimum number of bedrooms.
10
integer
Optional
Maximum number of bedrooms.
10
string
Optional
Property type filter, applied upstream, for example FLAT, HOUSE or BUNGALOW.
example
integer
Optional
Page number, 1 to 41.
1
string
Optional
Required feature filter, applied upstream. For example garden, parking or garage.
example
integer
Optional
Sort order, e.g. 2 for newest first.
relevance
boolean
Optional
Set to 1 to merge the mobile listing family into every result for rent cadence, listing status, thumbnail and floorplan counts, and the inline branch contact. This opt-in search costs 2 API requests instead of 1, and 3 the first time a given place name has to be resolved. Commercial channels have no mobile family, so enrich is a no-op there and costs the same as a plain search.
true
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/rightmove/search?location=London&channel=BUY",
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/rightmove/search?location=London&channel=BUY');
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/rightmove/search?location=London&channel=BUY', 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/rightmove/search?location=London&channel=BUY',
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/rightmove/search?location=London&channel=BUY")
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/rightmove/search?location=London&channel=BUY", 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/rightmove/search?location=London&channel=BUY', 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/rightmove/search?location=London&channel=BUY")
.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/rightmove/search?location=London&channel=BUY", 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/rightmove/search?location=London&channel=BUY"
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/rightmove/search?location=London&channel=BUY"));
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/rightmove/search?location=London&channel=BUY',
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/rightmove/search?location=London&channel=BUY")
.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.
data
{
"data": {
"properties": [],
"count": 0
}
}
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.