# 2GIS Reviews Scraper: Ratings, Replies, New-Review Monitoring (`amitaviv/2gis-reviews-scraper`) Actor

Scrape 2GIS reviews by place URL, id or a search in a city: rating, text, date, likes, photo URLs, business reply, source, place rating and review count. Newest first, only-new mode for scheduled monitoring, star and date filters, free per-place summary. No proxy setup needed. Pay per review.

- **URL**: https://apify.com/amitaviv/2gis-reviews-scraper.md
- **Developed by:** [Amit Aviv](https://apify.com/amitaviv) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.64 / 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

## 2GIS Reviews Scraper: Ratings, Replies, New-Review Monitoring

Reviews of 2GIS places, newest first: star rating, text, date, likes, photos, the business's reply and the place's overall rating, for places you give as 2GIS links or ids, or that a 2GIS search finds in a city. It reads the same public reviews feed the 2GIS website uses, over plain HTTP (no browser): a 20-review run takes about 5 seconds, you pay only for reviews delivered, and a run that delivers nothing because of an error or a block ends as Failed, never as a green empty run.

### What you get

- Per review: star rating (1-5), text, date written, date edited, likes, number of comments, number and URLs of photos attached, number of videos, and whether 2GIS marks the review as confirmed (and why, e.g. "3 посещения")
- The business's reply: whether there is one, its text and its date
- Where the review came from (`source`: 2GIS itself, or a partner such as Т-Банк or Flamp that 2GIS shows), and 2GIS's own verified flag
- The place: 2GIS id, name, address, city, main category, 2GIS URL, overall rating and review count, on every record
- **Only new reviews** for scheduled monitoring: each run delivers and charges only reviews it has not delivered before
- Filters that save money: **star range** (e.g. only 1-2 star reviews) and **only reviews newer than** a date (reading stops at the first older review)
- **Free summary record per place** (optional): rating, review count, count of each star rating, average, share of reviews the business answered, newest review date
- One record per review, as JSON, CSV or Excel, or through the API. A review is delivered and charged once per run.
- A run summary (`OUTPUT_SUMMARY` in the run's key-value store): what was requested, delivered and charged, which inputs failed or were ignored, and why the run stopped.

What it does not return by default: reviewer names, avatars and profile data (personal data; see "Personal data"). Never: the comments under a review (only their number), the photos themselves (only their URLs), anything behind a login.

### How to use

1. Open a place on [2gis.ru](https://2gis.ru) (or 2gis.kz, 2gis.ae, …) and copy its address from the browser, e.g. `https://2gis.ru/moscow/firm/70000001032069222`. Any tab works, and so does the bare id.
2. Paste it into **2GIS place URLs or ids**. Several places are fine. Or type a search such as `стоматология` into **Search queries** and set **City**.
3. Set **Max reviews per place** and press Start.
4. Download the results from the Output tab, or read them from the API.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `startUrls` | list of text | none | 2GIS place addresses (`…/firm/<id>`, any tab, any 2GIS country site) or bare place ids (give ids as text: a JSON number of 17 digits is rounded and the actor ignores it with a message). A 2GIS search address (`https://2gis.ru/moscow/search/кофейня`) works too. Short `go.2gis.com` links are not resolved: open them and copy the full address. |
| `searchQueries` | list of text | none | What you would type into 2GIS. Each search takes the first `maxPlaces` places 2GIS lists in `city`. |
| `city` | text | `moscow` | City for the searches: its Russian name (Москва, Санкт-Петербург, Нижний Новгород, Алматы, …), a common English spelling (Moscow, Saint Petersburg, Yekaterinburg) or its slug from a 2GIS address (`novosibirsk`, `ufa`, …). A city 2GIS does not know fails the search with a message instead of returning nothing. Not used for place URLs. |
| `maxPlaces` | number | 10 | Places per search, in 2GIS's order (12 per 2GIS page, advertisers included). |
| `maxReviewsPerPlace` | number | 100 | Stop after this many reviews of each place, newest first. |
| `reviewsNewerThan` | text | empty | Only reviews written after this date: `2026-09-01`, `01.09.2026` (day first), or `30 days`, `2 weeks`, `3 months`. |
| `minRating`, `maxRating` | number | 1, 5 | Deliver only reviews in this star range. |
| `onlyNew` | yes/no | no | Monitoring: deliver and charge only reviews earlier runs have not delivered. See "Monitoring". |
| `monitorKey` | text | empty | Name of the monitor memory, to keep two schedules apart. |
| `includePlaceSummary` | yes/no | no | Add one free summary record per place. |
| `includeReviewerNames` | yes/no | no | Fill reviewer name, avatar and review count. Only with a lawful basis: see "Personal data". |
| `proxyConfiguration` | proxy | off | Leave off. The actor goes direct and switches to Apify Proxy by itself when 2GIS drops its requests. |

Input of run `zg7mpq6brz9VfaBei` (negative reviews of dental clinics in Saint Petersburg over the last 180 days):

```json
{
  "searchQueries": ["стоматология"],
  "city": "Санкт-Петербург",
  "maxPlaces": 8,
  "maxRating": 2,
  "reviewsNewerThan": "180 days",
  "maxReviewsPerPlace": 200,
  "includePlaceSummary": true
}
```

It delivered 16 reviews of 1 or 2 stars from 8 clinics, and 8 free summary records, in 29 seconds.

### Example result

A review, from run `LqXNyaG7DzgbQee1C` (build 0.1.12) on 2026-10-24, unedited (`[name]` is where the reply named the reviewer: see "Personal data"):

```json
{
  "recordType": "review",
  "reviewId": "272657662",
  "placeId": "70000001113359188",
  "placeName": "Здрасте, кофейня",
  "placeAddress": "Крымская набережная, 10 ст2",
  "placeCity": "Москва",
  "placeCategory": "Кофейни",
  "placeUrl": "https://2gis.ru/moscow/firm/70000001113359188",
  "placeRating": 4.8,
  "placeReviewCount": 107,
  "rating": 5,
  "text": "Отличная кухня, милый интерьер, официанты вежливые, исполнение быстрое!",
  "dateCreated": "2026-08-26T19:07:55.456573+07:00",
  "dateEdited": null,
  "likesCount": 0,
  "commentsCount": 1,
  "photosCount": 1,
  "photoUrls": [
    "https://cachizer3.2gis.com/reviews-photos/f93e32a6-74cd-411d-acf5-fd7edb8e1d2f.jpg"
  ],
  "videosCount": 0,
  "hasBusinessReply": true,
  "businessReplyText": "Добрый день, [name]!\nСпасибо вам за такие тёплые слова! Нам невероятно приятно читать ваши отзывы. Вся команда ежедневно старается для того, чтобы радовать вас.\nБудем счастливы видеть вас снова — за кофе, десертами и хорошим настроением.\nС любовью, команда Здрасте ☕🤍\nВажнее кофе только люди!",
  "businessReplyDate": "2026-08-27T13:32:01.423441+07:00",
  "source": "2gis",
  "sourceName": "2GIS",
  "submittedVia": null,
  "isVerified": false,
  "verifiedReason": null,
  "isHidden": false,
  "reviewerName": null,
  "reviewerAvatarUrl": null,
  "reviewerReviewsCount": null,
  "scrapedAt": "2026-10-24T11:26:31.357Z",
  "searchQuery": null
}
```

A place summary, from monitoring run `PJxgJMVq36Oc7Vd5i` on 2026-10-24 (it read one page of 50 reviews to find the 21 written since the previous run, so `coversAllReviews` is false):

```json
{
  "recordType": "placeSummary",
  "reviewId": "summary-70000001088189910",
  "placeId": "70000001088189910",
  "placeName": "BAL, кофейня",
  "placeAddress": "микрорайон Коктем-1, 16",
  "placeCity": "Алматы",
  "placeCategory": "Кофейни",
  "placeUrl": "https://2gis.kz/almaty/firm/70000001088189910",
  "placeRating": 4.8,
  "placeReviewCount": 2449,
  "listedReviewCount": 2292,
  "reviewsRead": 50,
  "coversAllReviews": false,
  "reviewsDelivered": 21,
  "ratingDistribution": { "1": 2, "2": 0, "3": 1, "4": 6, "5": 41 },
  "unratedCount": 0,
  "averageRatingOfReviewsRead": 4.68,
  "replyRate": 0,
  "newestReviewDate": "2026-10-24T15:39:46.58936+07:00",
  "oldestReviewReadDate": "2026-10-14T01:56:34.020962+07:00",
  "scrapedAt": "2026-10-24T10:29:25.026Z",
  "searchQuery": null
}
```

| Field | Meaning |
|---|---|
| `recordType` | `review`, or `placeSummary` for the free summary records. Filter on it if you turn summaries on. |
| `reviewId` | 2GIS's own review id; stable between runs. |
| `placeId` | 2GIS's place (branch) id, the number in `…/firm/<id>`. |
| `placeRating`, `placeReviewCount` | The place's rating and review count as 2GIS states them, at the time of the run. |
| `rating` | Stars, 1 to 5; `null` for a review without stars (2GIS shows Foursquare reviews on some places, e.g. in Dubai: `source` `4sq`). |
| `dateCreated`, `dateEdited` | When the review was written and last edited (ISO 8601 with the city's UTC offset). |
| `source`, `sourceName` | Where the review was written: `2gis`, or a partner whose reviews 2GIS shows (`tbank` = Т-Банк, `flamp`, `booking`, …). |
| `submittedVia` | The channel 2GIS records for a 2GIS review, e.g. `sbol` (the Sber Online app), else `null`. |
| `likesCount` | How many people liked the review (only the count, never who). |
| `photosCount`, `photoUrls`, `videosCount` | Photos attached to the review and their full-size URLs on 2GIS's image server; videos are counted, not linked. |
| `isVerified`, `verifiedReason` | 2GIS's "review confirmed" mark, and its reason as 2GIS words it (e.g. `Сбер`, `3 посещения`). |
| `isHidden` | 2GIS marks the review as hidden. |
| `searchQuery` | The search that found the place, or `null` for a place given by URL or id. |
| `listedReviewCount` (summary) | How many reviews 2GIS's feed lists for the place. It can be a little below `placeReviewCount` (e.g. 138 of 142), which also counts reviews the feed does not list. |
| `reviewsRead`, `coversAllReviews` (summary) | How many reviews of the place the run read (inside the date window, before the star filter), and whether that was all of them. Distribution, average and reply rate are over those reviews; `unratedCount` counts the ones without stars (in the reply rate, not in the distribution). |

Fields 2GIS does not provide for a given review are `null` (or 0 / empty list for counts and photos), never missing.

### Pricing

Pay per event. You pay for what is delivered, not for time or memory.

| Event | Free plan | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Actor start (once per run at the default 256 MB memory) | $0.003 | $0.003 | $0.003 | $0.003 |
| Review delivered | $0.00096 | $0.0008 | $0.00072 | $0.00064 |
| Place summary record | free | free | free | free |

Worked examples (Bronze): 1,000 reviews in one run = 1,000 × $0.0008 + $0.003 = $0.803. A daily monitoring run over 10 places that finds 3 new reviews = 3 × $0.0008 + $0.003 = $0.0054; a run that finds nothing new costs $0.003.

- Reviews that could not be delivered are not charged, and a review is charged once per run.
- The start event is charged by Apify on every run, also one that fails or delivers nothing.
- The maximum total charge you set for a run is respected: the actor stops before it would go over, keeps what was delivered, and says so (run `Wbd3BcgJtmFnTTVoZ`: limit $0.01 = start + 8.75 reviews, delivered exactly 8, Succeeded).

### Reliability and failure behaviour

| What happened | Run status | Status message |
|---|---|---|
| Reviews delivered | Succeeded | `Scraped 600 reviews from 15 places` |
| A search found no places / a place has no reviews | Succeeded | `0 results: 2GIS has no reviews for this input — search "qwzxqwzxqwzx" in moscow found no places` |
| A city 2GIS does not know (e.g. `moskow`) | **Failed** | `No reviews delivered: "moskow" is not a 2GIS city: use the city's name in Russian (e.g. Москва) or its slug from a 2GIS address …` (run `hA0P7Dvg1nRxnQFq5`) |
| A place id that does not exist (typo) | **Failed** | `No reviews delivered: place 70000001032069224 does not exist on 2GIS (its page answers HTTP 410): check the id. …` |
| Some places worked, some failed | Succeeded | `Scraped … reviews from … places — 1 of 8 places failed ("…": …)` |
| Some input entries unusable | Succeeded | `Scraped 5 reviews from 1 place — 1 input entry ignored (see OUTPUT_SUMMARY)` |
| Nothing delivered because of errors or blocking | **Failed** | `No reviews delivered: 2GIS blocked every attempt; try again later. No reviews were charged (the start fee applies).` (offline simulation; not met live) |
| Input the actor cannot use | **Failed**, in about 2 s | `Nothing to do: none of the 1 entries is usable (…: not a 2GIS URL or firm id). Add a 2GIS place URL to "startUrls" …` |
| Maximum charge reached | Succeeded | `Scraped 8 reviews from 1 place — stopped at the maximum charge set for this run` |
| Run timeout close | Succeeded | `Scraped 100 reviews from 1 place — stopped just before the run timeout; raise the timeout to get the rest` (run `KuEmcCpHvJeE6NDqH`, 25-second timeout) |
| Maximum charge below the price of one review | **Failed** | `The maximum charge set for this run ($0.0035) is below the price of one review, so nothing can be delivered: …` |

- 2GIS's reviews feed sometimes stops answering in the middle of a request. The actor gives each request 10 seconds, retries up to 5 times with increasing pauses, and after the first such failure continues through Apify Proxy (datacenter, then residential if requests keep failing). No proxy setting is needed.
- Results are saved page by page (50 reviews). A run that is aborted, times out or is resurrected keeps what was delivered and never delivers or charges the same review twice (run `C9Zqm1uxBq02ksUIK`, resurrected mid-run: 600 reviews, 600 unique, 600 charged; Apify charges the start event again on a resurrect).
- Measured over all 69 test runs (2026-10-20 to 2026-10-24): in every run the reviews charged equalled the reviews delivered. The 11 runs on the current code (builds 0.1.12 and 0.1.13) all ended with the expected status. Stalled requests are common (about half of the runs on builds 0.1.8 to 0.1.12 met at least one) and runs finish anyway: some retry direct, others switch to the proxy (e.g. `56DyJ6K3NZn8qcHpN`, 232 reviews over 5 pages, 3 stalls, Succeeded).

### Limits

- Speed: 1,500 reviews of one place in 61 seconds direct (`K3BEJjT95BEvaTO0D`), 170 seconds in a run that had switched to the proxy (`Kk2EjT2Lj5ZOHxfr7`); 600 reviews of 15 places found by a search in 69 seconds (`lAl52RayDVvI49zkB`).
- Search takes the places 2GIS lists, in its order, advertisers included; it reads 12 places per 2GIS page. For a complete list of businesses use a places scraper (see "Related actors") and give their ids here.
- 2GIS's own review count can be higher than what its feed lists (see `listedReviewCount`).
- Review and reply texts are in the language they were written in (mostly Russian).
- Place name, address and category come from the place's 2GIS page; if that page cannot be read, the reviews are still delivered with those fields empty (`placeDetailsFound: false` in the run summary).
- Tested on 2gis.ru (Moscow, Saint Petersburg), 2gis.kz (Almaty) and 2gis.ae (Dubai). Other 2GIS country sites use the same addresses and the same feed but were not tested. The request locale is Russian; texts are not translated.

### Monitoring: only new reviews

1. Turn on **Only new reviews** and save the input as a task.
2. Schedule the task (daily or hourly).
3. The first run delivers the newest reviews of each place, up to **Max reviews per place**. Every later run reads each place from the newest review down to the first one it already delivered, and delivers and charges only what is new; a run with nothing new ends as Succeeded with `0 new reviews in 2 monitored places (no reviews charged; the start fee applies)`.

Tested: run `VkeVrcK7jA6F2KOpl` (2026-10-20) delivered 60 reviews of two places (Moscow and Almaty), and run `btS7IHThMhnmR3kbi` with the same input right after delivered 0 and charged only the start event. Four days later run `PJxgJMVq36Oc7Vd5i` delivered 23 new reviews (21 and 2). A normal run of the same places right after it (`J1dxSUNzEtSbxGgiH`) confirmed that these were exactly the reviews written since the first run, none missed or repeated.

The memory is a key-value store named `2gis-reviews-scraper-monitor` in your own account (one record per place and monitor name, at most 10,000 review ids each, oldest forgotten first). Delete the store or change **Monitor name** to start over. A place is remembered by its id, so it is the same monitor whether it came from a URL or from a search. Combine with **Maximum star rating** 2 to be told only about new negative reviews. To be notified, add an integration to the task (email, Slack, webhook) on "run succeeded".

### Personal data

Reviews are written by private individuals. By default the actor leaves out who wrote them: `reviewerName`, `reviewerAvatarUrl` and `reviewerReviewsCount` are `null`. Business replies are kept, but where a reply names the reviewer or an employee, the actor replaces the name with `[name]` ("лечение у \[name] прошло успешно", "передадим \[name] Ваши слова", "отзыв о \[name]"). It looks for the name 2GIS shows for the reviewer (in Cyrillic or Latin spelling, with Russian case endings), the words after a greeting, a name with a patronymic, a name after a job title (also the Kazakh дәрігер), common Russian and Kazakh first names in any case form, and colleagues listed next to a name already taken out. This is pattern-based and tuned on Russian-language replies: a reply in another language, an unusual first name or a nickname (Джейден, Саша for Александр) that is not next to a title or a greeting, or a surname standing alone can keep a staff name. On 1,024 real replies (Moscow, Saint Petersburg and Almaty: clinics, cafés, bakeries) the one staff name we still found was an unusual first name ("о Джейдене"); that check read the capitalised words inside sentences, so a name opening a sentence was not counted. A business named after a person (кафе Анна without quotes) can lose its name in a reply, and ordinary words are sometimes replaced. Review texts are delivered as written and often name staff.

Turn on **Include reviewer names and avatars** (which also returns the replies exactly as written) only if you have a lawful basis to process that data (for example under the GDPR or Russian Federal Law 152-FZ) and a purpose that needs it. By turning it on you confirm that you do.

### FAQ

**Do I need a proxy?** No. Runs go direct and switch to Apify Proxy by themselves when 2GIS drops requests.

**Why fewer reviews than 2GIS shows?** `maxReviewsPerPlace`, the date window and the star filter all cut; and the feed lists only reviews with a star rating (`listedReviewCount` in the summary).

**Can I run it from code?** Yes: the API, the Apify clients for JavaScript and Python, Make, Zapier, n8n. The Output tab shows the URLs.

**What happens when 2GIS changes?** Runs fail loudly instead of returning empty data; report the run id under Issues.

### Legal and responsible use

This actor reads reviews that 2GIS shows publicly, without a login, to any visitor of its website, through the same public feed and the same public access key the 2GIS website itself uses for every anonymous visitor. Reviewer identities are left out by default (see "Personal data"). We have not assessed 2GIS's terms of use for your use case: read them before you build on this data.

You are responsible for how you use the data: respect 2GIS's terms, copyright and database rights, and data-protection law (GDPR, Russian Federal Law 152-FZ and others) in your country and the country of the data. Do not use the output to contact or profile reviewers. If you are unsure, ask a lawyer before you build on it.

### Related actors

Other actors by the same developer:

- [2GIS Places Scraper](https://apify.com/amitaviv/2gis-places-scraper): the businesses themselves for a search in a city, with their contact details; feed its place ids into this actor for their reviews.
- [Yandex Maps Scraper](https://apify.com/amitaviv/yandex-maps-scraper): business listings from Yandex Maps for a search and an area, with phones, websites, hours, rating and review counts, for the other big map of Russia, the CIS and Türkiye.
- [Yandex Maps Reviews Scraper](https://apify.com/amitaviv/yandex-maps-reviews-scraper): reviews of Yandex Maps places (rating, text, date, likes, photos, the business's reply), by place URL or a search in a city; use both to follow a business on both maps.

### Changelog

- 2026-10-24 0.1.15: stronger staff-name redaction in replies: common first names in any case form (о Карине), Kazakh-language replies (Карина дәрігер), colleagues listed together, a name after "в адрес".
- 2026-10-24 0.1.12: photo URLs filled again (lost with the newer feed in 0.1.8), videos counted apart (`videosCount`), most employees' names taken out of replies by default (pattern-based), a misspelt city fails with a message, English city spellings, stricter date check.
- 2026-10-20 0.1.10: likes and "review confirmed" marks (2GIS's newer feed), reviews without stars (Foursquare, Dubai), clear failure for a place id that does not exist, day-first dates (01.09.2026), stronger reply-name redaction.
- 2026-10-20 0.1: first version.

### Support

Open an issue on the actor's **Issues** tab with the run id.

# Actor input Schema

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

Addresses of 2GIS places (any tab, e.g. https://2gis.ru/moscow/firm/70000001032069222 or …/firm/70000001032069222/tab/reviews), or bare place ids (70000001032069222). Works for 2gis.ru, 2gis.kz, 2gis.ae and the other 2GIS sites. Short go.2gis.com links are not resolved: open them and copy the full address.

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

What you would type into 2GIS, e.g. кофейня or стоматология. Each search takes the first "maxPlaces" places 2GIS lists in "city" and reads their reviews. A 2GIS search URL (https://2gis.ru/moscow/search/кофейня) also works here or in the field above.

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

The city the searches run in: its name in Russian (Москва, Санкт-Петербург, Новосибирск, Екатеринбург, Казань, Нижний Новгород, Алматы, …), a common English spelling (Moscow, Saint Petersburg, Yekaterinburg), or its slug from a 2GIS address (the word after 2gis.ru/, e.g. novosibirsk, ufa). A city 2GIS does not know fails the search with a message. Not used for place URLs.

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

How many places each search query takes, in the order 2GIS lists them (2GIS shows 12 per page, advertisers included).

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

Stop after this many reviews of each place, newest first. You are charged only for delivered reviews.

## `reviewsNewerThan` (type: `string`):

Skip reviews written before this date: 2026-09-01 or 01.09.2026 (day first), or a period such as "30 days", "2 weeks", "3 months". Reading stops at the first older review, so older reviews cost nothing.

## `minRating` (type: `integer`):

Deliver only reviews with at least this many stars (1 to 5). Example: 1 with "Maximum star rating" 3 for negative reviews only.

## `maxRating` (type: `integer`):

Deliver only reviews with at most this many stars (1 to 5).

## `onlyNew` (type: `boolean`):

Deliver and charge only reviews that earlier runs of this actor in your account have not delivered for the same place. The first run delivers the newest reviews up to "Max reviews per place"; later runs read each place only down to the first review they already know, so a scheduled run with nothing new costs only the start fee. The memory is a key-value store named 2gis-reviews-scraper-monitor in your account; delete it to start over.

## `monitorKey` (type: `string`):

Only with "Only new reviews". Runs with the same place and the same monitor name share one memory. Give two schedules different names to keep their memories apart.

## `includePlaceSummary` (type: `boolean`):

Adds one record per place (recordType "placeSummary", not charged): the place's 2GIS rating and review count, and, over the reviews this run read, the count of each star rating, the average, the share answered by the business, and the newest review date. "coversAllReviews" says whether every review of the place was read.

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

Off by default: reviewer name, avatar URL and review count are left empty, and in business replies the reviewer's name and the names of employees are replaced by \[name] (pattern-based, best effort), because they are personal data of private individuals. Turn on to get them, and the replies exactly as written, only if you have a lawful basis to process them (for example under the GDPR or Russian Federal Law 152-FZ) and a purpose that needs them; by turning it on you confirm that you do.

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

Leave off: the actor goes direct and switches to Apify Proxy (datacenter, then residential) by itself if 2GIS refuses or drops its requests. Turn a proxy on only to force one for every request.

## Actor input object example

```json
{
  "startUrls": [
    "https://2gis.ru/moscow/firm/70000001032069222"
  ],
  "city": "moscow",
  "maxPlaces": 10,
  "maxReviewsPerPlace": 20,
  "minRating": 1,
  "maxRating": 5,
  "onlyNew": false,
  "includePlaceSummary": false,
  "includeReviewerNames": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All delivered records as JSON, one object per review.

## `resultsCsv` (type: `string`):

All delivered records as a CSV file.

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

What was requested, delivered and charged, which inputs failed or were ignored, and why the run stopped.

# 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 = {
    "startUrls": [
        "https://2gis.ru/moscow/firm/70000001032069222"
    ],
    "maxReviewsPerPlace": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("amitaviv/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 = {
    "startUrls": ["https://2gis.ru/moscow/firm/70000001032069222"],
    "maxReviewsPerPlace": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("amitaviv/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 '{
  "startUrls": [
    "https://2gis.ru/moscow/firm/70000001032069222"
  ],
  "maxReviewsPerPlace": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call amitaviv/2gis-reviews-scraper --silent --output-dataset

```

## MCP server setup

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