Avito.ru Scraper - Listings, Prices, Sellers & 25+ Fields avatar

Avito.ru Scraper - Listings, Prices, Sellers & 25+ Fields

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Avito.ru Scraper - Listings, Prices, Sellers & 25+ Fields

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

Abot API

Maintained by Community

Actor stats

3

Bookmarked

388

Total users

57

Monthly active users

2 days ago

Last modified

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 fetchDetails for 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 resumeFromRunId continues 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.

FieldExample
id / url"0000000000" / "https://www.avito.ru/moskva/kvartiry/listing-title-slug_0000000000"
title"Sample listing title in Russian"
price / priceText / currency12345678 / "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
descriptionfull listing description text, returned by default
photoUrls / photoCountarray of photo URLs / 5
badges / isVerified["Sample badge text"] / true
sellerName / sellerType"Sample Agent" / "agency"
sellerRating / sellerReviewsCountnull / 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)
viewsCount0 (when enabled)
attributeskey/value attribute table, for example rooms or floor (when enabled)
lat / lng / priceIncreased55.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 / priceWasLowered3 / false (when enabled)
pricePrevious / normalizedPrice"" / "368 056 ₽ за м²" (when enabled; previous price is empty unless the seller lowered it)
categoryId / locationId / hasVideo / videoUrl24 / 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 / layoutImageUrlsfalse / 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

  1. Pick a mode: search (build a query from region, category and filters) or url (paste Avito links directly).
  2. For search mode, set the region and category, then narrow with price, deal type, sort order or a free-text query.
  3. Set Max listings (and optionally Max pages) to control run size and cost, then click Start.
  4. 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 ApifyClient
client = 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 shapeExampleBehaviour
Category + deal typehttps://www.avito.ru/moskva/kvartiry/prodamWalks every result page
Paginated listinghttps://www.avito.ru/moskva/kvartiry/prodam?p=2Starts at page 2 and walks forward
Free-text searchhttps://www.avito.ru/moskva?q=iphoneWalks every result page
Single listing /<city>/<category>/<title>_<id>Skipped with a warning
Seller profile /user/<id>/profileSkipped 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 classified NEW, UPDATED (with changedFields), REAPPEARED, UNCHANGED (suppressed and not billed unless emitUnchanged is on), or EXPIRED (only after a run that scanned every tracked region or URL to a confirmed end of results, and only with emitExpired on). stateKey names 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 is UPDATED when 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 through photoCount), the live counters viewsCount, todayViews and sellerReviewsCount, the relative posting dates postedDate and postedDateFull (use postedAt for the stable timestamp), layoutImageUrls (floor-plan images, served from the same rotating image-server addresses as the photos) and marketValuation (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 in ignoreFieldsForChanges; dotted paths such as attributes.floor ignore 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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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

ParameterTypeDefaultDescription
modestringsearchsearch (filters) or url (direct URLs).
regionsarray["moskva"]Region slugs, search mode only. Use rossiya for all of Russia.
categorystringkvartiryTop-level category slug (apartments, cars, jobs, services, and more).
dealTypestringprodamany, prodam (sale) or sdam (rent). Property categories only.
querystring(none)Free-text query, matches title and description.
minPriceinteger(none)Minimum price in rubles.
maxPriceinteger(none)Maximum price in rubles.
sortBystringdefaultdefault, date_desc, price_asc or price_desc.
ownerOnlybooleanfalseRestrict to private (non-agency) sellers.
urlsarraysampleAvito search or category URLs, URL mode only.
maxPagesinteger(none)Optional cap on result pages walked per region or URL. Leave empty to walk every page.
maxListingsinteger20Hard cap on total listings written to the dataset (0 = unlimited; maximum 1000000).
fetchDetailsbooleanfalseVisit each listing's detail page for the full attribute table, GPS, seller stats and more.
resumeFromRunIdstring(none)Continue one interrupted run or dataset without re-collecting its listings.
incrementalModebooleanfalseReturn only new and changed listings on recurring runs.
stateKeystring(none)Name or share an incremental-mode state.
emitUnchangedbooleanfalseAlso return (and bill) unchanged listings.
emitExpiredbooleanfalseAlso return (and bill) expired listings.
ignoreFieldsForChangesstring[][]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).
proxyobject(none; prefilled with Apify Proxy, Residential)Connection settings. Include it when calling from the API.
mcpConnectorsarray(none)Optional: send a summary of each listing to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap 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.

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

👉 Browse all abotapi scrapers

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