# Yad2 API scraper — Israel's #1 classifieds: used and new cars, motorcycles, scooters, trucks and boats; apartments and houses for sale and rent and commercial property; second-hand products from business sellers; and the full listing record. No account, no browser; private sellers' names withheld.

> Search Yad2 vehicles - cars, motorcycles, scooters, trucks and watercraft: price (placeholder and missing prices labelled), make, model and sub-model with ids, year, hand (owner count), fuel, engine size, area, dealer or private seller with the dealer's name, the dealer's warranty and service commitments, monthly-payment terms, paid promotion tier, tags and photos. Filter by make, model, year, price, mileage, hand, engine size, fuel, gearbox, body family, seats, area, dealers only, with price or photos; sort by price.
> ReefAPI engine `yad2` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/yad2/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /yad2/v1/cars/search — 1 credit
Search Yad2 vehicles - cars, motorcycles, scooters, trucks and watercraft: price (placeholder and missing prices labelled), make, model and sub-model with ids, year, hand (owner count), fuel, engine size, area, dealer or private seller with the dealer's name, the dealer's warranty and service commitments, monthly-payment terms, paid promotion tier, tags and photos. Filter by make, model, year, price, mileage, hand, engine size, fuel, gearbox, body family, seats, area, dealers only, with price or photos; sort by price.

**Parameters:**
- `vehicle_type` (enum, optional, default "car") — car (default), motorcycle, scooter, truck or watercraft. Not every filter exists for every type - yad2 has no make filter for trucks and no mileage filter for watercraft; such a request is rejected, never ignored. [one of: car, motorcycle, scooter, truck, watercraft]
- `manufacturer_id` (integer, optional) — yad2 make id (e.g. 19 = Toyota, 18 = Volvo). Every row returns make.id.
- `model_id` (integer, optional) — yad2 model id (e.g. 10245 = Toyota Verso). Needs manufacturer_id.
- `year_min` (integer, optional) — Earliest production year.
- `year_max` (integer, optional) — Latest production year.
- `price_min` (number, optional) — Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `price_max` (number, optional) — Highest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `mileage_min` (number, optional) — Lowest mileage, km.
- `mileage_max` (number, optional) — Highest mileage, km.
- `hand_min` (integer, optional) — Fewest owners ('hand'): 0 = new from the importer, 1 = first hand.
- `hand_max` (integer, optional) — Most owners ('hand').
- `engine_cc_min` (number, optional) — Smallest engine, cc.
- `engine_cc_max` (number, optional) — Largest engine, cc.
- `fuel` (array, optional) — One or more of petrol, diesel, hybrid_petrol, plugin_hybrid_petrol, electric. [one of: petrol, diesel, hybrid_petrol, plugin_hybrid_petrol, electric]
- `gearbox` (array, optional) — manual and/or automatic. [one of: manual, automatic]
- `family_type` (array, optional) — One or more of mini, family, executive, sport, jeep, pickup, crossover. [one of: mini, family, executive, sport, jeep, pickup, crossover]
- `seats` (integer, optional) — Number of seats.
- `area_id` (integer, optional) — yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.
- `top_area_id` (integer, optional) — yad2 top-area id (e.g. 2 = Center, 25 = North, 100 = Jerusalem district).
- `seller_type` (enum, optional) — dealer = dealers and importers only. yad2 has no private-only filter; every row says seller_type. [one of: dealer]
- `only_with_price` (boolean, optional) — Only listings that publish a price.
- `only_with_images` (boolean, optional) — Only listings with photos.
- `sort` (enum, optional) — price_asc or price_desc. Omitted: yad2's own order (paid tiers first). [one of: price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** listings[]{ad_id, url, vertical, title, price (ILS), currency, price_not_published, price_placeholder, price_published_raw, vehicle_type, make{id,name,name_en}, model{id,name,name_en}, sub_model{id,name}, year, hand, hand_label, fuel{id,name,name_en}, engine_cc, motorcycle_type, licence_class, special_type, special_model, watercraft_type, area{id,name}, seller_type (dealer|private), dealer{id,name,logo}, promotion_tier, tags[], dealer_commitments[], payment_installments{advance_payment, monthly_payment, number_of_payments, balloon}, trade_in_offered, images[], image_count}, count, total, total_pages, page, has_more, vehicle_type, sort, placeholder_price_dropped

**Example request body:**
```json
{
  "manufacturer_id": 19
}
```

