Sahibinden Scraper - Turkish Property Listings & Agent Contacts avatar

Sahibinden Scraper - Turkish Property Listings & Agent Contacts

Pricing

from $3.51 / 1,000 search listings

Go to Apify Store
Sahibinden Scraper - Turkish Property Listings & Agent Contacts

Sahibinden Scraper - Turkish Property Listings & Agent Contacts

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.

Pricing

from $3.51 / 1,000 search listings

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Sahibinden Scraper - Turkey Property Data & Agent Phones 🚀

SIÁN Agency StoreSpitogatos ScraperBayut Property ScraperYad2 Real Estate Scraper

🎉 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 for UAE, Saudi Arabia and Qatar sale and rent listings with agent contacts. Use Smart Idealista Scraper 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? 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, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — 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:

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.

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

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

FieldTypeRequiredDescription
operationstringNosearch (walk a search URL) or detail (full record for listing URLs). Default: search
searchUrlstringNoThe sahibinden search or category URL from your address bar. Used by search
listingUrlsarrayNoListing URLs in the /ilan/…/detay form. Full URLs only. Used by detail
maxItemsintegerNoHow many listings to return, 1 to 1000. Default: 100
includeDetailsbooleanNoAdd the attribute table, coordinates, photos and agent phone to every search row. Default: false
sortBystringNosite-default, date_desc, date_asc, price_asc or price_desc. Default: site-default

Example: a city search

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

Example: a search with agent phone numbers

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

Example: full records for listings you already have

{
"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.

FieldTypeDescription
listingIdstringsahibinden listing number
propertyTitlestringListing headline as published
listingUrlstringDirect link to the listing
pricenumberAsking price, parsed from the Turkish format
currencystringCurrency shown on the listing, usually TL
pricePerSqmnumberPrice per m² where sahibinden publishes it
areaSqm / netAreaSqmnumberGross and net floor area
roomCountstringRoom count in sahibinden's own form, such as 2+1
buildingAgestringBuilding age as listed
floorNumber / totalFloorsstring / numberFloor of the unit and floors in the building
heatingstringHeating system
deedStatusstringDeed status (tapu durumu)
duesTlnumberMonthly dues in TL
city / district / neighbourhoodstringLocation, read from the table's own header
latitude / longitudenumberMap coordinates from the detail page
listedDatestringDate the listing went up
sellerName / sellerPhonestringContact name and phone from the detail page
sellerStoreName / sellerLicenseNostringAgency name and its licence number
photoUrls / photoCountarray / numberFull-size gallery images and how many there are
attributesobjectThe raw attribute table exactly as sahibinden published it

Example row (trimmed):

{
"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

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

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

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
  • 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
EventPricePer 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


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

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.


🤝 Support

Join our active support community


Built by SIÁN Agency | More Tools

⭐ Getting value from this actor? Leave a 5-star review — 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.