# Yad2 Scraper — Israel Real Estate, Cars & Listings (`crawloop/yad2-scraper`) Actor

Scrape Yad2 Israel apartments, houses, and cars. Extract rent, sale, commercial, and vehicle listings with price, rooms, m2, GPS, photos, and private vs agency. Paste a search URL or pick a city. Yad2 API alternative for Python, Node.js, and MCP.

- **URL**: https://apify.com/crawloop/yad2-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Real estate, Lead generation, E-commerce
- **Stats:** 3 total users, 2 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 listings

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Scraper — Israel Real Estate, Cars & Listings

> **Disclaimer:** This is an unofficial integration developed independently. It is not affiliated with, sponsored by, or endorsed by Yad2 or any of its subsidiaries.
>
> **Yad2**, **יד2**, and related names are trademarks of their respective owners. Data is read from publicly accessible Yad2 listings. No Yad2 account login is required.
>
> This Actor is provided **for informational, research, lead-generation, and market monitoring purposes**. You are solely responsible for complying with applicable laws (including Israel's Privacy Protection Law and GDPR), Yad2's terms of use, and your organization's policies when processing listing and contact data.

**Yad2 scraper** for Israel classifieds (`yad2.co.il`): apartments and houses for **rent** and **sale**, commercial property, **cars / motorcycles / trucks**, and the second-hand catalog. Each row includes price (₪), rooms, m², GPS, photos, and **private owner vs agency**. Use it as a **Yad2 API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP** / AI assistants — paste a search or `/item/` URL, or type a city such as Tel Aviv.

**Best for:** Tel Aviv / Jerusalem / Haifa comps, דירה להשכרה and למכירה datasets, Israeli rental-yield models, used-car pricing, FSBO leads, and JSON / CSV export via Apify.

| Actor | Role |
| :--- | :--- |
| Yad2 Scraper ◄── you are here | Israel Yad2 listings (RE + vehicles) |
| [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper) | Germany IS24 rent & buy |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain Idealista listings + agency leads |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | French classifieds |
| [AutoScout24 Scraper](https://apify.com/crawloop/autoscout24-scraper) | EU vehicle listings |
| [mobile.de Scraper](https://apify.com/crawloop/mobile-de-scraper) | German vehicle listings |

### When to use this Actor

- **Yad2 scraper for search pages** — Copy a filtered browser URL (city, price, rooms, year) into Start URLs.
- **דירה להשכרה / למכירה datasets** — Tel Aviv, Jerusalem, Haifa, or any Yad2 city code; export JSON/CSV for comps and pipelines.
- **Private-seller lead lists** — Enable **Private sellers only** to keep `isPrivate: true` rows and skip agencies.
- **Used cars from the same Actor** — Switch category to vehicles, or paste a `/vehicles/cars` URL (year + price filters).
- **Scheduled monitoring** — Re-run the same search and emit only **new** or **price-changed** listings.
- **All promoted feed buckets** — Private, agency, Yad1, platinum and other feed slots are merged and de-duplicated.

### When not to use this Actor

- **Contact-unlock walls** — Public name/phone already shown on the listing are included. The Actor does not solve Yad2's reveal-phone challenges.
- **Jobs / pets-only crawls** — This version targets real estate, vehicles, and the second-hand catalog. Paste those search URLs.
- **Authenticated actions** — No login, messaging, or saved-search inbox.

### Key features

- **Israel residential required** — Yad2 serves a Radware / ShieldSquare challenge to datacenter IPs. Apify **RESIDENTIAL** with country **IL** is the supported Cloud setup.
- **Search + item URLs** — One Actor handles result lists and single listing tokens.
- **Search builder** — Type `Tel Aviv`, `ירושלים`, or city code `5000`; rent vs sale vs cars; price / rooms / year / mamad filters when you do not have a URL.
- **Private vs agency** — `isPrivate` / `advertiserType` on every row; optional private-only filter.
- **Monitor mode** — Key-value store remembers listing IDs and prices across runs.
- **Typed JSON** — Numeric price, rooms, m², GPS, and vehicle year/km — not string blobs.

### Input

| Field | What it does |
| :--- | :--- |
| **Start URLs** | Search (`/realestate/rent`, `/vehicles/cars`, …) or item (`/item/{token}`) links. Filters in the URL are kept. |
| **Category / City** | Builder only. Rent, sale, commercial, cars, motorcycles, trucks, or market. |
| **Min/max price, rooms, year** | Builder filters in ILS / rooms / production year. |
| **Parking / elevator / balcony / mamad** | Builder feature flags. |
| **Max listings** | Cap on dataset rows. |
| **Scrape full item details** | Default off (search-card fields: price, rooms, city, GPS). On = item-page description, extra photos, entry date, public contact. |
| **Private sellers only** | Drop agency / merchant listings. |
| **Monitor mode** | Save new and price-changed rows only. |
| **Proxy** | Apify Residential, country IL. |

```json
{
  "startUrls": [
    { "url": "https://www.yad2.co.il/realestate/rent?city=5000" }
  ],
  "maxItems": 50,
  "includeDetails": false,
  "onlyPrivate": false,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IL"
  }
}
```

Builder example (no URL):

```json
{
  "category": "realestate-rent",
  "location": "Tel Aviv",
  "maxPrice": 8000,
  "minRooms": 3,
  "requireSecureRoom": true,
  "maxItems": 40,
  "includeDetails": false
}
```

Cars example:

```json
{
  "category": "vehicles-cars",
  "location": "Haifa",
  "minYear": 2018,
  "maxYear": 2024,
  "maxPrice": 80000,
  "sortBy": "newest",
  "maxItems": 100
}
```

### Output

One dataset row per listing. Search-card fields are always present; detail fields fill in when **Scrape full item details** is on. Hebrew text is kept verbatim (UTF-8).

| Field | Description |
| :--- | :--- |
| `id` / `url` | Yad2 token and canonical item URL |
| `dealType` / `category` | `rent`, `sale`, `vehicle`, … and the section slug |
| `title` / `description` | Headline and listing text |
| `price` / `currency` / `priceLabel` | Numeric ILS and `₪7,200` display string |
| `rooms` / `floor` / `squareMeters` | Real-estate size fields |
| `city` / `neighborhood` / `address` | Hebrew location as shown on Yad2 |
| `latitude` / `longitude` | GPS |
| `isPrivate` / `agencyName` | Owner vs agency |
| `contactName` / `contactPhone` | Public contact when already visible |
| `hasElevator` / `hasParking` / `hasBalcony` / `hasSecureRoom` | Feature flags from tags |
| `manufacturer` / `model` / `year` / `km` / `hand` | Vehicle fields |
| `images` / `coverImage` | Photo URLs |
| `dateAdded` / `updatedAt` / `dateOfEntry` | Listing dates |
| `scrapedAt` | UTC timestamp |

```json
{
  "id": "g2v7x84n",
  "url": "https://www.yad2.co.il/item/g2v7x84n",
  "dealType": "rent",
  "category": "realestate-rent",
  "title": "דירת 3 חדרים מוארת",
  "price": 7200,
  "currency": "ILS",
  "rooms": 3,
  "squareMeters": 72,
  "floor": 4,
  "city": "תל אביב יפו",
  "neighborhood": "הצפון הישן",
  "address": "ארלוזורוב, 78, הצפון הישן, תל אביב יפו",
  "latitude": 32.0853,
  "longitude": 34.7818,
  "isPrivate": true,
  "hasElevator": true,
  "hasSecureRoom": true,
  "images": ["https://img.yad2.co.il/Pic/cover.jpg"],
  "scrapedAt": "2026-08-17T12:00:00+00:00"
}
```

### Use cases

- **Rental yield screens** — Pull 3-room Tel Aviv rentals with ₪, m², mamad, and private vs agency.
- **Sale comps** — Export asking prices, rooms, and GPS for Jerusalem or Haifa neighborhoods.
- **Used-car books** — Year + km + price triples from `/vehicles/cars` for local depreciation curves.
- **Lead lists** — Private-only filter plus public contact fields for FSBO outreach.
- **Daily monitors** — Schedule the same search; monitor mode keeps only new stock and reductions.

### Integration examples

Replace `YOUR_TOKEN` with your Apify API token. Actor name: `crawloop/yad2-scraper`.

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/yad2-scraper').call({
  startUrls: [
    { url: 'https://www.yad2.co.il/realestate/rent?city=5000' }
  ],
  maxItems: 50,
  includeDetails: false,
  proxyConfiguration: {
    useApifyProxy: true,
    apifyProxyGroups: ['RESIDENTIAL'],
    apifyProxyCountry: 'IL',
  },
});
for await (const item of client.dataset(run.defaultDatasetId).iterateItems()) {
  console.log(item.id, item.price, item.city);
}
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/yad2-scraper").call(
    run_input={
        "location": "Tel Aviv",
        "category": "realestate-rent",
        "maxPrice": 8000,
        "minRooms": 3,
        "maxItems": 50,
        "includeDetails": False,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "IL",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("id"), item.get("price"), item.get("city"))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~yad2-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url": "https://www.yad2.co.il/realestate/forsale?city=5000"}],
    "maxItems": 20,
    "includeDetails": false,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"],
      "apifyProxyCountry": "IL"
    }
  }'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name (`crawloop/yad2-scraper`).

