# Sahibinden Scraper - Turkish Property Listings & Agent Contacts (`sian.agency/sahibinden-property-scraper`) Actor

Scrape sahibinden.com: satılık and kiralık listings across Turkey. Price, m², rooms, building age, heating, deed status, map coordinates, photos and agent phone numbers.

- **URL**: https://apify.com/sian.agency/sahibinden-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.51 / 1,000 search listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Sahibinden Scraper - Turkey Property Data & Agent Phones 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian)[![Spitogatos Scraper](https://img.shields.io/badge/Store-Spitogatos%20Scraper-1AE392)](https://apify.com/sian.agency/spitogatos-property-scraper?fpr=sian)[![Bayut Property Scraper](https://img.shields.io/badge/Store-Bayut%20Property%20Scraper-93D500)](https://apify.com/sian.agency/bayut-property-scraper?fpr=sian)[![Yad2 Real Estate Scraper](https://img.shields.io/badge/Store-Yad2%20Real%20Estate%20Scraper-1AE392)](https://apify.com/sian.agency/yad2-property-scraper?fpr=sian)

#### 🎉 50 listings per request, $3.99 per 1,000 — and the agent's phone number in the same row

##### satılık daire, kiralık daire, arsa and iş yeri across all of Turkey: price, m², building age, heating, deed status, map coordinates and every photo

***

### 🔎 What is the Sahibinden Property Scraper — and when should you use it?

The **Sahibinden Property Scraper** turns Turkish property listings and estate-agent contacts from sahibinden.com into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Turkish property data of any kind — satılık and kiralık apartments, houses, land, shops and offices from sahibinden.com, Turkey's number-one property portal. Every listing carries asking price, gross and net m², room count, city, district, neighbourhood and listing date. Switch on the detail record and each row also gets the full 25-field attribute table: building age, floor, heating, deed status, monthly dues, furnished, parking and mortgage eligibility. That record adds map coordinates, the whole photo gallery, the description, and the seller's name, agency, licence number and published phone number.

