L logiover
ecommerce · May 31, 2026 · 9 min read

How to Scrape Avito: Russia's Largest Classifieds (avito.ru)

Scrape Avito.ru listings at scale — title, current and old price, location, category, images and URL. Search by keyword or browse by category and location.

If you want to scrape Avito, you are reaching for the single richest source of consumer-marketplace data in Russia. Avito.ru is the country’s largest classifieds platform — cars, phones, apartments, electronics, jobs, services, used goods — all listed by millions of private sellers and dealers across every Russian region. For price researchers, resellers, and data scientists, that breadth makes Avito a goldmine: it is, in effect, a live index of what things cost and what is for sale across an entire economy. This guide covers what Avito’s listing data is worth, how to extract it cleanly without a login or an API key, and how to model the output for downstream use.

Why Avito is worth scraping

Avito sits at a scale that most Western marketplaces never reach in a single country. It aggregates new and used inventory across consumer electronics, vehicles, real estate, household goods, and services, and it spans every region from Moscow to the Far East. Because pricing on classifieds is set by sellers rather than by a central catalog, the data captures genuine market behavior — what a 2019 BMW X5 actually lists for in Yekaterinburg versus Moscow, how many iPhone 13s are on offer in a given week, and how strike-through discounts move across a category.

That makes Avito uniquely valuable for three things at once: price benchmarking (real seller-set prices, not MSRP), supply and demand signal (listing volume per category and region), and dataset construction (large labelled corpora for pricing or recommendation models). A one-off snapshot is a curiosity; a scheduled feed across categories and regions, refreshed over time, is a sellable intelligence product.

What makes scraping Avito tractable

The good news is that Avito’s search results live in public listing data — no account required. The actor that powers this guide reads that public data directly:

  • No login. You never touch credentials, so there is no account to get restricted.
  • No cookies, no session. Nothing to expire or rotate.
  • No headless browser. The listings are served as JSON, so a lightweight HTTP request plus a parser is enough — no Playwright, no Chromium. That keeps the scrape fast and cheap at volume.

There is one real constraint, and it is geographic rather than technical: Avito only serves search results to Russian visitors and blocks foreign IPs. This is why the scraper runs over Apify Proxy · RESIDENTIAL · country RU by default, and you should leave that setting on the default — other countries are blocked. The actor automatically rotates to a fresh Russian residential IP and retries whenever Avito’s firewall rate-limits a request, so a soft block is never fatal to the run.

Run the Avito Scraper — title, current and old price, location, category and images across all of Russia. No login, no API key, Russian residential proxy pre-configured. $3 per 1,000 listings.

Input modes: search or browse

The scraper supports two ways of telling it what to pull, and you can combine them.

Search mode

Provide a list of search queries — keywords like iphone, bmw x5, or квартира (Cyrillic works as you’d expect). The actor runs each query against Avito’s search and walks the result pages. This is the mode you want when you’re tracking a specific product, model, or category term.

{
  "searchQueries": ["iphone", "macbook pro"],
  "maxItemsPerQuery": 500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "RU"
  }
}

Browse mode

Leave searchQueries empty and set a categoryId and/or locationId instead. The actor then walks an entire category, optionally narrowed to a region or city, without any keyword. This is the mode for “give me everything in used phones in Moscow” rather than matching on a search term.

The full input surface:

FieldTypeDescription
searchQueriesarrayKeywords to search. Leave empty for browse mode.
categoryIdintegerOptional Avito category ID to narrow results.
locationIdintegerOptional Avito location ID (region / city).
maxItemsPerQueryintegerListings to collect per query (paginated). Default 1000.
maxResultsintegerGlobal cap on listings saved. 0 = unlimited.
proxyConfigurationobjectRussian residential proxy (required, pre-configured).

Pagination and depth control

Avito paginates search results, and the actor walks that pagination up to roughly page 99 per query — which is where the “thousands of listings per query” volume comes from. You control depth with two knobs:

  • maxItemsPerQuery caps how deep each individual query goes. The default of 1000 is a sensible balance; raise it to pull more per term, lower it for a quick sample.
  • maxResults is a global ceiling across all queries combined. Set it to 0 for unlimited, or to a fixed number when you want a predictable run size and cost.

Listings are de-duplicated by their Avito ID as they stream to the dataset, so overlapping queries (say, iphone and iphone 13) won’t fill your output with the same listing twice.

Output fields

Each listing is saved as one clean, flat record. These are the exact fields the actor emits:

FieldDescription
idAvito listing ID
titleListing title
price / priceStringNumeric price and the formatted display string (₽)
priceOldPrevious / strike-through price when present
currencyCurrency code (RUB)
locationId / locationNameRegion or city ID and name
categoryId / categorySlugAvito category ID and slug
urlDirect listing URL
images / imagesCountPhoto URLs and total image count
queryThe search query that produced the listing
scrapedAtISO timestamp of capture

A realistic record looks like this:

