Avito.ru Scraper - Listings, Prices, Sellers & 25+ Fields
Pricing
from $1.00 / 1,000 results
Avito.ru Scraper - Listings, Prices, Sellers & 25+ Fields
From $1/1K. Scrape structured listings from Avito.ru by region, category, filters, or direct URL. Automatically paginate through results and extract 25+ fields per listing, including price, full address, metro information, images, posting date, seller type, and verification badges.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
3
Bookmarked
388
Total users
57
Monthly active users
2 days ago
Last modified
Categories
Share
Avito.ru Scraper: Listings, Prices, Photos & Seller Details
Avito.ru Scraper turns Avito, Russia's largest classifieds portal, into structured data. Pull up to 42 fields per listing, including price, full address, GPS coordinates, metro station, photo gallery, posting date, seller type and verification badges, across apartments, houses, cars, jobs, services, electronics and every other category. Build a search from region and category filters, or paste Avito URLs directly, then export to JSON, CSV or Excel, or read the results through the API.
Why This Scraper?
- Up to 42 fields per listing: price, full address, metro station and walking distance, photo gallery, posting date, seller type and verification badges.
- Two ways to find listings. Build a search from region, category and filters, or paste Avito URLs and the actor walks pagination forward from wherever the URL starts.
- Every category on Avito. Apartments, houses, rooms, garages, commercial property, land, cars, motorcycles, trucks, boats, auto parts, jobs, services, resumes, electronics, home and garden, hobbies, animals, clothing and more.
- Rich results with no extra fetch. The default lean mode returns the search-results card fields: title, price, full description, photo gallery, address, metro and seller badges, with no detail-page visit.
- Optional detail-page enrichment. Turn on
fetchDetailsfor the full attribute table, GPS coordinates, seller stats, view counts, a price-change signal and the category breadcrumb path. - Built for schedules. Incremental mode returns only new and changed listings on recurring runs, and
resumeFromRunIdcontinues one interrupted run without re-collecting or re-billing what it already has.
Use Cases
- Real estate market research: track apartment and house prices, availability and days-on-market across regions.
- Car marketplace analysis: monitor used-car listings, pricing and model availability by region.
- Job market research: collect vacancy and resume postings across categories and regions.
- Classifieds aggregation and price comparison: mirror or compare listings across categories for a resale or comparison tool.
- Lead generation: turn on Incremental mode to catch new or price-changed listings on every scheduled run.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
id / url | "0000000000" / "https://www.avito.ru/moskva/kvartiry/listing-title-slug_0000000000" |
title | "Sample listing title in Russian" |
price / priceText / currency | 12345678 / "12 345 678 ₽" / "RUB" |
category / subcategory / region / city | "kvartiry" / "prodam" / "moskva" / "moskva" |
address / street | "Sample building, Sample street 4" / "Sample street" |
metro / metroDistanceMin | "Sample metro station" / 10 |
description | full listing description text, returned by default |
photoUrls / photoCount | array of photo URLs / 5 |
badges / isVerified | ["Sample badge text"] / true |
sellerName / sellerType | "Sample Agent" / "agency" |
sellerRating / sellerReviewsCount | null / null (Avito's listing page does not carry the seller's rating; these stay empty unless the page supplies it) |
sellerSince | "февраля 2011" (when enabled; empty for private sellers, who hide it) |
viewsCount | 0 (when enabled) |
attributes | key/value attribute table, for example rooms or floor (when enabled) |
lat / lng / priceIncreased | 55.75201 / 37.54841 / false (when enabled) |
categoryPath | ["Главная", "Недвижимость", "Квартиры", "Купить"] (when enabled) |
postedDate / postedAt | "1 января" / "2026-10-10T22:44:00+03:00" (postedAt when enabled; the localized posting stamp read as Moscow time, empty when it cannot be read) |
priceHistoryCount / priceWasLowered | 3 / false (when enabled) |
pricePrevious / normalizedPrice | "" / "368 056 ₽ за м²" (when enabled; previous price is empty unless the seller lowered it) |
categoryId / locationId / hasVideo / videoUrl | 24 / 637640 / false / "" (when enabled; the ids are Avito's own) |
geoReferences | [{"name": "Sample station", "distance": "400 м", "walkTime": "6-10 мин."}] (nearby stations with distance and walking time, when enabled) |
isDeliveryAvailable / layoutImageUrls | false / array of floor-plan image URLs (when enabled; the array is empty when the listing has none) |
marketValuation | {"estimated": 5300000, "lowest": 4808100, "highest": 5531900, "verdict": "good"} (Avito's own price estimate, when enabled and shown for the listing) |
sellerKey / sellerUrl | "4d07885f1fffd48ca6a8dc0e159bec5c" / "https://www.avito.ru/brands/sample-agency" (agency or developer profile; empty for private sellers) |
The lean default already returns most of the fields above. Turn on fetchDetails to add attributes, lat, lng, sellerRating, sellerReviewsCount, sellerSince, viewsCount, priceIncreased, categoryPath, postedAt, priceHistoryCount, geoReferences and the other detail fields in the table above. Text fields (priceText, postedDate, sellerSince, categoryPath, title, description) are returned in Russian as shown on Avito.
How to Use
- Pick a mode:
search(build a query from region, category and filters) orurl(paste Avito links directly). - For search mode, set the region and category, then narrow with price, deal type, sort order or a free-text query.
- Set Max listings (and optionally Max pages) to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Apartments for sale in Moscow, price capped:
{"mode": "search","regions": ["moskva"],"category": "kvartiry","dealType": "prodam","minPrice": 1000000,"maxPrice": 9000000,"sortBy": "price_asc","maxListings": 250,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Cars anywhere in Russia, free-text search:
{"mode": "search","regions": ["rossiya"],"category": "avtomobili","query": "tesla model 3","sortBy": "date_desc","maxListings": 150,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Rentals in two cities, private sellers only, full detail:
{"mode": "search","regions": ["moskva", "sankt-peterburg"],"category": "kvartiry","dealType": "sdam","ownerOnly": true,"maxPrice": 80000,"fetchDetails": true,"maxListings": 200,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/avito-ru-scraper").call(run_input={"mode": "search","regions": ["moskva"],"category": "kvartiry","proxy": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["title"], listing["price"], listing["url"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/avito-ru-scraper').call({mode: 'search',regions: ['moskva'],category: 'kvartiry',proxy: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Direct URLs and forward paging
Paste one or more Avito search or category URLs in urls (URL mode). Pagination starts at whatever page the URL points to and walks forward, so a link to page 5 continues from page 5 onward. Filter fields are ignored in this mode.
Leave urls untouched and a URL-mode run scrapes one example per URL shape below (the field's default; this is a change from earlier versions, where an empty list stopped the run). Only search and category URLs are scraped; single-listing, seller-profile and non-avito URLs are skipped with a warning in the log, and a run with no usable URL stops with an error instead of finishing empty. m.avito.ru links are converted to www.avito.ru.
| URL shape | Example | Behaviour |
|---|---|---|
| Category + deal type | https://www.avito.ru/moskva/kvartiry/prodam | Walks every result page |
| Paginated listing | https://www.avito.ru/moskva/kvartiry/prodam?p=2 | Starts at page 2 and walks forward |
| Free-text search | https://www.avito.ru/moskva?q=iphone | Walks every result page |
Single listing /<city>/<category>/<title>_<id> | Skipped with a warning | |
Seller profile /user/<id>/profile | Skipped with a warning |
In filter mode, regions accepts plain city names (for example Москва or Moscow) for common cities as well as Avito slugs such as moskva; an unknown name stops the run with an error.
Resume and recurring updates
Two different things share the same input section:
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID, and this run skips every listing that run already collected, so you do not pay twice. - Incremental mode (
incrementalMode) is for running the same search or URL set again and again, for example daily. Each listing is classifiedNEW,UPDATED(withchangedFields),REAPPEARED,UNCHANGED(suppressed and not billed unlessemitUnchangedis on), orEXPIRED(only after a run that scanned every tracked region or URL to a confirmed end of results, and only withemitExpiredon).stateKeynames or shares the stored state; left empty, the actor derives one automatically from the mode, regions or URLs, category and filters, so different searches never mix state. A listing isUPDATEDwhen a real listing field changes (price, title, description, address, seller, photo count, attributes and similar). These never count as changes, though they are still returned:photoUrls(avito serves the same photos from rotating image-server addresses; added or removed photos still show up throughphotoCount), the live countersviewsCount,todayViewsandsellerReviewsCount, the relative posting datespostedDateandpostedDateFull(usepostedAtfor the stable timestamp),layoutImageUrls(floor-plan images, served from the same rotating image-server addresses as the photos) andmarketValuation(the site's own price estimate, which the site recalculates on its own; it is not a change the owner made). List any other fields you don't want treated as changes inignoreFieldsForChanges; dotted paths such asattributes.floorignore a nested field. Ignored fields are still returned in the output.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (filters) or url (direct URLs). |
regions | array | ["moskva"] | Region slugs, search mode only. Use rossiya for all of Russia. |
category | string | kvartiry | Top-level category slug (apartments, cars, jobs, services, and more). |
dealType | string | prodam | any, prodam (sale) or sdam (rent). Property categories only. |
query | string | (none) | Free-text query, matches title and description. |
minPrice | integer | (none) | Minimum price in rubles. |
maxPrice | integer | (none) | Maximum price in rubles. |
sortBy | string | default | default, date_desc, price_asc or price_desc. |
ownerOnly | boolean | false | Restrict to private (non-agency) sellers. |
urls | array | sample | Avito search or category URLs, URL mode only. |
maxPages | integer | (none) | Optional cap on result pages walked per region or URL. Leave empty to walk every page. |
maxListings | integer | 20 | Hard cap on total listings written to the dataset (0 = unlimited; maximum 1000000). |
fetchDetails | boolean | false | Visit each listing's detail page for the full attribute table, GPS, seller stats and more. |
resumeFromRunId | string | (none) | Continue one interrupted run or dataset without re-collecting its listings. |
incrementalMode | boolean | false | Return only new and changed listings on recurring runs. |
stateKey | string | (none) | Name or share an incremental-mode state. |
emitUnchanged | boolean | false | Also return (and bill) unchanged listings. |
emitExpired | boolean | false | Also return (and bill) expired listings. |
ignoreFieldsForChanges | string[] | [] | Extra output fields to ignore when deciding whether a listing is UPDATED; dotted paths like attributes.floor reach nested fields (photoUrls, viewsCount, todayViews, sellerReviewsCount, postedDate, postedDateFull, layoutImageUrls and marketValuation are always ignored). |
proxy | object | (none; prefilled with Apify Proxy, Residential) | Connection settings. Include it when calling from the API. |
mcpConnectors | array | (none) | Optional: send a summary of each listing to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "0000000000","url": "https://www.avito.ru/moskva/kvartiry/listing-title-slug_0000000000","title": "Sample listing title in Russian","price": 12345678,"currency": "RUB","priceText": "12 345 678 ₽","category": "kvartiry","subcategory": "prodam","region": "moskva","city": "moskva","address": "Sample building, Sample street 4","street": "Sample street","metro": "Sample metro station","metroDistanceMin": 10,"postedDate": "1 января","description": "Full listing description text.","photoUrls": ["https://img.avito.st/sample/1.jpg"],"photoCount": 1,"badges": ["Sample badge text"],"isVerified": true,"sellerName": "Sample Agent","sellerType": "agency","sellerRating": null,"sellerReviewsCount": null,"sellerSince": "февраля 2011","viewsCount": 0,"attributes": { "Sample attribute key": "Sample value" },"lat": 55.75201,"lng": 37.54841,"priceIncreased": false,"categoryPath": ["Главная", "Недвижимость", "Квартиры", "Купить"],"postedAt": "2026-10-10T22:44:00+03:00","priceHistoryCount": 3,"priceWasLowered": false,"pricePrevious": "","normalizedPrice": "368 056 ₽ за м²","categoryId": 24,"locationId": 637640,"hasVideo": false,"videoUrl": "","geoReferences": [{ "name": "Sample station", "distance": "400 м", "walkTime": "6-10 мин." }],"isDeliveryAvailable": false,"layoutImageUrls": [],"marketValuation": { "estimated": 5300000, "lowest": 4808100, "highest": 5531900, "verdict": "good" },"sellerKey": "4d07885f1fffd48ca6a8dc0e159bec5c","sellerUrl": "https://www.avito.ru/brands/sample-agency"}
Dataset views
The dataset has four views in the Console: Listings Overview (core card fields), Photos, Listing Detail (attributes, GPS, seller stats, enabled by fetchDetails) and Changes (incremental mode: change status and changedFields).
Plan Requirement
Avito's access protection rejects most automated traffic with an "access restricted" page (HTTP 429), including plain requests from unknown IPs and many datacenter exits. Datacenter proxies can work (a small test run returned every listing it asked for) but are slower and less reliable, with more session refreshes and retries; runs without a proxy are refused. Use the prefilled proxy settings (Apify Proxy, Residential group): the actor prepares a browsing session before fetching pages, and residential is the recommended setting, but it is not a guarantee, because Avito can still refuse individual exits. Reliability varies by run; the actor rotates exits and retries, and the run fails with a clear message rather than returning an empty result when nothing gets through.
What you may see in the run log and status message:
- "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." Your plan does not include the selected proxy. The backup connection is used instead and may be refused too. When it serves data the log adds "Served over the backup connection (the default connection was unavailable)."
- "The proxy connection keeps failing - switching to a backup connection for the rest of this run." Repeated connection errors on your proxy settings.
- "The site is rate-limiting this connection class (sustained HTTP 429 across fresh exits) ... Please retry later." The run failed, nothing is billed. Retry later or with a different proxy country.
- "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required ..." The run failed, nothing is billed. If the backup connection was reachable but loaded no page, the message starts "No results: residential proxies are unavailable on this run ..." instead.
- "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later." The run failed, nothing is billed.
- "No listings found for the given input. Try different filters." The search genuinely matched nothing.
FAQ
How much does it cost?
You pay per listing returned, plus a per-run start charge, and a separate charge for each listing enriched when fetchDetails is on (one extra page per listing). Unchanged listings are suppressed and not billed unless emitUnchanged is on; expired listings are billed only with emitExpired on. The Pricing tab shows the current rates for your plan tier. Use Max listings to cap the cost of any run.
Is it legal to scrape Avito?
This actor collects only publicly available listing data. You are responsible for how you use it: follow Avito's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing facts like price and address are generally factual data, but photos may be subject to third-party rights.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared listings, and unchanged ones are not billed unless you turn on Emit unchanged.
Why does dealType have no effect on some categories?
dealType only applies to property categories: apartments, houses, rooms, garages, commercial property and land. It is ignored for cars, jobs, electronics and every other category.
Why did my run finish with no listings?
If the filters match nothing, the run finishes with an empty dataset and a status message, and nothing is billed. If no connection could reach Avito at all, the run fails with a message that says so instead of reporting an empty search, and nothing is billed. If your Apify plan does not include proxy access, the run continues on a backup connection, and the log says so; if the backup connection can't get through either, a paid Apify plan with proxy access is required.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more classifieds data?
Pair this actor with these related scrapers from the same team:
| 🏷️ Mudah.my Cars, Property, Jobs & Marketplace Scraper Scrape Mudah.my listings across every category: cars, motorcycles, property, mobiles... | 🚗 Willhaben.at Scraper From $1/1K. Scrape Willhaben.at listings into clean JSON with 40+ structured fields... |
| 🏷️ Subito.it Scraper Scrape Subito.it listings across cars, real estate, marketplace, jobs, and more. Search... | 🏷️ Gumtree.com Scraper Scrape Gumtree.com classifieds across motors, property, jobs, services, pets and goods... |
| 🏷️ Wildberries Scraper Scrape Wildberries marketplace: product search with prices (wallet vs retail), discounts... | 🚗 Craigslist Scraper Scrape Craigslist postings in any of 700+ cities worldwide: price, title, posting text... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.