# Avito.ru API scraper - Russia's largest classifieds site: goods, cars and real estate search with location, price, seller-type and category filters, and the full ad record with parameters, seller rating and views. No account, no browser; private sellers' personal data withheld.

> Search Avito.ru, Russia's largest classifieds site, by keyword and/or category anywhere in Russia or in one city or region: price in RUB (free, unpublished, 'from' and salary-range prices labelled), seller type, name, rating and reviews, address and nearby metro, images, description snippet, parameters summary, delivery and reserved flags, paid-placement flags. Filter by location, category, price, private or company seller and Avito delivery; sort by newest, relevance or price.
> ReefAPI engine `avito` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/avito/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 /avito/v1/search — 2 credits
Search Avito.ru, Russia's largest classifieds site, by keyword and/or category anywhere in Russia or in one city or region: price in RUB (free, unpublished, 'from' and salary-range prices labelled), seller type, name, rating and reviews, address and nearby metro, images, description snippet, parameters summary, delivery and reserved flags, paid-placement flags. Filter by location, category, price, private or company seller and Avito delivery; sort by newest, relevance or price.

**Parameters:**
- `query` (string, optional) — Free-text keyword, as typed into Avito's search box (Russian or Latin).
- `location` (string, optional, default "all") — Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.
- `category` (string, optional) — Category node id, Russian name or path from the categories action (mebel_i_interer, telefony/mobilnye_telefony, vakansii, predlozheniya_uslug).
- `price_min` (integer, optional) — Lowest price in RUB.
- `price_max` (integer, optional) — Highest price in RUB.
- `seller_type` (enum, optional) — private (individuals) or company (shops and businesses). [one of: private, company]
- `delivery_only` (boolean, optional) — Only ads with Avito Delivery.
- `category_detection` (boolean, optional, default true) — Avito turns many keywords into a category + filters (iphone → Телефоны/Apple). true (default) follows Avito like the site does; false keeps the plain keyword search.
- `sort` (enum, optional, default "newest") — newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc, discount (goods: biggest discount first). [one of: newest, relevance, price_asc, price_desc, discount]
- `page` (integer, optional, default 1) — Result page (50 rows per page). Avito stops at page 30 (1,500 rows).
- `include_sponsored` (boolean, optional, default false) — Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.
- `include_fallback_results` (boolean, optional, default false) — When Avito finds nothing it pads the page with unrelated ads; return them separately in fallback_results.
- `include_pii` (boolean, optional, default false) — Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[]}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url

**Example request body:**
```json
{
  "query": "диван",
  "location": "moskva"
}
```

### POST /avito/v1/cars/search — 2 credits
Search Avito Auto - used and new cars anywhere in Russia or in one city: price (dealer 'from' prices with the price before discount), make/model, parameters summary (engine, power, gearbox, drive, body), dealer or private seller with rating, address, images and paid-placement flags. Filter by make, model, used/new, year, mileage, fuel, drive, price and seller type; sort by newest, price, year or mileage.

**Parameters:**
- `location` (string, optional, default "all") — Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.
- `make` (string, optional) — Make as it appears in Avito URLs (toyota, lada_vaz, bmw, geely, haval).
- `model` (string, optional) — Model slug as in Avito URLs (camry, granta, x5); needs make.
- `condition` (enum, optional) — used or new cars. [one of: used, new]
- `year_min` (integer, optional) — Earliest year (needs make).
- `year_max` (integer, optional) — Latest year (needs make).
- `mileage_min` (integer, optional) — Lowest mileage, km (needs make).
- `mileage_max` (integer, optional) — Highest mileage, km (needs make).
- `fuel` (array, optional) — petrol, diesel, gas, hybrid, electric (needs make). [one of: petrol, gas, hybrid, diesel, electric]
- `drive` (array, optional) — front, rear, all_wheel (needs make). [one of: rear, front, all_wheel]
- `price_min` (integer, optional) — Lowest price in RUB.
- `price_max` (integer, optional) — Highest price in RUB.
- `seller_type` (enum, optional) — private owners or dealers (needs make). [one of: private, company]
- `query` (string, optional) — Free-text keyword, as typed into Avito's search box (Russian or Latin).
- `sort` (enum, optional, default "newest") — newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc, year_desc, mileage_asc. [one of: newest, relevance, price_asc, price_desc, year_desc, mileage_asc]
- `page` (integer, optional, default 1) — Result page (50 rows per page). Avito stops at page 30 (1,500 rows).
- `include_sponsored` (boolean, optional, default false) — Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.
- `include_pii` (boolean, optional, default false) — Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[]}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url

**Example request body:**
```json
{
  "make": "toyota",
  "location": "moskva"
}
```

### POST /avito/v1/real_estate/search — 2 credits
Search Avito Real Estate - apartments, rooms, houses, land, garages and commercial property for sale, long-term or daily rent: price or rent per month/day, price per m², address with nearby metro and walking time, residential complex, agency/developer/owner, images and paid-placement flags. Filter by transaction, property type, rooms, area, new-build or resale, seller type and price.

