Yandex Maps Scraper — Places, Reviews, Phones & Emails avatar

Yandex Maps Scraper — Places, Reviews, Phones & Emails

Pricing

from $1.95 / 1,000 places

Go to Apify Store
Yandex Maps Scraper — Places, Reviews, Phones & Emails

Yandex Maps Scraper — Places, Reviews, Phones & Emails

Scrape Yandex Maps places by keyword and city, map area or URL: name, address, phones, website, social links, rating, opening hours, menu, busy hours, INN, plus unlimited reviews, photos, posts and e-mails. Whole cities, not just 600 results. Export to JSON, CSV or Excel.

Pricing

from $1.95 / 1,000 places

Rating

0.0

(0)

Developer

Nice Dev

Nice Dev

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

🏢 What is Yandex Maps Scraper?

Yandex Maps Scraper extracts places from Yandex Maps — Russia, the CIS and Turkey: name, address, phone numbers, website, social links, rating, opening hours, categories, menu and prices, busy hours, the company's legal name and tax number (INN) — and, on request, all their reviews, photos, posts and the e-mails of their website. Use it for lead lists, market studies, store locators, review monitoring or local SEO.

Type a keyword and a city (dentist in Moscow, кафе in Санкт-Петербург), draw a map area, or paste any Yandex Maps link, click Start, and download the places in JSON, CSV or Excel. No login, nothing to set up. It is fast: about 350 places a minute from search results (100 a minute with full details), and a whole city is covered — not just the ~650 places one Yandex search shows.

📋 What data can you extract from Yandex Maps?

One item per place, 73 fields:

CategoryWhat you get
🏷️ Placename, main and all categories, link, Yandex id — Elite Denta · Dental clinic
📍 Locationfull address, street, house, city, postal code, GPS coordinates, nearest metro and stops in meters, entrances
📞 Contactsevery phone number, website, Telegram / VK / WhatsApp links, e-mails found on the website
⭐ Reputationrating, number of ratings and reviews, review topics with positive / negative counts, "Good place" award
🕒 Hoursopening hours as shown and by day, open now, busy hours of each day
🧾 Companylegal name and tax number (INN) of promoted places, verified owner, chain, current promotion
🍽️ Menu and pricesmenu / price list with prices and photos, average bill, features (Wi-Fi, parking, delivery…)
💬 Reviewsauthor, stars, date, text, Yandex translations, likes, photos, the owner's answer
🖼️ Mediacover photo, logo, photo gallery with author and date, videos, street panorama, business posts
🔗 Morebooking partner, similar places, Yandex collections, where the place was found

Every field, with an example, is listed in the Output section below.

Search results already carry most fields. Place details (on by default) adds the full menu; reviews, photos, posts and e-mails are options, each priced on its own.

✅ Why use Yandex Maps Scraper?

  • 🗺️ A whole city, not 650 places: when a search is full, its map area is cut into tiles automatically, and each tile is searched again.
  • 💬 Places and reviews in one run: about twice the 600 reviews one sort order shows (all 637 of a restaurant; 1,283 of the 2,727 of a very popular one), one row per review in the Reviews view, with the place on every row.
  • 🚀 Fast (measured on Apify, default 512 MB): 1,000 pharmacies of Moscow in 3 minutes; 100 dentists with full details in a minute; 2,000 reviews of 10 restaurants in a little over a minute.
  • 🎯 Type a keyword and a city, draw a map area (center + radius, rectangle, grid), or paste a Yandex Maps search, place or short link.
  • 🧩 Yandex filters built in: minimum rating, open now, open 24 h, "Good place", category, chain, and any other filter Yandex offers for the search — a filter Yandex ignores stops that search instead of returning unfiltered places.
  • 🔔 Monitoring built in: only the places, or only the reviews, never delivered before.
  • 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…) and JSON / CSV / Excel export via the Apify platform.

