# 2GIS Reviews Scraper (`maximedupre/2gis-reviews-scraper`) Actor

Collect public 2GIS reviews from place links, branch IDs, or a 2GIS search link. Get structured rows with review text, star ratings, authors, dates, photo links, business replies, and place details.

- **URL**: https://apify.com/maximedupre/2gis-reviews-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 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.
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

### 🗺️ Make 2GIS Reviews Ready for Research

Business owners, researchers, agencies, and developers can collect public 2GIS reviews for selected places. Each saved row combines review text and star rating with available source links, author, date, photo links, business reply, provider, and place details, so customer feedback is ready to filter, compare, and export.

**Use cases**

- Collect source-linked review rows with **[2GIS Reviews Data](https://apify.com/maximedupre/2gis-reviews-scraper/examples/2gis-reviews-data)** for a public place.
- Get review text and ratings with **[2GIS Place Reviews](https://apify.com/maximedupre/2gis-reviews-scraper/examples/2gis-place-reviews)** for a selected place.
- Review business feedback with **[2GIS Business Reviews](https://apify.com/maximedupre/2gis-reviews-scraper/examples/2gis-business-reviews)** for a public 2GIS business.
- Scrape a public review page with **[Scrape 2GIS Reviews](https://apify.com/maximedupre/2gis-reviews-scraper/examples/scrape-2gis-reviews)** for a customer feedback check.
- Build a review dataset with **[2GIS Review Scraper](https://apify.com/maximedupre/2gis-reviews-scraper/examples/2gis-review-scraper)** for a place or branch ID.

#### 📊 Review Rows with Place Context

**What you get**

Each dataset row is one structured review record. It includes a review ID, provider, review text, star rating, and place details, plus a source link, dates, author, likes, comments, photo links, business reply, visibility, and trust signals when available. Attached photos are represented by source links, not downloaded files.

**Useful for**

Use the rows to study customer feedback, compare places, check public replies, and export source-linked review data for your own workflow.

#### ▶️ Run a 2GIS Review Collection

**Run steps**

1. Choose how to find reviews: place links or branch IDs, a 2GIS search link, or a search term and city.
2. Add values only to the fields for the selected discovery method.
3. Set review filters and limits when needed. Leave a limit empty when you want the available source data instead.
4. Start the run and open the default dataset to inspect or export the saved rows.

**Limits**

Leave `maxPlaces` empty to return all available places until the source is exhausted when using search discovery. This field is ignored for place links or branch IDs. Leave `maxReviewsPerPlace` empty to return all available reviews until the source is exhausted for each place. Leave `maxReviews` empty to return all available reviews until the source is exhausted for the run.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `discoveryMethod` | string | Choose `placeTargets`, `searchLink`, or `searchTerm` to select how places are found. |
| `placeTargets` | array of strings | Add public 2GIS place links or branch IDs when using `placeTargets`. |
| `searchLink` | string | Add one public 2GIS search link when using `searchLink`. |
| `searchTerm` | string | Add the place name or type to find when using `searchTerm`. Use it with `city`. |
| `city` | string | Add the city where the search should run when using `searchTerm`. |
| `maxPlaces` | integer | Optional cap for places found by a 2GIS search link or search term and city. Leave it empty to return all available places until the source is exhausted. It is ignored for place links or branch IDs. |
| `maxReviewsPerPlace` | integer | Optional cap for each selected or discovered place. Leave it empty to return all available reviews until the source is exhausted for each place. |
| `maxReviews` | integer | Optional cap across the run. Leave it empty to return all available reviews until the source is exhausted. |
| `starRatings` | array of strings | Keep only the selected ratings from `1` to `5`. Leave it blank to include all ratings. |
| `reviewDateFrom` | string | Include reviews created on or after this UTC date in `YYYY-MM-DD` format. |
| `reviewKeyword` | string | Keep reviews whose text contains this keyword. Leave it blank to include all review text. |
| `reviewTopics` | array of strings | Add source topic names to keep reviews with those topics. Leave it blank to include reviews with any topic. |
| `reviewProviders` | array of strings | Add supported provider names to keep reviews from those providers. Leave it blank to include all providers surfaced by 2GIS. |
| `onlyReviewsWithReplies` | boolean | Set `true` to keep only reviews with a public business reply. |
| `onlyReviewsWithText` | boolean | Set `true` to keep only reviews that contain written text. |
| `reviewOrder` | string | Choose `newest` or `oldest`. Leave it blank to use the source default. |
| `sourceLocale` | string | Add a supported locale code such as `en` or `ru`. Leave it blank to use the source default. |

**Successful input example**

This example is copied from a successful current-beta default-input run.

```json
{
  "discoveryMethod": "placeTargets",
  "placeTargets": [
    "https://2gis.ru/moscow/firm/4504127908364700/tab/reviews"
  ],
  "maxReviews": 3
}
```

#### 🧾 Output

**Output shape**

All saved records use the same review object shape. Optional fields can be absent when the source does not provide them or the requested details are not available.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `reviews` | string (URL) | Opens the collected review rows. |

**Review record fields**

| Field | Type | What it does |
| --- | --- | --- |
| `reviewId` | string | Stable source identifier for the review. |
| `provider` | string | Source provider associated with the review. |
| `sourceUrl` | string (URL) | Source page where the review can be checked when a link is available. |
| `reviewText` | string | Text published in the review. |
| `starRating` | number | Star rating given in the review. |
| `createdAt` | string (date-time) | Date and time when the review was created, when provided. |
| `editedAt` | string (date-time) | Date and time when the review was last edited, when provided. |
| `author` | object | Reviewer identity and profile details when provided. |
| `author.authorId` | string | Stable source identifier for the reviewer. |
| `author.name` | string | Reviewer name shown by the source. |
| `author.profileUrl` | string (URL) | Source profile page for the reviewer when available. |
| `likeCount` | integer | Number of likes shown for the review when provided. |
| `commentCount` | integer | Number of comments shown for the review when provided. |
| `photoUrls` | array of strings | Links to photos attached to the review when available. |
| `businessReply` | object | Public reply from the business when one is available. |
| `businessReply.text` | string | Text published in the business reply. |
| `businessReply.responder` | string | Name or label of the business responder when provided. |
| `businessReply.repliedAt` | string (date-time) | Date and time when the business reply was published, when provided. |
| `visibility` | string | Source-provided visibility state for the review. |
| `trustSignals` | array of strings | Source-provided trust labels or signals when available. |
| `place` | object | Details for the business or location reviewed. |
| `place.placeId` | string | Stable source identifier for the place. |
| `place.name` | string | Place name shown by the source. |
| `place.address` | string | Formatted place address when provided. |
| `place.locality` | string | City, town, or other locality when provided. |
| `place.region` | string | State, province, or other region when provided. |
| `place.country` | string | Country for the place when provided. |
| `place.coordinates` | object | Geographic coordinates when provided. |
| `place.coordinates.latitude` | number | Latitude in decimal degrees. |
| `place.coordinates.longitude` | number | Longitude in decimal degrees. |
| `place.categories` | array of strings | Place categories shown by the source when available. |
| `place.aggregateRating` | number | Overall place rating shown by the source when available. |
| `place.reviewCount` | integer | Number of reviews shown for the place when provided. |

**Genuine row**

This unshortened row is copied from a successful current-beta run. It includes public source IDs, URLs, photo links, and reply text as returned.

```json
{
  "reviewId": "270520980",
  "provider": "2gis",
  "reviewText": "Отличное место! Все вкусно и порции большие ))) окунь ммммм. Спасибо !",
  "starRating": 5,
  "place": {
    "placeId": "70000001090426385",
    "name": "Мясо&Рыба, ресторан",
    "address": "проспект Мира, 211",
    "locality": "Москва",
    "region": "Москва",
    "country": "Россия",
    "coordinates": {
      "latitude": 55.844889,
      "longitude": 37.666795
    },
    "categories": [
      "Рестораны",
      "Доставка еды"
    ],
    "aggregateRating": 4.9,
    "reviewCount": 575
  },
  "sourceUrl": "https://2gis.ru/moscow/firm/70000001090426385/tab/reviews",
  "createdAt": "2026-08-20T16:21:26.556251+07:00",
  "author": {
    "authorId": "74655446",
    "name": "Валентина П",
    "profileUrl": "https://2gis.ru/user/ba768638fd4548f1baf8c3769b2685bd"
  },
  "likeCount": 0,
  "commentCount": 1,
  "photoUrls": [
    "https://cachizer2.2gis.com/reviews-photos/84b6bdd0-ccdc-4b06-bdf6-70b5bc819e52.jpg",
    "https://cachizer1.2gis.com/reviews-photos/0b4aeda0-4997-4fee-87c8-6a96bbb4d850.jpg",
    "https://cachizer1.2gis.com/reviews-photos/408b182d-9b59-43db-9496-858a5c840cf6.jpg"
  ],
  "businessReply": {
    "text": "Валентина , читаем такие отзывы - и настроение сразу поднимается на весь день. Правда, очень приятно знать, что впечатления оправдали ожидания. Именно ради этого мы и работаем. Будем ждать вас снова — надеемся, что ещё не раз порадуем! 🙂",
    "responder": "Мясо&Рыба, ресторан",
    "repliedAt": "2026-08-22T00:00:42.489342+07:00"
  },
  "visibility": "visible",
  "trustSignals": [
    "1 посещение"
  ]
}
```

#### 💳 Pricing

**Charged event**

Apify charges one event for each structured review returned. The event title is `Review`; the current price is shown in the Actor pricing panel and can vary by plan. This section covers review events only.

#### 🔌 Integrations

**Dataset access**

Open the default dataset after a run to inspect the rows. You can export the data as JSON or CSV, or read it through the Apify API.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What if no review matches my filters?

The dataset can be empty when a place has no public review that matches the selected filters. Try a broader filter or another public place.

##### Can I use a branch ID instead of a place link?

Yes. Add a public 2GIS place link or a branch ID under `placeTargets`.

##### Can I use a 2GIS search link?

Yes. Choose `searchLink` and paste one public 2GIS search link. Set `maxPlaces` when you want to stop after a chosen number of places.

##### What does leaving a limit empty do?

Leave `maxPlaces` empty to return all available places until the source is exhausted for search discovery. Leave `maxReviewsPerPlace` empty to return all available reviews until the source is exhausted for each place. Leave `maxReviews` empty to return all available reviews until the source is exhausted for the run.

##### Can I filter by rating, date, or review text?

Yes. Use `starRatings`, `reviewDateFrom`, and `reviewKeyword`. You can also filter by source topics, providers, replies, or written text.

##### Can a row include a review from a provider other than 2GIS?

Yes, when 2GIS surfaces it. The `provider` field identifies the source associated with the review, and `reviewProviders` can limit the providers used.

##### Are review photos downloaded?

No. The Actor returns source photo links when they are available. It does not promise downloaded photo files.

##### Do I need a 2GIS login or API key?

No buyer-supplied source credentials are needed for public 2GIS review data.

##### Does the Actor create sentiment labels or summaries?

No. It returns source review fields and does not promise generated sentiment, summaries, or other model-derived analysis.

##### How do I export the rows?

Open the default dataset after the run and choose an Apify export format, or read the dataset through the Apify API.

### 📝 Changelog

**v0.0** (25-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~2gis-reviews-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Yelp Business Review Scraper](https://apify.com/maximedupre/yelp-business-reviews)**: Compare public Yelp reviews with 2GIS feedback.
- **[Facebook Reviews Scraper](https://apify.com/maximedupre/facebook-reviews-scraper)**: Add public Facebook Page recommendations to a cross-source review study.
- **[Yelp Scraper: Review Reputation Monitor](https://apify.com/maximedupre/yelp-reputation-monitor)**: Review public Yelp reputation signals for the same business.
- **[2GIS Reviews Scraper: Отзывы 2ГИС](https://apify.com/getascraper/2gis-reviews-scraper)**: Compare another 2GIS review collection option for the same place.
- **[2GIS Reviews Scraper API](https://apify.com/dami_studio/2gis-reviews-scraper)**: Compare 2GIS review rows with another public Actor.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `discoveryMethod` (type: `string`):

Choose how to find the 2GIS places whose reviews you want.

## `placeTargets` (type: `array`):

Enter one or more public 2GIS place links or branch IDs. Use this when Find reviews from is set to Place links or branch IDs.

## `searchLink` (type: `string`):

Paste one public 2GIS search link. Use this when Find reviews from is set to 2GIS search link.

## `searchTerm` (type: `string`):

Enter the place name or type to find. Use this with City when Find reviews from is set to Search term and city.

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

Enter the city where the search should run. This is used with Search term and city.

## `maxPlaces` (type: `integer`):

Optional stop for 2GIS search link and Search term and city. Leave it empty to return all available places until the source is exhausted. This field is ignored for Place links or branch IDs.

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

Optional review stop for each selected or discovered place. Leave it empty to return all available reviews until the source is exhausted for each place.

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

Optional total review stop for this run. Leave it empty to return all available reviews until the source is exhausted.

## `starRatings` (type: `array`):

Choose one or more ratings from 1 to 5. Leave blank to include all ratings.

## `reviewDateFrom` (type: `string`):

Use a UTC date in YYYY-MM-DD format. Reviews created on or after this date are included.

## `reviewKeyword` (type: `string`):

Only include reviews whose text contains this keyword. Leave blank to include all review text.

## `reviewTopics` (type: `array`):

Enter one or more source topic names. Leave blank to include reviews with any topic.

## `reviewProviders` (type: `array`):

Enter one or more supported provider names. Leave blank to include all providers surfaced by 2GIS.

## `onlyReviewsWithReplies` (type: `boolean`):

Set true to keep only reviews with a public business reply. Leave it false or omit it to include all reviews.

## `onlyReviewsWithText` (type: `boolean`):

Set true to keep only reviews that contain written text. Leave it false or omit it to include all reviews.

## `reviewOrder` (type: `string`):

Choose the order for review collection. Leave blank to use the source default.

## `sourceLocale` (type: `string`):

Enter a supported locale code, such as en or ru. Leave blank to use the source default.

## Actor input object example

```json
{
  "discoveryMethod": "placeTargets",
  "placeTargets": [
    "https://2gis.ru/moscow/firm/4504127908364700/tab/reviews"
  ],
  "maxReviews": 3
}
```

# Actor output Schema

## `reviews` (type: `string`):

Open the collected review rows.

# 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 = {
    "discoveryMethod": "placeTargets",
    "placeTargets": [
        "https://2gis.ru/moscow/firm/4504127908364700/tab/reviews"
    ],
    "maxReviews": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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 = {
    "discoveryMethod": "placeTargets",
    "placeTargets": ["https://2gis.ru/moscow/firm/4504127908364700/tab/reviews"],
    "maxReviews": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/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 '{
  "discoveryMethod": "placeTargets",
  "placeTargets": [
    "https://2gis.ru/moscow/firm/4504127908364700/tab/reviews"
  ],
  "maxReviews": 3
}' |
apify call maximedupre/2gis-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/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/gTUIUPV2bxYj4sYxp/builds/SZ47aSGfL8Jis1EP0/openapi.json
