Skip to content
Scrappa Get API key
MyHome.ie API 1 credit/request

MyHome.ie Search API Documentation

GET https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000

Scrappa's GET /api/myhome-ie/search returns MyHome.ie property listings in Ireland as structured JSON: homes for sale (listing_type=sale, the default), homes to rent (rent), house share (share) and new developments (new_homes).

What you get

One request returns one page of listings plus the platform's own match count in total. Each listing has id, address, display_address, property_type, price (text plus parsed amount, max_amount, currency, frequency and qualifier), bedrooms, bathrooms, size_m2, ber_rating, latitude, longitude, created_at, refreshed_at, photos, agency, negotiator and the public url. Take the id to the listing endpoint for the full record.

Filters are honoured

Filter names the platform would silently ignore are rejected with a 422 instead of returning an unfiltered list. Every returned listing is checked against min_price, max_price, min_beds, max_beds, min_baths, min_size, max_size and property_type_ids. If the platform did not apply a filter, the request fails with a non-billable 503 and returns no listings. applied_filters echoes what was applied.

Locations

location is ireland (default) or a region slug such as dublin or cork, from the locations endpoint. Unknown slugs are rejected. locality_ids are comma separated ids of that region's localities. A locality id from another region is rejected.

Pagination

page starts at 1 and page_size is 10, 20 (default) or 50. The page in the answer is always the page that was served. A page past the last result returns an empty listings list, has_more=false and total=null. It never returns another page's listings.

Sorting

sort is refreshed (default), newest, oldest, price_asc or price_desc. The platform leaves out listings with no public price when sorting by price, so total is lower for price sorts. Inside a page, any listing without a parsed amount is placed last.

Filter support by listing type

sale supports every filter. rent and share support everything except property_type_ids. new_homes supports location, locality_ids, min_price, max_price and max_beds. A new-home card is a development, so its price can be a range (qualifier=range) and bedrooms_text lists all bedroom counts. Rent prices are compared as listed, so a weekly rent is compared by its weekly amount.

What this API does not cover

This is read-only public listing data. Commercial property, land, auctions, map search and BER filtering are not available yet and are rejected.

MyHome.ie Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000
Auth header
x-api-key
Cost
1 credit/request
Response preview
200 OK
{
    "success": true,
    "total": 471,
    "page": 1,
    "page_size": 20,
    "total_pages": 24,
    "has_more": true,
    "applied_filters": {
        "listing_type": "sale",
        "location": "dublin",
        "sort": "refreshed",
        "min_price": 300000,
        "max_price": 400000,
        "min_beds": 2,
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

This endpoint has no required query parameters.

14 optional filters available.

listing_type string Optional

sale (default), rent, share or new_homes.

Example value sale
location string Optional

ireland (default) or a region slug from the locations endpoint.

Example value dublin
locality_ids string Optional

Comma separated locality ids of the region in location. Needs a region slug.

Example value example
property_type_ids string Optional

Sale only. Comma separated ids: 36 apartment, 37 terraced, 38 semi-detached, 39 detached, 40 bungalow, 41 holiday home, 42 country house, 43 farm, 44 site, 45 end of terrace, 46 cottage, 47 duplex, 48 townhouse, 49 penthouse, 50 studio, 51 dormer, 52 live-work unit, 53 period house, 54 mews, 9 investment property.

Example value example
min_price integer Optional

Minimum price in euro, whole number.

Example value 300000
max_price integer Optional

Maximum price in euro, whole number.

Example value 400000
min_beds integer Optional

Minimum bedrooms. Not available for new_homes.

Example value 2
max_beds integer Optional

Maximum bedrooms.

Example value 2
min_baths integer Optional

Minimum bathrooms. Not available for new_homes.

Example value 10
min_size integer Optional

Minimum floor area in square metres. Not available for new_homes.

Example value 10
max_size integer Optional

Maximum floor area in square metres. Not available for new_homes.

Example value 10
sort string Optional

refreshed (default), newest, oldest, price_asc or price_desc.

Example value relevance
page integer Optional

Result page, 1-based.

Example value 1
page_size integer Optional

Listings per page: 10, 20 (default) or 50.

Example value 10

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000",
    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
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000', 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));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000',
    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);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000")
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
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
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/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000")
        .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());
        }
    }
}
Go
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000", 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))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000"
C#
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/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
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/myhome-ie/search?listing_type=sale&location=dublin&min_beds=2&max_beds=2&min_price=300000&max_price=400000")
        .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 total page page_size total_pages has_more applied_filters listings +1 more

