Yandex Maps Scraper API
Pricing
from $0.38 / 1,000 places
Yandex Maps Scraper API
Scrape business listings from Yandex Maps for Russia, Kazakhstan, Turkey and the CIS. Search by term and city, or around a point within a radius, or paste URLs. Each place has name, address, GPS coordinates, rating, review count, phones, website and opening hours. $0.40 per 1,000 places.
Pricing
from $0.38 / 1,000 places
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
116
Total users
68
Monthly active users
2 days ago
Last modified
Categories
Share
Type a search and a city, the way you would into Yandex Maps, and get one row per business: name, category, full address, coordinates, rating, review count, phone, website, social links and opening hours. Paste organisation or search URLs instead if you already have them.
The directory behind Yandex Maps is strongest where Yandex is strongest: Russia, Kazakhstan, Belarus, Turkey and the rest of the CIS. It is a Russian product, so Russian-language search terms return more places than English ones, and some fields come back in Russian whatever response language you pick.
| Input | Search terms plus a city or a map point, or Yandex Maps URLs |
| Output | One row per place: name, category, address, coordinates, rating, phones, website, hours |
| Ceiling | 5,000 places per run |
| Account needed | None, and no API key |
| Price | $0.40 per 1,000 places on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 12,500 |
🔍 What Yandex Maps Scraper does
Two ways in, and they work together in one run.
Search. A term and a city, like кафе in Moscow, and it pages through the results until it
reaches your limit or the list stops producing new places. Give it coordinates instead and it
searches around that point. Add radiusKm and only the places that close to the point come back.
Set a minimum rating and Yandex leaves out the places under it before anything reaches your
dataset.
URLs. Paste a Yandex Maps search page or a single organisation page and it reads that.
The same business found by two of your searches is written once and counted once. Duplicates are
removed before your maxItems cap is applied, so you get the number you asked for.
📋 What data you get from each Yandex Maps place
| What you get | Field |
|---|---|
| Yandex's organisation id, the key to join on | placeId |
| Name, short name and chain | name, nameShort, chainName |
| Main category and every category | categoryPrimary, categories |
| Full address and its parts | address, addressDetail, country, city, street, postalCode |
| Coordinates, and the distance from your point when you set a radius | latitude, longitude, distanceKm |
| Phones, websites with tracking parameters stripped, and social profiles | phone, phones, website, websites, socialProfiles |
| Rating, how many ratings it rests on, and how many reviews have text | rating, ratingCount, reviewCount |
| Opening hours, normalised and as Yandex wrote them, and whether it is open now | openingHoursText, openingHoursRaw, openingHours, isOpenNow |
| Price band and the nearest metro station | priceRange, nearestMetro |
| Whether the owner claimed the listing, and whether the place is open, closed or moved | verifiedOwner, status |
| The organisation page, the search that found it and its place in the results | url, searchQuery, position |
▶️ How to scrape Yandex Maps
- Open Yandex Maps Scraper and click Try for free.
- Put your searches into Search terms. Russian terms find more than English ones, even in Turkey and Kazakhstan.
- Type the City, spelled however you like.
- Set Maximum places low for the first run, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with everything empty and you get one labelled sample row, not charged.
💰 How much does it cost to scrape Yandex Maps?
$0.40 per 1,000 places on the Free plan. Paid plans pay a little less: $0.395 on Starter, $0.39 on Scale and $0.385 on Business. On the free plan, the $5 Apify gives you each month covers about 12,500 places.
One row is one place. A business that turns up under two of your searches is charged once. The sample row, every diagnostic row, a search that finds nothing, places under your minimum rating and places outside your radius are not charged.
📥 What you give it
{"searchQueries": ["кафе", "стоматология"],"city": "Moscow","maxItems": 50,"language": "ru_RU"}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, the box holds кафе | One search per line. Local-language terms return more places than English ones. |
city | none, the box holds Moscow | English, Russian or local spelling all work: Moscow, Москва, Almaty, Istanbul. A Yandex region id such as 213 works too. A name Yandex does not know as a place stops the run before any search. |
startUrls | empty | Yandex Maps search pages or single organisation pages. An organisation id alone works as https://yandex.ru/maps/org/<id>/. |
maxItems | 50 | Unique places across every search, up to 5,000. You are charged per place returned. |
minRating | any rating | 3.0, 3.5, 4.0, 4.5, 4.7 or 4.9. Only places Yandex rates at least that high. Places with no rating are left out. Applies to searches, not to single organisation pages. |
latitude, longitude | empty | Search around a point instead of a city. Both are needed. |
radiusKm | empty | 0.1 to 50. With latitude and longitude, only places within that many km of the point, measured from each place's own coordinates. Yandex tops up a thin area with places from just outside it, and those are left out uncharged, so a small radius can return fewer places than maxItems. Applies to search terms, not to pasted search links. |
zoom | 13 | Has no effect on which places come back. Yandex searches around the point at any zoom. Use radiusKm to set an edge. |
language | automatic | ru_RU, en_US, tr_TR, uk_UA, kk_KZ, uz_UZ or az_AZ. Russian is the most complete. |
proxyConfiguration | leave it alone | Optional. Only needed if you want requests to come from your own servers. |
📤 What you get back
A real place row from a run in September 2026, with the raw hours array trimmed:
{"placeId": "19464848293","name": "Рыба моя","categoryPrimary": "Ресторан","categories": ["Ресторан", "кафе", "бар"],"address": "Москва, Славянская площадь, 2","addressDetail": "Рыба моя, этаж -1","country": "Россия","city": "Москва","street": "Славянская площадь","postalCode": "109012","latitude": 55.753391,"longitude": 37.633956,"phone": "+74957846858","phones": ["+74957846858"],"website": "https://rybamoya.ru/","socialProfiles": [{"type": "telegram", "url": "https://t.me/perelmanrestaurants"}],"rating": 4.9,"ratingCount": 6097,"reviewCount": 2726,"openingHoursText": "Mon: 12:00-00:00; Tue: 12:00-00:00; Wed: 12:00-00:00; ...","openingHoursRaw": "ежедневно, 12:00 PM–12:00 AM","isOpenNow": false,"priceRange": {"text": "от 3000 ₽", "lower": 3000, "upper": 3500, "currency": "₽"},"nearestMetro": {"name": "Китай-город", "distanceMeters": 36},"verifiedOwner": true,"status": "open","url": "https://yandex.com/maps/org/ryba_moya/19464848293/","searchQuery": "кафе","position": 1,"scrapedAt": "2026-09-21T01:46:00.148Z"}
| Field | How to read it |
|---|---|
placeId | Yandex's organisation id. It is the dedupe key here and the key to join on between runs. |
phone, phones | The numbers as Yandex holds them. Many listings have none. |
openingHoursText | Normalised to Monday through Sunday. openingHoursRaw keeps Yandex's own wording, and openingHours the raw arrays. |
priceRange | Yandex's own band, with the number and currency pulled out where it prints them. |
rating, ratingCount, reviewCount | The score, how many ratings it came from, and how many wrote text. |
distanceKm | Only with radiusKm: how far the place is from your point, in km. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it |
|---|---|
| A place | It has a placeId and a name |
| The sample row | Written only when the input was empty |
| A diagnostic | It carries an errorCode |
Diagnostic rows are never charged.
| Code | What it means |
|---|---|
CITY_NOT_FOUND | Yandex could not place that city, knows several places by that name, or does not know the region id. The run stops before searching, so nothing is spent on the wrong place. |
BAD_INPUT | minRating is not one of the values above, or radiusKm is out of range, has no point to measure from, or came with pasted search links. The run stops before searching. |
FILTER_NOT_APPLIED | Yandex did not confirm the minimum rating on a page, so the rest of that search was skipped and not charged. |
BAD_URL | That entry is not a Yandex Maps address. The other jobs carry on. |
NOT_FOUND, API_ERROR | That organisation page is gone, merged, or would not answer. |
NO_RESULTS, NO_RESULTS_BLOCK | The search came back with nothing new. |
NOT_SERVED | This place was not served this run. Re-run it later. Until 12 October 2026 this code was called CAPTCHA. |
HTTP_ERROR, NO_STATE | Yandex was unreachable, or the page did not carry the data it normally does. |
💡 What people use it for
- Building a local business directory with phone numbers and websites already on the row.
- Mapping how many branches a chain has in a city, with coordinates ready to plot.
- Checking rating and review counts across a category before choosing a location.
- Finding which listings have no claimed owner, through
verifiedOwner.
From a category to its complaints, in three steps:
- Search
стоматологияinMoscowhere withminRatingat4.5, and copy theurlcolumn. - Paste those links into Yandex Maps Reviews Scraper's
startUrls, withmaxRatingat 2 andonlyWithTexton. - Group the reviews by
organizationNameto see which well-rated clinics still have unhappy patients.
🚧 What it does not do
- No review text and no photos. This returns the listing, not the reviews. The reviews actor is linked below.
- No email addresses. Yandex does not publish them on a listing.
- Zoom does not tighten a point search. Yandex searches around the point at any zoom level.
radiusKmis what sets an edge. - Filters set inside a pasted Yandex link are not carried over. Use
minRatingfor the rating. - Some fields stay in Russian whatever
languageyou pick. Category names especially. - Result totals are Yandex's estimate, not a count you can trust.
- Paging stops when the results do. Yandex keeps serving pages past the end of a list, so the run stops after two pages with nothing new rather than collecting repeats.
- A search Yandex will not answer ends that job with an uncharged row. Re-running is worth one try.
- Phone and website are only there when the listing has them, which for small businesses is often not the case.
- It is not an official Yandex tool. Dami's Studio is independent and is not affiliated with or endorsed by Yandex, or by any other company named on this page.
🧭 Which Yandex scraper do you need?
| If you want | Use |
|---|---|
| Businesses on Yandex Maps, with phones, hours and coordinates | This one |
| Reviews for a place on Yandex Maps | Yandex Maps Reviews Scraper |
| Yandex search results by keyword and region | Yandex Search Engine Scraper |
| Products and prices on Yandex Market | Yandex Market Scraper |
| The same kind of listing from 2GIS, with phones | 2GIS Scraper |
| The same job on Google Maps | Google Maps Scraper |
❓ Questions people ask
Do I need a Yandex account or an API key to scrape Yandex Maps?
No. Nothing to apply for and no quota.
Should I search in Russian or English?
Russian, wherever you can. Yandex indexes Russian names most completely, and that holds in Almaty and Istanbul too.
Can I search a neighbourhood instead of a city?
Yes. Put in latitude and longitude, and radiusKm for how far out to go. Without a radius there
is no edge: around the Kremlin, 14 of the first 24 cafes were within 1 km and the farthest was 2.5 km
out. With radiusKm at 1, every row is inside 1 km.
Will I get the same place twice?
Not within a run. Places are deduplicated on placeId before your limit is applied.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/yandex-maps-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Yandex Maps legal?
These are public business listings. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search term, the city and the run ID. The
errorCode on the diagnostic row usually names the problem on its own.