Scrappa's GET /api/emlakjet/search returns Emlakjet property in Turkey as structured JSON, for sale or for rent, with location, type, price, rooms, bathrooms, area, sort and paging.
What you get
One request returns one page of up to 30 listings, Emlakjet's own match count in pagination.total and the real page. Each listing has id, title, url, listing_type, listing_type_label, property_type, price, currency, price_per_sqm, area.gross_sqm, rooms, bedrooms, floor, location, images, has_video, badges, posted_at, agency and agent. A field Emlakjet does not state is null. Call the listing endpoint for coordinates, fees, bathrooms, features and all images.
Filters are honoured
Emlakjet ignores a value it does not know and returns the unfiltered list. This API therefore checks every value before the lookup and rejects unknown values with 422, for example 2+1 (write it as 2-1). It also checks every returned row against min_price, max_price, min_area, max_area and rooms. A row that breaks a filter is dropped and counted in pagination.dropped_by_filter. query echoes the applied filters.
Location
Take location from search_params of /api/emlakjet/autocomplete, for example istanbul-kadikoy. Without a location the search covers Turkey. A type and location pair that does not exist returns 404.
Sorting
sort is price_asc or price_desc. Without it Emlakjet uses its recommended order.
Pagination
page runs from 1 to 50, 30 listings per page. A page past the last one returns an empty list with the real page. It never returns page 1 data under another page number.
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.
10 optional filters available.
string
Required
sale or rent.
sale
string
Optional
konut (default), daire, villa, arsa, mustakil-ev, bina, residence, ofis, is-yeri, tarla, yazlik, depo, devremulk or fabrika. For rent: konut, daire, ofis, is-yeri, depo or yazlik.
example
string
Optional
Location slug from autocomplete, for example istanbul-kadikoy.
istanbul-kadikoy
integer
Optional
Minimum price in Turkish lira.
10
integer
Optional
Maximum price in Turkish lira.
8000000
string
Optional
Room layouts, 2+1 written as 2-1. Comma-separated, for example 2-1,3-1.
2-1
integer
Optional
Number of bathrooms, 1 to 5.
10
integer
Optional
Minimum gross area in square metres.
10
integer
Optional
Maximum gross area in square metres.
10
string
Optional
price_asc or price_desc.
price_asc
integer
Optional
Result page, 1 to 50.
1
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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/emlakjet/search?trade=sale&location=istanbul-kadikoy&max_price=8000000&rooms=2-1&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": [
{
"id": "20023368",
"title": "Turyap G\u00f6ztepe Den Erenk\u00f6y De 3+1 Sat\u0131l\u0131k Daire",
"url": "https://www.emlakjet.com/ilan/turyap-goztepe-den-erenkoy-de-31-satilik-daire-20023368",
"listing_type": "sale",
"listing_type_label": "Sat\u0131l\u0131k Konut",
"property_type": "Konut",
"price": 7950000,
"currency": "TRY",
"price_per_sqm": 58889,
"availability": "InStock",
"area": {
"gross_sqm": 135
},
"rooms": "2+1",
"bedrooms": 2,
"floor": "4. Kat",
"location": {
"label": "Erenk\u00f6y Mahallesi, Kad\u0131k\u00f6y",
"neighborhood": "Erenk\u00f6y Mahallesi",
"district": "Kad\u0131k\u00f6y"
},
"images": [
"https://imaj.emlakjet.com/resize/640/0/listing/20023368/AE566253288191CE5D879E51DAE1D8C320023368.jpg"
],
"has_video": true,
"badges": [
"YEN\u0130"
],
"posted_at": "2026-10-25",
"agency": {
"id": 1307951,
"name": "TURYAP G\u00f6ztepe",
"logo": "https://imaj.emlakjet.com/resize/640/0/logo/1307951/806B8E80BD4819BC10A0BA38307DC220.jpg",
"type": "corporate"
},
"agent": {
"name": "Mehmet Ali \u00c7AKMAK"
}
}
],
"pagination": {
"page": 1,
"per_page": 30,
"total": 15,
"total_pages": 1,
"returned": 1,
"dropped_by_filter": 0,
"has_more": false
},
"query": {
"trade": "sale",
"type": "konut",
"location": "istanbul-kadikoy",
"max_price": 8000000,
"rooms": [
"2-1"
],
"sort": "price_asc"
}
},
"meta": {
"endpoint_family": "search",
"billable": true
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Not Found
No Emlakjet search page exists for that type and location. Take the location from autocomplete. (`NOT_FOUND`). Non-billable.
{
"meta": {
"billable": false,
"retryable": false,
"endpoint_family": "search"
},
"error": {
"code": "NOT_FOUND",
"message": "No Emlakjet search page exists for that type and location. Take the location from autocomplete."
},
"success": false
}Validation Error
A query parameter is missing, unknown or unusable. Unknown parameters and unknown values are rejected before any lookup, never ignored. Non-billable.
{
"errors": {
"trade": [
"The selected trade is invalid."
]
},
"message": "The selected trade is invalid."
}Upstream Unavailable
Emlakjet could not be reached after one retry, answered with an error or changed its format (`UPSTREAM_UNAVAILABLE`). Retryable and never billed. Clients are never rate limited.
{
"meta": {
"billable": false,
"retryable": true,
"endpoint_family": "search"
},
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "Emlakjet 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.