### POST /yad2/v1/real_estate/search — 1 credit
Search Yad2 real estate - apartments, houses and other property for sale or rent, and commercial property: price or monthly rent, earlier price after a price drop, property type, rooms, size, floor, full address with street, neighbourhood and map coordinates, private or agency with the agency's name, exclusivity, tags and photos. Location by region, city, area, neighbourhood or street id, or a place name resolved through Yad2's own address search. Filter by property type, rooms, price, size, floor, keyword, parking, elevator, balcony, safe room, air conditioning, accessibility, furnished, renovated, price dropped, new from contractor, agencies only.

**Parameters:**
- `deal_type` (enum, required) — sale, rent, commercial (both), commercial_sale or commercial_rent. [one of: sale, rent, commercial, commercial_sale, commercial_rent]
- `region` (integer, optional) — yad2 region: 1 Center & Sharon, 2 South, 3 Tel Aviv area, 4 Judea, Samaria & Jordan Valley, 5 Northern coast (Haifa), 6 Jerusalem area, 7 North & valleys, 8 Jerusalem. Required unless location is given.
- `location` (string, optional) — A place name in Hebrew (city, neighbourhood, area or street), resolved with Yad2's own address search; the match used comes back as location_resolved. Replaces region/city/area/neighbourhood/street ids.
- `city_id` (string, optional) — yad2 city id (e.g. 5000 = Tel Aviv-Yafo). Must belong to region.
- `area_id` (integer, optional) — yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.
- `neighborhood_id` (string, optional) — yad2 neighbourhood id (locations action).
- `street_id` (string, optional) — yad2 street id (locations action).
- `property_type` (array, optional) — Residential: apartment, garden_apartment, studio_loft, house, rooftop_penthouse, duplex, triplex, semi_detached, housing_unit, vacation, parking, farm, plot, general, residential_building, storage, basement, purchase_group. Commercial: offices, shops, clinics, warehouses, plot, industrial, halls, general, office_building, parking_lot, basement, studio, hotel, coworking. [one of: apartment, garden_apartment, studio_loft, house, rooftop_penthouse, duplex, housing_unit, vacation, parking, farm, plot, semi_detached, general, residential_building, storage, basement, purchase_group, triplex, offices, shops, clinics, warehouses, industrial, halls, office_building, parking_lot, studio, hotel, coworking]
- `rooms_min` (number, optional) — Fewest rooms (3.5 allowed).
- `rooms_max` (number, optional) — Most rooms.
- `price_min` (number, optional) — Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `price_max` (number, optional) — Highest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `size_min` (number, optional) — Smallest size, m².
- `size_max` (number, optional) — Largest size, m².
- `floor_min` (integer, optional) — Lowest floor.
- `floor_max` (integer, optional) — Highest floor.
- `query` (string, optional) — Free text matched by Yad2 against the ad, in Hebrew.
- `seller_type` (enum, optional) — agency = listings by real-estate agencies only. yad2 has no private-only filter; every row says seller_type. [one of: agency]
- `features` (array, optional) — One or more of parking, elevator, balcony, shelter (safe room), air_conditioning, accessible, furnished, renovated, price_dropped, new_from_contractor. [one of: parking, elevator, balcony, shelter, air_conditioning, accessible, furnished, renovated, price_dropped, new_from_contractor]
- `only_with_price` (boolean, optional) — Only listings that publish a price.
- `only_with_images` (boolean, optional) — Only listings with photos.
- `include_sponsored` (boolean, optional, default false) — Also return Yad2's paid 'platinum' placements for this page, apart, under sponsored[].
- `page` (integer, optional, default 1) — Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.
- `include_pii` (boolean, optional, default false) — Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** listings[]{ad_id, url, vertical, deal_type, title, price (ILS), currency, price_period (month for rentals), price_not_published, price_placeholder, price_published_raw, price_before_drop, price_dropped, property_type, rooms, size_m2, built_size_m2, property_condition_id, location{region, top_area, area, city, neighborhood, street, house_number, floor, latitude, longitude}, seller_type (private|agency), agency{name,logo}, is_exclusive, promotion_tier, is_sponsored, tags[], images[], video, image_count}, count, total, total_pages, page, has_more, deal_type, private_count, agency_count, sponsored_dropped, sponsored[] (include_sponsored), projects_dropped, location_resolved, placeholder_price_dropped

**Example request body:**
```json
{
  "deal_type": "rent",
  "region": 3
}
```

