# Hepsiemlak Property Scraper (`shahidirfan/hepsiemlak-property-scraper`) Actor

Scrape live property listings from Turkey's largest real estate platform. Get prices, locations, property features, descriptions & contacts. Perfect for real estate analytics, market research, investment intelligence & property market data.

- **URL**: https://apify.com/shahidirfan/hepsiemlak-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 85.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Hepsiemlak Property Scraper

Extract property listings from Hepsiemlak search result pages for Turkish real estate research, pricing analysis, and market monitoring. Collect listing details such as price, location, property type, room count, square meters, images, owner or agency data, map coordinates, and source URLs.

### Features

- **Search URL collection** - Scrape one or more Hepsiemlak result URLs from cities, districts, sale pages, rental pages, and filtered searches.
- **Pagination support** - Continue through result pages until the requested result count or page limit is reached.
- **Clean output** - Empty and always-null values are removed before records are saved.
- **Rich property fields** - Collect pricing, location, property specs, image links, contact fields, and listing dates when available.
- **Simple URL input** - Use `startUrls` for one or more search result URLs.

***

### Use Cases

#### Real Estate Market Research

Track asking prices across Istanbul, Ankara, Izmir, and other Turkish cities. Build datasets by location, property type, room count, and area to compare neighborhoods and price bands.

#### Investment Analysis

Collect sale and rental listings to evaluate local supply, property sizes, and agency activity. Use the data to compare opportunities across districts and identify pricing patterns.

#### Competitor Monitoring

Monitor how agencies publish listings, update prices, and position properties in specific markets. Export recurring runs to spreadsheets or dashboards for review.

#### Lead Enrichment

Gather public listing and agency information for internal CRM enrichment, property matching, or valuation workflows. Keep collection sizes reasonable and respect website terms.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | Array | No | Istanbul sale URL | One or more Hepsiemlak search result URLs. |
| `results_wanted` | Integer | No | `20` | Maximum number of listings to collect. |
| `max_pages` | Integer | No | `10` | Maximum pages to visit per input URL. |
| `proxyConfiguration` | Object | No | Residential Apify Proxy | Proxy settings for reliable collection. |

***

### Output Data

Each dataset item can contain:

| Field | Type | Description |
|-------|------|-------------|
| `id` | Integer | Internal listing identifier |
| `listing_id` | String | Hepsiemlak listing number |
| `title` | String | Listing title |
| `price` | Number | Listing price |
| `currency` | String | Price currency |
| `detail_url` | String | Property detail page URL |
| `city`, `county`, `district`, `neighborhood` | String | Location fields |
| `property_type`, `main_category`, `listing_category` | String | Property and listing categories |
| `rooms`, `room_numbers`, `living_rooms` | String / Array | Room information |
| `net_sqm`, `gross_sqm` | Number | Property area |
| `building_age`, `floor`, `total_floors` | String / Number | Building details |
| `image_url`, `images` | String / Array | Property image URLs |
| `map_lat`, `map_lon` | Number | Map coordinates |
| `owner_name`, `owner_type`, `owner_phone`, `firm_name`, `whatsapp` | String | Public contact and agency fields |
| `create_date`, `update_date`, `listing_updated_date`, `start_date` | String | Listing date fields |
| `from_url` | String | Source search URL |

***

### Usage Examples

#### Basic Istanbul Sale Search

```json
{
  "startUrls": [{ "url": "https://www.hepsiemlak.com/istanbul-satilik" }],
  "results_wanted": 20,
  "max_pages": 3
}
```

#### Rental Listings

```json
{
  "startUrls": [{ "url": "https://www.hepsiemlak.com/istanbul-kiralik" }],
  "results_wanted": 50,
  "max_pages": 5
}
```

#### Multiple Markets

```json
{
  "startUrls": [
    { "url": "https://www.hepsiemlak.com/ankara-satilik" },
    { "url": "https://www.hepsiemlak.com/izmir-kiralik" }
  ],
  "results_wanted": 100,
  "max_pages": 5
}
```

***

### Sample Output

