Yandex Realty Scraper
Pricing
from $10.00 / 1,000 results
Yandex Realty Scraper
Get Russian real estate listings from Yandex Realty: price with real change history, exact address with GPS and metro walk time, area, rooms, floor, building detail, seller info, and photos. Filter by city, price, and rooms, paste a search URL, or look up specific offers by ID.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Norm Data
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share

🏠 Yandex Realty Scraper
Get Russian real estate listings from Yandex Realty (realty.yandex.ru) with no login and no API key: price with real price-change history, exact address with GPS and metro walk time, area, rooms, floor, building and renovation detail, seller info, photos, and the full listing description.
Search by city, deal type, and category with real server-side filters, paste any search URL built on the site itself, or look up specific offers by ID, and get export-ready data for investment sourcing, market research, and relocation search.
🎯 Who uses it?
💼 Real estate investors
Filter and rank listings by price, area, and price per square meter across a whole city or price band to source deals.
📈 Market researchers
Track how many listings and at what price a city, category, or room-count combination carries over time.
🏡 Relocation and rental searchers
Pull every match for a city with real metro-distance and building detail, well beyond what a manual browse would cover.
📇 Lead generation teams
Compile seller and agency lists by city and category from the listings they're actively running.
📊 Valuation and appraisal teams
Feed structured price, area, and location data straight into a valuation model or a map.
✨ What it does
- Search: filters the whole catalog by city, buy or rent, property type, room count, price range, and area range.
- Search URL: paste any search-results link built on realty.yandex.ru's own site, so every filter it supports is available, not only the ones exposed as inputs.
- Look up: resolves exact offer IDs or full offer URLs, one row per offer, including a full dated price-history series that search rows don't carry.
- Price history on demand: any search can also fetch each result's price history in the same run, instead of needing a separate look-up call per offer ID afterwards.
Missing source values are returned as null, never invented.
🏆 Why this scraper
- Real price history without a separate look-up step. A full dated series of every past price for a listing, fetched directly from a search run.
- A price range that reaches further than the site's own pagination limit. realty.yandex.ru caps one filtered search at 25 pages no matter how many listings match. This actor automatically splits an oversized price range in half using the real sampled prices already fetched, and searches each half independently, so a broad city-wide search can reach a large row count instead of silently stopping early.
- Full listing detail in one request: exact address, GPS coordinates, metro station with real walk time, building year, type, parking, heating, renovation state, and the complete description, not only the headline numbers.
- Paste-a-URL flexibility. Anything filterable on realty.yandex.ru's own site can be run here.
- No API key, no login, no browser extension. Reads only what a normal visitor's page load reads.
⚖️ How it compares
Checked directly against both other Yandex Realty scrapers on Apify (their own declared input and output):
| Capability | This actor | zen-studio/yandex-realty-scraper | sian.agency/yandex-realty-scraper |
|---|---|---|---|
| Apartments, houses, rooms, land, garages, commercial | yes | yes | yes |
| Search by city, price, rooms, area filters | yes | yes | yes |
| Paste a custom search URL | yes | not documented | yes |
| Price history fetched directly from a search, no separate run | yes | separate add-on (own run/mode) | not documented |
| Automatic handling of the site's page limit | yes, price-range splitting | yes, geographic splitting | not documented |
The one honest gap: phone and contact reveal is a client-side action behind what looks like a session flow on Yandex's own site, so it isn't attempted here rather than faked.
📦 What data you get
| Entity | Useful fields |
|---|---|
| Identity | Offer ID, offer type, category, and URL. |
| Pricing | Price, currency, price per square meter, price trend, and previous price. |
| Layout | Rooms, area, living space, kitchen space, floor, and total floors. |
| Location | Address, latitude, longitude, metro station, and metro walk time. |
| Building | Building year, building type, parking type, heating type, and renovation state. |
| Seller | Seller type and seller name. |
| Content | Description, image count, and image URLs. |
| Price history | A full dated { date, price } series, present on look-up rows and on search rows when requested. |
Every record includes scraped_at (UTC). Download your dataset from Apify as CSV, JSON, Excel, or XML.
💡 Use cases
💼 Source investment candidates
{ "mode": "search", "citySlug": "moskva", "dealType": "kupit", "category": "kvartira", "roomsTotal": ["2", "3"], "priceMin": 15000000, "priceMax": 30000000, "maxItems": 200 }
🔗 Search from a pasted URL
{ "mode": "url", "searchUrl": "https://realty.yandex.ru/sankt-peterburg/snyat/kvartira/?roomsTotal=1", "maxItems": 100 }
🔎 Look up specific offers with full price history
{ "mode": "lookup", "offerIds": ["7035113340557210816", "https://realty.yandex.ru/offer/123456789012/"] }
📈 Search with price history attached to every row
{ "mode": "search", "citySlug": "moskva", "category": "kvartira", "roomsTotal": ["2"], "maxItems": 50, "includePriceHistory": true }
⚙️ How the input is organised
The input form is split into sections by mode:
| Section | What it's for |
|---|---|
| Mode | Pick Search (filter by city, category, price, rooms), Search URL (paste a link from realty.yandex.ru), or Look up (specific offer IDs). |
| Search filters | City, deal type, property type, room count, price range, area range, sort order, and whether to include price history. Only used in Search mode. |
| Search URL mode | Paste a full search-results URL from realty.yandex.ru. |
| Look up | Offer IDs or full offer URLs. |
Apify Free plan: every run is limited to a fixed 10-row sample. Upgrade your Apify plan to run your own settings.
💰 Pricing
Pay-per-event: a one-time 0.003 when the run starts, plus a price for each kind of record the run produces. You only pay for the kinds you turn on:
| Charged for | Free | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| result | 0.0238 | 0.0167 | 0.0131 | 0.01 |
| Price History | 0.012 | 0.0085 | 0.0065 | 0.005 |
New Apify accounts start with $5 in free credit.
🚀 Run it
- Create a free Apify account with $5 in credit.
- Open the Yandex Realty Scraper.
- Fill in the input (or keep the prefilled example), set the maximum number of results, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python, and schedule it with Apify's built-in Scheduler.
🤖 Use with AI agents (MCP)
Give an AI agent live access to the Yandex Realty Scraper through the Model Context Protocol:
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/yandex-realty-scraper"
Then prompt it in plain language to run the scraper and read back the results.
🔧 Troubleshooting
Phone numbers are missing. Yandex reveals phones through a client-side session flow, so they're not attempted rather than faked.
Search rows have no price history. Turn on "Include price history", or use Look up mode, which always includes it.
Big searches take longer. Yandex caps a search at 25 pages, so large searches are split by price range automatically to reach every listing.
❓ FAQ
| Question | Answer |
|---|---|
| Can I paste a search from the site? | Yes, Search URL mode accepts any realty.yandex.ru results link. |
| Does it include GPS and metro time? | Yes, exact address, coordinates and walking time to the metro. |
| What does the price-history charge cover? | Each listing's dated price series, only when you ask for it. |
| Do I need an account? | No. |
🛡️ Limits & responsible use
This actor reads only realty.yandex.ru's own public pages, with no key and no login.
Phone and contact reveal is a client-side action behind what looks like a session flow, not a plain page read, so it is not attempted here rather than faked or guessed at.
A filtered search on realty.yandex.ru itself is capped at 25 reachable pages no matter how many listings actually match. A search that needs more than that automatically splits its price range and searches each half separately, which takes real extra requests, the honest tradeoff for reaching a larger row count instead of silently stopping early.
realty.yandex.ru's own search index can lag a listing's live price by minutes to hours, so a small share of rows in a filtered search can carry a live price outside the range you asked for. Rather than dropping those rows silently, they're kept and flagged price_out_of_requested_range: true, with price_trend and previous_price on the same row showing the change that caused it.
currency can read RUR instead of RUB: that is the real value the source itself returns, passed through as-is rather than corrected to a guess. rooms_total is genuinely absent for studios and non-residential categories like land and garages.
Data is read live on every run, never cached. This actor is independent and not affiliated with Yandex; it reads only publicly available pages.
📧 Contact
Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com
🧪 Local development
bun installbun test # offline: normalisation, URL building, splitting logic (real fixtures)bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json