Avito Scraper
Pricing
from $0.29 / 1,000 listings
Avito Scraper
Avito scraper (парсер Авито): Avito.ru listings by Russian search term, category, city or pasted search link. Each row has the title, price in roubles, category, city and address, seller name and private or business, publish date and photos. A chosen region is a real filter. $0.30 per 1,000 ads.
Pricing
from $0.29 / 1,000 listings
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
300
Total users
147
Monthly active users
3.7 hours
Issues response
6 hours ago
Last modified
Categories
Security
Limited permissionsShare
Avito scraper for Avito.ru searches by term, category, city or a pasted search link, one row per ad: id, title, price in roubles, category, city and address, the seller's name and whether they are private or a business, publish date, photos and the link. No account, no cookies.
Stay inside the chosen region keeps to it, though car searches can include dealers' new cars from nearby cities. Turn it off and you get Avito's mixed results back.
| Input | Russian search terms, or Avito search and category URLs |
| Output | One row per ad: title, price in roubles, category, city and address, seller name and type, publish date, photos and link |
| Ceiling | 5,000 ads per search, 50,000 per run across searches |
| Speed | Runs of 11 to 201 ads finished in 4 to 37 seconds |
| Account needed | None |
| Price | $0.30 per 1,000 ads on the free plan, down to $0.285 on Business. The free plan's $5 a month covers about 16,000 |
| Using an AI agent? | |
|---|---|
| Actor | dami_studio/avito-listings-scraper |
| Set one field | query, labelled "Search terms" in the Console |
| Cap the bill | maxTotalChargeUsd on the run, for example 0.10: it never charges past that |
| MCP, one link | https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/avito-listings-scraper |
| How often | Daily, for new ads and price changes |
🔍 What Avito Scraper does
Two ways in, and they mix freely. Fill in the form, which is a search term plus any combination of region, category, seller type, price band and sort order. Or paste URLs you already have. Every filter in a pasted link is kept, its sort order included.
Regions and categories both take an English name, the Russian name, or the slug out of an Avito URL,
so Moscow, Москва and moskva all work, and so do cars, автомобили and avtomobili. For
flats, flats for sale and flats to rent (or kvartiry/prodam and kvartiry/sdam) keep buying
and renting apart. Several regions or search words give one search each, with duplicate ads counted
only once.
A seller type or price bound filled in on the form replaces a pasted link's own. A link with no sort takes the form's Sort order.
The seller filter is checked twice. Ads that do not match your choice are dropped before they reach the dataset and never billed.
📋 What data you get from each Avito ad
| What you get | Field |
|---|---|
| Ad id, title, link and the preview text | listingId, title, url, description |
| Price, Avito's formatted price, the currency and any discount | price, priceText, currency, priceWithoutDiscount, discountPercent |
| Whether the ad shows no number for its price, such as "Цена договорная" | priceNegotiable |
| Category | categoryId, categoryName, categorySlug, microCategoryId |
| Where it is: city, address and coordinates when the seller gave them | locationId, location, address, addressLocality, latitude, longitude |
| The seller: name, private or business, link, rating and reviews | sellerName, sellerType, sellerTypeText, sellerUrl, sellerRating, sellerReviewsText |
| When it was published | publishedAt, publishedAtText |
| Photos and video | images, imageCount, hasVideo |
| Avito's badges and the spec line under the title | isNew, isVerified, isReserved, params |
| Which of your searches found it | searchQuery, searchUrl |
| A lowered price, and the crossed-out price next to a discount | priceDropped, previousPrice |
| Price per square metre, where Avito prints one | normalizedPrice, pricePerM2 |
| Metro stations and places nearby, with distance and walking time | nearbyPlaces |
| Badges as text, on the ad and on the seller, and whether the ad is promoted | badges, sellerBadges, isPromoted |
| The seller's id and number of reviews | sellerId, sellerReviewCount |
| Whether Avito delivery is offered | hasDelivery |
| Region slug and the category breadcrumb | regionSlug, categoryPath |
| Property ads: the complex name, rooms, area and floor | developmentName, rooms, areaM2, floor, totalFloors |
| How the price compares with the rest of the search (optional) | isUnderpriced, priceVsMedian |
▶️ How to scrape Avito listings
- Open Avito Scraper and click Try for free.
- Type your Russian search into Search terms, or paste links into Avito search URLs.
- Open Narrow it down to set a region, a category, the seller type or a price band.
- Set Maximum listings under Limits. Around 20 shows what the rows look like.
- Click Start, then download the dataset as JSON, CSV or Excel.
With no search target you get one labelled sample row, not charged.
💰 How much does it cost to scrape Avito listings?
$0.30 per 1,000 ads. That is the free plan's price; paid plans pay a little less: $0.295 on Starter, $0.29 on Scale and $0.285 on Business. On the free plan, the $5 Apify gives you each month covers about 16,000 ads.
One billed row per ad delivered. The sample row is not billed, diagnostic rows are not billed, an ad that fails your seller-type choice, or that you left out for having no price, is dropped before the dataset, and the same ad found under two regions is counted once.
📥 What you give it
{"query": "iphone 15","region": ["Moscow"],"category": ["phones"],"sellerType": "private","localOnly": true,"sort": "newest","minPrice": 20000,"maxItems": 100}
| Field | Default | What it is |
|---|---|---|
query | none | What to search for, in Russian. Leave it empty to browse a whole category. |
queries | none | More search words, one per line. Each runs like query, in every region and category. |
searchUrls | none | Avito search or category URLs pasted straight from the site, instead of filling in the fields. Every filter in a link is kept. |
region | none | Region or city, by English name, Russian name or URL slug. Empty means the whole of Russia. Several means one search each. |
category | none | Category, by English name, Russian name or URL slug, such as cars, phones, flats for sale, flats to rent or rooms. Empty means every category. |
sellerType | any | private or company to keep only one kind. Mismatched ads are dropped uncharged. |
localOnly | true | Keeps results to the chosen region. |
sort | default | Avito's own ordering. default is relevance, which puts promoted ads first. Also newest, cheapest, expensive. A pasted link with a sort of its own keeps it. |
minPrice, maxPrice | none | Price bounds in roubles. |
maxItems | 100 | Total ads across every search in the run, up to 50,000. |
maxPagesPerSearch | none | Stops each search after this many pages of 50, from 1 to 100. |
flagUnderpriced | false | Marks ads priced 20% or more under the median of their own search. Needs at least 10 priced ads in that search. |
skipNegotiablePrice | false | Leaves out ads that show no number for the price, only "Цена договорная" (price by agreement). They are not charged and do not count toward maxItems. |
excludeListingIds | none | Ads to skip, by listingId or ad link. Not returned, not charged, not counted toward maxItems. |
skipFromDataset | none | The dataset of an earlier run, picked in the form. Every ad in it is skipped the same way, up to 200,000 rows. If it can't be read, the run stops before searching. |
notionConnector, notionParentId | none | Optional. Pick a Notion connector you authorized in Apify and each listing the run delivers is written as a page into your Notion when it finishes, up to 100 a run, into the database whose data source id you give or as private pages. The listings are in the dataset either way. |
proxyConfiguration | none | Optional, under Advanced. Leave it alone unless you want the run to go out through a network of your own. |
maxItems is a total, not a per-search figure, so the first region in a long list can use the whole
allowance before the others get a turn.
📤 What you get back