```json
{
  "id": 45698218,
  "listing_id": "153573-170",
  "title": "120 Square Meters Apartment For Sale",
  "price": 6250000,
  "currency": "TL",
  "detail_url": "https://www.hepsiemlak.com/ankara-etimesgut-yesilova-satilik/daire/153573-170",
  "city": "Ankara",
  "county": "Etimesgut",
  "district": "Yesilova",
  "property_type": "Apartment",
  "rooms": "3+1",
  "net_sqm": 110,
  "gross_sqm": 120,
  "owner_name": "IMECE GAYRIMENKUL",
  "owner_phone": "+905527592593",
  "image_url": "https://www.hepsiemlak.com/ds01/8/1/2/8/9/6/5/4/image.jpg",
  "from_url": "https://www.hepsiemlak.com/istanbul-satilik"
}
```

***

### Tips for Best Results

#### Use Search Result URLs

- Start from Hepsiemlak listing result pages, not account pages or saved searches.
- Keep filters in the URL when you need a specific property type, location, or price range.

#### Start With Small Runs

- Use `results_wanted` of `20` for first tests.
- Increase result counts after confirming the URL returns the expected market.

#### Configure Proxies

Residential proxies are recommended. Select Turkey as the country for the most reliable collection:

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "TR"
  }
}
```

If you omit proxy settings, the actor automatically uses Apify Residential proxy in Turkey.

***

### Integrations

Connect your data with:

- **Google Sheets** - Review listing data in spreadsheets.
- **Airtable** - Build searchable property databases.
- **Webhooks** - Send fresh results to your system.
- **Make** - Automate market monitoring workflows.
- **Zapier** - Trigger notifications or CRM updates.

#### Export Formats

- **JSON** - For developers and automated pipelines.
- **CSV** - For spreadsheet analysis.
- **Excel** - For business reporting.
- **XML** - For system integrations.

***

### Frequently Asked Questions

#### Can I scrape both sale and rental pages?

Yes. Provide any working Hepsiemlak result URL, including sale and rental pages, and the actor follows pagination from that URL.

#### Can I use filtered URLs?

Yes. Filtered URLs are supported as long as the filters are present in the search result URL.

#### Why are some fields missing?

Some listings do not publish every field. Empty values are removed from each dataset item to keep output clean.

#### How many listings can I collect?

You can set `results_wanted` to the number you need. Larger runs should use proxies and reasonable page limits.

#### Do I need a proxy?

A proxy is strongly recommended for reliable runs because Hepsiemlak may challenge repeated automated requests. Apify Residential proxy with country Turkey is the most reliable option and is used by default when you do not specify proxy settings.

#### How does the actor handle blocked requests?

If a request is challenged or fails temporarily, the actor automatically retries with a different request profile and proxy session before giving up, so transient blocks do not stop the run.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring compliance with Hepsiemlak terms of service and applicable laws. Use collected data responsibly and respect rate limits.

# Actor input Schema

## `startUrls` (type: `array`):

Hepsiemlak search result page URLs. Add one or more URLs for different locations, listing types, or filters.

## `results_wanted` (type: `integer`):

Maximum number of property listings to collect.

## `max_pages` (type: `integer`):

Safety cap on the number of search result pages to visit per URL.

## `proxyConfiguration` (type: `object`):

Use Apify Proxy for reliable scraping. Hepsiemlak is protected, so residential proxy with country TR is recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.hepsiemlak.com/istanbul-satilik"
    }
  ],
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "TR"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.hepsiemlak.com/istanbul-satilik"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/hepsiemlak-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 = { "startUrls": [{ "url": "https://www.hepsiemlak.com/istanbul-satilik" }] }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/hepsiemlak-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 '{
  "startUrls": [
    {
      "url": "https://www.hepsiemlak.com/istanbul-satilik"
    }
  ]
}' |
apify call shahidirfan/hepsiemlak-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/hepsiemlak-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/gv9BaXSDXHIVy3JxZ/builds/qgRmusggIefpPJChB/openapi.json
