2GIS Scraper — Businesses and Their Reviews avatar

2GIS Scraper — Businesses and Their Reviews

Pricing

from $0.17 / 1,000 results

Go to Apify Store
2GIS Scraper — Businesses and Their Reviews

2GIS Scraper — Businesses and Their Reviews

Search 2GIS businesses, export their written reviews, or list supported cities with region IDs and locales. Search rows flag partial matches; review rows identify their source.

Pricing

from $0.17 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

2GIS Scraper

The Actor offers business search, written reviews and the supported-city directory. Each run collects the dataset selected by scraperType. Full business contact details remain available in the 2GIS Business Scraper.

Availability checked on 16 September 2026: the coveredCities cloud run failed and the merged Actor remains unverified. The city-directory input below describes the supported mode; it does not establish that the mode is currently returning results.

Accepted input

scraperType chooses the mode and is required.

City directory — coveredCities

This mode lists supported cities, their region IDs, countries and locales. It requires no location input. Set maxItems to 0 for the complete directory.

{ "scraperType": "coveredCities", "maxItems": 0 }

Business search — searchPlaces

queries takes one search term per line, in the city's own language — кафе, pharmacy, kavárna. A term is never split on a comma, because a business name contains one:

Му-Му, кафе
is a single term.

cities takes one 2GIS city slug per line — moscow, spb, dubai, almaty, praha. The slug is the whole key: 2GIS is organised by city rather than by country, and its internal id for one cannot be derived from a name. coveredCities mode lists all 206.

Every term is searched in every city. Three terms across five cities is fifteen searches, and the run log says so before it makes any of them.

startPage is where each search's walk begins. Leave it at 1 to start from the top.

Reviews — placeReviews

placeIds takes one 2GIS branch id per line — exactly the id every search row above publishes, which is how the two modes compose inside one Actor. A 2GIS place link and the decorated id from a raw 2GIS search response both reduce to the same value.

sort chooses the ordering: date_created (newest, the default), date_edited, friends or trust. That is 2GIS's own allowed set — it refuses anything else outright.

Both modes

locale is optional and takes one of the city's own locales (ru_RU, en_AE). Leave it empty for the city's default; a locale a city does not offer is refused rather than falling back.

maxItems defaults to 100 and caps each search, or each business, separately. 0 means no limit.

{
"scraperType": "searchPlaces",
"queries": ["кафе"],
"cities": ["moscow", "spb"],
"maxItems": 100
}
{
"scraperType": "placeReviews",
"placeIds": ["70000001007179642"],
"sort": "date_created",
"maxItems": 200
}

Response fields

The modes produce different rows, and each carries the fields for what it collected. The other mode's columns are null.

Search rows carry the branch id, name, street_address with address_city beside it, latitude and longitude, primary_rubric and the full rubrics list, schedule, rating and review_count with the chain's org_rating beside them, is_advertisement, relevance — and is_partial_match.

That last one is the field to filter on first. A query 2GIS cannot match does not come back empty: it answers with a healthy response and a list of unrelated real businesses in identical row shapes, at a relevance around 1e-09 instead of the 10 to 8,800 a real match scores. Measured over 15 queries in 5 cities the flag separated them perfectly — false on 10 of 10 real queries, true on 5 of 5 nonsense ones.

phones, websites and emails are empty on every search row, and that is a property of the endpoint rather than of the businesses: 2GIS's own search request omits contact fields entirely. 2GIS Business Scraper takes a row's id for those.

Review rows carry review_id, review_rating, review_text, date_created, date_edited, likes_count, comments_count, photo_count, the author's name, public id and own review count, the business's official_answer_text where it has replied, and provider.

provider is the unusual one: 2GIS aggregates its own reviews with Flamp, Booking and others under a single listing, and they are not the same corpus. Every row names its source and providers lists all of them for the branch.

Review rows also carry two counts that disagree on purpose. branch_review_count is what the place card shows and total_reviews is how many written reviews this Actor can return — measured 1,091 against 1,039 on one branch, the difference being star-only ratings.

Fields absent from a record are returned as null rather than omitted, so every row of a given mode has the same shape.

Behaviour on partial results

A search term 2GIS cannot match produces rows, flagged. They are returned rather than hidden — a near miss is occasionally what a caller wants — but never unlabelled, and the run log warns about it.

Search rows repeat a little across pages: 2GIS honours its own page exclusion loosely, and over six five-page walks 0 to 12 rows of 250 repeated an organisation already returned. This Actor drops the repeats before they reach the dataset and says how many it dropped, so a run that fetched five pages can legitimately save fewer than 250 rows.

A search walk goes to the end of the stated total, which is unusual: pages run to exactly ceil(total / 50) and the last one is short. A reviews walk goes to the end too, by offset rather than by cursor, so nothing about it expires and an interrupted run resumes exactly where it stopped.

A city or a business that no longer resolves is skipped with a line in the run log and the rest of the list still runs.

Frequently asked questions

Why is the business-detail export not one of the modes? Because it costs fifty times as much per row. A search request returns fifty organisations and a detail request returns one; a combined Actor here carries one result price for every mode behind it, so folding that in would sell a whole request for a fiftieth of what it costs. It ships as 2GIS Business Scraper instead, priced on its own driver.

Can one run do both modes? No — one run is one mode. Chain two runs: search first, then feed the id column from its dataset into a reviews run.

Why is there no phone number on a search row? Because 2GIS's own search request does not ask for one. The same organisation returns no contact fields from search and four phone numbers, a website and two emails from the detail endpoint. Paging further will never produce one.

My query returned businesses that have nothing to do with it. Check is_partial_match on the rows — true means 2GIS could not match the term and returned unrelated real businesses anyway. The fix is usually the language: search in the city's own.

Where do I get city slugs? From coveredCities mode, which returns all 206 with their region ids, countries and accepted locales in a single request.

Is a 2GIS account or API key required? No. No account, session cookie or key of any kind is supplied to the Actor or needed by it.

2GIS Search Scraper and 2GIS Reviews Scraper are these two modes as separate Actors, if you would rather not pick a mode on every run.

2GIS Business Scraper reads one organisation in full — the phone numbers, websites and email addresses no search row carries.

coveredCities mode is the city vocabulary the search mode needs.