**Parameters:**
- `transaction` (enum, required) — sale, rent_long (long-term rent), rent_daily (daily rent), rent (both rent kinds; land, garages and commercial property). [one of: sale, rent_long, rent_daily, rent]
- `location` (string, optional, default "all") — Avito location slug (moskva, sankt-peterburg, kazan, moskovskaya_oblast …), a major city name (Москва) or 'all' for all of Russia. The locations action finds slugs.
- `property_type` (enum, optional, default "apartment") — apartment (default), room, house, land, garage, commercial. [one of: apartment, room, house, land, garage, commercial]
- `rooms` (array, optional) — Apartments: studio, 1-9, 10_plus, open_plan. [one of: studio, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10_plus, open_plan]
- `area_min` (integer, optional) — Apartments: smallest total area, m².
- `area_max` (integer, optional) — Apartments: largest total area, m².
- `market` (enum, optional) — Apartments for sale: secondary (resale) or new_build. [one of: secondary, new_build]
- `seller_type` (enum, optional) — Apartments for sale: private, developer, agency. Apartments for rent: owner, agency. [one of: private, developer, agency, owner]
- `price_min` (integer, optional) — Lowest price in RUB.
- `price_max` (integer, optional) — Highest price in RUB.
- `query` (string, optional) — Free-text keyword, as typed into Avito's search box (Russian or Latin).
- `sort` (enum, optional, default "newest") — newest (default), relevance (Avito's default order, where paid rows rank first), price_asc, price_desc. [one of: newest, relevance, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (50 rows per page). Avito stops at page 30 (1,500 rows).
- `include_sponsored` (boolean, optional, default false) — Keep rows with paid placement ('Продвинуто', view boosts), flagged is_promoted. Off by default: they are dropped and counted in sponsored_dropped.
- `include_pii` (boolean, optional, default false) — Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** listings[]{ad_id, title, url, category{category_id, name, slug, root_category_id}, subtitle, price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{value, unit}, published_at, location{location_id, name, address, nearby[]}, coordinates{lat, lng, precision}, coordinates_withheld, address_as_typed, seller{type, type_label, has_shop, name, name_withheld, name_hidden_by_avito, profile_id, profile_url, rating, rating_scale, reviews_count, closed_ads_count, info[], badges[]}, images[], images_count, has_video, description_snippet, params_summary, badges[], development_name, realty_type{category_type, transaction_type, rent_term}, is_promoted, paid_services[], is_xl, is_reserved, delivery_available, delivery_text, is_verified_item}, count, total, pageable_total, page, has_more, sort_applied, location, filters_applied, query_interpreted_as{category_path, note}, sponsored_dropped, promoted_on_page, fallback_results_dropped, fallback_results[], search_url

**Example request body:**
```json
{
  "transaction": "rent_long",
  "location": "sankt-peterburg"
}
```

### POST /avito/v1/listing — 1 credit
The full Avito ad by id or URL, in any category: title, status, price (from/range/free/unpublished labelled, price before discount), full description, every published parameter with its Russian label and grouped building/rent-terms/house-rules/requirements blocks, car and property summaries, Avito's own market price estimate for apartments, all images, address with nearby metro, seller type, shop name, rating, reviews, reply time and verification, view counts and expiry date.

**Parameters:**
- `ad_id` (string, required) — The Avito ad id (the digits at the end of an ad URL) or the full URL.
- `include_pii` (boolean, optional, default false) — Return private sellers' names, typed addresses and exact coordinates, which are withheld by default.
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** listing{ad_id, title, url, status, closed_status_text, category{}, breadcrumbs[], price, price_min, price_max, price_is_from, currency, price_text, price_period, is_free, price_not_published, price_before_discount, discount_percent, price_lowered, price_per_unit{}, published_or_raised_text, expires_at, description, params[]{attribute_id, name, value}, param_groups{building[], rent_terms[], house_rules[], requirements[], …}, vehicle{year, mileage_km, generation, modification, engine, gearbox, drive, body_type, colour, condition, owners, vin}, property{rooms, area_m2, kitchen_area_m2, living_area_m2, floor, renovation, market_estimate{estimated, lowest, highest, verdict}}, images[], images_count, location{location_id, name, slug, address, district, nearby[]}, coordinates{lat, lng, precision, radius_m}, seller{type, type_label, has_shop, name, name_withheld, profile_id, profile_url, shop_name, contact_person, on_avito_since, rating, rating_scale, reviews_count, reply_time, is_verified, inn_verified, phone_available, phone_masked}, views{total, today}, delivery_available, is_reserved}

### POST /avito/v1/categories — 1 credit
Avito's category tree (591 nodes: transport, real estate, jobs, services, electronics, home, fashion, hobbies, animals, business) with node ids, Russian names and the paths the search action takes.

**Parameters:**
- `query` (string, optional) — Optional filter on the category name or path.

**Returns:** categories[]{node_id, category_id, name, path, level, parent_node_id}, count, source

### POST /avito/v1/locations — 1 credit
Find Avito location slugs (cities, towns and regions) for the location parameter: search by Russian or Latin name; Avito's own lookup adds the region and location id.

**Parameters:**
- `query` (string, required) — Town or region name (Russian or transliterated), at least 2 letters.
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** locations[]{slug, name, region, location_id, source}, count

**Example request body:**
```json
{
  "query": "диван"
}
```

### POST /avito/v1/suggest — 1 credit
Avito's own search-box suggestions for what a user is typing, with the category and filters Avito would apply for each.

**Parameters:**
- `query` (string, required) — The text typed so far (max 64 characters).
- `max_rotations` (integer, optional, default 0) — Advanced: how many fresh exits to try when Avito refuses (0 = engine default).

**Returns:** suggestions[]{query, category_id, filters{}}, related_words[], count

**Example request body:**
```json
{
  "query": "диван"
}
```

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