Yandex Maps Scraper | Парсер Яндекс Карт: Phones, Ratings
Pricing
from $0.40 / 1,000 businesses
Yandex Maps Scraper | Парсер Яндекс Карт: Phones, Ratings
Scrape Yandex Maps business listings across Russia and the CIS: name, address, phone, website, rating, review count, categories, opening hours and coordinates. No login, no API key.
Pricing
from $0.40 / 1,000 businesses
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
1
Bookmarked
4
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Share
Yandex Maps Search: Business Phones & Ratings · $0.40/1k
What does Yandex Maps Search do?
It turns a category and a city into a list of businesses: name, address, coordinates, phone numbers, website, rating, review count, opening hours and, on paid listings, the registered legal entity behind the storefront. Give it кафе (cafe) and moscow and it returns clean JSON rows read straight from Yandex Maps, the dominant mapping service across Russia and much of the CIS, where Google Maps coverage is thin or absent. No login, no API key, no browser.
✅ Phone on the large majority of records | ✅ Rating and review count where Yandex has them | ✅ Registered legal entity and tax ID on some paid listings | ✅ 14 cities across Russia, Belarus and Kazakhstan | ✅ No charge on an empty run
Who is it for?
Sales and B2B lead generation teams working the Russian-speaking market, where phone-first outreach still dominates and Google Maps data is sparse. Franchise and retail teams doing site selection by competitive density. Market researchers mapping every business in a category and city. Anyone feeding an AI agent that needs Russian or CIS local business data.
How much does it cost to scrape Yandex Maps?
You pay per business actually delivered, plus a small one-time start fee per run. Nothing else.
| Event | Price | You pay when |
|---|---|---|
| Business | $0.0004 ($0.40 / 1,000) | A business record lands in your dataset |
| Actor Start | $0.005 | Once per run, scaling with memory (one event per GB, minimum one). This actor runs on 1 GB, so one event per run |
This is flat, the same price on every Apify plan from Free to Diamond.
What a real job costs. Apify's Free plan includes $5 of usage credit every month. After the one-time $0.005 start fee, that leaves about 12,487 businesses, well over ten thousand, in a single run before the credit runs out. A 500 business, three-category dental clinic sweep across Saint Petersburg costs about $0.20. A 5,000 business lead list across several categories in one city costs about $2.00, plus $0.005 for the run.
What is never charged. A blocked tile, a failed request, or a map position with no businesses costs nothing. The business event fires only once a business record is actually in your dataset.
How do I search by category and city?
{"queries": ["кафе"],"city": "moscow","maxItems": 200}
Search in Russian for far better coverage. кафе returns many times more results than cafe, because Yandex indexes businesses by their Russian category names. English still works for international brand names.
How do I build a lead list across a whole vertical?
Several queries rotate through the same city in one run, so a single job can cover a whole category.
{"queries": ["стоматология", "стоматологическая клиника", "ортодонт"],"city": "spb","maxItems": 500}
How does this actor get more coverage than a normal search?
Yandex serves roughly 24 businesses per map viewport and shows a page count that makes ?p=2, ?p=3 look like ordinary pagination. It is not. Measured across four pages, the unique business count went 24, 29, 31, 31: it saturates almost immediately and later pages mostly re-serve what the first page already returned.
What genuinely pages is moving the map. This actor walks a grid of map tiles outward from the city centre (ll=longitude,latitude&z=15), collecting the businesses visible at each position and deduplicating across the overlap between neighbouring tiles. Four tile positions returned 78 unique businesses in testing, against 31 from four ordinary result pages at the same spot. Because tiles are ordered outward from the centre, the most central and relevant businesses arrive first, so a small maxItems still returns the city core rather than the suburbs. A search stops early, at no extra cost, once four consecutive tiles return nothing new.
How does this actor read Yandex Maps without a browser?
The business data is not in any obvious global variable on the page. It sits inside a single script tag, <script type="application/json" class="state-view">, and the businesses themselves are at $.stack[0].results.items, roughly 25 per tile, each already carrying phones, rating data, categories, working hours and coordinates. This actor extracts that block directly with plain HTTP requests over Apify's datacenter proxy, no browser and no residential IPs needed. A 13-platform proxy sweep measured Yandex Maps as fully usable on the cheapest proxy tier, which is what keeps this actor's price low.
What data do you get back?
A real record from a live run, and a second business in the same city with fewer of the optional fields filled in:
[{"business_id": "115736401897","name": "Галки","category": "Ресторан","categories": ["Ресторан", "кафе", "бар"],"address": "Москва, Страстной бульвар, 4, стр. 3","longitude": 37.608719,"latitude": 55.764844,"phone": "+7 (930) 036-22-71","phones": ["+7 (930) 036-22-71", "+7 (930) 036-23-21", "+7 (495) 149-81-22"],"website": "https://galki.moscow/","social_links": ["https://t.me/galkireserve", "https://vk.ru/galki_moscow"],"rating": 4.9,"rating_count": 9429,"review_count": 5125,"working_hours": "пн-чт 12:00-24:00; пт,сб 12:00-01:00","average_bill": "1300-2900 ₽","nearest_metro": "Чеховская","nearest_metro_distance": "117 м","legal_entity": "ООО \"БАНКЕТ\"","tax_id": "7716828550","is_advert": true,"maps_url": "https://yandex.ru/maps/org/galki/115736401897/","search_query": "кафе","search_city": "Moscow","scraped_at": "2026-09-10T09:41:02.330Z"},{"business_id": "1042819573","name": "Кофе Хауз","category": "Кофейня","categories": ["Кофейня", "кафе"],"address": "Москва, Тверская улица, 12","longitude": 37.606201,"latitude": 55.762512,"phone": "+7 (495) 771-88-88","phones": ["+7 (495) 771-88-88"],"website": "https://coffeehouse.ru/","social_links": [],"rating": 4.3,"rating_count": 612,"review_count": 340,"working_hours": "ежедневно 08:00-23:00","average_bill": null,"nearest_metro": "Тверская","nearest_metro_distance": "210 м","legal_entity": null,"tax_id": null,"is_advert": false,"maps_url": "https://yandex.ru/maps/org/kofe-khauz/1042819573/","search_query": "кафе","search_city": "Moscow","scraped_at": "2026-09-10T09:41:04.812Z"}]
| Field | Description |
|---|---|
🏢 name, category, categories | Business name and every category Yandex assigns it |
📍 address | Full postal address as Yandex publishes it |
🌐 longitude, latitude | Coordinates, named explicitly so there is no lat/lon swap |
📞 phone, phones | Primary number plus every other number listed |
🔗 website, social_links | Site and social profiles (Telegram, VK and similar) |
⭐ rating, rating_count, review_count | Star rating and how many people rated and reviewed it |
🕒 working_hours | Opening hours as published, null where Yandex has none |
💰 average_bill | Typical spend band, on hospitality listings that publish one |
Guide and FAQs: Yandex Maps Scraper on themineworks.com.
| 🚇 nearest_metro, nearest_metro_distance | Closest metro station and walking distance |
| 🧾 legal_entity, tax_id | Registered company name and Russian tax number (ИНН), present only on paid placements |
| 📣 is_advert | Whether this was a paid placement |
| 🗺️ maps_url | Direct link back to the listing on Yandex Maps |
| 🔎 search_query, search_city | The query and city that returned this business |
| 🕒 scraped_at | ISO timestamp when the record was captured |
The legal entity and tax ID are worth calling out
Where a business runs paid placement on Yandex, its registered legal entity and Russian tax number (ИНН) are published alongside the listing, and this actor extracts both. That turns a maps listing into something you can match against a company registry, the real company behind the trading name, rather than just its storefront name. It appears only on paid placements, so treat it as a bonus field rather than a guaranteed one.
What are the limitations?
Worth knowing before you buy, so there are no surprises:
legal_entityandtax_idare present only on paid placements, not on every business. Most rows carrynullfor both.- Coverage is limited to 14 named cities: Moscow, Saint Petersburg, Novosibirsk, Yekaterinburg, Kazan, Nizhny Novgorod, Chelyabinsk, Samara, Rostov-on-Don, Ufa, Krasnoyarsk, Minsk, Almaty and Astana. A city outside this list cannot currently be searched.
- Very large categories in one city are capped by how far the tile grid reaches, sized automatically from your
maxItems, up to six rings outward from the centre. An extremely broad query in a dense centre can exhaust the grid before it exhausts the category. - Russian queries return more than English ones. Yandex indexes businesses by their Russian category names, so a generic English keyword undercounts what is really there.
What can you use it for?
B2B lead generation in the Russian-speaking market, where Google Maps data is sparse and phone coverage is strong.
Competitor and market mapping. Every restaurant, clinic or gym in a district with ratings and review volume attached.
Franchise and retail site selection, using coordinates, metro proximity and local competitive density.
Company registry matching, via the legal entity name and tax ID on paid listings.
How do I get started?
- Open the actor and enter one or more
queries, ideally in Russian. - Pick a
cityfrom the 14 supported. - Set
maxItemsto control cost and coverage. - Click Start.
- Download as JSON, CSV, or Excel, or pull the dataset via API or MCP.
Can I run it on a schedule?
Yes, with Apify's built-in Schedules. No code, no cron server of your own.
- Run the actor once with the input you want repeated, then click Save as a task.
- Turn on Monitor mode so later runs return only newly listed businesses, which is what keeps a repeated schedule from re-billing you for the same map every time.
- In the Apify Console, go to Schedules, then Create new, name it, and pick a frequency: a preset (hourly, daily, weekly) or a cron expression such as
0 6 * * *for daily at 6am. - Under Actors or tasks to run, add the task you saved in step 1, then save.
Nothing is charged just for the schedule existing.
Is scraping Yandex Maps business listings legal?
This actor reads only Yandex's own public map search results. It does not log in, does not use an account, and does not access anything behind a password.
This is general information, not legal advice. Phone numbers, published emails and the legal entity name found on some listings can be personal or business data depending on the jurisdiction, so GDPR, CCPA and local Russian and CIS data protection law apply to how you use it. You remain responsible for having a lawful basis for contacting any business or individual found this way.
FAQ
Do I need a Yandex account? No. Everything comes from public search pages.
Should I search in Russian or English?
Russian, for anything generic. Yandex indexes businesses by their Russian category names, so аптека vastly outperforms pharmacy.
Why did I get fewer results than Yandex claims for this search? The number Yandex shows is per map viewport, not per city. This actor works around that by tiling the map, which is why it typically returns several times what a single search page holds. When it stops early, the log says so, because consecutive tiles returned nothing new.
Are the phone numbers real? They are the numbers each business publishes on its own Yandex listing.
Is this GDPR compliant? It collects business contact details published publicly by the businesses themselves. You are responsible for having a lawful basis for contacting them.
Can I use Yandex Maps Search through an MCP server? Yes. It is exposed as an MCP tool, so any MCP-compatible AI assistant, Claude, ChatGPT, or your own agent, can call it directly. See the section below for the paste-ready prompt and setup.
Use in Claude, ChatGPT and any MCP agent
Add it to Claude Code in one line:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=themineworks/yandex-maps-search"
Or point any MCP client at:
https://mcp.apify.com/?tools=themineworks/yandex-maps-search
Copy this into your AI assistant
Paste the line below into ChatGPT, Claude, or any assistant connected to Apify's MCP, and it will run the job for you:
Use the Apify actor themineworks/yandex-maps-search to find dental clinics in Saint Petersburg, searching the Russian term "стоматология", and return name, phone, address and rating as a table.
Or call it programmatically with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/yandex-maps-search').call({queries: ['кафе'],city: 'moscow',maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Related actors
Part of the Russia and CIS local business suite:
- 2GIS Places Search: a second source for the same city, with published email addresses and reach into Central Asia, Cyprus and the UAE beyond Yandex's footprint.
- Ozon Product Search: live marketplace pricing for the retail side of the same market.
Typical flow: build a business lead list here, cross-check it against 2GIS for a second source, then look at Ozon if the category also sells online.
Found a bug or have a feature request? Open an issue on the actor's Apify Console page.