# Turkish Property Valuation Engine (`seralifatih/turkish-real-estate-api-3`) Actor

Analyze Turkish property prices across Emlakjet, Hepsiemlak, and Sahibinden to generate valuation reports, comparable property records, price-per-square-meter benchmarks, and optional rental yield insights. Ideal for investors, proptech tools, and valuation workflows.

- **URL**: https://apify.com/seralifatih/turkish-real-estate-api-3.md
- **Developed by:** [Fatih İlhan](https://apify.com/seralifatih) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Turkish Property Valuation Engine
### Sahibinden · Hepsiemlak · Emlakjet — Cross-Platform Price Analysis with Rental Yield

**The only cross-platform Turkish property valuation tool on Apify.**

Give it a property specification. Get back median prices across three platforms, price-per-m² statistics by building age, and — the feature no other tool offers — **a complete rental yield analysis** for investors.

> *Is a 3+1 apartment in Kadıköy a good investment?*
> Run the Valuation Engine: get median sale prices from Sahibinden, Hepsiemlak, and Emlakjet,
> see how price-per-m² varies by building age, and get an instant gross yield calculation
> from live rental listings — all in one API call.

---

### Why This Actor Exists

Turkish real estate attracts foreign capital at scale:
- **Citizenship-by-investment** threshold is $400K USD — buyers need accurate valuations
- No other Apify actor aggregates prices across all three major Turkish platforms
- No other tool computes rental yields from live data

This actor closes that gap. It is the highest-value product in the Turkish Data Intelligence Portfolio.

---

### What It Does

For each property query:

1. **Searches all three platforms** — Sahibinden, Hepsiemlak, and Emlakjet — for matching sale listings
2. **Removes price outliers** (below p5 / above p95) for clean statistics
3. **Computes full price analysis**: average, median, min, max, standard deviation, percentiles (p10→p90)
4. **Breaks down prices** by building age, floor range, and seller type
5. **If `includeRentalYield: true`**: also scrapes rental listings and computes:
   - Gross yield (`annual rent / purchase price × 100`)
   - Net yield estimate (after dues/maintenance)
   - Payback period in years
   - Rent-to-price ratio

---

### Input

```json
{
  "queries": [
    {
      "city": "istanbul",
      "district": "kadikoy",
      "propertyType": "daire",
      "rooms": "3+1",
      "areaMin": 100,
      "areaMax": 150,
      "listingType": "satilik"
    }
  ],
  "platforms": ["sahibinden", "hepsiemlak", "emlakjet"],
  "maxListingsPerPlatform": 50,
  "includeRentalYield": true,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "countryCode": "TR"
  },
  "sahibindenCookies": []
}
````

#### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `queries` | array | *required* | Property specs to value. Each produces one ValuationReport. |
| `queries[].city` | string | *required* | City slug, e.g. `istanbul`, `ankara`, `izmir` |
| `queries[].district` | string | optional | District slug, e.g. `kadikoy`, `besiktas` |
| `queries[].propertyType` | string | `daire` | `daire`, `villa`, `arsa`, `ofis` |
| `queries[].rooms` | string | optional | Room layout, e.g. `3+1`, `2+1` |
| `queries[].areaMin` | integer | optional | Min area in m² |
| `queries[].areaMax` | integer | optional | Max area in m² |
| `platforms` | array | all three | Which platforms to include |
| `maxListingsPerPlatform` | integer | `50` | Listings collected per platform per query |
| `includeRentalYield` | boolean | `true` | Scrape rental listings + compute yield metrics |
| `proxyConfig` | object | — | **TR Residential proxies required for Sahibinden** |
| `sahibindenCookies` | array | `[]` | Session cookies for Sahibinden (improves reliability) |

***

### Output

Two record types are written to the dataset:

#### 1. `PROPERTY_RECORD` — one per scraped listing

```json
{
  "type": "PROPERTY_RECORD",
  "queryId": "istanbul-kadikoy-daire-3p1",
  "platform": "hepsiemlak",
  "listingUrl": "https://www.hepsiemlak.com/ilan/...",
  "listingId": "12345678",
  "city": "istanbul",
  "district": "kadikoy",
  "propertyType": "daire",
  "roomLayout": { "rooms": 3, "halls": 1, "label": "3+1", "totalRooms": 4, "isStudio": false },
  "listingType": "satilik",
  "grossArea": 130,
  "netArea": 120,
  "floor": { "floor": 4, "totalFloors": 8 },
  "buildingAge": "5-10",
  "price": 6500000,
  "currency": "TRY",
  "pricePerSqm": 54166.67,
  "dues": 1200,
  "sellerType": "emlak_ofisi",
  "propertyFingerprint": "istanbul-kadikoy-daire-3+1-100-125",
  "scrapedAt": "2024-11-01T12:00:00.000Z"
}
```

#### 2. `VALUATION_REPORT` — one per query

```json
{
  "type": "VALUATION_REPORT",
  "queryId": "istanbul-kadikoy-daire-3p1",
  "query": {
    "city": "istanbul",
    "district": "kadikoy",
    "propertyType": "daire",
    "rooms": "3+1",
    "areaRange": "100-150m²",
    "listingType": "satilik"
  },
  "totalListingsFound": 127,
  "platformBreakdown": {
    "sahibinden": { "count": 48, "avgPrice": 6850000, "avgPricePerSqm": 56250 },
    "hepsiemlak":  { "count": 42, "avgPrice": 6420000, "avgPricePerSqm": 53500 },
    "emlakjet":    { "count": 37, "avgPrice": 6310000, "avgPricePerSqm": 52580 }
  },
  "priceAnalysis": {
    "averagePrice": 6530000,
    "medianPrice": 6350000,
    "minPrice": 3200000,
    "maxPrice": 12500000,
    "stdDeviation": 1420000,
    "percentiles": {
      "p10": 4800000,
      "p25": 5500000,
      "p50": 6350000,
      "p75": 7200000,
      "p90": 8500000
    },
    "averagePricePerSqm": 54110,
    "medianPricePerSqm": 52900
  },
  "priceByBuildingAge": {
    "0-5":   { "avgPrice": 8100000, "avgPricePerSqm": 67500, "count": 18 },
    "6-10":  { "avgPrice": 6800000, "avgPricePerSqm": 56700, "count": 31 },
    "11-20": { "avgPrice": 5900000, "avgPricePerSqm": 49200, "count": 44 },
    "21+":   { "avgPrice": 4700000, "avgPricePerSqm": 39200, "count": 29 }
  },
  "priceByFloor": {
    "ground":     { "avg": 5200000, "count": 12 },
    "low_1_3":    { "avg": 6100000, "count": 38 },
    "mid_4_7":    { "avg": 6600000, "count": 45 },
    "high_8plus": { "avg": 7100000, "count": 22 }
  },
  "priceBySellerType": {
    "emlak_ofisi": { "avg": 6650000, "count": 98 },
    "sahibinden":  { "avg": 6120000, "count": 29 }
  },
  "rentalYieldAnalysis": {
    "averageMonthlyRent": 28500,
    "medianMonthlyRent": 27000,
    "grossYieldPercent": 5.1,
    "netYieldEstimate": 4.87,
    "rentToPriceRatio": 0.00425,
    "paybackYears": 19.6,
    "estimatedMonthlyDues": 1200,
    "dataPoints": {
      "saleListings": 127,
      "rentalListings": 89
    }
  },
  "generatedAt": "2024-11-01T12:05:32.000Z",
  "warnings": []
}
```

***

### Reading the Rental Yield Analysis

| Metric | Value in Example | Meaning |
|--------|-----------------|---------|
| `grossYieldPercent` | 5.1% | Annual rent ÷ purchase price × 100 |
| `netYieldEstimate` | 4.87% | After estimated monthly dues deducted |
| `paybackYears` | 19.6 | Years to recoup purchase price from rent |
| `rentToPriceRatio` | 0.00425 | Monthly rent as fraction of purchase price |
| `estimatedMonthlyDues` | 1,200 TRY | Median aidat from scraped listings |

**Turkish context**: A gross yield above 4% is generally considered acceptable in Istanbul. Prime districts (Kadıköy, Beşiktaş, Şişli) typically yield 4–6%. Outer districts can reach 7–9%.

***

### Pricing

**$12 per `VALUATION_REPORT`** (pay-per-event)

One report = one query. Multiple queries in a single run = multiple charges.

Typical run costs:

- 1 query (3 platforms × 50 listings + rental): ~$12
- 5 queries across different districts: ~$60
- Monthly market scan (20 city/district combos): ~$240

***

### Platform Notes

#### Sahibinden

- Largest Turkish classifieds platform. Highest listing volume.
- **Requires Turkish Residential proxies** and optionally session cookies.
- Without cookies, some requests may be blocked. Provide `sahibindenCookies` from a logged-in session.

#### Hepsiemlak

- Second-largest dedicated real estate portal. Merged with Zingat in 2021.
- Server-rendered HTML. Datacenter proxies sufficient.
- Clean structured data. Reliable extraction.

#### Emlakjet

- Third-largest portal. **Zero other Apify scrapers exist for Emlakjet.**
- Server-rendered HTML + JSON-LD structured data on detail pages.
- Datacenter proxies sufficient.

***

### Use Cases

#### Foreign Property Investors

Evaluating Istanbul apartments for the citizenship-by-investment program ($400K minimum):

```json
{
  "queries": [
    { "city": "istanbul", "district": "besiktas", "propertyType": "daire", "rooms": "3+1", "areaMin": 120 },
    { "city": "istanbul", "district": "sisli",    "propertyType": "daire", "rooms": "3+1", "areaMin": 120 },
    { "city": "istanbul", "district": "kadikoy",  "propertyType": "daire", "rooms": "3+1", "areaMin": 120 }
  ],
  "includeRentalYield": true,
  "maxListingsPerPlatform": 100
}
```

Compare yield across three prestigious districts in one run.

#### Proptech Startups

Building automated Turkish market analytics dashboards. Run weekly, store reports, visualize price trends over time.

#### Real Estate Agencies

Competitive pricing research before listing a property. "What did similar 3+1 daire in Kadıköy sell for last month?"

#### Relocation Consultants

Helping expats understand whether to buy or rent. The `paybackYears` metric directly answers this.

***

### 🇹🇷 Turkish Data Intelligence Portfolio

This actor is part of a suite of 9 specialized Turkish market data tools:

**E-Commerce Intelligence:**

- N11 Product Scraper — Turkey's third-largest marketplace
- Turkish Marketplace Seller Intelligence — Trendyol, Hepsiburada, N11 seller profiles
- Turkish E-Commerce Review Aggregator — Cross-platform reviews with sentiment analysis

**Automotive Intelligence:**

- Arabam.com Vehicle Scraper — Used car listings with paint condition data
- Turkish Auto Price Tracker — Cross-platform vehicle valuation
- Turkish Auto Dealer Intelligence — Galeri profiles and inventory analytics

**Real Estate Intelligence:**

- Emlakjet Property Scraper — Zero-competition property data
- Turkish Property Valuation Engine — Cross-platform pricing with rental yield analysis
- Turkish Real Estate Agency Scraper — Emlak ofisi profiles and portfolios

All actors share consistent output schemas, Turkish language support, and transparent
pay-per-event pricing. Built and maintained by \[your username].

This actor is part of a suite of 9 specialized Turkish market data tools:

**E-Commerce Intelligence:**

- N11 Product Scraper ? Turkey's third-largest marketplace
- Turkish Marketplace Seller Intelligence ? Trendyol, Hepsiburada, N11 seller profiles
- Turkish E-Commerce Review Aggregator ? Cross-platform reviews with sentiment analysis

**Automotive Intelligence:**

- Arabam.com Vehicle Scraper ? Used car listings with paint condition data
- Turkish Auto Price Tracker ? Cross-platform vehicle valuation
- Turkish Auto Dealer Intelligence ? Galeri profiles and inventory analytics

**Real Estate Intelligence:**

- Emlakjet Property Scraper ? Zero-competition property data
- Turkish Property Valuation Engine ? Cross-platform pricing with rental yield analysis
- Turkish Real Estate Agency Scraper ? Emlak ofisi profiles and portfolios

All actors share consistent output schemas, Turkish language support, and transparent
pay-per-event pricing. Built and maintained by \[your username].

This actor is part of a suite of 9 specialized Turkish market data tools:

**E-Commerce Intelligence:**

- N11 Product Scraper ? Turkey's third-largest marketplace
- Turkish Marketplace Seller Intelligence ? Trendyol, Hepsiburada, N11 seller profiles
- Turkish E-Commerce Review Aggregator ? Cross-platform reviews with sentiment analysis

**Automotive Intelligence:**

- Arabam.com Vehicle Scraper ? Used car listings with paint condition data
- Turkish Auto Price Tracker ? Cross-platform vehicle valuation
- Turkish Auto Dealer Intelligence ? Galeri profiles and inventory analytics

**Real Estate Intelligence:**

- Emlakjet Property Scraper ? Zero-competition property data
- Turkish Property Valuation Engine ? Cross-platform pricing with rental yield analysis
- Turkish Real Estate Agency Scraper ? Emlak ofisi profiles and portfolios

All actors share consistent output schemas, Turkish language support, and transparent
pay-per-event pricing. Built and maintained by \[your username].

This actor is part of a suite of 9 specialized Turkish market data tools:

**E-Commerce Intelligence:**

- N11 Product Scraper ? Turkey's third-largest marketplace
- Turkish Marketplace Seller Intelligence ? Trendyol, Hepsiburada, N11 seller profiles
- Turkish E-Commerce Review Aggregator ? Cross-platform reviews with sentiment analysis

**Automotive Intelligence:**

- Arabam.com Vehicle Scraper ? Used car listings with paint condition data
- Turkish Auto Price Tracker ? Cross-platform vehicle valuation
- Turkish Auto Dealer Intelligence ? Galeri profiles and inventory analytics

**Real Estate Intelligence:**

- Emlakjet Property Scraper ? Zero-competition property data
- Turkish Property Valuation Engine ? Cross-platform pricing with rental yield analysis
- Turkish Real Estate Agency Scraper ? Emlak ofisi profiles and portfolios

All actors share consistent output schemas, Turkish language support, and transparent
pay-per-event pricing. Built and maintained by \[your username].

### SEO Keywords

**English:** Turkish property valuation, Istanbul apartment prices, Turkey real estate investment, Turkish rental yield calculator, sahibinden hepsiemlak price comparison, Turkey citizenship by investment property, Istanbul property market data, Turkish real estate API

**Turkish:** türkiye konut değerleme, istanbul daire fiyatları, türkiye gayrimenkul yatırım, kiralık satılık kira getirisi hesaplama, emlak fiyat analizi, konut piyasası verileri, türkiye yatırım amaçlı konut

***

### Tags

`turkey` `turkish` `real-estate` `property` `emlak` `konut` `valuation` `price-analysis` `rental-yield` `investment` `fiyat` `kira` `getiri`

`turkey` `turkish` `real-estate` `property` `emlak` `konut` `valuation` `price-analysis` `rental-yield` `investment` `fiyat` `kira` `getiri`

`turkey` `turkish` `real-estate` `property` `emlak` `konut` `valuation` `price-analysis` `rental-yield` `investment` `fiyat` `kira` `getiri`

`turkey` `turkish` `real-estate` `property` `valuation` `rental-yield` `investment` `istanbul` `sahibinden` `hepsiemlak` `emlakjet` `emlak` `konut` `gayrimenkul` `price-analysis`

# Actor input Schema

## `queries` (type: `array`):

One or more property specifications to value. Each query produces one valuation report.

## `platforms` (type: `array`):

Which platforms to include in the valuation run.

## `maxListingsPerPlatform` (type: `integer`):

Maximum listings to collect from each platform for each query.

## `includeRentalYield` (type: `boolean`):

If enabled, also collects rental listings to compute gross yield, net yield, and payback period.

## `proxyConfig` (type: `object`):

Apify proxy config. Turkish residential proxies are required for reliable Sahibinden access.

## `sahibindenCookies` (type: `array`):

Optional session cookies for Sahibinden. Without them, Sahibinden is skipped gracefully.

## Actor input object example

```json
{
  "queries": [
    {
      "city": "istanbul",
      "district": "kadikoy",
      "propertyType": "daire",
      "rooms": "3+1",
      "areaMin": 100,
      "areaMax": 150,
      "listingType": "satilik"
    }
  ],
  "platforms": [
    "sahibinden",
    "hepsiemlak",
    "emlakjet"
  ],
  "maxListingsPerPlatform": 50,
  "includeRentalYield": true,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "TR"
  },
  "sahibindenCookies": []
}
```

# Actor output Schema

## `reports` (type: `string`):

Computed valuation reports per query, including aggregate pricing statistics, price-per-square-meter analysis, and optional rental yield metrics.

## `priceRecords` (type: `string`):

Underlying comparable property records gathered from supported listing platforms and used to build valuation statistics.

## `runSummary` (type: `string`):

Operational summary of the valuation run, including query counts, comparable-record totals, per-platform results, blocked platforms, warnings, and errors.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("seralifatih/turkish-real-estate-api-3").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("seralifatih/turkish-real-estate-api-3").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call seralifatih/turkish-real-estate-api-3 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seralifatih/turkish-real-estate-api-3",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Turkish Property Valuation Engine",
        "description": "Analyze Turkish property prices across Emlakjet, Hepsiemlak, and Sahibinden to generate valuation reports, comparable property records, price-per-square-meter benchmarks, and optional rental yield insights. Ideal for investors, proptech tools, and valuation workflows.",
        "version": "0.0",
        "x-build-id": "qAfJXrB3HUGhMVBu2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/seralifatih~turkish-real-estate-api-3/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-seralifatih-turkish-real-estate-api-3",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/seralifatih~turkish-real-estate-api-3/runs": {
            "post": {
                "operationId": "runs-sync-seralifatih-turkish-real-estate-api-3",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/seralifatih~turkish-real-estate-api-3/run-sync": {
            "post": {
                "operationId": "run-sync-seralifatih-turkish-real-estate-api-3",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Valuation Queries",
                        "type": "array",
                        "description": "One or more property specifications to value. Each query produces one valuation report.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "city": {
                                    "title": "City",
                                    "type": "string",
                                    "description": "Turkish province name or slug, validated against the official province list."
                                },
                                "district": {
                                    "title": "District",
                                    "type": "string",
                                    "description": "Optional district name or slug validated against the selected province."
                                },
                                "propertyType": {
                                    "title": "Property Type",
                                    "type": "string",
                                    "description": "Property category such as daire, villa, arsa, or ofis."
                                },
                                "rooms": {
                                    "title": "Room Layout",
                                    "type": "string",
                                    "description": "Room layout string such as 1+1, 2+1, or 3+1."
                                },
                                "areaMin": {
                                    "title": "Min Area (m2)",
                                    "type": "integer",
                                    "description": "Minimum area filter in square meters."
                                },
                                "areaMax": {
                                    "title": "Max Area (m2)",
                                    "type": "integer",
                                    "description": "Maximum area filter in square meters."
                                },
                                "listingType": {
                                    "title": "Listing Type",
                                    "type": "string",
                                    "description": "Search either satilik or kiralik listings for this query.",
                                    "enum": [
                                        "satilik",
                                        "kiralik"
                                    ]
                                }
                            }
                        }
                    },
                    "platforms": {
                        "title": "Platforms to Search",
                        "type": "array",
                        "description": "Which platforms to include in the valuation run.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "sahibinden",
                                "hepsiemlak",
                                "emlakjet"
                            ]
                        },
                        "default": [
                            "sahibinden",
                            "hepsiemlak",
                            "emlakjet"
                        ]
                    },
                    "maxListingsPerPlatform": {
                        "title": "Max Listings Per Platform",
                        "minimum": 5,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum listings to collect from each platform for each query.",
                        "default": 50
                    },
                    "includeRentalYield": {
                        "title": "Include Rental Yield Analysis",
                        "type": "boolean",
                        "description": "If enabled, also collects rental listings to compute gross yield, net yield, and payback period.",
                        "default": true
                    },
                    "proxyConfig": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy config. Turkish residential proxies are required for reliable Sahibinden access.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "countryCode": "TR"
                        }
                    },
                    "sahibindenCookies": {
                        "title": "Sahibinden Session Cookies",
                        "type": "array",
                        "description": "Optional session cookies for Sahibinden. Without them, Sahibinden is skipped gracefully.",
                        "items": {
                            "type": "object"
                        },
                        "default": []
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
