# Madlan Scraper - Real Estate Israel (`igolaizola/madlan-scraper`) Actor

Scrape sale and rental listings from madlan.co.il. Collect prices, areas, addresses, coordinates, images, and amenities. Search by city or coordinates with distance, budget, property type, rooms, and filters. Export JSON, CSV, or Excel for property research, valuation, and market analysis.

- **URL**: https://apify.com/igolaizola/madlan-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 70.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Madlan Scraper — Israel Real Estate Listings

Find Israeli homes and new-development properties on [Madlan](https://www.madlan.co.il) for sale or rent. Get clean property records for market research, investment analysis, agency prospecting, price monitoring, and neighborhood research, including richer property attributes, images, locations, pricing, and contact information when available.

### 🏠 What you can do

- Search a city, neighborhood, or area in Israel.
- Search a square area around latitude and longitude coordinates.
- Choose properties for sale or rent.
- Include or exclude new-development projects in sale searches.
- Filter by price, price per square meter, monthly building tax, rooms, bathrooms, area, and floor.
- Filter by property type, condition, seller, amenities, availability, recent price drops, and market estimate.
- Limit the number of listings returned or collect all available pages.
- Receive richer structured detail data for every listing.

### 💼 Useful for

- Comparing asking prices across Israeli neighborhoods.
- Building property and investment research datasets.
- Monitoring new listings and development projects.
- Finding opportunities for real-estate agencies and lead-generation teams.
- Exporting listing data to spreadsheets, dashboards, or data warehouses.

### 🚀 Run in Apify

1. Open the actor in Apify Console.
2. Enter a city or area, such as `תל אביב`, or provide a coordinate point.
3. Optionally choose a **locationType** to select a matching city, neighbourhood, address, project, or other suggestion.
4. For coordinate search, enter **latitude**, **longitude**, and **distanceKm**. Coordinates take precedence over the named location.
5. Choose **For sale** or **For rent**.
6. Set optional price, size, property, amenity, and availability filters.
7. Set optional limits.
8. Click **Start** and download JSON, CSV, or Excel from the **Dataset** tab when the run finishes.

### 📝 Input

| Field | Type / choices | Description |
| --- | --- | --- |
| `location` | Text, prefilled with `תל אביב` | City, neighborhood, or area to search. Used when coordinates are not provided. |
| `locationType` | `Automatic` or a suggestion type such as `city`, `neighbourhood`, `address`, or `project` | Select the matching suggestion type. `Automatic` selects the first suggestion. |
| `latitude` / `longitude` | Number, for example `32.0853` / `34.7818` | Center point for coordinate search. Provide both values; they take precedence over `location`. |
| `distanceKm` | Integer, default **20** | Half-width of the square coordinate search area in kilometers. |
| `operation` | `sale` — For sale; `rent` — For rent | Listing type. |
| `includeNewDevelopments` | Boolean, default `true` | Include new-development project listings in sale searches. It has no effect on rental searches. |
| `minPrice` / `maxPrice` | Integer, default `0` | Asking-price range in Israeli shekels. A bound of `0` means no bound. |
| `minPricePerSqm` / `maxPricePerSqm` | Integer, default `0` | Asking-price-per-square-meter range in Israeli shekels. |
| `minMonthlyTax` / `maxMonthlyTax` | Integer, default `0` | Monthly building-tax range in Israeli shekels. |
| `minRooms` / `maxRooms` | Number, default `0` | Room-count range; half-room values are supported. |
| `minBathrooms` / `maxBathrooms` | Number, default `0` | Bathroom-count range. |
| `minArea` / `maxArea` | Integer, default `0` | Property-area range in square meters. |
| `minFloor` / `maxFloor` | Integer, default `0` | Floor range; `0` means no bound. |
| `propertyTypes` | Array of choices | Apartment, villa, garden apartment, cottage, semi-detached cottage, penthouse, attic apartment, farm land, duplex, land, or building. Empty means all types. |
| `propertyConditions` | Array of choices | New, like new, renovated, preserved, or needs renovation. Empty means all conditions. |
| `sellerType` | `Any seller` or `New-development developer` | Restrict results by seller category. |
| `parking`, `elevator`, `balcony`, `airConditioning`, `storage`, `accessible`, `securityBars`, `protectedRoom`, `attic`, `basement`, `buildingLaundry`, `ceilingFan`, `dishwasher`, `doorman`, `fireplace`, `furnished`, `garage`, `gym`, `heating`, `outdoorSpace`, `pool`, `roofDeck`, `unitLaundry`, `petsAllowed` | Boolean, default `false` | Require the selected property feature. |
| `includePriceDrops` | Boolean, default `false` | Include only listings marked with a recent price drop. |
| `belowMarketPrice` | Boolean, default `false` | Include only listings marked below the market estimate. |
| `includeDiscountedProjects` | Boolean, default `false` | Include discounted new-development projects in sale searches. |
| `immediateAvailability` | Boolean, default `false` | Include only listings marked immediately available. |
| `noBrokerFee` | Boolean, default `false` | Include only listings marked as having no broker fee. |
| `maxItems` | Integer, default `100`; `0` = unlimited | Maximum number of records to save. |

### 📚 Examples

#### Sale listings in Tel Aviv

```json
{
  "location": "תל אביב",
  "operation": "sale",
  "includeNewDevelopments": true,
  "minPrice": 1000000,
  "maxPrice": 5000000,
  "minRooms": 3,
  "propertyTypes": ["flat", "penthouse"],
  "parking": true,
  "balcony": true,
  "maxItems": 50
}
```

#### Rental listings in Haifa

```json
{
  "location": "חיפה ישראל",
  "operation": "rent",
  "includeNewDevelopments": false,
  "maxItems": 25
}
```

#### Listings around a coordinate

```json
{
  "latitude": 32.0853,
  "longitude": 34.7818,
  "distanceKm": 5,
  "operation": "sale",
  "maxItems": 50
}
```

#### Select a location suggestion by type

```json
{
  "location": "ירושלים",
  "locationType": "city",
  "operation": "sale",
  "maxItems": 50
}
```

### 📊 Output

The **Overview** dataset view highlights listing identifiers, property information, prices, images, links, addresses, coordinates, descriptions, and contact information.

Field reference:

- **Property** — `id`, `type`, `price`, `beds`, `baths`, `floor`, `area`, `buildingYear`, and `generalCondition`.
- **Location** — `url`, `address`, `addressDetails`, and `locationPoint`.
- **Media and features** — `images`, `amenities`, `tags`, `description`, and `virtualTours`.
- **Market and contact data** — `priceHistory`, `eventsHistory`, `investorsData`, `insights`, `poc`, and `lastUpdated` when published.
- **Projects** — `projectName`, `developers`, `promotionStatus`, and `blockDetails` when the result is a new development.

Typical output:

```json
{
  "id": "GB8dENxmaky",
  "url": "https://www.madlan.co.il/listings/GB8dENxmaky",
  "type": "bulletin",
  "price": 3790000,
  "floor": 6,
  "address": "משמר הירדן 33, תל אביב יפו",
  "page": 1,
  "description": "Bright apartment near local amenities.",
  "beds": 4,
  "baths": 2,
  "area": 106,
  "locationPoint": { "lat": 32.104, "lng": 34.817 },
  "amenities": { "parking": true, "balcony": true },
  "images": [{ "imageUrl": "https://images2.madlan.co.il/bulletins/example.jpg" }]
}
```

Each listing also includes the structured fields returned for that property, such as `description`, `amenities`, `images`, `priceHistory`, `eventsHistory`, `locationPoint`, `addressDetails`, and seller/contact information.

### 💡 Tips

- Start with `maxItems: 100` to check the location and output shape.
- Use a Hebrew city or neighborhood name for the most precise search.
- Use `locationType` when a search term has multiple suggestions and you want a specific kind of location.
- Use latitude, longitude, and `distanceKm` when the search area is not tied to a named place. The coordinate area is square rather than circular.
- Use `maxItems: 0` only when you need all available pages and have planned for a larger run.

### ⚖️ Legal and ethical use

Use this actor only for lawful purposes and respect Madlan's terms, privacy requirements, intellectual-property rights, and applicable Israeli data-protection laws. Do not use collected contact information for unsolicited messages or other abusive activity. You are responsible for ensuring that your use of the data is permitted.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Madlan. All trademarks belong to their respective owners.

### ❓ FAQ

#### Does the default run return data?

Yes. The launch form is prefilled with a city, so starting without edits searches Tel Aviv-Yafo listings.

#### Can I search rentals?

Yes. Set `operation` to `rent`.

#### Can I search around coordinates?

Yes. Provide both `latitude` and `longitude`, then set `distanceKm` to the desired half-width of the square search area. This takes precedence over `location`.

#### What fields are included?

Records include structured information such as descriptions, images, addresses, coordinates, pricing history, amenities, and contact information when published for the listing.

#### Why is a field missing?

Some listings do not publish every field, so individual fields may be absent.

### 🛟 Support

Need a custom field or export? Contact [igolaizola.com/#contact](https://igolaizola.com/#contact).

# Actor input Schema

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

Maximum number of listings to return. Use 0 to continue through all available pages.

## `location` (type: `string`):

City, neighborhood, or area name to search, for example תל אביב. Used when latitude and longitude are not provided.

## `locationType` (type: `string`):

Choose how a matching location suggestion is selected. Automatic uses the first suggestion.

## `latitude` (type: `number`):

Center latitude for a coordinate search. Use together with longitude; coordinates take precedence over the named location.

## `longitude` (type: `number`):

Center longitude for a coordinate search. Use together with latitude.

## `distanceKm` (type: `integer`):

Half-width of the square search area centered on the coordinate point, in kilometers.

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

Choose whether to find properties offered for sale or rent.

## `includeNewDevelopments` (type: `boolean`):

Include new-development project listings in sale searches.

## `minPrice` (type: `integer`):

Minimum asking price in Israeli shekels. Leave at 0 for no minimum.

## `maxPrice` (type: `integer`):

Maximum asking price in Israeli shekels. Leave at 0 for no maximum.

## `minPricePerSqm` (type: `integer`):

Minimum asking price per square meter in Israeli shekels. Leave at 0 for no minimum.

## `maxPricePerSqm` (type: `integer`):

Maximum asking price per square meter in Israeli shekels. Leave at 0 for no maximum.

## `minMonthlyTax` (type: `integer`):

Minimum monthly building tax in Israeli shekels. Leave at 0 for no minimum.

## `maxMonthlyTax` (type: `integer`):

Maximum monthly building tax in Israeli shekels. Leave at 0 for no maximum.

## `minRooms` (type: `number`):

Minimum number of rooms. Half-room values are supported; leave at 0 for no minimum.

## `maxRooms` (type: `number`):

Maximum number of rooms. Half-room values are supported; leave at 0 for no maximum.

## `minBathrooms` (type: `number`):

Minimum number of bathrooms; leave at 0 for no minimum.

## `maxBathrooms` (type: `number`):

Maximum number of bathrooms; leave at 0 for no maximum.

## `minArea` (type: `integer`):

Minimum property area in square meters. Leave at 0 for no minimum.

## `maxArea` (type: `integer`):

Maximum property area in square meters. Leave at 0 for no maximum.

## `minFloor` (type: `integer`):

Minimum floor number. Leave at 0 for no minimum.

## `maxFloor` (type: `integer`):

Maximum floor number. Leave at 0 for no maximum.

## `propertyTypes` (type: `array`):

Restrict results to the selected residential property types. Leave empty for all types.

## `propertyConditions` (type: `array`):

Restrict results to the selected property conditions. Leave empty for all conditions.

## `sellerType` (type: `string`):

Restrict results to listings from a selected seller category.

## `parking` (type: `boolean`):

Only include properties with parking.

## `elevator` (type: `boolean`):

Only include properties in buildings with an elevator.

## `balcony` (type: `boolean`):

Only include properties with a balcony.

## `airConditioning` (type: `boolean`):

Only include properties with air conditioning.

## `storage` (type: `boolean`):

Only include properties with storage space.

## `accessible` (type: `boolean`):

Only include properties marked as accessible.

## `securityBars` (type: `boolean`):

Only include properties marked as having security bars.

## `protectedRoom` (type: `boolean`):

Only include properties with a protected room or listed shelter.

## `attic` (type: `boolean`):

Only include properties marked as having an attic.

## `basement` (type: `boolean`):

Only include properties marked as having a basement.

## `buildingLaundry` (type: `boolean`):

Only include properties in buildings with shared laundry facilities.

## `ceilingFan` (type: `boolean`):

Only include properties marked as having a ceiling fan.

## `dishwasher` (type: `boolean`):

Only include properties marked as having a dishwasher.

## `doorman` (type: `boolean`):

Only include properties in buildings with a doorman.

## `fireplace` (type: `boolean`):

Only include properties marked as having a fireplace.

## `furnished` (type: `boolean`):

Only include furnished properties.

## `garage` (type: `boolean`):

Only include properties marked as having a garage.

## `gym` (type: `boolean`):

Only include properties in buildings with a gym.

## `heating` (type: `boolean`):

Only include properties marked as having heating.

## `outdoorSpace` (type: `boolean`):

Only include properties marked as having outdoor space.

## `pool` (type: `boolean`):

Only include properties in buildings with a pool.

## `roofDeck` (type: `boolean`):

Only include properties marked as having a roof deck.

## `unitLaundry` (type: `boolean`):

Only include properties with laundry facilities in the unit.

## `petsAllowed` (type: `boolean`):

Only include properties marked as allowing pets.

## `includePriceDrops` (type: `boolean`):

Include only listings marked with a recent price drop.

## `belowMarketPrice` (type: `boolean`):

Include only listings marked below Madlan's estimated market price.

## `includeDiscountedProjects` (type: `boolean`):

Include discounted new-development projects in sale searches.

## `immediateAvailability` (type: `boolean`):

Only include properties marked as immediately available.

## `noBrokerFee` (type: `boolean`):

Only include listings marked as having no broker fee.

## Actor input object example

```json
{
  "maxItems": 100,
  "location": "תל אביב",
  "locationType": "",
  "distanceKm": 20,
  "operation": "sale",
  "includeNewDevelopments": true,
  "minPrice": 0,
  "maxPrice": 0,
  "minPricePerSqm": 0,
  "maxPricePerSqm": 0,
  "minMonthlyTax": 0,
  "maxMonthlyTax": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minBathrooms": 0,
  "maxBathrooms": 0,
  "minArea": 0,
  "maxArea": 0,
  "minFloor": 0,
  "maxFloor": 0,
  "sellerType": "",
  "parking": false,
  "elevator": false,
  "balcony": false,
  "airConditioning": false,
  "storage": false,
  "accessible": false,
  "securityBars": false,
  "protectedRoom": false,
  "attic": false,
  "basement": false,
  "buildingLaundry": false,
  "ceilingFan": false,
  "dishwasher": false,
  "doorman": false,
  "fireplace": false,
  "furnished": false,
  "garage": false,
  "gym": false,
  "heating": false,
  "outdoorSpace": false,
  "pool": false,
  "roofDeck": false,
  "unitLaundry": false,
  "petsAllowed": false,
  "includePriceDrops": false,
  "belowMarketPrice": false,
  "includeDiscountedProjects": false,
  "immediateAvailability": false,
  "noBrokerFee": false
}
```

# Actor output Schema

## `results` (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 = {
    "location": "תל אביב"
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/madlan-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 = { "location": "תל אביב" }

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/madlan-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 '{
  "location": "תל אביב"
}' |
apify call igolaizola/madlan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,igolaizola/madlan-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/2NC1REuSZucfYUvof/builds/txJnmCFU3tjExu11c/openapi.json
