# Yandex Maps Scraper - Phones, Websites, Reviews & Hours (`topapi/yandex-maps-scraper`) Actor

Scrape Yandex Maps places by search and city, map area or link: phones, websites, social links, address, coordinates, rating, hours, features, photos. Covers whole cities past Yandex's 1,000-place search limit; reviews, menus, website emails, monitor mode. $0.45 per 1,000 places, no start fee.

- **URL**: https://apify.com/topapi/yandex-maps-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** Lead generation, Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 places

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Yandex Maps Scraper do?

**Yandex Maps Scraper** extracts business and place data from [Yandex Maps](https://yandex.com/maps) (Яндекс Карты) and turns a search term plus a city, a map point or an area, or a list of Yandex Maps links and organisation ids, into one structured row per place: name, phones, website, social links, full address, coordinates, categories, rating, opening hours, features, photos and Yandex's own place links. Built for lead-generation teams, local-SEO agencies and market researchers working in Russia, Kazakhstan, Belarus, Turkey and the rest of the CIS.

Yandex Maps scraper · Yandex Maps API alternative · Yandex business data extractor · парсер Яндекс Карт

- **Contacts on every row:** phone numbers (with extensions and Yandex's notes like "delivery"), websites with ad-tracking stripped, VK, Telegram, WhatsApp and other social links, booking links.
- **Whole cities, not one result list:** Yandex lists at most 1,000 places per search, and often far fewer for a whole city; the area is split and searched again until your limit is reached (2,943 restaurants in Saint Petersburg in one test run).
- **Search or paste links:** terms + a city, coordinates, a radius or a bounding box, or Yandex Maps organisation, short-share, search, category and chain links, or bare organisation ids.
- **Yandex's own filters:** rating, price band, open now, open 24 hours, Good Place award, Wi-Fi, parking, delivery and the rest, applied by Yandex before anything is delivered.
- **Add-ons when you need them:** written reviews nested on each place, the full menu or price list, emails from the place's own website, the whole photo gallery.
- **Monitor mode:** run on a schedule and get only places that are new, or whose rating, review count, hours, phone, website or status changed.
- **No Yandex account, no API key, no cookies from you:** you give a search or a link, nothing else.
- **Export anywhere:** JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets, the Apify API and MCP.

### What data can you get from Yandex Maps?

<table>
<tr>
<td>🏷️ Name, short name, Yandex organisation id</td>
<td>☎️ Phones, dialable numbers, extensions, phone notes</td>
<td>🌐 Website (tracking stripped) and all websites</td>
</tr>
<tr>
<td>📍 Full address, street, house, city, region, postcode, country</td>
<td>🧭 Latitude, longitude, map bounds, entrances</td>
<td>🗂️ Categories, category ids and classes</td>
</tr>
<tr>
<td>⭐ Rating, number of ratings, number of written reviews</td>
<td>🕒 Hours text, hours by day, open now, status</td>
<td>💬 Social links (VK, Telegram, WhatsApp, YouTube...)</td>
</tr>
<tr>
<td>🧾 Features: Wi-Fi, parking, card payment, cuisine, average bill...</td>
<td>💰 Average bill and price band</td>
<td>🏆 Awards (Good Place, Ultima guide), verified owner</td>
</tr>
<tr>
<td>🖼️ Photo count, photo links, logo, street panorama</td>
<td>🚇 Nearby metro stations and stops with distances</td>
<td>🔗 Chain name and id, booking links and partner</td>
</tr>
<tr>
<td>📈 Popular times (busyness by hour for each day)</td>
<td>🏢 Advertiser's legal name and INN on promoted places</td>
<td>🍽️ Popular dishes, product showcase, AI review summary</td>
</tr>
<tr>
<td>💬 Reviews add-on: text, stars, date, author, photos, owner reply</td>
<td>📋 Menu add-on: categories, items, prices, photos</td>
<td>✉️ Website add-on: emails and more social profiles</td>
</tr>
</table>

### How to scrape Yandex Maps with Yandex Maps Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - it comes with $5 of monthly credit, no card needed.
2. Open **Yandex Maps Scraper** and go to the **Input** tab.
3. Type one or more search terms (`кафе`, `стоматология`, `hotel`) and a city (`Moscow`, `Казань`, `Almaty`), or paste Yandex Maps links or organisation ids.
4. Set **Max places per search** and turn on any filters or add-ons you want.
5. Click **Start** and watch the places arrive in the **Output** tab.
6. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchQueries` | array | What to search for, e.g. `["кафе", "пиццерия"]`. **Required** unless you give links or ids. |
| `location` / `locations` | string / array | City or region in any language. Default **Moscow**. |
| `startUrls` | array | Organisation pages, `/maps/-/` short links, search, category and chain links. |
| `businessIds` | array | Organisation ids such as `1018907821`, read 20 per request. |
| `latitude`, `longitude`, `radiusKm` | number | Search around a point; with a radius only places inside it come back, each with `distanceKm`. |
| `coordinates`, `viewportSpan` | string | The same in Yandex's own longitude-first order, e.g. `37.6173,55.7558` and `0.2,0.1`. |
| `boundingBox` | object | An exact area: `{"southLat":55.70,"westLng":37.50,"northLat":55.80,"eastLng":37.70}`. |
| `restrictToArea` | boolean | Default **true**: only places inside your area. Off = Yandex may widen the search. |
| `minRating`, `priceCategories`, `openNow`, `open24h`, `goodPlaceOnly`, `amenities` | filters | Yandex's own filters, sent with the search. |
| `categoryIds`, `chainIds`, `customFilters` | arrays | Category and chain ids, and any other Yandex filter as `id:value`. |
| `sortBy` | string | `relevance` (default), `rating` or `distance`. |
| `language` | string | `ru` (default), `en`, `tr`, `uk`, `kk`. |
| `withPhoneOnly`, `withWebsiteOnly`, `withEmailOnly`, `minReviews`, `skipClosedPlaces`, `minAverageBill`, `maxAverageBill`, `excludeBusinessIds`, `excludeKeywords` | refine | Checked on every place before it is delivered. |
| `maxReviews`, `reviewsSort`, `reviewsSince`, `reviewsMinRating`, `reviewsMaxRating`, `reviewsWithTextOnly`, `reviewsWithOwnerReplyOnly` | reviews add-on | Default **0** reviews. Up to this many written reviews per place, with their filters. |
| `includeMenu` | boolean | The full menu / price list. Default **false**. |
| `includeRelatedPlaces` | boolean | The similar places Yandex shows on each place's page. Free. Default **false**. |
| `enrichContacts`, `maxWebsitePages` | website add-on | Emails and social profiles from the place's own website. Default **false**, 3 pages. |
| `maxPhotos` | integer | Photo links per place. Default **5**; above 11 the gallery is read too. |
| `includeReviewAspects` | boolean | What reviewers say about food, staff, prices... Default **false**. |
| `monitorMode`, `monitorChanges`, `monitorStoreName` | monitoring | New (and changed) places only, remembered in a named store. |
| `maxResults` | integer | Places per search term and location. Default **100**; `0` = every place found. |
| `maxItems` | integer | A cap for the whole run. |
| `compact` | boolean | Core fields only, for AI tools and spreadsheets. |
| `adaptiveGrid`, `cellSizeKm`, `maxCells`, `maxPagesPerCell`, `maxRunSeconds`, `maxConcurrency`, `residentialCountries`, `proxyConfiguration` | advanced | Coverage, speed and connection settings; the defaults work. |

#### Input JSON

```json
{
  "searchQueries": ["кафе"],
  "location": "Moscow",
  "maxResults": 50,
  "minRating": "4.5",
  "maxReviews": 0
}
```

#### Search in Russian for places in Russia

Yandex Maps is a Russian product: `кафе` finds more places in Moscow than `cafe`. Pick `language: "en"` to get English names, categories and hours where Yandex has them; some fields stay in Russian whatever you pick.

#### Ask for 0 or a large number when you want the whole city

One Yandex search lists at most 1,000 places, and a whole-city search often ends much sooner (353 restaurants for all of Saint Petersburg). With `maxResults: 0` an area that gives 150 or more places is split into four smaller areas and each is searched again, until every area is covered or `maxCells` is reached. A test run for `ресторан` in Saint Petersburg delivered 2,943 places from 57 areas in under 9 minutes; `кафе` in Kazan gave 1,723.

#### Paste the link Yandex gives you

An organisation page, a "Share" short link (`yandex.ru/maps/-/CPqIUMo`), a search link with its map area, a category or a chain link all work in `startUrls`. A chain link returns that chain's branches in the city.

### ⬆️ Output

One item per place. A trimmed example from a real run (Moscow, `кафе`):

```json
{
  "businessId": "198749357408",
  "title": "Мидийное Место",
  "url": "https://yandex.com/maps/org/midiynoye_mesto/198749357408/",
  "categories": ["Ресторан", "кафе", "бар"],
  "phones": ["+7 (993) 363-02-12"],
  "website": "https://www.midiynoe-mesto.ru",
  "socialLinks": [{ "type": "vkontakte", "url": "https://vk.ru/midiynoemesto_odintsovo" }],
  "fullAddress": "Московская область, Одинцово, Можайское шоссе, с20В",
  "city": "Одинцово",
  "postalCode": "143007",
  "latitude": 55.674352,
  "longitude": 37.278315,
  "rating": 5,
  "ratingCount": 1423,
  "reviewCount": 890,
  "workingHoursText": "пн-чт 07:00–23:00; пт 07:00–01:00; сб 08:00–01:00; вс 08:00–23:00",
  "isVerifiedOwner": true,
  "searchQuery": "кафе",
  "searchRank": 1
}
```

#### Fields

Fill shares are from a real run: 2,943 restaurants in Saint Petersburg (2026-10-21). Websites are on 86% of a mixed sample of 364 places (cafés, pharmacies, dentists, hotels, garages).

| Field | What it is | Filled |
|---|---|---|
| `businessId`, `title`, `url`, `uri`, `seoname` | Yandex organisation id, name, links | 100% |
| `categories`, `categoryIds`, `categoryClasses` | Every category of the place | 100% |
| `address`, `fullAddress`, `street`, `house`, `city`, `region`, `postalCode`, `country` | Address and its parts | 100% / 99% / 99% / 100% / 10% / 71% / 100% |
| `latitude`, `longitude`, `bounds`, `entrances` | Location | 100% / 93% entrances |
| `phones`, `phonesDetailed` | Numbers as shown, plus dialable form, extension and note | 97% |
| `website`, `websites` | Own website, ad tracking removed | 79% |
| `socialLinks`, `bookingLinks`, `bookingPartner` | VK, Telegram, WhatsApp, YouTube..., booking | 78% / 12% / when Yandex has one |
| `rating`, `ratingCount`, `reviewCount` | Stars, number of ratings, number of written reviews | 98% / 98% / 100% |
| `workingHoursText`, `schedule`, `workingHours`, `isOpenNow`, `workingStatusText`, `status` | Hours and current state | 98% |
| `features`, `featureNames`, `featureGroups` | Everything on the place card | 98% |
| `averageBill`, `priceCategory` | Average bill and price band (food and similar) | 83% / 64% |
| `photoCount`, `photos`, `photoUrlTemplate`, `logoUrl`, `panorama` | Media | 99% / 99% / 99% / 86% / 99% |
| `nearbyMetro`, `nearbyStops` | Metro and stops with distances | 90% (where the city has a metro) |
| `chainName`, `chainId`, `chainSlug` | Chain | 30% |
| `awards`, `isVerifiedOwner`, `isAdvert`, `legalInfo` | Awards, verified owner (true on 56%), promoted place (true on 30%), advertiser's legal name + INN | 51% / 100% / 100% / 27% |
| `popularityHistogram` | Busyness by hour for each day | 78% |
| `menuTop`, `productCatalog`, `promo`, `actionButtons` | Popular dishes, showcase, current promotion, action buttons | 85% / 21% / when Yandex has one |
| `neurosummary`, `reviewAspects` | Yandex's AI review summary (rare: 2 of 25 restaurants in a test); aspects (with `includeReviewAspects`) | rare / when on |
| `reviews`, `menu`, `emails`, `primaryBusinessEmail`, `websiteSocials`, `relatedPlaces` | Add-ons and options, when turned on | see below |
| `searchQuery`, `searchLocation`, `matchedLocation`, `searchRank`, `distanceKm` | How the place was found | 100% for searches |
| `monitorStatus`, `previousStats` | `new` or `changed` (with the previous values), monitor mode only | |

In a priced test run with every add-on on (restaurants in Kazan, a $0.02 limit): 4 places, 16 reviews, 3 menus (40-99 items) and 4 websites that gave an email, each charged exactly once.

### How can I use Yandex Maps data?

- 📇 **Lead lists:** every dentist, café or car service in a city with phones, websites and social links.
- 🏢 **Chain mapping:** all branches of a chain with coordinates, hours and ratings.
- ⭐ **Reputation tracking:** ratings, review counts and new reviews on a schedule.
- 🍽️ **Menu and price research:** menus and price lists across a category.
- 📍 **Location planning:** competitors around a point with distances.
- 🔁 **New-business alerts:** monitor mode on a weekly schedule delivers only the places that opened.

### How much does it cost to scrape Yandex Maps?

**$0.45 per 1,000 places.** No start fee. Add-ons are charged only when they deliver:

| Event | Price |
|---|---|
| Place (one row) | $0.00045 |
| Review (inside a place row) | $0.00022 |
| Menu (a place that has one) | $0.001 |
| Website contacts (an email or a new social profile found) | $0.0018 |

| Run | Cost |
|---|---|
| 10 places | $0.0045 |
| 100 places | $0.045 |
| 1,000 places | $0.45 |
| 100 places with 20 reviews each | $0.045 + $0.44 = $0.485 |

There is nothing else to pay: Apify platform usage is included in these prices. The free Apify plan's $5 a month covers about 11,000 places.

### Integrations, API, scheduling & MCP

- **Schedules:** run daily or weekly from the Schedules tab; with monitor mode each run delivers only what is new.
- **Webhooks:** get a call when a run finishes and fetch the dataset.
- **Make, Zapier, n8n, Google Sheets, Slack:** through Apify's integrations.
- **API:** start runs and read results with the Apify API - see the [API tab](https://apify.com/topapi/yandex-maps-scraper/api/python) for Python and [JavaScript](https://apify.com/topapi/yandex-maps-scraper/api/javascript) code.
- **MCP:** use it from AI agents through the [MCP tab](https://apify.com/topapi/yandex-maps-scraper/api/mcp).

### More local-business scrapers

<table>
<tr>
<td>🍎 <a href="https://apify.com/topapi/apple-maps-scraper">Apple Maps Scraper</a><br>The same kind of place rows from Apple Maps.</td>
<td>📍 <a href="https://apify.com/topapi/google-maps-reviews-scraper">Google Maps Reviews Scraper</a><br>Reviews and owner replies from Google Maps.</td>
<td>⭐ <a href="https://apify.com/topapi/yelp-reviews-scraper">Yelp Reviews Scraper</a><br>Yelp reviews with owner replies.</td>
</tr>
<tr>
<td>🏨 <a href="https://apify.com/topapi/booking-hotels-scraper">Booking.com Hotels Scraper</a><br>Hotels, prices and rooms.</td>
<td>🛎️ <a href="https://apify.com/topapi/google-hotels-scraper">Google Hotels Scraper</a><br>Hotel prices across booking sites.</td>
<td>💬 <a href="https://apify.com/topapi/trustpilot-reviews-scraper">Trustpilot Reviews Scraper</a><br>Company reviews and replies.</td>
</tr>
</table>

More on [our profile](https://apify.com/topapi).

### Limits & empty runs

- **One Yandex search lists at most 1,000 places** (25 per page), often fewer for a whole city. The area is split automatically to find the rest; `maxCells` (default 100) caps the areas per search.
- **Coverage is deepest in Russia, Kazakhstan, Belarus and Turkey.** Places elsewhere exist but have fewer ratings and contacts.
- **Paid placements come first.** Yandex lists promoted places at the top, also when sorting by distance; `distanceKm` lets you re-sort.
- **Posts, videos, event counts and chain branch counts are not included** in this version: they are not on the Yandex Maps web pages this actor reads.
- **Menu and gallery photos are skipped** when a run has to use the residential connection.
- **A run never fails because Yandex is busy.** If Yandex refuses the requests or shows its human check, the run stops cleanly with a status message, delivers what it already had and charges nothing for the rest.
- **Not charged:** duplicates, filtered places, places outside your area, unchanged places in monitor mode, ids Yandex does not know, failed requests.

### FAQ

#### How many places can Yandex Maps Scraper collect in one run?

As many as Yandex lists for your search. One search lists at most 1,000 places, so with `maxResults: 0` the area is split and searched again. A test run for `ресторан` in Saint Petersburg delivered 2,943 places in under 9 minutes.

#### Can I run Yandex Maps Scraper on a schedule to get new places automatically?

Yes. Turn on `monitorMode` and schedule the run. Each run delivers only places that earlier runs with the same `monitorStoreName` did not deliver, plus places whose rating, review count, hours, phone, website or status changed, with the previous values in `previousStats`.

#### Can I get reviews with Yandex Maps Scraper?

Yes. Set `maxReviews` to the number of written reviews you want per place (50 are read per request). Pick the order, a start date with `reviewsSince`, star limits, text-only or owner-reply-only. Each review costs $0.00022.

#### Can I integrate Yandex Maps Scraper with other apps?

Yes: Make, Zapier, n8n, Google Sheets, Slack, webhooks and anything that can call the Apify API.

#### Can I use Yandex Maps Scraper with the Apify API?

Yes. Start it from Python, JavaScript or any HTTP client and read the dataset when the run finishes. Code samples are on the API tab.

#### Can I use Yandex Maps Scraper through an MCP server?

Yes. Apify's MCP server exposes it to Claude, ChatGPT, Cursor and other agents; see the MCP tab.

#### Do I need a Yandex account or API key for Yandex Maps Scraper?

No. It reads Yandex Maps the way a signed-out visitor's browser does. You give search terms, links or ids, nothing else.

#### Does Yandex Maps Scraper return emails?

Yandex Maps does not show emails on a place card. Turn on `enrichContacts` and the scraper visits each place's own website for emails and social profiles; you pay $0.0018 only for places where it finds one.

#### Why did my Yandex Maps Scraper run return no results?

Check the run's `RUN_SUMMARY` record: it lists searches with no results, filtered places, places outside your area, ids Yandex does not know, and the filters Yandex offered. A location Yandex cannot find, a very narrow filter, or monitor mode with nothing new all give an empty run, and an empty run costs nothing.

#### Is it legal to scrape Yandex Maps?

Yandex Maps Scraper reads public business listings that any signed-out visitor sees. Reviews carry their authors' names, which can be personal data, so keep only what you need. Apify's article on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) is a good starting point. This Actor is not affiliated with Yandex.

#### Your feedback

Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/topapi/yandex-maps-scraper/issues/open) and we will look at it.

# Actor input Schema

## `searchQueries` (type: `array`):

What to look for, as typed into Yandex Maps, e.g. "кафе", "стоматология", "hotel". Russian terms find more places in Russia and the CIS. Searched in every location below.

## `location` (type: `string`):

City, district or region to search in, in any language, e.g. "Moscow", "Казань", "Almaty", "Istanbul". Yandex Maps turns it into an area. Empty = Moscow.

## `locations` (type: `array`):

Optional. More cities, one per line, e.g. "Saint Petersburg" and "Novosibirsk". Every search term is searched in each.

## `startUrls` (type: `array`):

Organisation pages (yandex.ru/maps/org/name/1018907821/), short share links (yandex.ru/maps/-/CPqIUMo), search, category or chain links. Each search link keeps its own map area.

## `businessIds` (type: `array`):

Yandex Maps organisation ids, e.g. 1018907821 (the number in an organisation link). Read 20 at a time - the fastest way to refresh a known list.

## `latitude` (type: `number`):

Optional. Search around an exact point instead of a city, e.g. 55.7558. Use with Longitude (two fields, so the pair cannot be swapped).

## `longitude` (type: `number`):

Optional. e.g. 37.6173. Use with Latitude.

## `radiusKm` (type: `number`):

Used with Latitude/Longitude: only places within this distance come back, each with its distanceKm. Empty = a 3 km square.

## `coordinates` (type: `string`):

Optional, Yandex's own order: longitude first, e.g. "37.6173,55.7558". Same as Latitude + Longitude; use one or the other.

## `viewportSpan` (type: `string`):

Optional, with Coordinates or Latitude/Longitude: the map window width and height in degrees, longitude first, e.g. "0.2,0.1".

## `boundingBox` (type: `object`):

Optional exact area, e.g. {"southLat": 55.70, "westLng": 37.50, "northLat": 55.80, "eastLng": 37.70}. Searched as a whole and split while Yandex keeps finding places.

## `restrictToArea` (type: `boolean`):

On: Yandex returns only places inside your location or area. Off: Yandex may widen the search past it, as on its website.

## `minRating` (type: `string`):

Only places Yandex rates at least this high (Yandex's own rating filter). Places with no rating are left out.

## `priceCategories` (type: `array`):

Yandex's own price filter (restaurants, cafes and similar). Several = any of them.

## `openNow` (type: `boolean`):

Only places Yandex shows as open right now.

## `open24h` (type: `boolean`):

Only places open around the clock.

## `goodPlaceOnly` (type: `boolean`):

Only places with Yandex's "Good Place" (Хорошее место) award.

## `amenities` (type: `array`):

Yandex's feature filters, all must match. Which ones apply depends on the category; see filtersAvailable in RUN_SUMMARY for the full list of a search.

## `categoryIds` (type: `array`):

Yandex category ids, e.g. 184106390 (cafe), 184106394 (restaurant). The categoryIds field of any row shows them.

## `chainIds` (type: `array`):

Only branches of these chains, e.g. 6002072. The chainId field of any branch row shows it. With a whole-city search this lists every branch.

## `customFilters` (type: `array`):

Any other filter Yandex offers, as id:value, e.g. "type_cuisine:italian_cuisine" or "petfriendly:pets_allowed". RUN_SUMMARY.filtersAvailable lists them.

## `sortBy` (type: `string`):

Yandex's own order of the results.

## `language` (type: `string`):

Language of names, categories, hours and features. Some fields stay in Russian whatever you pick (Yandex's own data).

## `withPhoneOnly` (type: `boolean`):

Skip places without a phone number. Skipped places are not charged.

## `withWebsiteOnly` (type: `boolean`):

Skip places without a website.

## `withEmailOnly` (type: `boolean`):

Keep only places whose own website shows an email (turns on Website contacts).

## `minReviews` (type: `integer`):

Only places with at least this many written reviews, e.g. 10.

## `skipClosedPlaces` (type: `boolean`):

Skip places Yandex marks as closed (temporarily or permanently) or moved.

## `minAverageBill` (type: `integer`):

Only places whose average bill reaches this amount, in the local currency, e.g. 1500 (rubles in Russia).

## `maxAverageBill` (type: `integer`):

Only places whose average bill starts at or below this amount, e.g. 3000.

## `excludeBusinessIds` (type: `array`):

Places you already have (ids or links): never delivered, never charged.

## `excludeKeywords` (type: `array`):

Skip places whose name or category contains any of these words, e.g. "сеть", "hostel".

## `maxReviews` (type: `integer`):

0 = no reviews. Up to this many written reviews per place, nested on the row (text, rating, date, author, photos, owner reply). $0.22 per 1,000 reviews.

## `reviewsSort` (type: `string`):

Order Yandex returns reviews in.

## `reviewsSince` (type: `string`):

Only reviews published on or after this date, e.g. 2026-01-01 (reads newest first). Pairs with a daily schedule.

## `reviewsMinRating` (type: `integer`):

Only reviews with at least this many stars (1-5).

## `reviewsMaxRating` (type: `integer`):

Only reviews with at most this many stars, e.g. 2 for complaints.

## `reviewsWithTextOnly` (type: `boolean`):

Skip star-only reviews.

## `reviewsWithOwnerReplyOnly` (type: `boolean`):

Only reviews the business answered.

## `includeMenu` (type: `boolean`):

The place's full menu or price list from Yandex (categories, items, prices, photos). $0.001 per place that has one.

## `includeRelatedPlaces` (type: `boolean`):

The similar places Yandex shows on each place's page (name, category, rating, link). Free; one extra page per place.

## `enrichContacts` (type: `boolean`):

Visit each place's own website for emails and social profiles. $0.0018 per place where it finds an email or a new social profile.

## `maxWebsitePages` (type: `integer`):

With Website contacts: pages to read per website (home, contact, about...).

## `maxPhotos` (type: `integer`):

Photo links per place, free. Up to 11 come with the place; more are read from its gallery (sizes, tags, author).

## `includeReviewAspects` (type: `boolean`):

What reviewers say about each aspect (food, staff, prices...) with positive / neutral / negative counts. Free; bigger answers.

## `monitorMode` (type: `boolean`):

Deliver only places earlier runs with the same store name did not deliver. Pairs with a daily or weekly schedule.

## `monitorChanges` (type: `boolean`):

In monitor mode, also deliver places whose rating, review count, hours, phone, website or status changed, with the previous values.

## `monitorStoreName` (type: `string`):

Named storage that remembers delivered places. Use one name per watch list.

## `maxResults` (type: `integer`):

Per search term and location. One Yandex search lists up to 1,000 places (often fewer for a whole city); the area is split automatically to find the rest. 0 = every place found.

## `maxItems` (type: `integer`):

Optional cap for the whole run, across every search, link and id.

## `compact` (type: `boolean`):

Core fields only (name, categories, phones, website, address, coordinates, rating, hours, link) - smaller rows for AI tools and spreadsheets.

## `adaptiveGrid` (type: `boolean`):

When an area gives 150+ places or runs into Yandex's 1,000-place end, split it into four and search each - how whole cities are covered.

## `cellSizeKm` (type: `number`):

Optional. Start from a grid of cells this wide instead of the whole area, e.g. 3 for a dense city.

## `maxCells` (type: `integer`):

Upper bound on the sub-areas one search may visit.

## `maxPagesPerCell` (type: `integer`):

Result pages (25 places each) read per area before it counts as full. 40 = Yandex's own end.

## `maxRunSeconds` (type: `integer`):

Optional. Stop starting new work after this many seconds and finish cleanly.

## `maxConcurrency` (type: `integer`):

Requests in flight at once.

## `residentialCountries` (type: `array`):

Countries for the residential fallback, in order, e.g. "KZ", "BY", "RU". Used only when direct and datacenter connections are refused.

## `proxyConfiguration` (type: `object`):

Default: direct first, then Apify datacenter proxy, then Apify residential under a byte budget. Choose a group to use only that.

## Actor input object example

```json
{
  "searchQueries": [
    "кафе"
  ],
  "location": "Moscow",
  "restrictToArea": true,
  "minRating": "",
  "openNow": false,
  "open24h": false,
  "goodPlaceOnly": false,
  "sortBy": "relevance",
  "language": "ru",
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "withEmailOnly": false,
  "skipClosedPlaces": false,
  "maxReviews": 0,
  "reviewsSort": "relevance",
  "reviewsWithTextOnly": false,
  "reviewsWithOwnerReplyOnly": false,
  "includeMenu": false,
  "includeRelatedPlaces": false,
  "enrichContacts": false,
  "maxWebsitePages": 3,
  "maxPhotos": 5,
  "includeReviewAspects": false,
  "monitorMode": false,
  "monitorChanges": true,
  "monitorStoreName": "yandex-maps-monitor",
  "maxResults": 50,
  "compact": false,
  "adaptiveGrid": true,
  "maxCells": 100,
  "maxPagesPerCell": 40,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One item per Yandex Maps place: phones, websites, social links, address, coordinates, categories, rating, hours, features, photos, and the add-ons you turned on (reviews, menu, website emails).

## `summary` (type: `string`):

Per-search counts, the filters Yandex offered, places skipped (duplicates, filtered, outside the area), requests and the connection used.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "кафе"
    ],
    "location": "Moscow",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/yandex-maps-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["кафе"],
    "location": "Moscow",
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/yandex-maps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "кафе"
  ],
  "location": "Moscow",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call topapi/yandex-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/yandex-maps-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/z218GpZbc0ILtQLhO/builds/12jFyJQclspDSfe51/openapi.json
