# 2GIS Reviews Scraper — Ratings, Texts & Owner Replies (`technicaldost/2gis-reviews-scraper`) Actor

Scrape 2GIS reviews for any business or search: rating, review text, date, likes, photos, verified visit and the owner's reply, plus the place's average rating and review count. Dubai, Moscow, Almaty and every 2GIS city. No API key.

- **URL**: https://apify.com/technicaldost/2gis-reviews-scraper.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** Business, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 reviews

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

2GIS Reviews Scraper extracts customer reviews from [2GIS](https://2gis.com), the leading map and business directory in Russia, the UAE, Kazakhstan and Central Asia. Paste 2GIS business URLs, or search a city (`restaurant` in `dubai`) to review the top places, and get every review's **rating, text, date, likes, photos, verified-visit flag and the owner's official reply**, together with the place's **average rating and total review count**. Use it for reputation monitoring, competitor analysis and sentiment research. Reviewer names are off by default.

### What you get

- Reviews for any 2GIS business URL, or for the top places of a city and search term.
- Rating (1-5), full text, created and edited dates, likes, comments count and review photos.
- Verified-visit flag (2GIS confirms the reviewer visited) and the owner's official reply with date.
- Place name, address, average rating and total reviews on every row.
- Sort by most relevant or newest; text-only option; up to 5,000 reviews per place.
- Reviewer names only when you turn them on.

### How to use 2GIS Reviews Scraper

1. Paste **2GIS business URLs** (e.g. `https://2gis.ae/dubai/firm/70000001055853809`), or enter **Cities** and **Search terms**.
2. Set **Maximum reviews per place** and, for searches, **Places per search**.
3. Choose **Sort by** (relevant or newest).
4. Run the Actor and export reviews to Excel, CSV or JSON.

### Input example

```json
{
  "placeUrls": [
    {
      "url": "https://2gis.kz/almaty/firm/70000001117557224"
    }
  ],
  "maxReviewsPerPlace": 50
}
```

All fields are described in the **Input** tab.

### Output example

```json
{
  "reviewId": "305729817",
  "rating": 5,
  "text": "Great place, tasty food, polite staff",
  "createdAt": "2026-10-13T14:33:42.921478+07:00",
  "editedAt": null,
  "likes": 0,
  "commentsCount": 0,
  "photos": [],
  "verifiedVisit": true,
  "provider": "2gis",
  "ownerReply": null,
  "ownerReplyAt": null,
  "placeId": "70000001117557224",
  "placeName": "Megafish",
  "placeAddress": "улица Розыбакиева, 147",
  "placeRating": 4.7,
  "placeReviewsCount": 233,
  "placeUrl": "https://2gis.kz/almaty/firm/70000001117557224",
  "scrapedAt": "2026-10-23T00:00:00.000Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `reviewId` | Review ID. |
| `rating` | Rating 1-5. |
| `text` | Review text. |
| `createdAt` | Date posted. |
| `editedAt` | Date edited, if edited. |
| `likes` | Likes. |
| `commentsCount` | Comments on the review. |
| `photos` | Review photo URLs. |
| `verifiedVisit` | 2GIS confirmed the reviewer visited. |
| `provider` | Review source (2gis, flamp...). |
| `ownerReply` | Official reply from the business. |
| `ownerReplyAt` | Date of the reply. |
| `reviewerName` | Reviewer display name (only when enabled). |
| `placeId` | 2GIS place ID. |
| `placeName` | Place name. |
| `placeAddress` | Place address. |
| `placeRating` | Place's average rating. |
| `placeReviewsCount` | Place's total reviews. |
| `placeUrl` | Place page on 2GIS. |
| `scrapedAt` | Time of extraction. |

Export results as JSON, CSV, Excel, XML or HTML, or read them with the API.

### Use cases

- Reputation monitoring: track new reviews and ratings of your branches daily.
- Competitor analysis: compare ratings and complaints of restaurants, clinics or shops in a city.
- Sentiment analysis and AI training on Russian, Kazakh, Arabic and English reviews.
- Check how quickly businesses reply to customers.

### How much does 2GIS Reviews Scraper cost?

This Actor uses **pay-per-event** pricing: **$0.001 per review** ($1 per 1,000). Platform usage is included. Places without reviews are free.

Set **Maximum cost per run** in the run options to cap your spend; the Actor stops when the limit is reached.

### Use 2GIS Reviews Scraper with AI agents (MCP)

Give Claude, ChatGPT, Cursor or any MCP client this Actor as a tool through the hosted [Apify MCP server](https://mcp.apify.com):

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=technicaldost/2gis-reviews-scraper" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
```

Or in a JSON MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=technicaldost/2gis-reviews-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

The tool is named `technicaldost--2gis-reviews-scraper`. Ask your agent, for example, to *"run 2GIS Reviews Scraper with {"placeUrls": \[{"url": "https://2gis.kz/almaty/firm/70000001117557224"}], "maxReviewsPerPlace": 50}"*.

### Run 2GIS Reviews Scraper via API

```bash
curl -X POST "https://api.apify.com/v2/acts/technicaldost~2gis-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"placeUrls": [{"url": "https://2gis.kz/almaty/firm/70000001117557224"}], "maxReviewsPerPlace": 50}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("technicaldost/2gis-reviews-scraper").call(run_input={"placeUrls": [{"url": "https://2gis.kz/almaty/firm/70000001117557224"}], "maxReviewsPerPlace": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('technicaldost/2gis-reviews-scraper').call({"placeUrls": [{"url": "https://2gis.kz/almaty/firm/70000001117557224"}], "maxReviewsPerPlace": 50});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations

Schedule runs (daily, hourly) in Apify Console and send results to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or your own webhook.

### FAQ

#### How do I find a business URL?

Open the business on 2gis.ru, 2gis.ae or 2gis.kz and copy the address bar; it contains /firm/ and a long number.

#### Are reviewer names included?

Only if you turn on Include reviewer names. By default the Actor saves the review content without personal names.

#### Which cities are supported?

Every 2GIS city. For searches use the city part of 2GIS URLs, such as dubai, moscow or almaty.

#### How many reviews can I get?

Up to 5,000 per place, 50 per request, until all reviews are read or your limit is reached.

#### Is it legal to scrape this data?

The Actor collects publicly available information only and does not log in or bypass access controls. Use the data in line with the website's terms and the laws that apply to you, especially when processing personal data.

# Actor input Schema

## `placeUrls` (type: `array`):

Business pages on 2GIS, e.g. https://2gis.ae/dubai/firm/70000001055853809.

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

Optional: 2GIS city names (dubai, moscow, almaty...). Combined with Search terms to find places.

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

Optional: what to search in each city, e.g. restaurant, dentist.

## `maxPlacesPerSearch` (type: `integer`):

How many top places to take from each city + search term.

## `maxReviewsPerPlace` (type: `integer`):

Maximum reviews to save for each place.

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

Order of reviews.

## `onlyWithText` (type: `boolean`):

Skip ratings without a written review.

## `includeReviewerNames` (type: `boolean`):

Add the reviewer's display name. Off by default; turn on only if you have a lawful reason to process names.

## Actor input object example

```json
{
  "placeUrls": [
    {
      "url": "https://2gis.kz/almaty/firm/70000001117557224"
    }
  ],
  "maxPlacesPerSearch": 5,
  "maxReviewsPerPlace": 50,
  "sortBy": "relevant",
  "onlyWithText": false,
  "includeReviewerNames": false
}
```

# Actor output Schema

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

No description

# 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 = {
    "placeUrls": [
        {
            "url": "https://2gis.kz/almaty/firm/70000001117557224"
        }
    ],
    "maxReviewsPerPlace": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/2gis-reviews-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 = {
    "placeUrls": [{ "url": "https://2gis.kz/almaty/firm/70000001117557224" }],
    "maxReviewsPerPlace": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/2gis-reviews-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 '{
  "placeUrls": [
    {
      "url": "https://2gis.kz/almaty/firm/70000001117557224"
    }
  ],
  "maxReviewsPerPlace": 50
}' |
apify call technicaldost/2gis-reviews-scraper --silent --output-dataset

```

## MCP server setup

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