2GIS Scraper — Businesses and Their Reviews
Pricing
from $0.17 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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:
Му-Му, кафе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.
Related Actors
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.