# Yandex Maps API: Business Contacts & Places (`firsthand/yandex-maps-contacts`) Actor

Yandex Maps scraper and API for business contacts: phones, websites, WhatsApp, Telegram, ratings, hours and coordinates of every place in a city. Yandex places and Yandex business leads for Russian cities with phone, website and rating filters. Парсер Яндекс Карт.

- **URL**: https://apify.com/firsthand/yandex-maps-contacts.md
- **Developed by:** [Firsthand](https://apify.com/firsthand) (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

$0.30 / 1,000 place returneds

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

## Yandex Maps API: Business Contacts & Places

Export every business that Yandex Maps shows for your search in a city: name, categories, address, phones,
website, WhatsApp, Telegram and other social links, rating, number of reviews, opening hours, nearest metro and
coordinates. No Yandex account and no Yandex Maps API key needed.

### Why use it

- **The whole city, not 25 results.** Yandex Maps shows 25 places at a time. This actor splits the city into map
  windows and goes through each one: 1,897 cafes in Kazan, 468 dentists in Kazan.
- **Contacts that are filled.** For 468 dentists in Kazan: phone 99%, website 69%, social links 70%, rating 95%,
  opening hours 98%.
- **Clean data.** Phones as +7XXXXXXXXXX, WhatsApp and Telegram in their own columns without the pre-filled
  message, ad tracking tags (yclid, utm) removed from websites.
- **Lead filters that don't cost you.** Only with a phone, only with or without a website, minimum rating. Places
  removed by a filter are not charged.
- **Cheap.** $0.0003 per place, no start fee.

### What you get

| field | example |
|---|---|
| name | Блистайм |
| categories | Стоматологическая клиника |
| address, postalCode | ул. Липовый Парк, 5, корп. 1, посёлок Коммунарка · 108801 |
| country, locality, street, house | Россия · посёлок Коммунарка · улица Липовый Парк · 5, корп. 1 |
| lat, lon | 55.568879, 37.49141 |
| phones | +74951363678 |
| website, urls | https://blistime.ru/ |
| whatsapp, telegram, social | https://wa.me/79262127427 · https://t.me/79262127427 · list of all social links |
| rating, ratingCount, reviewCount | 5 · 555 · 429 |
| hours | ежедневно, 09:00–21:00 (as Yandex writes it, in the address language) |
| status | open |
| metro | up to 3 stations: Новомосковская, 1,87 км · Потапово, 2,03 км · ... |
| isAdvertised, verifiedOwner | true · true |
| url | https://yandex.ru/maps/org/blistaym/1791459184/ |
| searchQuery, location | what you searched and where |

Categories, addresses and hours come in Russian by default; set Address language to English to get them in English.

### How to scrape Yandex Maps

1. Type search queries as you would on Yandex Maps: `стоматология`, `кафе`, `автосервис`.
2. Add cities, districts or regions: `Москва`, `Казань`, `Тверская область`.
3. Optionally set filters and limits, then run. Download as Excel, CSV or JSON, or get it by API.

```json
{
  "searchQueries": ["стоматология"],
  "cities": ["Казань"],
  "onlyWithPhone": true,
  "website": "without"
}
```

### How much does it cost?

$0.0003 per place. No start fee, nothing charged for places removed by your filters. 1,000 places cost $0.30.

### Parsing contacts from Yandex Maps for leads

Set "Only places with a phone" and "Website: Only without a website" to get local businesses you can call that
have no site yet. Add "Minimum rating" to keep only well-rated places.

### Moving from another Yandex Maps actor

Input fields of popular Yandex Maps and Google Maps actors are read too: `query`, `location`, `locationQuery`,
`city`, `maxResults`, `searchStringsArray`.

### Good to know

- Yandex Maps does not publish email addresses. For emails use 2GIS API: Business Leads with Phones & Emails, or
  Yandex + 2GIS Business Leads: One Merged List.
- Data is taken live from Yandex Maps at the time of the run.

### FAQ

**Do I need a Yandex Maps API key?** No.

**Can I get reviews?** Use the companion actor Yandex Reviews API with the place links from this actor.

### Парсер Яндекс Карт

Парсинг контактов с Яндекс Карт по запросу и городу: телефоны, сайты, WhatsApp, Telegram, соцсети, рейтинг,
часы работы, метро, координаты. Весь город, а не 25 мест. Без ключа API. $0.0003 за организацию.

# Actor input Schema

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

What to search for, as you would type it on the map: a business type or a name. One per line. Russian works best (стоматология, кафе, автосервис).

## `cities` (type: `array`):

City, district or region as named on the map, e.g. Москва, Казань, Тверская область. One per line.

## `maxItemsPerQuery` (type: `integer`):

0 means everything the map has for this query in this city.

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

Stop after this many rows across all queries and cities. 0 means no limit.

## `onlyWithPhone` (type: `boolean`):

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

## `website` (type: `string`):

Businesses without a website are leads for web studios and marketers. Skipped places are not charged.

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

Skip places rated below this, e.g. 4.5. Empty means any. Skipped places are not charged.

## `addressLanguage` (type: `string`):

Language of addresses and categories.

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

Not needed for Yandex Maps. Turn on only if you see captchas.

## Actor input object example

```json
{
  "searchQueries": [
    "стоматология"
  ],
  "cities": [
    "Казань"
  ],
  "maxItemsPerQuery": 0,
  "maxItems": 0,
  "onlyWithPhone": false,
  "website": "any",
  "addressLanguage": "ru",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `places` (type: `string`):

Places found in this run.

# 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": [
        "стоматология"
    ],
    "cities": [
        "Казань"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("firsthand/yandex-maps-contacts").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": ["стоматология"],
    "cities": ["Казань"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("firsthand/yandex-maps-contacts").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": [
    "стоматология"
  ],
  "cities": [
    "Казань"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call firsthand/yandex-maps-contacts --silent --output-dataset

```

## MCP server setup

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

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/wxgZwP38DYYytMaqh/builds/KoRFnfAmKwpmKgf7S/openapi.json