A real row from a run on 21 September 2026, with the description, images and long links trimmed:
{"listingId": "8403263007","title": "iPhone 15, 128 ГБ, SIM + eSIM","description": "IPhone 15 128Gb Blue.\n\nУстройство после сервисного обслуживания...","price": 26990,"priceText": "26 990 ₽","currency": "RUB","priceWithoutDiscount": null,"discountPercent": null,"categoryId": 84,"categoryName": "Телефоны","categorySlug": "telefony","microCategoryId": 1104365,"locationId": 621630,"location": "Барнаул","address": "Алтайский край, Барнаул","addressLocality": "Барнаул","latitude": 53.356916,"longitude": 83.696808,"sellerName": "Скупка Store","sellerType": "company","sellerTypeText": "Компания","sellerUrl": "https://www.avito.ru/brands/6aa30742c61b481f75171d9173cf0c2f","sellerRating": 5,"sellerReviewsText": "5 отзывов","publishedAt": "2026-09-18T12:01:59.000Z","publishedAtText": "3 дня назад","images": ["https://20.img.avito.st/image/1/1.3TfI5raAcd6GTIvV_t3_b9NGc9p6UXXeejYQ2nq9eiR3..."],"imageCount": 4,"hasVideo": false,"isNew": false,"isVerified": false,"isReserved": false,"params": "Отличное","url": "https://www.avito.ru/barnaul/telefony/iphone_15_128_gb_sim_esim_8403263007","searchQuery": "iphone 15","searchUrl": "https://www.avito.ru/all?q=iphone%2015","scrapedAt": "2026-09-21T13:00:55.530Z"}
| Field | How to read it |
|---|---|
description | The preview Avito prints on the results page, cut off by Avito itself. Not the full ad body. |
price, priceText | The number of roubles, and Avito's own formatted string. An ad with no number for its price, such as "Цена договорная" (by agreement), comes back with price empty (null), that text in priceText, currency null and priceNegotiable true. Every priced ad has priceNegotiable false. |
latitude, longitude, address | Only when the seller added them. |
sellerType | private or company, as Avito marks the seller. Empty when the ad doesn't say which. |
sellerRating | The key is absent, not null, when Avito sends no rating. Check for the key, not for a null. |
publishedAt | A real ISO timestamp, alongside Avito's own wording in publishedAtText. |
images | Every photo at the largest size Avito renders. imageCount is how many. |
params | The spec line Avito prints under the title, like Отличное. |
previousPrice | The crossed-out price printed next to a discount. null after a plain price drop; priceDropped is then true. |
pricePerM2 | A number, only where Avito prints a price per m², mostly flats for sale. normalizedPrice is Avito's own wording. |
nearbyPlaces | One entry per place: name, distance as Avito writes it, distanceM in metres, travelTime, and lineColors for a metro station (empty for a district). |
rooms, areaM2, floor, totalFloors | Read from the title of property ads. A studio has rooms 0. Free layout, and an ad for one room or bed in a shared flat, have rooms null; there areaM2 is what the ad offers. null on everything else. |
isPromoted | true when Avito marks the ad as paid for more visibility. |
sellerReviewCount | 0 when Avito says the seller has no reviews, null when it shows no review line. |
isUnderpriced, priceVsMedian | Only with flagUnderpriced on. priceVsMedian is in percent: -25 means a quarter under the median of the search. Rents are compared with rents. null when the search had under 10 priced ads. |
🧾 Reading the output
| Row | How to spot it | Billed |
|---|---|---|
| An ad | It has a listingId and no _sample or _diagnostic key | yes |
| The sample row | _sample: true and charged: false | no |
| A diagnostic | _diagnostic: true, charged: false and an errorCode | no |
Ad rows carry no charged field; only the sample and diagnostic rows do, set to false. The sample
row is a real Avito ad with a listingId of its own, so to keep only your results, drop every row
with _sample or _diagnostic.
| Code | What it means |
|---|---|
NO_RESULTS | That search returned nothing. |
BAD_INPUT | A URL that is not an Avito search or category link. |
NOT_SERVED | Avito did not serve this page, or answered it with a different search (other cities, or no search text), so nothing from it was kept. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here. |
BAD_RESPONSE | Avito answered with something this actor could not read. |
PROXY_GROUP_IGNORED | Part of the network settings you sent could not be used as given, so the run adjusted them and carried on. |
TIME_LIMIT | The run got close to its time limit, so it stopped searching and delivered the ads found up to then. Give it more time to get the rest. If none had come back yet, the run still ends as succeeded, with an amber status message. |
UNEXPECTED_ERROR | The run stopped early on an unexpected error. The results before this row are kept. |
One bad search never stops the others, with one exception: if two searches come back with nothing before a single ad has been collected, the remaining searches are skipped instead of run.
💡 What people use it for
- Watching one model's prices daily:
publishedAtshows what is new and a missinglistingIdwhat sold; Make, Zapier or n8n take it from there. - Listing the businesses selling in a category, using
sellerTypeto keep the shops and dealers and drop private sellers. - Property and car research, where
latitudeandlongitudeare usually filled and you can map the results directly. - Comparing one search across several regions in a single run.
From a category to a dealer's whole stock, in three steps:
- Run this on a category and city with
sellerTypeset tocompany. - Copy the
sellerUrlof the dealers you care about. - Paste them into Seller profile links in Avito Seller Listings & Profile Scraper for everything each one has up.
🚧 What it does not do
- No phone numbers.
descriptionis the preview, not the ad. Avito truncates it on the results page and that is what comes back.- Coordinates depend on the seller. No seller-supplied location means no
latitude,longitudeor streetaddress. - Up to 5,000 ads per search.
- Rows arrive at the end. Everything is collected first and written when the searches finish, so a very large run has nothing in the dataset until it is done.
- A big run can come back short. A page Avito will not serve becomes an uncharged diagnostic rather than a gap passed off as a complete result.
- It is not an official Avito tool. Dami's Studio is independent and is not affiliated with or endorsed by Avito, or by any other company named on this page.
🧭 Which Russian-market scraper do you need?
| If you want | Use |
|---|---|
| Ads from a search, a category or a city on Avito | This one |
| Everything one Avito seller has listed, plus their profile | Avito Seller Listings & Profile Scraper |
| Reviews for a place on Yandex Maps | Yandex Maps Reviews Scraper |
| Businesses and their details from 2GIS | 2GIS Places Scraper |
| Reviews from 2GIS | 2GIS Reviews Scraper |
❓ Questions people ask
Do I need an Avito account?
No. Nothing to register and no cookies to paste.
Can I search Avito in English?
The search text goes to Avito as you typed it, and Avito's index is Russian, so English terms return little. Region and category names do accept English.
Why are listings from other cities in my Moscow search?
With Stay inside the chosen region on, so far only car searches let some in: dealers' new cars
from nearby cities. A page Avito answers without the region setting is dropped, uncharged, as a
NOT_SERVED row. Off, you get Avito's own ranking.
How do I get more than 5,000 ads for one search?
Split it. Several regions, several price bands, or narrower categories, all in the same run.
Why is sellerRating missing rather than null?
Because Avito sent no rating for that seller. Test for the key rather than for a null value.
Can I call it from code or connect it to an AI assistant?
The API tab has code for Python, JavaScript and the
CLI. MCP clients like Claude and ChatGPT use
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/avito-listings-scraper; coding assistants can load our
skill file.
All three bill your Apify account at the same price.
# pip install apify-clientfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("dami_studio/avito-listings-scraper").call(run_input={"query": "iphone 15","maxItems": 50,},max_total_charge_usd=0.10, # the most this run may spend)for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row.get("ok") is False: # free note rows, not resultscontinueprint(row.get("price"), (row.get("title") or "")[:80])
Is scraping Avito legal?
These are public ads. They carry personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search or the URL you used and the run ID; the
errorCode on the diagnostic row usually names the problem on its own.