# Avito Scraper — Парсер Авито: Listings, Prices & Sellers (`khadinakbar/avito-scraper`) Actor

Scrape Avito.ru listings by keyword or URL with title, price, location, photos and seller; optional details add full description, item parameters, seller type and views. Works with Apify MCP and the API.

- **URL**: https://apify.com/khadinakbar/avito-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, MCP servers, Lead generation
- **Features:** Limited permissions
- **Stats:** 68 total users, 22 monthly users, 98.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.50 / 1,000 avito item enricheds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What is Avito Scraper?

Avito Scraper turns a keyword, an Avito search or category link, or item links into one row per Avito.ru listing: title, price in rubles, full description, item parameters, location, seller name and type, seller profile, view count, photos and posting time. It works with Cyrillic and Latin keywords and can narrow a search to one city. Resellers, market researchers, pricing analysts and AI agents use it to compare prices and track supply on Russia's largest classifieds site, with no Avito account.

**Кратко по-русски.** Парсер Авито собирает объявления Avito.ru по ключевому слову, ссылке на поиск или категорию, или по ссылкам на объявления. Для каждого объявления: название, цена в рублях, город, фото, продавец и время публикации; с опцией `enrichDetails` — полное описание, параметры товара, тип продавца (частное лицо или компания), профиль продавца и число просмотров. Аккаунт Авито не нужен. Оплата за каждое сохранённое объявление, см. вкладку Pricing.

### Why resellers use it for price research

- **Real prices in rubles.** `price` is a number, with the site's text in `priceLabel`.
- **Every item detail.** `params` holds Avito's structured fields, such as condition, size, color or mileage.
- **Seller context.** `sellerName`, `sellerType` (private or company) and `sellerProfileUrl` show who is selling.
- **City and sort control.** `locationPath` targets a city like `moskva`, and `sortBy` puts the newest or cheapest first.
- **Pay per listing.** One charge per listing saved, priced lower when you turn off details.

### How to use it

**Newest sofas in Moscow, with full details:**

```json
{
  "query": "диван",
  "locationPath": "moskva",
  "sortBy": "newest",
  "maxResults": 30
}
```

**Latest iPhone 15 listings across Russia, list data only:**

```json
{
  "query": "iPhone 15",
  "sortBy": "newest",
  "maxResults": 50,
  "enrichDetails": false
}
```

| Input | What it controls |
|---|---|
| `query` | Keyword in Russian or English, such as `диван угловой` or `iPhone 15` |
| `startUrls` | Avito search, category or item links |
| `locationPath` | City or region slug from the Avito URL, such as `moskva` or `sankt-peterburg` |
| `sortBy` | `relevance`, `newest`, `price_asc` or `price_desc` |
| `maxResults` | Listings to save, from 1 to 1,000 (default 50) |
| `enrichDetails` | Open each listing for description, parameters, seller and views (default on) |
| `proxyUrls` | Your own Russian proxy URLs, if you prefer them to the built-in route |

Researching other Russian marketplaces too? Continue with **Ozon Scraper** linked below.

### Output: Avito listing data you receive

A real row from a Moscow sofa search (description shortened):

```json
{
  "id": "8426279643",
  "url": "https://www.avito.ru/moskva/mebel_i_interer/divan_pryamoy_raskladnoy_8426279643",
  "title": "Диван прямой раскладной",
  "price": 60000,
  "priceLabel": "60 000 ₽",
  "priceCurrency": "RUB",
  "fullDescription": "Дивaн выкaтной c 2-мя кpеcлaми «Лорд». Произвoдствo - Стaврoпoль...",
  "params": {
    "Тип товара": "Диваны",
    "Состояние": "Новое",
    "Спальное место": "Есть",
    "Ширина": "230 см",
    "Материал обивки": "Велюр"
  },
  "location": "Охотный ряд",
  "sellerName": "МебельШамиль",
  "sellerType": "Компания",
  "sellerProfileUrl": "https://www.avito.ru/brands/i193770831",
  "viewCount": 0,
  "images": ["https://70.img.avito.st/image/1/1.jFKfK7aAILuJi4K6i1WZVJmLIr8tnCS7..."],
  "postedText": "1 час назад",
  "source": "web"
}
```

