Avito Real Estate Scraper | Парсер Авито Недвижимость
Pricing
from $1.50 / 1,000 listing discovereds
Avito Real Estate Scraper | Парсер Авито Недвижимость
Avito real estate scraper: every property listing on avito.ru — flats, houses, rooms, land, commercial — as clean JSON with URLs and lastmod stamps. Monitor new listings, deltas; no prices/photos in v1. Russia property data from Avito's sitemaps, no proxies. Авито недвижимость: парсер объявлений.
Pricing
from $1.50 / 1,000 listing discovereds
Rating
0.0
(0)
Developer
ActorForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Discover every property listing on Avito (avito.ru) — Russia's #1 real estate marketplace — as clean JSON. Full-section crawl of flats, houses, rooms, land, commercial and more via Avito's own published sitemaps: canonical listing URLs, freshness timestamps and URL-derived fields. Russia property data for new-listing monitoring — fast, API-level, no browser automation. Авито недвижимость: парсер объявлений, мониторинг новых объявлений.
What this actor is (and honestly is not)
This is a discovery and freshness actor, not a card scraper:
- It gives you the full inventory of a property section — every listing URL Avito publishes
in its sitemaps (~550,000 live flat listings, updated by Avito continuously), with
lastmodfreshness stamps. Perfect for spotting new listings, computing deltas between runs, and building a comps universe per city. - It does not open listing pages, so there are no prices, photos, addresses or seller info in the output — only what Avito publishes in the sitemap URL itself. Card enrichment is a planned v2 (it requires Russian residential IPs; discovery does not).
- It is not a filtered search. Avito's
robots.txtdisallows parameterized search and its API for crawlers; sitemap crawling is the route Avito itself sanctions. Filter by city and freshness here, do finer filtering downstream.
What you get
One row per discovered listing:
{"url": "https://www.avito.ru/moskva/kvartiry/3-k._kvartira_75_m_29_et._8112834772","itemId": "8112834772","city": "moskva","category": "kvartiry","title": "3-k. kvartira 75 m 29 et.","rooms": 3,"lastmod": "2026-07-16T07:31:50Z"}
itemId— Avito's listing id (string), extracted from the URL tail. Stable join key.city— city slug exactly as in the URL (moskva,sankt-peterburg,rostov-na-donu).category— section slug from the URL (kvartiry,komnaty,doma_dachi_kottedzhi, …).title— the URL slug made human-readable (underscores → spaces). Transliterated Latin, as published by Avito.rooms— number of rooms (3) or"studio", present only when the slug states it unambiguously (3-k._kvartira…,kvartira-studiya…). Auction lots, wanted ads andapartamentyvariants get noroomsfield rather than a guess.lastmod— ISO timestamp from Avito's sitemap; absent for the rare entries Avito publishes without one. Numbers like area and floor are deliberately NOT parsed from the slug: Avito strips the decimal comma there (556_mcan mean 55.6 m² or 556 m²), so any parsed number would be a guess. Numeric card fields arrive with v2 enrichment.
Use cases
- New-listing alerts — run on a schedule with
updatedAfterand get only fresh listings. - Market inventory & deltas — track how many listings each city/section has, what appeared
and disappeared between runs (diff by
itemId). - Comps universe — the complete set of listing URLs per city, ready for your own enrichment or valuation pipeline.
- Feed for card scraping — clean, deduplicated URL + freshness input for any downstream detail scraper.
Input
| Field | Type | Description |
|---|---|---|
sections | string[] | Property sections to crawl. Default ["kvartiry"]. Full list: kvartiry, komnaty, doma_dachi_kottedzhi, zemelnye_uchastki, kommercheskaya_nedvizhimost, garazhi_i_mashinomesta, nedvizhimost_za_rubezhom, realty_rent (short-term rent). |
cities | string[] | City slugs as they appear in Avito URLs (moskva, sankt-peterburg). Empty = all cities. |
updatedAfter | string | ISO date; keep only listings with sitemap lastmod on or after it. Entries without lastmod are dropped when this filter is set. |
maxItems | integer | Hard cap on output rows. Default 50 000 (≈ one sitemap file). Raise for a full-section crawl (flats ≈ 550k). |
How to use it
- Click Try for free / Start on this page.
- Choose one or more Property sections. The default is
kvartiry(flats). - Optionally list Cities using the slugs Avito puts in its URLs —
moskva,sankt-peterburg,rostov-na-donu. Leave it empty to keep every city. - For new-listing alerts, set Updated after to an ISO date; only listings whose sitemap
lastmodis on or after it survive. (Entries without alastmodare dropped when this filter is on.) - Set Max items. The default 50 000 is about one sitemap file; raise it for a full-section crawl.
- Run it, then export the Listings view as JSON, CSV or Excel, or read it over the API.
The usual pattern is a schedule plus a diff. Run it daily with updatedAfter set to
yesterday and you get exactly the listings that appeared or were refreshed; diff consecutive
runs by itemId to see what came and went. Every output field carries typed metadata in the
Actor's dataset schema, so agents calling this through the Apify MCP server know what they are
getting.
Why this scraper
- It uses the door Avito left open. Listing pages and the mobile API sit behind Avito's
Qrator firewall and are disallowed for crawlers by
robots.txt; the sitemaps are published by Avito itself in that samerobots.txt. This actor reads only those — which is why it needs no expensive Russian residential proxies and keeps a predictable success rate. - Honest failures. A firewall page instead of a sitemap, a truncated gzip, a drifted format — each fails the task loudly with a clear reason instead of masquerading as an empty result.
- Schema-validated output — every row is checked against a schema before it reaches your
dataset; a format change on Avito's side surfaces as a failure, not as
undefinedin your pipeline. - Polite by design — a handful of requests per run (one index + one gzip file per ~50 000 listings), spaced out. A full flats crawl is ~12 HTTP requests total.
Limits (honest)
- No card fields. Prices, areas, floors, photos, addresses, seller names are not in
sitemaps and therefore not in v1 output.
roomsappears only when unambiguous. - No search filters. You can slice by section, city and freshness — not by price or rooms range (Avito forbids parameterized search for crawlers; we don't circumvent that).
- Freshness is Avito's.
lastmodcomes from Avito's sitemap generator; entries without it are passed through as-is (unlessupdatedAfteris set, which drops them). - Sections are a fixed list taken from Avito's live sitemap index; if Avito adds a section it appears here with an actor update.
- Public data only; no login, no captcha solving, no access-control bypassing. Requests are paced ≥500 ms apart.
Pricing
Pay-per-event: a platform charge per run start plus one listing-discovered event per output
row. No hidden compute or proxy surcharges — discovery runs without residential proxies. See
the Store page for current rates.
FAQ
Do I need Russian proxies for this? No — and that is the point. Avito's sitemaps are served without the Qrator firewall that guards listing pages, so discovery runs on plain infrastructure. Card enrichment (v2) will need Russian residential IPs; discovery does not.
Where are the prices, photos and addresses?
Not in the output, because they are not in the sitemaps. This Actor deliberately stops at what
Avito publishes for crawlers. Anything else would mean opening listing pages, which Avito's
robots.txt disallows.
Why is rooms missing on some rows?
Because the slug did not state it unambiguously. Auction lots, wanted ads and apartamenty
variants get no rooms field rather than a guessed number.
Why aren't area and floor parsed out of the URL slug?
Avito strips the decimal comma in slugs, so 556_m is both 55.6 m² and 556 m². A parsed number
would be a coin flip, so the field is left out until v2 reads it from the card.
Can I filter by price or room count? Not here. Avito forbids parameterized search for crawlers, so the Actor slices by section, city and freshness only. Filter finer downstream on the rows it returns.
How fresh is lastmod?
It comes straight from Avito's own sitemap generator, unmodified. Avito refreshes those files
continuously; the Actor reports what it read.
How many requests does a full crawl make? Very few — one sitemap index plus one gzip file per ~50 000 listings. A complete flats crawl is roughly 12 HTTP requests, spaced at least 500 ms apart.
Other Actors by ActorForge
- Wildberries Scraper — products, prices and reviews from Wildberries as clean, schema-validated JSON.
- Lazada Reviews Scraper — ratings, review text and buyer media from Lazada across the SEA marketplaces.
Need card-level enrichment, another Avito vertical, or a different marketplace? Open an issue from the Actor's page and tell us what you need.
Disclaimer
This is an unofficial actor. It is not affiliated with, endorsed by, or connected to Avito in any way. It collects only data that Avito publishes publicly in its sitemap files, without logging in and without circumventing access controls. You are responsible for ensuring your use of the collected data complies with applicable law and with Avito's terms.
Changelog
See the repository CHANGELOG.md.