🚀 How to scrape Yandex Maps

  1. Create a free Apify account.
  2. Open Yandex Maps Scraper, type a Search keyword (e.g. стоматология or dentist) and a Location (e.g. Москва, Istanbul).
  3. Or paste Yandex Maps links into Start URLs: a search, a place page or a short link — or place ids into Place IDs. The keyword and location are then ignored.
  4. Set Max places (100 by default, 0 = no limit), tick Include reviews if you want them, then click Start.
  5. Download the dataset in JSON, CSV, Excel or via API; open the Reviews view for one row per review.

💰 How much does it cost to scrape Yandex Maps?

This Actor uses pay per event pricing, cheap by default and a price per option you tick. Options cost a little less on higher Apify plans (without a subscription → Bronze → Silver → Gold and above):

WhatPrice
Place (search result fields)$0.02 per 1,000 places
Place details (full menu), on by default$0.70 → $0.69 → $0.68 → $0.67 per 1,000 places
Review$0.20 → $0.19 → $0.18 → $0.17 per 1,000 reviews
Photo gallery$0.30 → $0.29 → $0.28 → $0.27 per 1,000 places with photos
Posts$0.20 → $0.19 → $0.18 → $0.17 per 1,000 places with posts
E-mails from the website$0.20 → $0.19 → $0.18 → $0.17 per 1,000 places whose website was read
Filter check: a place dropped by a filter of this Actor (minRating, minReviewCount, requirePhone, requireWebsite, excludeKeywords, excludeBusinessIds)$0.01 per 1,000 places dropped
Run start$0.01 per run

Examples, without a subscription: 10,000 dentists of Moscow with details ≈ $7.20; 10,000 without details ≈ $0.21; 200 restaurants with 500 reviews each ≈ $20. Platform usage (compute, proxy) is included in the price. A place one of the Actor's own filters drops is charged as a Filter check, and a place it keeps pays its own price only; the filters sent to Yandex with the search (open now, categories, "Good place"…) cost nothing extra. With a maximum cost per run set, the run stops at the last place it pays for in full, with its reviews and options: never a place charged and not saved.

⚙️ Input

{
"query": "стоматология",
"location": "Москва",
"maxItems": 500,
"minRating": "4.5",
"requirePhone": true
}

Several searches, the reviews of the last 30 days, only what was not delivered before:

{
"searchQueries": ["кафе", "пекарня"],
"locations": ["Казань", "Екатеринбург"],
"maxItemsPerQuery": 200,
"includeReviews": true,
"maxReviewsPerPlace": 0,
"postedAfter": "30 days",
"onlyNewReviews": true,
"stateKey": "cafes-reviews"
}

Or a map area:

{
"query": "pharmacy",
"coordinates": "37.6173,55.7558",
"radiusKm": 3
}

Or your own links and ids (the search fields are then ignored):

{
"startUrls": [{ "url": "https://yandex.ru/maps/org/ryba_moya/19464848293/" }],
"businessIds": ["1124715036"]
}
FieldNotes
query, searchQueriesWhat to look for, in any language; searchQueries adds more keywords (one search each).
location, locationsCity, district, street or country; every keyword is searched in every location (max 500 searches per run). A name several places share gives the one named exactly so, the nearest to Moscow first — add the region to pick another (Пушкин, Санкт-Петербург, Ivanovka, Omsk Oblast); the log line [geo] says which one was searched.
coordinates, viewportSpan, radiusKmA map area instead of a named location: its center longitude,latitude (e.g. 37.6173,55.7558), with a span or a radius in km.
boundingBoxA map rectangle west,south,east,north (e.g. 37.35,55.57,37.85,55.92).
splitArea, tileGridCut a full search into tiles automatically (default on); tileGrid cuts every area into N × N tiles from the start.
startUrls, businessIdsYandex Maps search, place or short-link URLs (yandex.ru, .com, .com.tr, .kz, .by, .uz), and place ids; given, they replace the search fields.
maxItems, maxItemsPerQueryPlaces for the whole run (0 = unlimited) and for each search.
languageLanguage of names, addresses and labels: en, ru, tr, uk or kk.
includeDetailsOne request per place for the full menu / price list (default on).
minRating, openNow, open24h, goodPlaceOnly, hasPhotos, categoryIds, chainIdsYandex's own filters: minimum rating (4.5), open now, open 24 h, "Good place" award, with photos, category and chain ids.
customFiltersAny other filter Yandex offers for the search, as filterId:value (e.g. car_park:1); debugLog lists them for each search.
requirePhone, requireWebsite, minReviewCount, excludeKeywords, excludeBusinessIdsDrop places without a phone or website, with few reviews, with a word in their name or category, or already known.
includeReviews, reviewSortReviews of each place, in the order you choose: newest, relevance, highest or lowest.
maxReviewsPerPlaceReviews per place (0 = as many as possible).
postedAfter, postedBefore, minReviewRating, maxReviewRating, onlyWithText, onlyWithBusinessReply, reviewKeywordsReview filters: dates (2026-09-01, or 7 days, 2 weeks, 1 month), stars, text, owner's answer, words.
includePhotos, maxPhotos, includePosts, maxPosts, enrichEmailsPhoto gallery, business posts, e-mails found on the place's website.
onlyNew, onlyNewReviews, stateKey, resetStateMonitoring: only the places — or only the reviews — never delivered under this memory key; resetState forgets it.
AdvancedproxyConfiguration (Apify proxy by default, included in the price; the residential proxy is not available), maxConcurrency, maxRequestsPerMinute, minRequestIntervalMs, maxRequestRetries, debugLog.

