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

Both 2GIS datasets behind one mode picker: search 206 cities for businesses by name or category, or export a business's written reviews. Search rows carry a flag saying whether 2GIS matched your query at all; review rows name which source each review came from.

Pricing

from $0.17 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

2GIS Scraper

Two 2GIS datasets behind one mode picker: business search across the 206 cities 2GIS covers, and written reviews for any business in them. Pick a mode, fill in that mode's section, and the run produces the rows for it.

They are one Actor rather than two because they cost the same thing. Both surfaces return fifty rows per request — the largest page 2GIS allows on either — so one result price is honest for both and neither mode subsidises the other. The business-detail export, which costs a whole request for a single organisation, is deliberately a separate Actor for the same reason inverted: 2GIS Business Scraper.

Accepted input

scraperType chooses the mode and is required.

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. 2GIS Covered Cities 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 two 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 2GIS Covered Cities, 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.

2GIS Covered Cities is the city vocabulary the search mode needs.