{
  "id": "4392058817",
  "title": "iPhone 13 128GB",
  "price": 42000,
  "priceString": "42 000 ₽",
  "priceOld": 49000,
  "currency": "RUB",
  "locationId": 637640,
  "locationName": "Москва",
  "categoryId": 9,
  "categorySlug": "telefony",
  "url": "https://www.avito.ru/moskva/telefony/iphone_13_128gb_4392058817",
  "images": [
    "https://00.img.avito.st/image/1/.../640x480.jpg"
  ],
  "imagesCount": 6,
  "query": "iphone",
  "scrapedAt": "2026-06-04T12:00:00.000Z"
}

A few schema choices worth making early when you load this into a warehouse:

  • Use id as your stable join key. Titles and prices change; the listing ID does not, which makes it the right anchor for tracking a single listing over time.
  • Keep both price and priceString. The numeric price is what you compute on; priceString preserves the exact formatted display (including the ₽ glyph) for audit and presentation.
  • Treat priceOld as optional. It is only present when a listing shows a strike-through discount — its presence is itself a signal worth indexing.
  • Always log scrapedAt. Classifieds are a moving target; you need to know when each price was captured to build any kind of time series.

What this actor does not return

Set expectations correctly: the scraper captures listing-level fields from public search data. It does not return seller name or phone number — those aren’t part of the search results, and pulling them would require a different, account-gated path. If your use case is price and market intelligence, that’s no loss. If you specifically need seller contact details, this is not the right tool.

Use cases

The same dataset serves several distinct teams.

Price monitoring and market research

This is the core use case. Track what items actually sell for across Russian regions over time. Run a set of model-specific queries on a schedule, store each capture with its scrapedAt, and you have a price index per product per region — including the discount behavior visible in priceOld. For analysts modeling the Russian consumer economy, that is hard data to get any other way.

E-commerce and reseller intelligence

Resellers and arbitrage operators care about supply, demand, and spread. Browse-mode runs over a whole category surface how much inventory exists and at what price points; comparing list prices region by region reveals where to buy and where to sell. Listing volume per category over time is a clean demand proxy.

Competitive and category intelligence

Benchmark listings, prices, and inventory at scale. A retailer or marketplace operator can watch how an entire category prices itself, detect when a competitor floods supply, and track price-band shifts week over week — all from public listing data, with no login footprint.

Data science and ML datasets

The flat, labelled records — title, category slug, region, price, image URLs — make excellent training data for pricing models, demand forecasting, or image-plus-text recommendation systems. Build a large labelled marketplace corpus once and reuse it across experiments.

Run the Avito Scraper — search by keyword or browse a whole category and location, and pull thousands of listings per query into JSON, CSV or Excel. Russian residential proxy handled for you. $3 per 1,000 listings.

How it works under the hood

The flow is deliberately simple, which is why it stays cheap and stable:

  1. You provide search queries, or a category / location for browse mode.
  2. The actor requests Avito’s public listings JSON over a Russian residential proxy.
  3. Each page uses a fresh proxy session; a firewall rate-limit triggers an automatic IP rotation and retry rather than a failure.
  4. Listings are parsed into clean records, de-duplicated by ID, and streamed to the dataset.

No login, no cookies, no API key, and no headless browser — just public listing data read over the right geography.

FAQ

Why does it need a Russian residential proxy?

Avito serves search results only to Russian visitors and blocks foreign IPs. The actor defaults to Apify Proxy · RESIDENTIAL · country RU, and you should keep that setting — other countries are blocked.

My IP got rate-limited. Is that a failed run?

No. Avito’s firewall throttles individual IPs as a soft block. The actor detects it, switches to a fresh Russian residential session, and retries, so the run keeps flowing. You don’t need to do anything.

How many listings can I pull per query?

Up to thousands. Avito paginates to roughly page 99, and the actor walks it. Control depth with maxItemsPerQuery per term and the global maxResults cap across the whole run.

Can I browse a category or city without a keyword?

Yes. Leave searchQueries empty and set categoryId and/or locationId to browse an entire category, optionally scoped to a region or city.

Does it return the seller’s name or phone number?

No. Those fields aren’t part of Avito’s search results. The actor captures listing-level data: title, current and old price, location, category, images, and the direct URL.

Do I need a login or developer API key?

No. The scraper reads only public listing data — no cookies, no account, and no Avito developer API key.

Wrapping up

Avito is the closest thing there is to a live, public index of an entire country’s consumer market — and its search data is reachable without a login, without an API key, and without a browser, provided you come in over a Russian residential IP. If you need a single look at one product, the site is fine. If you want a structured, refreshable feed across categories and regions for price monitoring, reseller intelligence, or ML datasets, run it as a managed scraper and let the proxy rotation and HTML maintenance be someone else’s problem.

Run the Avito Scraper — the no-API-key way to scrape Avito.ru at scale. $3 per 1,000 listings.

Guide: how-to-scrape-avito-russia-classified-listings — your starting point to scrape Avito.

Related guides