Common listings fields

id address display_address listing_type
JSON Response
200 OK
{
    "success": true,
    "total": 471,
    "page": 1,
    "page_size": 20,
    "total_pages": 24,
    "has_more": true,
    "applied_filters": {
        "listing_type": "sale",
        "location": "dublin",
        "sort": "refreshed",
        "min_price": 300000,
        "max_price": 400000,
        "min_beds": 2,
        "max_beds": 2
    },
    "listings": [
        {
            "id": 5030645,
            "address": "28 Erris Square, Waterville",
            "display_address": "28 Erris Square, Waterville, Blanchardstown, Dublin 15",
            "listing_type": "ResidentialForSale",
            "status": "ForSale",
            "property_type": "Townhouse",
            "development_name": null,
            "price": {
                "text": "\u20ac350,000",
                "amount": 350000,
                "max_amount": null,
                "currency": "EUR",
                "frequency": null,
                "qualifier": null
            },
            "bedrooms": 2,
            "bedrooms_text": "2 beds",
            "bathrooms": 3,
            "size_m2": 98.9,
            "size_text_m2": null,
            "ber_rating": "B",
            "latitude": 53.391945,
            "longitude": -6.367388,
            "is_new": false,
            "sale_agreed": false,
            "created_at": "2026-09-25T15:37:22+00:00",
            "refreshed_at": "2026-10-25T10:31:03+00:00",
            "main_photo": "https://photos-a.propertyimages.ie/media/5/4/6/5030645/bdfef536-7d94-4dd8-af21-2e879366abc9_l.jpg",
            "photos": [
                "https://photos-a.propertyimages.ie/media/5/4/6/5030645/bdfef536-7d94-4dd8-af21-2e879366abc9_l.jpg"
            ],
            "photo_count": 17,
            "has_video": false,
            "open_viewings": [],
            "agency": {
                "id": 10281,
                "name": "Get Property Estate Agents",
                "address": "Clifton House, Lower Fitzwilliam St, Dublin 2",
                "phone": null,
                "email": "property@get-let.ie",
                "logo": "https://photos-a.propertyimages.ie/groups/1/8/2/10281/logo.jpg",
                "url": "https://www.myhome.ie/estate-agents/get-property-10281"
            },
            "negotiator": {
                "id": 482231,
                "name": "Michelle Hoare",
                "job_title": "Senior Negotiator",
                "image": "https://photos-a.propertyimages.ie/users/1/3/2/482231/profile.jpg"
            },
            "url": "https://www.myhome.ie/residential/brochure/28-erris-square-waterville-blanchardstown-dublin-15/5030645"
        }
    ],
    "meta": {
        "billable": true,
        "endpoint_family": "search",
        "attempts": 1
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Unsupported Filter or Value

A filter name this search cannot apply for the chosen listing_type, an unusable value, an unknown region slug or a locality id from another region (`invalid_filter`). Unsupported filters are rejected because the platform would silently ignore them. Non-billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "invalid_filter",
        "message": "min_ber is not a filter this search can apply for listing_type=sale, so it is rejected rather than ignored."
    },
    "success": false
}
422

Validation Error

A query parameter failed validation. Non-billable.

{
    "errors": {
        "page_size": [
            "The selected page size is invalid."
        ]
    },
    "message": "The page size field must be 10, 20 or 50."
}
503

Upstream Unavailable

MyHome.ie could not be reached after retries, answered with a body this API cannot read, or did not apply the requested filters (public error code `upstream_unavailable`). Retryable and never billed. Clients are never rate limited.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "upstream_unavailable",
        "message": "MyHome.ie is temporarily unavailable. Please retry."
    },
    "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.