**Use something else when:** the property is not in Turkey. Use [Property Finder Scraper](https://apify.com/sian.agency/propertyfinder-property-scraper?fpr=sian) for UAE, Saudi Arabia and Qatar sale and rent listings with agent contacts. Use [Smart Idealista Scraper](https://apify.com/sian.agency/smart-idealista-scraper?fpr=sian) for Spain, Italy and Portugal sale and rental listings. This actor covers Turkey only, and only sahibinden's real-estate categories — its vehicle, job and second-hand marketplaces are not included.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/sahibinden-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Turkish property listings and agent contacts from sahibinden.com using the Apify Actor `sian.agency/sahibinden-property-scraper`.

Use it when I need: Turkish property data of any kind — satılık and kiralık apartments, houses, land, shops and offices from sahibinden.com, Turkey's number-one property portal. Every listing carries asking price, gross and net m², room count, city, district, neighbourhood and listing date. Switch on the detail record and each row also gets the full 25-field attribute table: building age, floor, heating, deed status, monthly dues, furnished, parking and mortgage eligibility. That record adds map coordinates, the whole photo gallery, the description, and the seller's name, agency, licence number and published phone number.

Don't use it when: the property is not in Turkey — use propertyfinder-property-scraper or smart-idealista-scraper instead.

How to call it: set `operation` to `search` and paste a sahibinden URL into `searchUrl` — build it on sahibinden.com with whatever filters you want (category, city, district, price band, m², rooms, building age, from-owner vs from-agency) and copy the address bar; set `maxItems` for how many listings to bring back, `sortBy` to `date_desc` for a newest-first monitor or `price_asc` for a deal sweep, and switch on `includeDetails` to add the full attribute table, coordinates, photos and the agent's phone to every row. For listings you already have, set `operation` to `detail` and put their URLs in `listingUrls`.

Start with this input:
{
  "operation": "search",
  "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
  "maxItems": 50,
  "includeDetails": false,
  "sortBy": "date_desc"
}

Ask me which Turkish city or district, whether they want listings for sale (satılık) or to rent (kiralık), which property type, and whether they need the agents' phone numbers, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull the newest 200 apartments for sale in Kadıköy and rank them by price per square metre.*
- *Give me every rental listing in Çankaya, Ankara under 40,000 lira with the letting agency's phone number.*
- *Build a comparables table for 3+1 flats in Izmir between 5 and 8 million lira, with building age and floor.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/sahibinden-property-scraper.md](https://apify.com/sian.agency/sahibinden-property-scraper.md).

### 📋 Overview

**Set your filters on sahibinden.com, copy the URL out of the address bar, paste it here.** Whatever the site shows for that URL comes back as flat rows you can sort, filter and export — for estate agencies, investors, valuers, developers and anyone tracking the Turkish market.

**What you get:**

- ✅ **Every real-estate category**: satılık and kiralık konut, arsa, iş yeri, devremülk and turistik tesis, verified against four category layouts.
- ⚡ **50 listings per request**: a 500-listing sweep is ten requests, and that efficiency is what the $3.99 per 1,000 rests on.
- 🎯 **The full attribute table**: 25 named fields per detail record, plus the raw attribute set exactly as sahibinden published it.
- 💰 **$3.99 per 1,000 listings**: pay per row returned, never for a failed one, and no separate charge for the phone number.
- 📞 **Agent contacts included**: name, agency, sahibinden storefront, licence number and mobile number on the detail record.
- 🗺️ **Map coordinates on every detail row**: latitude and longitude, so results drop straight onto a map or into a GIS layer.
- 🇹🇷 **Turkish formats handled**: prices parsed out of the 3.650.000 TL form, room counts kept as 2+1, dates read from Turkish month names.
- ✨ **Column-safe parsing**: the results table is read from its own header row, so a daire URL and an arsa URL both come back correct.

***

### ✨ Features

- 🔍 **Paste-a-URL search**: any sahibinden search or category URL works, with every filter the site itself supports.
- 📋 **Listing Details mode**: hand it listing URLs and get the full record for each.
- 📞 **One switch for enrichment**: turn on full details and every search row gains the attribute table, coordinates, photos and the agent's phone.
- ↕️ **Five orderings**: site default, newest, oldest, cheapest or most expensive first.
- 📸 **Complete photo galleries**: the full-size image set per listing, not the thumbnail.
- 🧩 **Raw attributes kept**: a category-specific field this actor has never seen still reaches you instead of being dropped.
- 📊 **Run report**: an HTML summary saved to the key-value store with the counts, the failures and what the run cost.
- 📤 **Export anywhere**: JSON, CSV, Excel or the Apify API, straight into a sheet, a database or a CRM.

***

### 🎬 Quick Start

Pick your filters on sahibinden.com. Copy the address-bar URL. Run the Actor and collect the dataset.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~sahibinden-property-scraper/runs?token=YOUR_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"operation":"search","searchUrl":"https://www.sahibinden.com/satilik-daire/istanbul","maxItems":100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Build the filter on sahibinden.com

Choose category, city, district, price range, m², rooms, building age, from-owner or from-agency. Copy the URL out of your browser's address bar.

#### Step 2: Paste it and set the size

Drop the URL into the search-URL field, then say how many listings you want back. Turn on full details if you need the attribute table and the agent's phone.

#### Step 3: Run and export

Press Start. Rows appear in the dataset as they land, and you can download them as JSON, CSV or Excel the moment the run finishes.

**That's it! In a couple of minutes, you'll have:**

- A clean table of live Turkish listings with price, m², rooms and location on every row
- Agent and agency contact details wherever the seller publishes them
- A run report showing what came back, what failed and what it cost

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | No | search (walk a search URL) or detail (full record for listing URLs). Default: search |
| searchUrl | string | No | The sahibinden search or category URL from your address bar. Used by search |
| listingUrls | array | No | Listing URLs in the /ilan/…/detay form. Full URLs only. Used by detail |
| maxItems | integer | No | How many listings to return, 1 to 1000. Default: 100 |
| includeDetails | boolean | No | Add the attribute table, coordinates, photos and agent phone to every search row. Default: false |
| sortBy | string | No | site-default, date\_desc, date\_asc, price\_asc or price\_desc. Default: site-default |

**Example: a city search**

```json
{
  "operation": "search",
  "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
  "maxItems": 250,
  "sortBy": "date_desc"
}
```

**Example: a search with agent phone numbers**

```json
{
  "operation": "search",
  "searchUrl": "https://www.sahibinden.com/kiralik-daire/ankara-cankaya",
  "maxItems": 100,
  "includeDetails": true
}
```

**Example: full records for listings you already have**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://www.sahibinden.com/ilan/emlak-konut-satilik-cesme-ovacikta-2-plus1-full-deniz-manzarali-1338062029/detay" },
    { "url": "https://www.sahibinden.com/ilan/emlak-konut-satilik-mumin-altin-emlaktan-satilik-3-plus1-daire-1335723793/detay" }
  ]
}
```

***

### 📤 Output

Every row is flat JSON, exportable as CSV, JSON, Excel or through the API. Search rows carry the listing basics; detail rows add the whole attribute table, coordinates, photos and seller contacts.

| Field | Type | Description |
|-------|------|-------------|
| listingId | string | sahibinden listing number |
| propertyTitle | string | Listing headline as published |
| listingUrl | string | Direct link to the listing |
| price | number | Asking price, parsed from the Turkish format |
| currency | string | Currency shown on the listing, usually TL |
| pricePerSqm | number | Price per m² where sahibinden publishes it |
| areaSqm / netAreaSqm | number | Gross and net floor area |
| roomCount | string | Room count in sahibinden's own form, such as 2+1 |
| buildingAge | string | Building age as listed |
| floorNumber / totalFloors | string / number | Floor of the unit and floors in the building |
| heating | string | Heating system |
| deedStatus | string | Deed status (tapu durumu) |
| duesTl | number | Monthly dues in TL |
| city / district / neighbourhood | string | Location, read from the table's own header |
| latitude / longitude | number | Map coordinates from the detail page |
| listedDate | string | Date the listing went up |
| sellerName / sellerPhone | string | Contact name and phone from the detail page |
| sellerStoreName / sellerLicenseNo | string | Agency name and its licence number |
| photoUrls / photoCount | array / number | Full-size gallery images and how many there are |
| attributes | object | The raw attribute table exactly as sahibinden published it |

**Example row (trimmed):**

```json
{
  "listingId": "1338062029",
  "propertyTitle": "Çeşme Ovacıkta 2+1 Full Deniz Manzaralı",
  "listingUrl": "https://www.sahibinden.com/ilan/emlak-konut-satilik-cesme-ovacikta-2-plus1-full-deniz-manzarali-1338062029/detay",
  "price": 7350000,
  "currency": "TL",
  "priceText": "7.350.000 TL",
  "propertyType": "Satılık Daire",
  "areaSqm": 65,
  "netAreaSqm": 60,
  "roomCount": "2+1",
  "buildingAge": "0 (Yapım Aşamasında)",
  "floorNumber": "3",
  "totalFloors": 3,
  "heating": "Yerden Isıtma",
  "bathrooms": 1,
  "balcony": "Var",
  "elevator": "Yok",
  "parking": "Açık Otopark",
  "furnished": "Hayır",
  "usageStatus": "Boş",
  "duesTl": 0,
  "mortgageEligible": "Evet",
  "deedStatus": "Kat Mülkiyetli",
  "swapAccepted": "Evet",
  "city": "İzmir",
  "district": "Çeşme",
  "neighbourhood": "Ovacık Mh.",
  "latitude": 38.328254,
  "longitude": 26.315723,
  "listedDate": "2026-09-03",
  "listedBy": "Emlak Ofisinden",
  "sellerName": "Oktay D.",
  "sellerPhone": "0 (540) 635 77 77",
  "sellerStoreName": "OD EMLAK ALAÇATI",
  "sellerStoreUrl": "https://odemlak.sahibinden.com",
  "sellerLicenseNo": "3505492",
  "photoCount": 5,
  "categoryPath": "Emlak > Konut > Satılık > Daire > İzmir > Çeşme > Köyler > Ovacık Mh.",
  "scrapedAt": "2026-09-06T06:26:42.922Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Estate-agency lead generation

**An agency owner in Istanbul wants the agencies actively listing in the districts they compete in.**

**Input:** A satılık daire URL for the districts you sell in, with full details on.
**Output:** Agency name, sahibinden storefront, licence number, contact name and mobile number on every agency listing.
**Use:** A contact list of the agencies listing this week, not a directory compiled two years ago.

#### 2. Price and yield analysis by district

**A buy-to-let investor needs gross yield for a district without stitching two sources together.**

**Input:** Two runs over the same district, one satılık and one kiralık.
**Output:** Price, m² and district on both sides, collected on the same day.
**Use:** Both halves of a gross-yield calculation, per district, from one place.

#### 3. New-listing monitoring

**A buyer's agent wants to be first on anything that comes to market overnight.**

**Input:** A saved filter URL, order set to newest first, on an Apify schedule.
**Output:** Listing date, price and seller on every row, run after run.
**Use:** Diff on listing ID between runs and you see exactly what entered the market, at what price.

#### 4. Comparables for valuation

**A valuation surveyor needs a defensible comparables table for a single neighbourhood.**

**Input:** A neighbourhood URL narrowed to a price band and m² range, with full details on.
**Output:** Building age, floor, heating, deed status and coordinates on each comparable.
**Use:** A comparables set with a map reference on every row, ready to attach to a report.

#### 5. Development and land sourcing

**A developer is screening land across a province before anyone drives out to look.**

**Input:** A satılık arsa URL for the province, ordered by the site's default order.
**Output:** Area, price, price per m², deed status and coordinates.
**Use:** Plot every parcel on the market and rank it before the first site visit.

#### 6. Market reporting and research

**A proptech analyst is building a supply index for Turkish housing.**

**Input:** One category-and-city URL per series, run on a weekly schedule.
**Output:** Listing counts, prices and m² per city and per category, week over week.
**Use:** A supply and pricing time series you own, rather than a chart someone else publishes.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/sahibinden-property-scraper').call({
  operation: 'search',
  searchUrl: 'https://www.sahibinden.com/satilik-daire/istanbul',
  maxItems: 200,
  sortBy: 'date_desc',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/sahibinden-property-scraper').call(run_input={
    'operation': 'search',
    'searchUrl': 'https://www.sahibinden.com/kiralik-daire/ankara-cankaya',
    'maxItems': 100,
    'includeDetails': True,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['listingId'], item['price'], item.get('sellerPhone'))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~sahibinden-property-scraper/runs?token=YOUR_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "operation": "detail",
    "listingUrls": [{ "url": "https://www.sahibinden.com/ilan/emlak-konut-satilik-cesme-ovacikta-2-plus1-full-deniz-manzarali-1338062029/detay" }]
  }'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a daily schedule, or a webhook from your own system