📦 Output

A real item of a run (кафе in Saint Petersburg), shortened: some columns left out, lists keep their first entry, features its first 4 keys.

{
"id": "1922079259",
"url": "https://yandex.com/maps/org/fire_bird/1922079259/",
"title": "Fire-Bird",
"category": "Cafe",
"categories": ["Cafe"],
"categoryIds": ["184106390"],
"address": "Saint Petersburg, Ligovskiy Avenue, 89/20",
"city": "Saint Petersburg",
"postalCode": "191040",
"latitude": 59.923762,
"longitude": 30.355981,
"phone": "+7 (812) 665-85-55",
"phones": [{"number": "+7 (812) 665-85-55", "value": "+78126658555", "type": "phone", "info": "оператор call-центра"}],
"website": "https://pie-delivery.ru/",
"websites": ["https://pie-delivery.ru/"],
"socialLinks": [{"type": "viber", "url": "https://viber.click/89811308887", "label": "viber.click/89811308887"}],
"emails": [],
"rating": 5,
"ratingCount": 5713,
"reviewCount": 4403,
"openingHours": "daily, 10:00 AM–11:00 PM",
"openingHoursByDay": [{"day": "monday", "hours": [{"from": "10:00", "to": "23:00"}]}],
"features": {"wi_fi": true, "price_category": ["average"], "food_delivery": true, "average_bill2": "500–1000 ₽"},
"featureList": [{"id": "wi_fi", "name": "Wi-Fi", "value": true}],
"priceRange": "500–1000 ₽",
"isAdvert": true,
"legalName": "ООО \"БАРКАД\"",
"taxId": "7811168487",
"goodPlaceYear": "2026",
"reviewAspects": [{"id": "3502043738", "name": "Meal", "count": 3877, "positive": 3642, "neutral": 41, "negative": 194, "isTrusted": true}],
"nearbyMetro": [{"name": "Ligovskiy Prospekt", "distanceMeters": 381, "distance": "380 m", "latitude": 59.920827842, "longitude": 30.354912043, "color": "#f28b24"}],
"nearbyStops": [{"name": "Svechnoy Lane", "distanceMeters": 320, "distance": "320 m", "latitude": 59.924085466, "longitude": 30.35101244}],
"entrances": [{"latitude": 59.92375796, "longitude": 30.35599139, "azimuth": 143.88260278046454}],
"photoCount": 500,
"photos": [],
"videos": [{"id": "vplvkt37dai3vzdyvqei", "url": "https://runtime.strm.yandex.ru/player/video/vplvkt37dai3vzdyvqei", "thumbnailUrl": "https://avatars.mds.yandex.net/get-vh/15630674/2a0000019e4a0d918b9af4d1544403edfd9d/orig", "duration": null}],
"bookingLinks": [],
"sources": [{"id": "yandex", "name": "Yandex", "url": "https://www.yandex.com"}],
"posts": [],
"menu": [{"category": null, "title": "Телятина в соусе", "description": null, "price": 700, "priceText": "700", "currency": "₽", "volume": null, "photoUrl": "https://avatars.mds.yandex.net/get-sprav-products/1540730/2a0000017565f74efec17fd1aa1bb4a88b85/orig", "sourceUrl": null}],
"similarPlaces": [],
"collections": [],
"reviews": [],
"searchQuery": "кафе",
"searchLocation": "Санкт-Петербург",
"language": "en",
"scrapedAt": "2026-09-24T20:21:41.969Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. The Reviews view (or unwind=reviews in the API) gives one row per review, with the place's id and title on each row.

All 73 fields

FieldsWhat you get
id, url, title, shortTitlePlace: Yandex id, page, name — 1922079259, Fire-Bird
category, categories, categoryIdsmain category, all categories, their Yandex ids (usable in categoryIds)
address, street, house, city, postalCode, country, additionalAddressLocation: full address and its parts, floor / office details
latitude, longitude, regionId, timezoneOffsetGPS coordinates, Yandex region (213 = Moscow), UTC offset in seconds
nearbyMetro, nearbyStops, entrancesmetro stations and stops with distance in meters, entrance coordinates
phone, phones, website, websites, socialLinks, emailsContacts: first phone and all of them, first website and all of them (tracking removed), social links, e-mails of the website
rating, ratingCount, reviewCount, reviewAspectsReputation: rating 1-5, ratings, reviews, review topics
goodPlaceYear, awardsYandex "Good place" award and other awards
status, isOpenNow, workingStatus, openingHours, openingHoursByDay, visitsHistogramHours: open / closed, now, as shown, by day, busy hours
legalName, taxId, isAdvert, isVerifiedOwner, promo, chainId, chainNameCompany: legal entity and INN (promoted places), paid listing, verified owner, promotion, chain
features, featureList, priceRange, menuMenu and prices: features (id → value, and with labels), average bill, menu / price list
reviews, reviewsScrapedReviews (with includeReviews) and how many were added
imageUrl, logo, photoCount, photos, videos, panoramaUrlMedia: cover photo, logo, photo count and gallery, videos, street panorama
postCount, latestPost, postsbusiness posts: count, latest one, all of them (with includePosts)
bookingLinks, bookingPartner, sources, summary, similarPlaces, collectionsMore: booking links and partner, data sources, Yandex's description, similar places, collections (Yandex gives them with language ru, uk or kk only, titles in Russian)
searchQuery, searchLocation, searchUrl, positionthe search that found the place, its Yandex Maps page, rank in its map tile
language, scrapedAtlanguage of the texts, ISO timestamp of the extraction

💡 Tips

How to get more results

Keep Split big areas automatically on and type a broad keyword with a city: a search that fills its 40 pages is cut into 4 tiles, and so on, until every tile shows less than a full search. For a very dense area, set tileGrid to 4 or more to start with smaller tiles. Several keywords (стоматология, стоматологическая клиника) find places a single one misses.

How to reduce costs

The price is per place and per option: leave off what you do not need (reviews, photos, posts, e-mails), turn Place details off if search result fields are enough, cap reviews with maxReviewsPerPlace, and prefer the filters Yandex applies itself (open now, categories, "Good place", customFilters): a place they drop is never downloaded, while a place the Actor's own filters drop is charged as a Filter check. For recurring runs, onlyNew and onlyNewReviews never charge twice for the same place or review.

Several searches in one run

Fill searchQueries and / or locations: the Actor runs one search per keyword × location (3 keywords × 4 cities = 12 searches, up to 500 per run). A place found by several searches or tiles is saved — and charged — once. Set maxItemsPerQuery to give every search its own cap: without it the first searches can use up the whole maxItems budget.

Monitoring: only the new places or reviews

Tick Only new places (onlyNew) and schedule the Actor: each run returns, and charges, only the places no previous run delivered under the same stateKey. Only new reviews (onlyNewReviews) returns every place with only its reviews not delivered before — with the newest first, the reviews written since: reading stops at the first known review, and older reviews a previous run left out (its maxReviewsPerPlace) are not returned either. The memory lives in named key-value stores of your account (yandex-maps-places-scraper-seen and yandex-maps-places-scraper-seen-reviews, up to 150,000 ids per key), updated only with what really reached the dataset. Give each schedule its own stateKey, and tick resetState once to start over.

Filter reviews by date

postedAfter and postedBefore apply to the reviews, never to the places: 2026-09-01 (the whole day is included, Moscow time) or a period before now (7 days, 2 weeks, 1 month; via the API also 24 hours or a full ISO date-time). A review without a date is dropped as soon as a bound is set.

🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool; add unwind=reviews for one row per review.

🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the Apify MCP server, billed to their Apify account like any run. It returns one item per Yandex Maps place, its reviews inside the item when asked. Actor id: nice_dev/yandex-maps-places-scraper; MCP server with this Actor only: https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/yandex-maps-places-scraper.

Smallest input, for a cheap first call:

{
"query": "dentist",
"location": "Moscow",
"maxItems": 10
}

Key output fields: url, title, address, phone, website, rating, reviewCount and categories.

Cost: $0.02 per 1,000 places, plus $0.67 to $0.70 per 1,000 places for the place details (on by default: $0.69 to $0.72 per 1,000 for the input above), plus $0.01 per run start. Reviews, photos, posts, e-mails and filter checks cost extra, see the pricing section above. Cap each call with maxItems and, through the API, with the run option maxTotalChargeUsd.

❓ FAQ

The Actor only reads what Yandex Maps shows publicly to any anonymous visitor. It logs in to nothing and solves no captcha. Business contact details are published by the businesses themselves; reviews carry the names and photos of their authors, which are personal data protected by GDPR: do not store them without a legitimate reason. You are responsible for using the data in compliance with Yandex's Terms of Use and applicable law. This Actor is not affiliated with Yandex.

Does it need a login or a proxy?

No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). A request the site turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).