### POST /yad2/v1/products/search — 1 credit
Browse Yad2's second-hand products section (business sellers: furniture, electrical appliances, phones, computers, businesses for sale and more) by category and sub-category: price (missing and placeholder prices labelled), condition, city and area, category breadcrumb, dates and photos. Filter by category, sub-category, price and area; sort by price. Yad2 offers no keyword search here.

**Parameters:**
- `category_id` (integer, optional) — yad2 category: 1 electrical appliances, 2 furniture, 4 musical instruments, 5 cellular, 6 computers, 9 work tools, 11 baby and child, 12 sport, 14 bicycles, 18 fashion, 20 photography, 25 office, 28 business equipment, 32 sanitary, 37 businesses for sale, 38 medical, 39 scooters, 40 stock, 45 home appliances, 49 gardening, 56 industrial, 61 portable housing, 69 events, 71 toys.
- `subcategory_id` (integer, optional) — yad2 sub-category id (e.g. 14 = tables in furniture). Every row returns subcategory.id. Needs category_id.
- `price_min` (number, optional) — Lowest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `price_max` (number, optional) — Highest price in ILS (monthly rent for rentals). Listings without a price are left out.
- `area_id` (integer, optional) — yad2 area id (e.g. 1 = Tel Aviv area, 9 = Rishon LeZion area). Every row returns its area id; the locations action returns them by name.
- `sort` (enum, optional) — price_asc or price_desc. Omitted: newest first (yad2's own order). [one of: price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page, 1-based. yad2's own page size: 40 vehicle rows, 40 real-estate rows (20 private + 20 agency), 36 product rows.
- `include_pii` (boolean, optional, default false) — Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** listings[]{ad_id, vertical, title, price, currency, price_not_published, price_placeholder, price_published_raw, category{id,name}, subcategory{id,name}, breadcrumb[], condition, city, area{id,name}, latitude, longitude (business sellers), created_at, bumped_at, seller_type, highlight, images[], image_count}, count, total, total_pages, page, has_more, breadcrumbs[], placeholder_price_dropped

**Example request body:**
```json
{
  "category_id": 2
}
```

### POST /yad2/v1/locations — 1 credit
Yad2's own address search: cities, neighbourhoods, areas and streets matching a Hebrew name, each with the region, area, city, neighbourhood and street ids that real_estate/search and cars/search accept.

**Parameters:**
- `query` (string, required) — Place name in Hebrew (at least 2 letters).
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** locations[]{label, kind (city|neighborhood|area|street), kind_label, region_id, top_area_id, area_id, city_id, neighborhood_id, street_id}, count

### POST /yad2/v1/listing — 1 credit
The full Yad2 listing by id or URL, from any section. Vehicles: mileage, gearbox, colour, horse power, seats, doors, body type, ownership and original ownership, test validity and last test mileage, fields the Ministry of Transport verified, equipment list, description, dealer, dates created/updated/bumped/expires. Real estate: price or rent and payments per year, price before a drop, rooms, size, built and garden size, floor of building floors, balconies, parking, entry date, condition, amenities, full address and coordinates, distance to a shelter, agency with licence numbers, description, dates. Products: title, price, category, condition, city, description, photos. Private sellers' names withheld.

**Parameters:**
- `ad_id` (string, required) — The yad2 listing token (e.g. 'inhp0uq0', the last part of a listing URL) or the full listing URL. Every search row returns it.
- `vertical` (enum, optional) — Section of the listing, if known (saves lookups). A URL sets it. [one of: vehicles, real_estate, products]
- `include_pii` (boolean, optional, default false) — Return private sellers' and brokers' personal names. Off by default; phone numbers are never returned.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** listing{ad_id, ad_number, url, vertical, title, price, currency, price_not_published, price_placeholder, price_published_raw, description, images[], image_count, created_at, updated_at, bumped_at, expires_at, seller_type, … vehicle fields (mileage_km, gearbox, color, horse_power, ownership, test_valid_until, verified_by_ministry_of_transport, specification{}, dealer{}) | real-estate fields (deal_type, price_period, price_before_drop, payments_per_year, property_type, rooms, size_m2, amenities[], location{}, seller{name, name_withheld}, agency{name, logo, licence_number, about, brokers[]}) | product fields (category, product_condition_id, city, seller{business_name, contact_name_withheld})}

## More
- Try it live, no code: https://reefapi.com/playground?engine=yad2
- Human docs page: https://reefapi.com/docs/yad2
- Overview page: https://reefapi.com/yad2-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
