Yandex Maps Scraper - Places & Ratings | Парсер Яндекс Карт avatar

Yandex Maps Scraper - Places & Ratings | Парсер Яндекс Карт

Pricing

from $0.38 / 1,000 places

Go to Apify Store
Yandex Maps Scraper - Places & Ratings | Парсер Яндекс Карт

Yandex Maps Scraper - Places & Ratings | Парсер Яндекс Карт

Yandex Maps scraper for business listings in Russia, Kazakhstan, Turkey and the CIS. Search by term and city, 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

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

1

Bookmarked

203

Total users

96

Monthly active users

4 days ago

Last modified

Share

Yandex Maps scraper for a search and a city, one row per business: name, category, full address, coordinates, rating, review count, phone, website, social links, opening hours, the facts on its card, the average bill, popular dishes, how busy it gets and its photo links. Paste organisation links, ids 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.

InputSearch terms plus one or more cities or a map point, or Yandex Maps URLs and organisation ids
OutputOne row per place: name, category, address, coordinates, rating, phones, website, hours, amenities, popular times, photo links
Ceiling5,000 places per run
Account neededNone, 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
Using an AI agent?
Actordami_studio/yandex-maps-scraper
Set one fieldsearchQueries, labelled "Search terms" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/yandex-maps-scraper
How oftenWeekly or monthly; places change slowly

🔍 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. List more cities and every term runs in each. Give it coordinates instead and it searches around that point. Add radiusKm and only the places that close to the point come back.

Filters. Yandex applies rating, price, category, award, opening hours, amenities, cuisine and chain to the search itself. Minimum reviews, website, phone and average bill are checked as each place is read; failures are free.

URLs and ids. Paste a search page, an organisation page, a short share link or an id. A skip list leaves out places you already have.

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 getField
Yandex's organisation id, the key to join onplaceId
Name, short name and chainname, nameShort, chainName
Main category and every categorycategoryPrimary, categories
Full address and its partsaddress, addressDetail, country, city, street, postalCode
Coordinates, and the distance from your point when you set a radiuslatitude, longitude, distanceKm
Phones, websites with tracking parameters stripped, and social profilesphone, phones, website, websites, socialProfiles
Rating, how many ratings it rests on, and how many reviews have textrating, ratingCount, reviewCount
Opening hours, normalised and as Yandex wrote them, and whether it is open nowopeningHoursText, openingHoursRaw, openingHours, isOpenNow
Price band and the nearest metro stationpriceRange, nearestMetro
Whether the owner claimed the listing, and whether the place is open, closed or movedverifiedOwner, status
The organisation page, the search and city that found it, and its place in the resultsurl, searchQuery, searchCity, position
Category ids, for the category filtercategoryIds
House number, Yandex's region id and area idhouse, regionId, geoId
Facts from the card: Wi-Fi, parking, payment, cuisine, average bill and the restamenities
How busy it gets, hour by hour, each day of the weekpopularTimes
Photo count, up to 11 photo links and the logo linkphotoCount, photoUrls, logoUrl
Every nearby metro station and stop, with distancesmetroStations, transitStops
Chain id, the "open until" line, Good Place award year, online bookingchainId, openStatusText, goodPlaceYear, hasOnlineBooking
On promoted listings, the company on Yandex's ad label and its tax numberadvertiser
Average bill, as the card prints itaverageBill
Yandex's awards and the year of eachawards
The building on the map: its box, its entrances and the street panoramabounds, entrances, panorama
Local time zone, in minutes from UTCutcOffsetMinutes
Video links and how many events the place listsvideos, eventsCount
Yandex's own booking pagebookingLinks
Yandex Maps collections the place appears incollections
Popular dishes or goods, with price and photo linkpopularItems
Review topics: how many reviews mention each, and how many are positive, neutral or negativereviewTopics
Optional: the reviews shown on an organisation's own pagecardReviews

