Skip to content
Scrappa Get API key
Aqarmap API 1 credit/request

Aqarmap Property Search API Documentation

GET https://scrappa.co/api/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10

Scrappa's GET /api/aqarmap/search returns Egyptian properties for sale (section=sale, the default) or rent (section=rent) from Aqarmap as structured JSON.

What you get

One request returns one page of listings and Aqarmap's own match count in meta.pagination.total. Each listing has id, url, title, description, price (a number in EGP), area in square metres, address, latitude, longitude, the location chain, rooms, baths, floor, year_built, finish_type, amenities, the payment method and payment_plans, price and sale flags, photo URLs, published_at, updated_at and a seller summary. Phone numbers are never returned.

Filters are honoured

Every filter is applied by Aqarmap and checked again before the response is built: section, price range, area range, exact rooms, exact baths, finish_type and payment_method. A listing that breaks a filter is dropped and counted in meta.filtered_out. Unknown parameters are rejected with 422, never ignored. property_type is checked against Aqarmap's property type list; an unknown id returns 422 (INVALID_PROPERTY_TYPE).

Property types

property_type is a roll-up: type 1 (apartments) also returns its sub types. Common ids: 1 apartments, 8 furnished apartments, 7 chalets, 16 villas, 11 land, 5 buildings, 14 commercial, 13 administrative, 47 medical.

Sorting and paging

sort is date-desc (newest first, the default), price-asc or price-desc. Price order is Aqarmap's and is not guaranteed to be strict across pages. page is 1 to 500 and limit 1 to 50 (default 22). meta.pagination.page is the real page Aqarmap served. A page past 500 returns 422 without any upstream request. A search with no match is a valid, billable empty result.

Data quality

Values pass through as sellers entered them, so a few listings show unrealistic prices or areas. The location ids come from /api/aqarmap/locations.