2. **HTTP Request**: start the Actor with your saved search URL
3. **Process**: read the dataset and drop rows already seen, matching on listing ID
4. **Action**: write new listings to a sheet, a CRM or a Slack alert

***

### 💰 Performance & Pricing

#### FREE tier (try it now)

- **25 rows per run**, full feature access and the same data quality
- No credit card required
- Enough to check the fields and the format before you commit

#### PAID tier (production)

- **Unlimited rows per run**, up to what sahibinden serves for a single filter
- 50 listings arrive per request, so a 1,000-listing sweep is 20 requests
- Pay per row returned: a failed item is never charged

| Event | Price | Per 1,000 |
|---|---:|---:|
| Actor Start | $0.005 per run | — |
| Listing returned from a search | $0.00399 | $3.99 |
| Full listing detail record | $0.01400 | $14.00 |

💰 **The phone number is not a separate line.** A detail record carries the 25-field attribute table, map coordinates, the full photo gallery, the description, the agency licence number and the agent's mobile — all inside the one detail charge. Prices above are the Bronze rate, and higher Apify plans pay less per event.

🔗 [View current pricing](https://apify.com/sian.agency/sahibinden-property-scraper?fpr=sian)

***

### ❓ FAQ — Frequently Asked Questions

**Q: Do I need a sahibinden account or an API key?**
A: No. Paste a sahibinden URL and press Start.

**Q: How do I build the search URL?**
A: Set the filters you want on sahibinden.com: category, city, district, price, m², rooms, building age, from-owner or from-agency. Then copy the URL out of the address bar. Whatever the site shows for that URL is what you get back.

**Q: Why can I not get more than 1,000 listings from one search?**
A: sahibinden serves at most 1,000 results per filter, on the site as well as here. Split the search by city, by district or by price band. Each split is its own 1,000-row window.

**Q: Are the agent phone numbers included?**
A: Yes, on the detail record. Turn on full details during a search run, or use the Listing Details operation on URLs you already have. Numbers come back for listings whose seller publishes one.

**Q: Does it cover rentals and land as well as sales?**
A: Every sahibinden real-estate category works: satılık and kiralık konut, arsa, iş yeri, devremülk and turistik tesis. Column layouts differ per category, and each results table is read from its own header row.

**Q: What currency do prices come back in?**
A: The currency sahibinden shows, with the number parsed out of the Turkish format and the original text kept beside it. Most listings are in TL, and no conversion is applied.

**Q: Can I run this on a schedule?**
A: Yes. Order by newest first, put it on an Apify schedule, and diff on listing ID between runs to isolate the new listings.

**Q: What output formats are available?**
A: JSON, CSV and Excel from the dataset, or straight through the Apify API into your own system.

***

### 🐛 Troubleshooting

**The run returned zero rows**

- Open the same URL in your browser. If the site shows no results for that filter, there is nothing to return.
- Check the URL is a sahibinden search or category page, not a saved-search or account page.

**Fewer listings than I asked for**

- sahibinden stops serving results at 1,000 per filter. Narrow by city, district or price band and run each split.
- On the FREE tier a run stops at 25 rows. Add a payment method in Apify Console to lift it.

**No phone number on a row**

- Full details must be on, or use the Listing Details operation. Search rows alone do not carry contacts.
- Some sellers publish no number at all, and those rows come back without one.

**A row carries a detail note**

- That listing's own page could not be read on this pass, and you were not charged for it. Re-run those listing URLs through the Listing Details operation.

**Prices or room counts look odd**

- Turkish formatting: 3.650.000 TL is three million six hundred fifty thousand, and 2+1 is a room count rather than a number.
- The parsed number is in the price field and the original string is kept in the price-as-shown field.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Listing pages include agent and seller contact details. Personal data is protected by the **GDPR** in the European Union, by Turkey's **KVKK**, and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

**Join our active support community**

- Browse more tools → [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian)
- ✉️ <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

**⭐ Getting value from this actor? [Leave a 5-star review](https://apify.com/sian.agency/sahibinden-property-scraper/reviews) — it helps other property professionals find it.**

***

### ⚖️ Disclaimer

sahibinden.com is a trademark of Sahibinden Bilgi Teknolojileri Pazarlama ve Ticaret A.Ş. This actor is not affiliated with, endorsed by, or sponsored by sahibinden.com. All trademarks mentioned are the property of their respective owners.

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/sahibinden-property-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Search Listings walks a sahibinden search or category URL and returns every listing on it. Listing Details takes listing URLs you already have and returns the full record for each — the whole attribute table, map coordinates, all photos and the agent's phone number.

## `searchUrl` (type: `string`):

Set your filters on sahibinden.com, then paste the URL from the address bar. Anything the site can filter on works — category, city, district, price range, m², room count, building age, heating, from-owner vs from-agency. Examples: https://www.sahibinden.com/satilik-daire/istanbul · https://www.sahibinden.com/kiralik-daire/ankara-cankaya · https://www.sahibinden.com/satilik-arsa/izmir · https://www.sahibinden.com/kiralik-isyeri. Used by Search Listings only.

## `listingUrls` (type: `array`):

sahibinden.com listing URLs in the /ilan/…/detay form — for example https://www.sahibinden.com/ilan/emlak-konut-satilik-mumin-altin-emlaktan-satilik-3-plus1-daire-1335723793/detay. Paste them, add them one by one, or point at a file of URLs. Full URLs only: this field validates each entry as a URL, so a bare listing ID is rejected before the run starts. Used by Listing Details only.

## `maxItems` (type: `integer`):

How many listings to return from the search URL. sahibinden itself will not serve more than 1,000 results for any single filter, so ask for more than that and you get 1,000 — split the search by city or price band to go wider. Every 50 listings is one request.

## `includeDetails` (type: `boolean`):

Off by default. Turn it on and every listing from the search is also opened on its own page, which adds the full 25-field attribute table (net m², building age, floor, heating, deed status, dues, furnished, parking…), the map coordinates, the whole photo gallery, the description, and the seller's name, agency, licence number and phone. This opens one extra page per listing and is charged as a Listing Detail on top of the listing itself.

## `sortBy` (type: `string`):

Which listings come back first. Leave it on the URL's own order unless you want something specific — with a 1,000-row ceiling per search, 'Newest first' is what you want for a daily monitor and 'Cheapest first' for a deal sweep. These five are the orders sahibinden serves for every real-estate category; its m² sort is named differently per category and is deliberately not offered here.

## Actor input object example

```json
{
  "operation": "search",
  "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
  "listingUrls": [],
  "maxItems": 100,
  "includeDetails": false,
  "sortBy": "site-default"
}
```

# Actor output Schema

## `sahibindenComListings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
    "listingUrls": [],
    "maxItems": 100,
    "includeDetails": false,
    "sortBy": "site-default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/sahibinden-property-scraper").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 = {
    "operation": "search",
    "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
    "listingUrls": [],
    "maxItems": 100,
    "includeDetails": False,
    "sortBy": "site-default",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/sahibinden-property-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "operation": "search",
  "searchUrl": "https://www.sahibinden.com/satilik-daire/istanbul",
  "listingUrls": [],
  "maxItems": 100,
  "includeDetails": false,
  "sortBy": "site-default"
}' |
apify call sian.agency/sahibinden-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/sahibinden-property-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Kww7zEtatGOLqbi3r/builds/eL5A5njoZXNDbUYts/openapi.json