Yandex shows the legal entity and INN only for promoted places (18 of the 24 dentists of a Moscow search), and a menu only for the places that published one. Those fields are null or empty otherwise — never guessed.

Is the data safe to open in Excel or to show on a web page?

Names, reviews and posts are the businesses' and authors' own words, copied as they are. A text can begin with -, +, = or @ (a phone number, a review such as +1 for the staff): Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. Every URL field holds an http(s) URL or null. On a web page, escape every field like any text written by a stranger.

Known limitations

  • Yandex's AI summary of the reviews is not in the output: it never appeared in our tests run from outside Russia.
  • Reviews beyond 600 come from Yandex's 4 sort orders merged (600 each, many in common): 1,283 of the 2,727 reviews of a very popular place in our test — not all of them.
  • One Yandex search shows at most ~650 places; the automatic split covers more, at the price of more requests (still charged per place only).
  • onlyNew remembers place ids, not their content: a place whose phone changed is not returned again.
  • Two runs sharing the same stateKey at the same time may both return the same new place.

A run the platform stops without warning (out of memory, run timeout)

  • Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the places already saved are skipped: none is delivered or charged twice, and maxItems still counts them.
  • With onlyNew, the memory is saved once a minute: resurrect the stopped run and the places it had saved meanwhile join the memory; leave it stopped for good, and the next run may return up to a minute of them once more.

Something doesn't work?

The last line of the log counts the places saved, filtered out and no longer on Yandex Maps, the reviews, the map tiles searched and the requests that failed after every retry. Those requests are listed, with the reason, in the FAILED_REQUESTS record of the run's key-value store. A page of reviews, photos or posts lost for good leaves its place without it, counted in the log — the place is still saved. A run that saved nothing and had failed requests fails, and its last message gives the cause (a location Yandex does not know, a filter it ignored for the search).

If Yandex changes its data, you are told instead of paying for blank rows: if the first 20 places read all lack their name, category, address or coordinates, the run saves nothing more, stops and fails, and its last message names the missing field.

🛟 Support

Open an issue in the Issues tab with a link to your run: the run log and the FAILED_REQUESTS record of the key-value store show exactly which requests failed and why.