Aqarmap Property Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10
Auth header
x-api-key
Cost
1 credit/request
Response preview
200 OK
{
    "success": true,
    "data": {
        "listings": [
            {
                "id": "7360411",
                "slug": "for-rent-cairo-helwan",
                "url": "https://aqarmap.com.eg/en/listing/7360411/",
                "reference_id": 7360411,
                "title": "Apartment for rent in front of the Japanese Garden, 125 m",
                "description": "Apartment for rent facing the Japanese Garden, 3 bedrooms, 2 bathrooms.",
                "section": {
                    "id": 2,
                    "key": "rent",
...

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.

18 optional filters available.

section string Optional

sale (default) or rent.

Example value rent
location integer Optional

Location id from the locations endpoint, for example 36 for Maadi.

Example value 36
property_type integer Optional

Property type id, for example 1 (apartments) or 16 (villas). Sub types are included.

Example value 1
rooms integer Optional

Exact room count.

Example value 3
baths integer Optional

Exact bathroom count.

Example value 10
price_min integer Optional

Minimum price in EGP (monthly rent for rent).

Example value 10000
price_max integer Optional

Maximum price in EGP (monthly rent for rent).

Example value 30000
area_min integer Optional

Minimum area in square metres.

Example value 10
area_max integer Optional

Maximum area in square metres.

Example value 10
finish_type string Optional

One of SEMI_FINISHED, SUPER_LUX or WITHOUT_FINISH.

Example value example
payment_method integer Optional

1, 2 or 3. The label of each listing is in payment_method.label.

Example value 10
owner_only boolean Optional

true for listings posted by the owner.

Example value true
has_video boolean Optional

true for listings with a video.

Example value true
keyword string Optional

Free text matched against the listing, for example garden.

Example value running shoes
sort string Optional

date-desc (default), price-asc or price-desc.

Example value relevance
page integer Optional

Page number, 1 to 500.

Example value 1
limit integer Optional

Listings per page, 1 to 50 (default 22).

Example value 10
lang string Optional

en (default) or ar. Sets the language of titles, labels and the listing url.

Example value example

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10",
    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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10');

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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10', 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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10',
    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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10")
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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10", 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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10', 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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10")
        .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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10", 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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10"
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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10"));
            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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10',
            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/aqarmap/search?section=rent&location=36&property_type=1&rooms=3&price_min=10000&price_max=30000&limit=10")
        .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
JSON Response
200 OK
{
    "success": true,
    "data": {
        "listings": [
            {
                "id": "7360411",
                "slug": "for-rent-cairo-helwan",
                "url": "https://aqarmap.com.eg/en/listing/7360411/",
                "reference_id": 7360411,
                "title": "Apartment for rent in front of the Japanese Garden, 125 m",
                "description": "Apartment for rent facing the Japanese Garden, 3 bedrooms, 2 bathrooms.",
                "section": {
                    "id": 2,
                    "key": "rent",
                    "title": "For rent"
                },
                "property_type": {
                    "id": 1,
                    "name": "Apartment",
                    "plural_name": "Apartments",
                    "slug": "apartment"
                },
                "price": {
                    "amount": 10000,
                    "currency": "EGP"
                },
                "area": {
                    "value": 125,
                    "unit": "sqm"
                },
                "address": "Helwan",
                "location": {
                    "id": 67,
                    "name": "Helwan",
                    "slug": "cairo/helwan",
                    "full_path": "Greater Cairo / Helwan",
                    "type": null,
                    "parent": {
                        "id": 1,
                        "name": "Greater Cairo",
                        "slug": "cairo",
                        "full_path": "Greater Cairo",
                        "type": null,
                        "parent": null
                    }
                },
                "rooms": 3,
                "baths": 2,
                "floor": 1,
                "year_built": 2020,
                "finish_type": "SUPER_LUX",
                "finish_type_label": "Super lux",
                "amenities": [
                    "ELEVATOR",
                    "SECURITY"
                ],
                "payment_method": {
                    "id": 1,
                    "key": "from_owner_cash",
                    "label": "From owner cash"
                },
                "payment_plans": [
                    {
                        "price": 10000,
                        "down_payment": null,
                        "down_payment_percentage": null,
                        "total_down_payment": 0,
                        "total_remaining_amount": 10000,
                        "over_price": null,
                        "security_deposit": null,
                        "duration": 30
                    }
                ],
                "property_view": {
                    "id": 1
                },
                "is_price_negotiable": false,
                "is_resale": false,
                "is_primary": false,
                "is_mortgage": false,
                "is_featured": false,
                "main_photo": {
                    "id": 47478477,
                    "caption": null,
                    "order": 1,
                    "thumb_url": "https://img-1.aqarmap.com.eg/new-aqarmap-media/search-thumb-webp/2610/6adba8e739dc7555414291.jpg",
                    "small_url": "https://img-1.aqarmap.com.eg/new-aqarmap-media/small/2610/6adba8e739dc7555414291.jpg",
                    "large_url": "https://img-1.aqarmap.com.eg/new-aqarmap-media/large/2610/6adba8e739dc7555414291.jpg"
                },
                "photos": [],
                "photo_count": 5,
                "published_at": "2026-10-26T01:42:07+03:00",
                "updated_at": "2026-10-26T01:42:07+03:00",
                "latitude": 29.821,
                "longitude": 31.317,
                "featured_type": "not_featured",
                "has_video": false,
                "similar_listings_count": 0,
                "similar_listing_ids": [],
                "registration_status": null,
                "mortgage_options": [],
                "seller": {
                    "id": 4746422,
                    "name": "Al Hoda Real Estate",
                    "role": "broker",
                    "logo": null
                }
            }
        ]
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "duration_ms": 640,
        "filtered_out": 0,
        "pagination": {
            "page": 1,
            "limit": 10,
            "total": 413,
            "total_pages": 42,
            "has_more": true,
            "next_page": 2,
            "truncated": false
        }
    }
}

Errors

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

422

Unknown Property Type

The `property_type` is not an Aqarmap property type id (`INVALID_PROPERTY_TYPE`). Aqarmap would ignore it and return every property, so the request is rejected. Non-billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "INVALID_PROPERTY_TYPE",
        "message": "The property_type is not an Aqarmap property type id. Use an id such as 1 (apartments) or 16 (villas)."
    },
    "success": false
}
422

Validation Error

A query parameter is missing, unknown or unusable. Unknown parameters are rejected, never ignored. Non-billable.

{
    "errors": {
        "section": [
            "The selected section is invalid."
        ]
    },
    "message": "The selected section is invalid."
}
503

Upstream Unavailable

Aqarmap could not be reached after retries, refused the request or answered with a body this API cannot read safely (`UPSTREAM_UNAVAILABLE`). Never billed. Retry when `meta.retryable` is true.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "UPSTREAM_UNAVAILABLE",
        "message": "The Aqarmap API 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.