▶️ How to scrape Yandex Maps

  1. Open Yandex Maps Scraper and click Try for free.
  2. Put your searches into Search terms. Russian terms find more than English ones, even in Turkey and Kazakhstan.
  3. Type the City, spelled however you like.
  4. Set Maximum places low for the first run, then click Start.
  5. 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, places outside your radius and places your filters leave out are not charged.

📥 What you give it

{
"searchQueries": ["кафе", "стоматология"],
"city": "Moscow",
"maxItems": 50,
"language": "ru_RU"
}
FieldDefaultWhat it is
searchQueriesnone, the box holds кафеOne search per line. Local-language terms return more places than English ones.
citynone, the box holds MoscowEnglish, 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.
citiesemptyMore cities, spelled the same way. Every search term runs in each. All of them are looked up before any search, and one Yandex cannot place stops the run.
startUrlsemptyYandex Maps search pages, organisation pages, short share links (https://yandex.com/maps/-/...), or organisation ids on their own, such as 1769547913.
maxItems50Unique places across every search, up to 5,000. You are charged per place returned.
maxItemsPerSearchemptyA cap for each search on its own: each term in each city, and each pasted search link.
minRatingany rating3.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.
priceCategoriesany priceprice_cheap, price_reasonable, price_expensive, price_very_expensive. Yandex's own bands, given mostly to cafes, restaurants and bars.
categoryIdsany categoryYandex category ids, such as 184106394 for restaurants or 184106132 for dental clinics. The categoryIds column of any run lists them.
goodPlaceOnlyfalseOnly places holding Yandex's Good Place award.
minReviewsemptyOnly places with at least this many written reviews.
onlyWithWebsite, onlyWithPhonefalseOnly places whose listing has a website, or a phone.
includeCardReviewsfalseAdds the reviews an organisation's own page shows, usually three, for links and ids you paste. Searches bring none.
openNow, open24hfalseOnly places open when the run reads them, or open round the clock every day.
amenitiesnoneAny of wi_fi, food_delivery, takeaway, coffee_to_go, breakfast, business_lunch, summer_terrace, car_park, payment_by_credit_card, wheelchair_accessability, toilet_for_disabled, nursery, halal, has_booking_link, michelin. A place has to have all of them. Yandex offers each only where it fits: Wi-Fi for cafes, not for dentists.
cuisinesany cuisineFrom the list in the form, such as italian_cuisine or georgian_cuisine. A place serving any one of them counts.
chainIdsany chainYandex chain ids, such as 6002084. The chainId column lists them. Fill in search terms and a city too.
wholeCountryfalseOne chain's branches all over Russia. Set chainIds and one search term, the chain's name, and the run searches 183 Russian towns in turn, from Moscow down to towns of about 80,000 people, plus any city you typed. Each branch comes once. A town that is not on the list is searched only when you add it to cities. Raise maxItems to cover the chain.
customFiltersemptyAny other Yandex filter, written as a Yandex Maps link writes it after filter=: for_children:1, has_url:1. Yandex answers a value it does not know with no places, so copy them exactly.
averageBillMin, averageBillMaxemptyThe average bill range, in the local currency. Places with no average bill on their card are left out while either is set.
excludePlaceIdsemptyIds or organisation links to skip. They are not returned, not charged and do not count toward maxItems.
latitude, longitudeemptySearch around a point instead of a city. Both are needed.
radiusKmempty0.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.
zoom13Has no effect on which places come back. Yandex searches around the point at any zoom. Use radiusKm to set an edge.
languageautomaticru_RU, en_US, tr_TR, uk_UA, kk_KZ, uz_UZ or az_AZ. Russian is the most complete.
proxyConfigurationleave it aloneOptional. Only needed if you want requests to come from your own servers.

📤 What you get back

Real run output

A real place row from a run on 17 October 2026, with lists cut short and the hours, popular times and photo links left out:

{
"placeId": "80377689687",
"name": "We Cidreria",
"chainName": "We Cidreria",
"categoryPrimary": "Ресторан",
"categories": ["Ресторан", "кафе"],
"address": "Москва, Благовещенский переулок, 5",
"country": "Россия",
"city": "Москва",
"street": "Благовещенский переулок",
"postalCode": "123001",
"latitude": 55.767975,
"longitude": 37.59864,
"phone": "+79253461072",
"website": "https://www.we-cidreria.ru/",
"socialProfiles": [{"type": "telegram", "url": "https://t.me/we_cidreria"}],
"rating": 5,
"ratingCount": 5795,
"reviewCount": 2751,
"openingHoursText": "Mon: 12:00-00:00; Tue: 12:00-00:00; ...; Fri: 12:00-02:00; Sat: 12:00-02:00; Sun: 12:00-00:00",
"isOpenNow": true,
"priceRange": {"text": "от 600 ₽", "lower": 600, "upper": 800, "currency": "₽"},
"nearestMetro": {"name": "Маяковская", "distanceMeters": 243},
"verifiedOwner": true,
"status": "open",
"url": "https://yandex.com/maps/org/we_cidreria/80377689687/",
"searchQuery": "кафе",
"position": 9,
"searchCity": "Москва",
"categoryIds": ["184106394", "184106390"],
"house": "5",
"regionId": 213,
"openStatusText": "Открыто до 02:00",
"amenities": [
{"id": "average_bill2", "name": "средний счёт", "value": "600–800 ₽"},
{"id": "coffee_to_go", "name": "кофе с собой", "value": true},
{"id": "Possible_with_dog", "name": "Можно с собакой", "value": true}
],
"photoCount": 120,
"metroStations": [{"name": "Маяковская", "distanceMeters": 243, "lineColor": "#3aa63a"}],
"transitStops": [{"name": "Глазная больница", "distanceMeters": 58}],
"chainId": "207491200503",
"goodPlaceYear": 2026,
"hasOnlineBooking": true,
"advertiser": {"name": "ООО \"БЕЛЫЕ ОРЛЫ\"", "taxNumber": "9710066387"}
}
FieldHow to read it
placeIdYandex's organisation id. It is the dedupe key here and the key to join on between runs.
phone, phonesThe numbers as Yandex holds them. Many listings have none.
openingHoursTextNormalised to Monday through Sunday. openingHoursRaw keeps Yandex's own wording, and openingHours the raw arrays.
priceRangeYandex's own band, with the number and currency pulled out where it prints them.
rating, ratingCount, reviewCountThe score, how many ratings it came from, and how many wrote text.
distanceKmOnly with radiusKm: how far the place is from your point, in km.
amenitiesOnly the facts Yandex shows as its own or the owner's. Values Yandex credits to another directory are left out, so a fact on the card can be missing here, even on a place an amenity or cuisine filter found.
averageBillfrom and to in the local currency, with Yandex's own wording in text. Mostly cafes, restaurants and bars have one.
popularItemsUp to 20 dishes or goods the card shows as popular, with Yandex's price. Not the full menu.
reviewTopicsCounts only, no review text. Yandex sends them on most cafe cards, but on some days on none.
popularTimesYandex's own busyness curve: 24 values per weekday, hour 0 to 23. Higher is busier.
advertiserOnly on promoted listings, and only when Yandex's ad label names a company with a 10-digit tax number. Usually the business's own company, sometimes an agency. A sole trader's label is left out whole.
cardReviewsOnly when you turn it on. null for places a search found, and when Yandex sent the organisation's page without its reviews. Phone numbers and e-mail addresses inside a review are hidden.

How often each column was filled on two runs of 17 October 2026:

Column120 Moscow cafes23 Kazan dental clinics
phone12023
website11622
socialProfiles10023
priceRange1190
amenities12023
popularTimes1190
photoUrls12023
goodPlaceYear8619
chainId4410
advertiser6115
hasOnlineBooking true323

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot it
A placeIt has a placeId and a name
The sample rowWritten only when the input was empty
A diagnosticIt carries an errorCode

Diagnostic rows are never charged.

CodeWhat it means
CITY_NOT_FOUNDYandex 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_INPUTA filter value Yandex does not offer, a number out of range, or radiusKm with no point to measure from or with pasted search links. The run stops before searching.
FILTER_NOT_APPLIEDYandex did not confirm one of its filters on a page, so the rest of that search was skipped and not charged. It also comes up when Yandex does not offer that filter for what you searched.
FILTER_TOO_RAREOnce a search has read 50 places, it stops if fewer than 1 in 5 pass minReviews, onlyWithWebsite, onlyWithPhone and the average bill. The places that passed are in your dataset.
BAD_URLThat entry is not a Yandex Maps address. The other jobs carry on.
NOT_FOUND, API_ERRORThat organisation page is gone, merged, or would not answer.
NO_RESULTS, NO_RESULTS_BLOCKThe search came back with nothing new.
NOT_SERVEDThis place was not served this run. Re-run it later. Until 12 October 2026 this code was called CAPTCHA.
HTTP_ERROR, NO_STATEYandex was unreachable, or the page did not carry the data it normally does.
COST_LIMITThe maximum cost you set for the run was used up before any place was charged. Raise it and start again. The run still ends as succeeded.
TIME_LIMITThe run's time limit stopped it before any place came back. Give it a longer timeout, or fewer searches. The run still ends as succeeded.
UNEXPECTED_ERRORThe run stopped early on an unexpected error. The results before this row are kept.

💡 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, or across Russia with wholeCountry, 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:

  1. Search стоматология in Moscow here with minRating at 4.5, and copy the url column.
  2. Paste those links into Yandex Maps Reviews Scraper's startUrls, with maxRating at 2 and onlyWithText on.
  3. Group the reviews by organizationName to see which well-rated clinics still have unhappy patients.

🚧 What it does not do

  • No review history and no photo files. Photos come as links, and reviews only as the few an organisation's page shows; the reviews actor below has the rest.
  • No email addresses. Yandex does not publish them on a listing.
  • One search stops at what Yandex lists for it: 664 cafes in Moscow and 477 dental clinics in Kazan in October 2026. Add terms or cities for more.
  • Beyond Russia and the CIS, only first pages were checked. cafe in Berlin and London and kafe in Istanbul each gave 25 rated places, most with a phone (October 2026).
  • Filters set inside a pasted Yandex link are not carried over. Use the filter fields, or customFilters.
  • No sort by distance. Yandex ignored it when we tried. With radiusKm, sort on distanceKm yourself.
  • Some fields stay in Russian whatever language you 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 wantUse
Businesses on Yandex Maps, with phones, hours and coordinatesThis one
Reviews for a place on Yandex MapsYandex Maps Reviews Scraper
Yandex search results by keyword and regionYandex Search Engine Scraper
Products and prices on Yandex MarketYandex Market Scraper
The same kind of listing from 2GIS, with phones2GIS Scraper
The same job on Google MapsGoogle 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.

Can I call it from code or connect it to an AI assistant?

The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/yandex-maps-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("dami_studio/yandex-maps-scraper").call(
run_input={
"searchQueries": ["кафе"],
"city": "213",
"maxItems": 50,
},
max_total_charge_usd=0.10, # the most this run may spend
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("ok") is False: # free note rows, not results
continue
print(row.get("name"), row.get("rating"))

These are public business listings, read the way a signed-out visitor sees them, with no account and nothing private. Some of it is personal data: a sole trader's phone number, and reviewers' names if you turn on cardReviews. GDPR, PIPEDA and similar laws cover that, so keep only what you need. Anti-spam laws (CASL, the EU e-privacy rules, CAN-SPAM) decide how you may contact anyone, and Yandex's own terms still apply to what you do with the data. 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.