Sahibinden Scraper - Turkish Property Listings & Agent Contacts
Pricing
from $3.51 / 1,000 search listings
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Ü
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Sahibinden Scraper - Turkey Property Data & Agent Phones 🚀
🎉 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
| 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
{"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.
| 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):
{"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 ApifyClientclient = 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)
- Trigger: a daily schedule, or a webhook from your own system
- HTTP Request: start the Actor with your saved search URL
- Process: read the dataset and drop rows already seen, matching on listing ID
- 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.
❓ 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.
🤝 Support
Join our active support community
- Browse more tools → SIÁN Agency Store
- ✉️ apify@sian-agency.online
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.