Avito Scraper avatar

Avito Scraper

Pricing

from $0.29 / 1,000 listings

Go to Apify Store
Avito Scraper

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

Dami's Studio

Maintained by Community

Actor stats

1

Bookmarked

300

Total users

147

Monthly active users

3.7 hours

Issues response

6 hours ago

Last modified

Security

Limited permissions

Share

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.

InputRussian search terms, or Avito search and category URLs
OutputOne row per ad: title, price in roubles, category, city and address, seller name and type, publish date, photos and link
Ceiling5,000 ads per search, 50,000 per run across searches
SpeedRuns of 11 to 201 ads finished in 4 to 37 seconds
Account neededNone
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?
Actordami_studio/avito-listings-scraper
Set one fieldquery, labelled "Search terms" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/avito-listings-scraper
How oftenDaily, 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 getField
Ad id, title, link and the preview textlistingId, title, url, description
Price, Avito's formatted price, the currency and any discountprice, priceText, currency, priceWithoutDiscount, discountPercent
Whether the ad shows no number for its price, such as "Цена договорная"priceNegotiable
CategorycategoryId, categoryName, categorySlug, microCategoryId
Where it is: city, address and coordinates when the seller gave themlocationId, location, address, addressLocality, latitude, longitude
The seller: name, private or business, link, rating and reviewssellerName, sellerType, sellerTypeText, sellerUrl, sellerRating, sellerReviewsText
When it was publishedpublishedAt, publishedAtText
Photos and videoimages, imageCount, hasVideo
Avito's badges and the spec line under the titleisNew, isVerified, isReserved, params
Which of your searches found itsearchQuery, searchUrl
A lowered price, and the crossed-out price next to a discountpriceDropped, previousPrice
Price per square metre, where Avito prints onenormalizedPrice, pricePerM2
Metro stations and places nearby, with distance and walking timenearbyPlaces
Badges as text, on the ad and on the seller, and whether the ad is promotedbadges, sellerBadges, isPromoted
The seller's id and number of reviewssellerId, sellerReviewCount
Whether Avito delivery is offeredhasDelivery
Region slug and the category breadcrumbregionSlug, categoryPath
Property ads: the complex name, rooms, area and floordevelopmentName, rooms, areaM2, floor, totalFloors
How the price compares with the rest of the search (optional)isUnderpriced, priceVsMedian

▶️ How to scrape Avito listings

  1. Open Avito Scraper and click Try for free.
  2. Type your Russian search into Search terms, or paste links into Avito search URLs.
  3. Open Narrow it down to set a region, a category, the seller type or a price band.
  4. Set Maximum listings under Limits. Around 20 shows what the rows look like.
  5. 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
}
FieldDefaultWhat it is
querynoneWhat to search for, in Russian. Leave it empty to browse a whole category.
queriesnoneMore search words, one per line. Each runs like query, in every region and category.
searchUrlsnoneAvito search or category URLs pasted straight from the site, instead of filling in the fields. Every filter in a link is kept.
regionnoneRegion or city, by English name, Russian name or URL slug. Empty means the whole of Russia. Several means one search each.
categorynoneCategory, by English name, Russian name or URL slug, such as cars, phones, flats for sale, flats to rent or rooms. Empty means every category.
sellerTypeanyprivate or company to keep only one kind. Mismatched ads are dropped uncharged.
localOnlytrueKeeps results to the chosen region.
sortdefaultAvito'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, maxPricenonePrice bounds in roubles.
maxItems100Total ads across every search in the run, up to 50,000.
maxPagesPerSearchnoneStops each search after this many pages of 50, from 1 to 100.
flagUnderpricedfalseMarks ads priced 20% or more under the median of their own search. Needs at least 10 priced ads in that search.
skipNegotiablePricefalseLeaves out ads that show no number for the price, only "Цена договорная" (price by agreement). They are not charged and do not count toward maxItems.
excludeListingIdsnoneAds to skip, by listingId or ad link. Not returned, not charged, not counted toward maxItems.
skipFromDatasetnoneThe 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, notionParentIdnoneOptional. 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.
proxyConfigurationnoneOptional, 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

Real run output

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"
}
FieldHow to read it
descriptionThe preview Avito prints on the results page, cut off by Avito itself. Not the full ad body.
price, priceTextThe 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, addressOnly when the seller added them.
sellerTypeprivate or company, as Avito marks the seller. Empty when the ad doesn't say which.
sellerRatingThe key is absent, not null, when Avito sends no rating. Check for the key, not for a null.
publishedAtA real ISO timestamp, alongside Avito's own wording in publishedAtText.
imagesEvery photo at the largest size Avito renders. imageCount is how many.
paramsThe spec line Avito prints under the title, like Отличное.
previousPriceThe crossed-out price printed next to a discount. null after a plain price drop; priceDropped is then true.
pricePerM2A number, only where Avito prints a price per m², mostly flats for sale. normalizedPrice is Avito's own wording.
nearbyPlacesOne 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, totalFloorsRead 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.
isPromotedtrue when Avito marks the ad as paid for more visibility.
sellerReviewCount0 when Avito says the seller has no reviews, null when it shows no review line.
isUnderpriced, priceVsMedianOnly 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

RowHow to spot itBilled
An adIt has a listingId and no _sample or _diagnostic keyyes
The sample row_sample: true and charged: falseno
A diagnostic_diagnostic: true, charged: false and an errorCodeno

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.

CodeWhat it means
NO_RESULTSThat search returned nothing.
BAD_INPUTA URL that is not an Avito search or category link.
NOT_SERVEDAvito 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_RESPONSEAvito answered with something this actor could not read.
PROXY_GROUP_IGNOREDPart of the network settings you sent could not be used as given, so the run adjusted them and carried on.
TIME_LIMITThe 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_ERRORThe 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: publishedAt shows what is new and a missing listingId what sold; Make, Zapier or n8n take it from there.
  • Listing the businesses selling in a category, using sellerType to keep the shops and dealers and drop private sellers.
  • Property and car research, where latitude and longitude are 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:

  1. Run this on a category and city with sellerType set to company.
  2. Copy the sellerUrl of the dealers you care about.
  3. 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.
  • description is 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, longitude or street address.
  • 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 wantUse
Ads from a search, a category or a city on AvitoThis one
Everything one Avito seller has listed, plus their profileAvito Seller Listings & Profile Scraper
Reviews for a place on Yandex MapsYandex Maps Reviews Scraper
Businesses and their details from 2GIS2GIS Places Scraper
Reviews from 2GIS2GIS 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.

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.

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-client
from apify_client import ApifyClient
client = 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 results
continue
print(row.get("price"), (row.get("title") or "")[:80])

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.