| Field | What it contains |
|---|---|
| `id`, `url`, `title` | The listing |
| `price`, `priceLabel`, `priceCurrency` | Price as a number, as shown, and currency |
| `fullDescription`, `params` | Seller's description and Avito's structured item fields |
| `location` | Area, metro station or city shown on the listing |
| `sellerName`, `sellerType`, `sellerProfileUrl` | Who is selling and whether it is a private seller or a company |
| `viewCount`, `postedText` | Views and posting time as Avito shows them |
| `images` | Photo links |

With `enrichDetails` off, rows keep the list fields (title, price, link, location, photo) and skip the detail fields. `RUN_SUMMARY` in the default key-value store reports listings saved and pages read.

### Example workflow: pricing used electronics for resale

A reseller buys used phones in Saint Petersburg. Each morning a task searches `iPhone 15` with `locationPath` set to `sankt-peterburg` and `sortBy` set to `newest`. They read `params` for storage and condition, compare `price` against their buying target, and contact private sellers (`sellerType`) first. Then they check retail prices for the same model with [Ozon Scraper](https://apify.com/khadinakbar/ozon-scraper) to size the resale margin.

### Pricing

This Actor uses **Pay per event** plus **Apify platform usage**. You pay one event per result saved, a tiny start event, and the platform usage of the run, which Apify bills to you separately and shows after each run. A listing with full details is one detail event; with `enrichDetails` off it is one lower-priced listing event. Higher Apify plans get lower prices (Store tier discounts):

| Event | What you get | Free plan | Bronze | Silver | Gold and above |
|---|---|---:|---:|---:|---:|
| Item enriched (`enrichDetails` on, default; all item links) | Listing plus full description, item parameters, seller type, seller profile link, views | $0.009 | $0.0085 | $0.0080 | $0.0075 |
| Listing scraped (`enrichDetails` off) | Title, price, location, photo, seller name, posted date | $0.004 | $0.0037 | $0.0034 | $0.0031 |
| Actor start | One per run | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

- 100 listings with details = $0.90 on the Free plan, $0.75 on Gold, plus platform usage.
- 100 listings without details = $0.40 on the Free plan, $0.31 on Gold, plus platform usage.
- `maxResults` caps each run, so it doubles as a cost ceiling. Only results saved within the cap are billed.

### Marketplace research with AI agents (MCP)

Connect this Actor to an AI agent through [Apify MCP](https://mcp.apify.com) and ask in plain language:

> Find the 20 newest listings for "велосипед" in Moscow on Avito and give me the price range and the cheapest three.

Agent checklist:

1. Put the keyword in `query`; set `locationPath` for a city and `sortBy` for order.
2. Turn off `enrichDetails` when only prices and links are needed.
3. Read rows with `get-dataset-items`; prices are numbers in `price`.
4. Share `url` so the user can open each listing.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~avito-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "PlayStation 5", "locationPath": "moskva", "sortBy": "price_asc", "maxResults": 20}'
```

### Related Russian marketplace tools from the same developer

| Your next step | Use | Why |
|---|---|---|
| When you then want retail prices | [Ozon Scraper](https://apify.com/khadinakbar/ozon-scraper) | Ozon products with price, rating and seller |
| When you compare another big marketplace | [Wildberries Product Search Scraper](https://apify.com/khadinakbar/wildberries-product-search-scraper) | Ranked products with prices and discounts |
| When you research property listings | [CIAN Scraper](https://apify.com/khadinakbar/cian-ru-scraper) | Russian sale and rental listings |
| When you check Yandex Market offers | [Yandex Market Scraper](https://apify.com/khadinakbar/yandex-market-scraper) | Products with price, seller and stock |

### Best results

| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| Watching fresh supply | Set `sortBy: "newest"` and schedule a task | New listings each run |
| Price comparison only | Turn off `enrichDetails` | Faster, lower-cost list rows |
| One city's market | Set `locationPath` | Listings from that city |
| A complex Avito filter | Paste the filtered search link into `startUrls` | The same results you see on Avito |

### Builder's note

I found that buyers decide on Avito from the item parameters as much as from the price, so `params` keeps every structured field Avito shows, in its original Russian labels. I learned that resellers mostly want new listings first, so `sortBy: "newest"` plus a schedule is the fastest way to see fresh supply.

### FAQ

#### Do I need an Avito account?

No. The Actor reads public listings and needs no login.

#### Can I search in English?

Yes. Avito matches both Russian and Latin keywords, such as `iPhone 15` or `айфон 15`.

#### What does locationPath look like?

It is the city part of an Avito link: `moskva` for Moscow, `sankt-peterburg` for Saint Petersburg, `ekaterinburg` for Yekaterinburg.

#### Are seller phone numbers included?

Avito shows phone numbers only to signed-in buyers, so rows include the seller's name, type and profile link instead.

#### What does enrichDetails change?

On, each listing is opened for its description, parameters, seller and views. Off, you get the list data at a lower per-listing price.

### Responsible use

This Actor collects public Avito listings, which can include sellers' names. Use the data for market research with a lawful basis, respect sellers' privacy, and follow Avito's terms. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) for more context. Avito is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Avito. For questions or bugs, open a ticket in the Issues tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/avito-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

Free-text keyword searched across all of Avito.ru, e.g. 'iPhone 15' or 'диван угловой'. Cyrillic and Latin both work. Leave empty if you supply Start URLs instead. NOT a URL — for a specific Avito search/category/item page use the Start URLs field.

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

Avito.ru page URLs to scrape: search results, category pages, or individual item pages (auto-detected). Example: 'https://www.avito.ru/moskva/telefony?q=iphone'. Item URLs return full detail; search/category URLs are paginated. Use this OR the keyword field.

## `maxResults` (type: `integer`):

Maximum number of result records to return and bill for (hard cap). Defaults to 50; range 1–1000. With detail enrichment on, each result is one enriched record; with it off, each is one listing. Pagination stops automatically when this many are collected.

## `enrichDetails` (type: `boolean`):

When true (default), each listing is opened to add full description, item parameters, seller name/type, seller profile URL, and view count. When false, only the lighter search-card fields are returned (faster, cheaper). Item Start URLs are always enriched regardless of this flag.

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

Order of search results: 'relevance' (default), 'newest' (most recently posted first), 'price_asc' (cheapest first), or 'price_desc' (most expensive first). Applies to keyword and search/category URL modes. Ignored for direct item URLs.

## `locationPath` (type: `string`):

Avito region/city URL slug to scope a keyword search, e.g. 'moskva' for Moscow, 'sankt-peterburg' for Saint Petersburg, or 'all' for all of Russia (default). Take it from the first path segment of an Avito city URL. NOT a numeric id and NOT a full URL. Ignored when Start URLs already encode a location.

## `proxyUrls` (type: `array`):

Optional list of your own Russian residential proxy URLs (e.g. 'http://user:pass@host:port') to use instead of the built-in proxy. Avito blocks non-Russian and datacenter IPs, so only RU residential/mobile proxies work here. Leave empty to use the actor's managed proxy.

## Actor input object example

```json
{
  "query": "велосипед горный",
  "startUrls": [
    "https://www.avito.ru/all/telefony?q=iphone+15"
  ],
  "maxResults": 20,
  "enrichDetails": true,
  "sortBy": "relevance",
  "locationPath": "moskva",
  "proxyUrls": [
    "http://user:pass@ru-residential.example.com:8000"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

All Avito listing/item records collected across the search, category, and item pages. Download as JSON, CSV, Excel, HTML, or RSS.

# 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 = {
    "query": "iPhone 15",
    "startUrls": [],
    "maxResults": 20,
    "proxyUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/avito-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 = {
    "query": "iPhone 15",
    "startUrls": [],
    "maxResults": 20,
    "proxyUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/avito-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 '{
  "query": "iPhone 15",
  "startUrls": [],
  "maxResults": 20,
  "proxyUrls": []
}' |
apify call khadinakbar/avito-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/avito-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/RP3BMyoiV46BRMlh1/builds/KmYJeyvadz7lbLriO/openapi.json
