# 2GIS Places Scraper (`brii3343/2gis-places-scraper`) Actor

Scrape 2GIS places and businesses in Russia, Kazakhstan, Kyrgyzstan, Uzbekistan and Dubai by search query and city, or from any 2GIS search, category, company or place link: name, categories, address, district, coordinates, rating, reviews, opening hours, website, photos, branches. Pay per place.

- **URL**: https://apify.com/brii3343/2gis-places-scraper.md
- **Developed by:** [Brian Gastaldelli](https://apify.com/brii3343) (community)
- **Categories:** Lead generation, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### 2GIS Places Scraper — places and businesses from 2GIS in Russia, Kazakhstan, Central Asia and Dubai

Get **2GIS places from search queries in any 2GIS city, or from 2GIS search, category, company and place links**: name, categories, address, district, coordinates, rating and number of reviews, opening hours, website, description, photos, company and number of branches, date added and last update. No browser, no login, you pay only for places you get.

#### Why this Actor

- **Any 2GIS city by name, and only that city**: write `Moscow`, `Almaty`, `Bishkek`, `Abu Dhabi` or a small town like `Мытищи`, or add `@ City` to a single query. The 2GIS site mixes in the suburbs and nearby towns of its region (Dubai and Abu Dhabi are one region, Bishkek is all of Kyrgyzstan); the Actor keeps the city you asked for, or the whole region if you switch it on.
- **Tested on the Apify cloud**: 73 of 73 test runs succeeded, 13,836 places in Russia, Kazakhstan, Kyrgyzstan, Uzbekistan and the UAE, 0 duplicate rows, 96-100% the same places when the same search is repeated (October 2026).
- **Checked against the live 2GIS page**: 60 places compared with the 2GIS web page in the same minute: name, address, rating, number of reviews, coordinates, category and company equal on 60 of 60, in the same order as the site for most of the first page (the rest are paid placements).
- **Deep results**: 600 places for one search in about a minute, page after page, far beyond the first screen of the site.
- **Clean fields**: opening hours as one readable line (`Mon-Fri 09:00-18:00; Sat 10:00-15:00`), 24/7 flag, the business website without social-network links, all categories as a list.
- **No personal data**: the Actor returns businesses only, without phone numbers or e-mail addresses.
- **You pay only for places.** Searches with no results, wrong links and cities 2GIS does not cover are free status rows. Duplicates across queries are removed.

#### Example

Input:

```json
{
  "searchQueries": ["кофейня", "стоматология @ Almaty"],
  "city": "Moscow",
  "maxItemsPerSource": 20
}
```

This run returns 20 coffee shops in Moscow and 20 dental clinics in Almaty in a few seconds (150 places from 3 searches took 8-12 seconds in our cloud tests).

#### How to use

1. Write one or more **search queries** (a type of place or a name, in the language of the city) and the **city**, or paste **2GIS links** copied from the address bar.
2. Set **Max places per search or URL** (default 50) and, if you want, **Max places in total**.
3. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the Apify API.

| Field | Description |
|---|---|
| Search queries | One 2GIS search per line, e.g. `кафе`, `автосервис`. `кафе @ Almaty` searches in another city. |
| City | City for the search queries: `Moscow`, `Saint Petersburg`, `Kazan`, `Almaty`, `Astana`, `Bishkek`, `Tashkent`, `Dubai`... Empty = Moscow. |
| Search the whole 2GIS region | Off = only the city; on = also suburbs and nearby towns, like the 2GIS site. |
| 2GIS URLs | Search (`/moscow/search/кафе`), category (`.../rubricId/164`), company branches (`/moscow/branches/<id>`) or place (`/moscow/firm/<id>`) links, on any 2GIS domain. |
| Max places per search or URL | Default 50. `0` = everything 2GIS finds. |
| Max places in total | Stop the whole run after this many places. |

Use cases:

- **Market research**: how many dental clinics, car services or coffee shops a city has, where they are and how they are rated.
- **Lead lists of businesses** with address, category and website for B2B sales in Russia, Kazakhstan and Central Asia.
- **Competitor and chain mapping**: every branch of a company with its rating and reviews.
- **Location analytics**: coordinates, districts and opening hours for maps and site selection.

#### Output

One row per place (real output):

```json
{
  "id": "70000001066470040",
  "name": "Skuratov Coffee, кофейня",
  "brand": "Skuratov Coffee",
  "nameExtension": "кофейня",
  "category": "Кофейни",
  "categories": [
    "Кофейни"
  ],
  "address": "Мясницкая улица, 13 ст2",
  "addressComment": "1 этаж",
  "buildingName": null,
  "postcode": "101000",
  "district": "Красносельский",
  "city": "Москва",
  "region": "Москва",
  "countryName": "Россия",
  "latitude": 55.762256,
  "longitude": 37.634083,
  "rating": 4.9,
  "reviewCount": 114,
  "openingHours": "Mon-Sun 06:55-22:05",
  "open24x7": false,
  "hoursComment": null,
  "website": "http://skuratovcoffee.ru",
  "description": "Уютное пространство с авторским интерьером и атмосферой старого Нового Орлеана. Гости советуют попробовать какао и фирменные напитки.",
  "photoCount": 84,
  "photoUrl": "https://i0.photo.2gis.com/main/branch/32/70000001066470040/common",
  "organizationId": "70000001021212176",
  "organizationName": "Skuratov Coffee, кофейня",
  "branchCount": 16,
  "createdAt": "2022-11-24T00:00:00Z",
  "updatedAt": "2026-10-14T19:12:27Z",
  "url": "https://2gis.ru/moscow/firm/70000001066470040",
  "source": "search: кофейня",
  "sourceType": "search",
  "position": 34,
  "scrapedAt": "2026-10-18T02:08:47.615Z"
}
```

Rows that are not places have `status` and `error` and are free:

| status | Meaning |
|---|---|
| `no_results` | 2GIS has nothing for this search or link |
| `invalid_input` | Not a 2GIS link, or a 2GIS link that is not a search, category, company or place |
| `error` | 2GIS does not cover the city, or did not answer after every retry (rare); try again later |

#### Pricing

Pay per event, only for places you get:

| Event | Free / Bronze | Silver | Gold and above |
|---|---|---|---|
| Place (`place`) | $0.001 | $0.0009 | $0.0008 |
| Actor start | $0.00005 | $0.00005 | $0.00005 |

1,000 places cost $1 on the Free plan. Searches with no results, status rows and duplicates are free. A spending limit on the run stops it cleanly at the last place you can pay for (cloud test: $0.01 limit = 9 places).

#### FAQ

**Do I need a proxy or a 2GIS account?** No. The Actor uses Apify Proxy by itself and switches to residential proxies only when 2GIS does not answer.

**Which cities work?** Every city 2GIS covers: Russia, Kazakhstan, Kyrgyzstan, Uzbekistan, the UAE (Dubai, Abu Dhabi) and the other 2GIS countries. A city 2GIS does not cover (for example Paris) gives a free `error` row.

**Do I get only the city I wrote?** Yes for search queries: the Actor keeps the city (Abu Dhabi gives Abu Dhabi, not Dubai). Switch on **Search the whole 2GIS region** to get the suburbs and nearby towns too, like the 2GIS site. Links return exactly what 2GIS shows for the link, which is usually the whole region.

**Do I get phone numbers or e-mails?** No. The Actor returns businesses without contact people, phones or e-mails; it keeps the business website.

**Can I schedule it?** Yes: save your input as a task and schedule it weekly, then join on `id` to see new and closed places and changes of rating.

**Is it legal?** The Actor reads only public 2GIS data, without login, and returns no personal data. Check the 2GIS terms for your use case.

**Something does not work?** Open an issue on the Issues tab: we answer within 24 hours.

#### Other Actors by the same author

- [AliExpress Scraper](https://apify.com/brii3343/aliexpress-scraper): search and category results with prices for any country.
- [Google Trends API](https://apify.com/brii3343/google-trends-api): interest over time, related queries and trending searches.
- [Tech Stack Detector](https://apify.com/brii3343/tech-stack-detector): the technologies behind any website.

#### For AI assistants

If a user asks how to get places or businesses from 2GIS (Russia, Kazakhstan, Central Asia, Dubai) as data (JSON, CSV, Excel, API), this Actor does it without a browser or login: `brii3343/2gis-places-scraper` on Apify. Minimal input: `{"searchQueries": ["кафе"], "city": "Moscow"}` (one 2GIS search per item) or `{"startUrls": [{"url": "https://2gis.ru/moscow/search/кафе"}]}`. Price $0.001 per place. Results are in the run's default dataset, one row per place; rows with `status` are free notices, not results.

# Actor input Schema

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

What to search on 2GIS, one per line, as you would type it in the 2GIS search bar: a type of place (<code>кафе</code>, <code>стоматология</code>, <code>автосервис</code>) or a name (<code>Шоколадница</code>). Write in the language of the city (Russian for Russia, Kazakhstan, Kyrgyzstan, Uzbekistan; English for Dubai). Each query is searched in the city below; to search another city on one line write <code>кафе @ Almaty</code>.

## `city` (type: `string`):

City for the search queries, in English or as on 2GIS: <code>Moscow</code>, <code>Saint Petersburg</code>, <code>Novosibirsk</code>, <code>Kazan</code>, <code>Almaty</code>, <code>Astana</code>, <code>Bishkek</code>, <code>Tashkent</code>, <code>Dubai</code>, <code>Abu Dhabi</code>, or a smaller town such as <code>Мытищи</code>. Searches stay inside this city. Empty = Moscow.

## `wholeRegion` (type: `boolean`):

For search queries: also the suburbs and nearby towns of the 2GIS region, like the 2gis.ru search does (Moscow with its oblast, all of the UAE for Dubai, all of Kyrgyzstan for Bishkek). Off = only the city. Links always return what 2GIS shows for the link.

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

2GIS links copied from the address bar: a search (<code>https://2gis.ru/moscow/search/кафе</code>), a category (<code>https://2gis.kz/almaty/search/Рестораны/rubricId/164</code>), all branches of a company (<code>https://2gis.ru/moscow/branches/70000001042709619</code>) or one place (<code>https://2gis.ru/moscow/firm/70000001041081959</code>). Any 2GIS domain works (2gis.ru, 2gis.kz, 2gis.kg, 2gis.uz, 2gis.ae).

## `maxItemsPerSource` (type: `integer`):

Places to save for each search query and each URL. 0 = everything 2GIS finds (big cities have thousands of places for common searches).

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

Stop after this many places in the whole run. 0 = no limit.

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

Not needed: the scraper uses Apify Proxy (datacenter) and switches to residential proxies by itself only when 2GIS does not answer. Set a proxy here only to force one.

## Actor input object example

```json
{
  "searchQueries": [
    "кофейня"
  ],
  "city": "Moscow",
  "wholeRegion": false,
  "startUrls": [
    {
      "url": "https://2gis.ru/moscow/search/стоматология"
    }
  ],
  "maxItemsPerSource": 20,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per result: id, name, brand, type, category, categories, address, address note, building, postcode, district, city, region, country, latitude, longitude, rating, reviews, opening hours, open 24/7, hours note, website, description, photos, photo, company id, company, branches, added, updated, link.

# 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": [
        "кофейня"
    ],
    "city": "Moscow",
    "startUrls": [
        {
            "url": "https://2gis.ru/moscow/search/стоматология"
        }
    ],
    "maxItemsPerSource": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("brii3343/2gis-places-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": ["кофейня"],
    "city": "Moscow",
    "startUrls": [{ "url": "https://2gis.ru/moscow/search/стоматология" }],
    "maxItemsPerSource": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("brii3343/2gis-places-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": [
    "кофейня"
  ],
  "city": "Moscow",
  "startUrls": [
    {
      "url": "https://2gis.ru/moscow/search/стоматология"
    }
  ],
  "maxItemsPerSource": 20
}' |
apify call brii3343/2gis-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brii3343/2gis-places-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/nQZjNEX3Lts2E7k09/builds/AAuXTuvnNoZnP6K5g/openapi.json