Example prompts:

- "Run Yad2 Scraper for 3-room Tel Aviv rentals under 8000 ILS with a safe room, max 30, and return id, price, neighborhood, isPrivate as JSON"
- "Scrape Yad2 Haifa used cars 2018–2024 and summarize average price by year"
- "Pull Yad2 Jerusalem for-sale listings, then compare the field set with ImmobilienScout24 Scraper for an IL vs DE pipeline"

### Suite next step

After Israel Yad2 comps, add Germany coverage with [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper), Spain with [Idealista Scraper](https://apify.com/crawloop/idealista-scraper), or EU cars with [AutoScout24 Scraper](https://apify.com/crawloop/autoscout24-scraper).

### FAQ

**Is this an official Yad2 API?**\
No. It is an unofficial **Yad2 scraper** / API alternative that reads the public listing feed. It is not affiliated with Yad2. Call it from **Python**, **Node.js**, **cURL**, or **MCP**.

**How do I scrape Yad2 with Python or Node.js?**\
Run this Actor via the Apify client (examples above) or **cURL**. Pass a search URL or a city such as `Tel Aviv` plus `category`. Results land in the default dataset as JSON.

**Can I scrape Tel Aviv (or another city) for rent?**\
Yes. Paste a `/realestate/rent?city=5000` URL, or use the builder with location `Tel Aviv` / `תל אביב`. The same pattern works for Jerusalem (`70`), Haifa (`3000`), and other mapped cities.

**Why residential proxies in Israel?**\
Yad2 blocks datacenter traffic with Radware / ShieldSquare. Residential IL is the supported setup on Cloud.

**Can I paste a browser search URL?**\
Yes. Apply filters on the site, copy the address-bar URL, paste into Start URLs. City, price, rooms, and other query params are kept.

**Are phone numbers included?**\
Yes when Yad2 already lists them on the card or item page (`contactPhone`). Private reveal-phone flows are not automated.

**Does one Actor cover cars as well as apartments?**\
Yes. Use category `vehicles-cars` (or paste a `/vehicles/cars` URL). Motorcycles, trucks, commercial property, and the second-hand catalog are in the same Actor.

### Related Actors

| Actor | What it covers |
| :--- | :--- |
| [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper) | Germany rent and buy |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain sale/rent listings + agency phones |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | France classifieds |
| [AutoScout24 Scraper](https://apify.com/crawloop/autoscout24-scraper) | European vehicle listings |
| [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | German classifieds monitor |

# Actor input Schema

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

Paste Yad2 search-result URLs or individual /item/{token} links. Filters in the search URL (city, price, rooms, year) are applied automatically. When set, these override the category/location builder.

## `category` (type: `string`):

Builder only (used when Start URLs are empty). Yad2 section to search.

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

Builder only. English or Hebrew city name, or a Yad2 city code (5000 = Tel Aviv, 70 = Jerusalem, 3000 = Haifa).

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

Minimum price in shekels. Builder only, or ignored when the Start URL already has a price filter.

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

Maximum price in shekels.

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

Minimum room count for real estate (half-rooms allowed, e.g. 2.5).

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

Maximum room count for real estate.

## `minYear` (type: `integer`):

Minimum production year for vehicle searches.

## `maxYear` (type: `integer`):

Maximum production year for vehicle searches.

## `sortBy` (type: `string`):

Builder sort order. Newest first is best for monitors and lead alerts.

## `requireParking` (type: `boolean`):

Keep listings tagged with parking (חניה). Builder only.

## `requireElevator` (type: `boolean`):

Keep listings tagged with an elevator (מעלית). Builder only.

## `requireBalcony` (type: `boolean`):

Keep listings tagged with a balcony (מרפסת). Builder only.

## `requireSecureRoom` (type: `boolean`):

Keep listings tagged with a safe room / mamad (ממ״ד). Builder only.

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

Maximum number of listings to save per run.

## `includeDetails` (type: `boolean`):

Fetch each listing page for description, extra photos, entry date, total floors, and contact fields when Yad2 already shows them. Leave off for faster search-card output (price, rooms, city, GPS).

## `onlyPrivate` (type: `boolean`):

Keep only private-owner rows (isPrivate=true) and skip agencies / merchants.

## `monitorMode` (type: `boolean`):

On scheduled re-runs, save only listings that are new or whose price changed since the last run on this Actor.

## `maxConcurrency` (type: `integer`):

How many item pages to fetch in parallel. Default 2.

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

Apify Proxy. Israel RESIDENTIAL is required — Yad2 serves a Radware challenge to datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.yad2.co.il/realestate/rent?city=5000"
    }
  ],
  "category": "realestate-rent",
  "location": "Tel Aviv",
  "sortBy": "newest",
  "requireParking": false,
  "requireElevator": false,
  "requireBalcony": false,
  "requireSecureRoom": false,
  "maxItems": 10,
  "includeDetails": false,
  "onlyPrivate": false,
  "monitorMode": false,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IL"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items — one Yad2 listing per row.

# 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.yad2.co.il/realestate/rent?city=5000"
        }
    ],
    "location": "Tel Aviv",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/yad2-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.yad2.co.il/realestate/rent?city=5000" }],
    "location": "Tel Aviv",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/yad2-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.yad2.co.il/realestate/rent?city=5000"
    }
  ],
  "location": "Tel Aviv",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IL"
  }
}' |
apify call crawloop/yad2-scraper --silent --output-dataset

```

## MCP server setup

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