# Yad2 Apartment Scraper (`parsebird/yad2-apartment-scraper`) Actor

Scrape apartments from Yad2.co.il search URLs: price, rooms, size, floor, condition, description, images, coordinates, and 11 apartment features. Auto-paginates. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/yad2-apartment-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.89 / 1,000 apartments

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

### Yad2 Apartment Scraper

Scrape apartments from [Yad2.co.il](https://www.yad2.co.il/) — Israel's largest real estate marketplace — straight from a search-results URL. Paste one or more Yad2 rent or sale search links and the scraper auto-paginates through every result page and pulls full apartment data, including a detail-page enrichment for each listing.

<table><tr>
<td style="border-left:4px solid #F5A623;padding:12px 16px;font-weight:600">
Works with any Yad2 apartment search URL — copy the link after applying your filters and run. Get price, rooms, size, floor, condition, description, images, GeoJSON coordinates, broker detection, and 11 apartment features per listing.
</td>
</tr></table>

<br>

<table>
<tr>
<td colspan="3" style="padding:10px 14px;background:#F5A623;border:none;border-radius:4px 4px 0 0">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">ParseBird Real Estate</span>
<span style="color:#FFF3DC;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Property data at scale</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFF8EE">
🏢 &nbsp;<a href="https://apify.com/parsebird/yad2-apartment-scraper" style="color:#B87400;text-decoration:none;font-weight:700;font-size:13px">Yad2 Apartment Scraper</a><br>
<span style="color:#B87400;font-size:11px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
🏙️ &nbsp;<a href="https://apify.com/parsebird/yad2-real-estate-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Yad2 Real Estate Scraper</a><br>
<span style="color:#78716C;font-size:11px">By city, with filters</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
🇮🇱 &nbsp;<a href="https://apify.com/parsebird/madlan-real-estate-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Madlan Israel Real Estate Scraper</a><br>
<span style="color:#78716C;font-size:11px">Madlan.co.il, with insights</span>
</td>
</tr>
</table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
parsebird/yad2-apartment-scraper on Apify. Scrapes apartments from Yad2.co.il search-result URLs (rent and sale). Call: ApifyClient("TOKEN").actor("parsebird/yad2-apartment-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: start_urls (array of {"url": "https://www.yad2.co.il/realestate/rent?..."} — /realestate/rent or /realestate/forsale, no &page needed, pagination is automatic), maxPagesPerSearch (int, default 10, ~40 listings/page), maxRequestsPerCrawl (int, default 1000 — budget list pages + one detail request per apartment), proxy (object, Apify RESIDENTIAL / IL required). Output per apartment: item_id, item_url, location, price, rooms, square_meter, floor, building_top_floor, entrance_date, property_condition, description, images[], geographic_polygon (GeoJSON Point), mediation (broker bool), source ("yad2"), item_time, insertion_time, and features: include_air_condition, elevator, parking, safe_room, balcony, is_pets_allowed, furnished, garden, is_renovated, entire_apartment, immediate. Full spec: GET https://api.apify.com/v2/acts/parsebird~yad2-apartment-scraper (Bearer TOKEN). Token: https://console.apify.com/account/integrations
```

### What is Yad2 Apartment Scraper?

**Yad2 Apartment Scraper** turns a [Yad2.co.il](https://www.yad2.co.il/) apartment search URL into a clean dataset. Apply any filters you want on Yad2 — city, area, neighbourhood, price, rooms, parking, elevator, and more — copy the URL, and the scraper handles the rest: it **detects how many result pages exist and fetches them automatically**, then opens each listing's detail page to add the free-text description and the full apartment feature list.

Use it as a **Yad2 API alternative** to pull Israeli apartment data into JSON, CSV, or Excel, or drive it through the [Apify API](https://docs.apify.com/api/v2) for scheduled monitoring. Prefer to search by city name and structured filters instead of URLs? Use the [Yad2 Real Estate Scraper](https://apify.com/parsebird/yad2-real-estate-scraper).

### What can Yad2 Apartment Scraper do?

- 🔗 **URL-driven** — paste any `/realestate/rent` or `/realestate/forsale` Yad2 search URL; multiple URLs per run
- 📄 **Automatic pagination** — reads the total page count and walks every page, no `&page=` needed
- 🧭 **Detail enrichment** — every apartment includes its description and full feature list from the listing page
- 🏢 **11 apartment features** — air conditioning, elevator, parking, safe room, balcony, pets, furnished, garden, renovated, entire apartment, immediate entry
- 📍 **GeoJSON coordinates** — `geographic_polygon` as a ready-to-use GeoJSON Point
- 🤝 **Broker detection** — `mediation` flags whether the listing goes through an agent
- 🎛️ **Run-size controls** — `maxPagesPerSearch` and `maxRequestsPerCrawl` keep runs predictable
- 🔄 **Scheduling and integrations** — run on a schedule and push to Google Sheets, Zapier, Make, or webhooks

### What data can you extract from Yad2?

| Field | Description |
|-------|-------------|
| `item_id` | Unique Yad2 listing ID (token) |
| `item_url` | Direct URL to the listing |
| `location` | Street and number, neighbourhood, city |
| `price` | Price in ILS (`0` when the seller hid it) |
| `rooms` | Number of rooms |
| `square_meter` | Apartment size in m² |
| `floor` / `building_top_floor` | Unit floor and total floors in the building |
| `entrance_date` | Available entry date |
| `property_condition` | Condition of the property |
| `description` | Free-text listing description |
| `images` | List of image URLs |
| `geographic_polygon` | GeoJSON Point with `[lon, lat]` coordinates |
| `mediation` | `true` if listed through a broker |
| `source` | Always `"yad2"` |
| `item_time` | Last updated timestamp on Yad2 |
| `insertion_time` | Scrape timestamp (ISO) |
| `include_air_condition`, `elevator`, `parking`, `safe_room`, `balcony` | Feature flags |
| `is_pets_allowed`, `furnished`, `garden`, `is_renovated` | Feature flags |
| `entire_apartment` | `true` for a whole apartment, `false` for a roommate listing |
| `immediate` | Immediate entry available |

### How to scrape Yad2 apartments

1. Open [Yad2.co.il](https://www.yad2.co.il/realestate/rent), pick **rent** or **for sale**, and apply your filters (city, price, rooms, etc.)
2. Copy the URL from your browser's address bar
3. Go to the [Yad2 Apartment Scraper](https://apify.com/parsebird/yad2-apartment-scraper) on Apify Store and click **Try for free**
4. Paste the URL into **Yad2 search URLs** (add more than one if you like)
5. Set **Max pages per search URL** and **Max requests per run** to control the run size
6. Click **Start**, then download the data in **JSON, CSV, Excel**, or read it via the **Apify API**

#### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/yad2-apartment-scraper").call(run_input={
    "start_urls": [
        {"url": "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000"}
    ],
    "maxPagesPerSearch": 10,
    "maxRequestsPerCrawl": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['price']} ILS — {item['rooms']} rooms — {item['location']}")
```

#### JavaScript API example

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("parsebird/yad2-apartment-scraper").call({
    start_urls: [
        { url: "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000" }
    ],
    maxPagesPerSearch: 10,
    maxRequestsPerCrawl: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(`${i.price} ILS — ${i.rooms} rooms — ${i.location}`));
```

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `start_urls` | array | **Yes** | — | Yad2 search URLs as `{ "url": "..." }` objects. No `&page=` — pagination is automatic. |
| `maxPagesPerSearch` | integer | No | `10` | Max listing pages to auto-paginate per start URL (~40 listings per page). |
| `maxRequestsPerCrawl` | integer | No | `1000` | Hard cap on total HTTP requests — budget list pages plus one detail request per apartment. |
| `proxy` | object | No | Apify Proxy (RESIDENTIAL, IL) | Proxy configuration. An Israeli residential proxy is required. |

### Output example

```json
{
    "item_id": "4ht8263z",
    "item_url": "https://www.yad2.co.il/item/4ht8263z",
    "location": "הרב גביזון 3, לבנה, תל אביב יפו",
    "price": 5150,
    "rooms": 3,
    "square_meter": 75,
    "floor": 2,
    "building_top_floor": 4,
    "entrance_date": "15/11/2026",
    "property_condition": "חדש (עד 5 שנים)",
    "description": "דירה מרווחת ושמורה במצב טוב מאד, מיזוג נפרד ומאווררים בסלון ובחדרי השינה...",
    "images": [
        "https://img.yad2.co.il/Pic/202609/08/2_2/o/y2_1_09285_20260908173937.jpeg"
    ],
    "geographic_polygon": { "type": "Point", "coordinates": [34.800879, 32.04516] },
    "mediation": false,
    "source": "yad2",
    "item_time": "2026-09-09T17:00:51Z",
    "insertion_time": "2026-09-09T11:07:36Z",
    "include_air_condition": true,
    "elevator": false,
    "parking": false,
    "safe_room": false,
    "balcony": false,
    "is_pets_allowed": true,
    "furnished": false,
    "garden": false,
    "is_renovated": true,
    "entire_apartment": true,
    "immediate": false
}
```

Download results in JSON, HTML, CSV, or Excel.

### Use cases

- 📈 **Rental and sale market analysis** — track asking prices, ₪/m², and supply for a saved search
- 🏠 **Apartment hunting** — turn a filtered Yad2 search into a spreadsheet you can sort and share
- 🔄 **New-listing alerts** — schedule the same search URL daily and diff the results
- 💼 **Investment screening** — filter by rooms, size, condition, and features across a whole area
- 🤝 **Agent vs. private analysis** — use `mediation` to see how much of a market is broker-listed
- 🔗 **PropTech pipelines** — feed structured apartment data into CRMs, valuation tools, or dashboards

### How it works

1. Parses each start URL: reads the deal type from the path and the filters from the query string
2. Resolves the Yad2 region the search needs (from the city or area in the URL)
3. Requests Yad2's apartment feed for that search and reads the total page count
4. Auto-paginates up to `maxPagesPerSearch`, collecting listings
5. Fetches each listing's detail page for the description and full feature list
6. Maps every apartment to a clean record, pushes it to the dataset, and charges one event

### How much does it cost to scrape Yad2 apartments?

| Plan | Price per apartment | Price per 1,000 apartments |
|------|---------------------|----------------------------|
| Free | $0.00259 | **$2.59** |
| Bronze | $0.00239 | **$2.39** |
| Silver | $0.00209 | **$2.09** |
| Gold | $0.00189 | **$1.89** |

One event is charged for each apartment returned in the dataset, detail enrichment included. Scraping 1,000 apartments costs about **$2.59** on the Free plan. Apify's free monthly usage credits cover roughly 1,900 apartments at no cost.

### FAQ

**What URLs can I use?**
Any Yad2 `/realestate/rent` or `/realestate/forsale` search-result URL. Copy it from your browser after applying filters. `/realestate/commercial` is not supported.

**Do I need to add page numbers to the URL?**
No. The scraper detects the total number of pages and fetches them automatically, up to `maxPagesPerSearch`.

**How do I size a run?**
Each apartment costs one list-page slot plus one detail request. For 10 pages of ~40 listings, set `maxRequestsPerCrawl` to at least ~420.

**Does it return phone numbers?**
No. Yad2 hides seller phone numbers behind its own bot-protection, so contact phone is not available. The description and all structured features are included.

**Why does it need a residential proxy?**
Yad2 blocks datacenter and non-Israeli traffic. An Israeli residential proxy is required and is the default.

**Can I schedule it?**
Yes. Use [Apify scheduling](https://docs.apify.com/platform/schedules) to re-run the same search URLs on any interval, and connect the output to Google Sheets, Zapier, Make, or webhooks. Found a bug? Open an issue on the **Issues** tab.

**Can I access the data via API?**
Yes, through the [Apify API](https://docs.apify.com/api/v2), with Python and JavaScript client libraries.

### Is it legal to scrape Yad2?

This Actor extracts publicly available data from Yad2.co.il. Scraping public data is generally considered legal based on recent court rulings, including the US Ninth Circuit's decision in *hiQ Labs v. LinkedIn*. Users are responsible for ensuring their use of the scraped data complies with applicable laws, Yad2.co.il Terms of Service, and data protection regulations. Do not use scraped data for unsolicited contact or purposes incompatible with the context in which it was published. For more information, read Apify's post on [web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

### Other ParseBird real estate scrapers

| Actor | Target site | Best for |
|-------|------------|----------|
| [Yad2 Apartment Scraper](https://apify.com/parsebird/yad2-apartment-scraper) | Yad2.co.il | Scraping from a search URL |
| [Yad2 Real Estate Scraper](https://apify.com/parsebird/yad2-real-estate-scraper) | Yad2.co.il | Search by city name and filters |
| [Madlan Israel Real Estate Scraper](https://apify.com/parsebird/madlan-real-estate-scraper) | Madlan.co.il | Listings with neighbourhood insights |
| [Fotocasa Scraper](https://apify.com/parsebird/fotocasa-scraper) | Fotocasa.es | Spanish property listings |

Browse all ParseBird actors on the [Apify Store](https://apify.com/parsebird).

# Actor input Schema

## `start_urls` (type: `array`):

Yad2 search-result URLs to scrape, one object per URL: {"url": "https://www.yad2.co.il/realestate/rent?..."}. Do not add \&page=2 — pagination is automatic. Works for both /realestate/rent and /realestate/forsale.

## `maxPagesPerSearch` (type: `integer`):

Maximum number of listing pages to auto-paginate per start URL (about 40 listings per page).

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests. Budget for both list pages and one detail request per apartment (e.g. 3 list pages x 40 apartments = ~125 requests).

## `proxy` (type: `object`):

Yad2 blocks non-Israeli traffic, so an Israeli residential proxy is required.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000"
    }
  ],
  "maxPagesPerSearch": 2,
  "maxRequestsPerCrawl": 60,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IL"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "start_urls": [
        {
            "url": "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000"
        }
    ],
    "maxPagesPerSearch": 2,
    "maxRequestsPerCrawl": 60,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/yad2-apartment-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 = {
    "start_urls": [{ "url": "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000" }],
    "maxPagesPerSearch": 2,
    "maxRequestsPerCrawl": 60,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/yad2-apartment-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 '{
  "start_urls": [
    {
      "url": "https://www.yad2.co.il/realestate/rent?topArea=2&area=1&city=5000"
    }
  ],
  "maxPagesPerSearch": 2,
  "maxRequestsPerCrawl": 60,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IL"
  }
}' |
apify call parsebird/yad2-apartment-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/yad2-apartment-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/lhqz2E3ZKFaYZrR3I/builds/K1rIgGItdjPCqS6xc/openapi.json
