2GIS Scraper - Places & Business Data
Pricing
from $0.49 / 1,000 places
2GIS Scraper - Places & Business Data
Scrape 2GIS business listings in Russia, the CIS, the UAE and Cyprus. Each row has the name, category, full address, coordinates, phones, emails, website, social links, rating, review count and opening hours. Filter by rating, Wi-Fi, card or delivery. $0.50 per 1,000 places.
Pricing
from $0.49 / 1,000 places
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
21
Monthly active users
a day ago
Last modified
Categories
Share
Scrape 2GIS business listings with phone, email, website and opening hours: type a search and a city the way you would into 2GIS, and get one row per business with the name, category, full address down to the district, coordinates, phones, emails, website, social links, rating, review count and the week's opening hours. Paste 2GIS search or place URLs instead if you already have them.
2GIS is a regional directory, not a global one. It covers Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, Belarus, Georgia, Armenia, Tajikistan, Cyprus and the UAE. Search anywhere else and there is nothing there to find.
| Input | Search terms plus a city or a point, or 2GIS URLs |
| Output | One row per place: name, chain, categories, full address, coordinates, phones, emails, website, social links, rating, review count, opening hours |
| Ceiling | 5,000 places per run, and around 5,000 per search term |
| Account needed | None, and no API key |
| Price | $0.50 per 1,000 places on the free plan, down to $0.485 on Business. The free plan's $5 a month covers about 10,000 |
🔍 What 2GIS Places Scraper does
Two ways in, and they work together in one run.
Search. A term and a city, like кафе in Moscow, and it pages through the matches until it
reaches your limit or 2GIS stops handing out new places. Give it a latitude, longitude and radius
instead and it searches that circle rather than a whole city.
URLs. Paste a 2GIS search page or a single place page and it reads that.
Filters. Keep only places rated above a floor, or with photos, card payment, Wi-Fi, delivery or takeaway. 2GIS applies them to the search itself, and every row is checked against them again before it is written, so a place that does not match is never charged.
Website links come out clean. 2GIS wraps every outbound link in its own click tracker with tracking
tags attached, and those are unwrapped and stripped before the row is written, so you get
http://cafemumu.ru and not a 300-character redirect.
📋 What data you get from each 2GIS place
| What you get | Field |
|---|---|
| The place and 2GIS's ID and page for it | placeId, name, nameShort, url |
| The chain it belongs to, and its size | brandName, chainBranchCount |
| Categories | categoryPrimary, categories |
| The address, down to the district | address, addressFull, addressComment, postcode, country, region, city, cityAlias, district |
| Map position | latitude, longitude |
| Phones, emails and websites | phone, phones, email, emails, website, websites |
| Social links | socialProfiles |
| Rating and review count | rating, reviewCount |
| Opening hours | openingHours, openingHoursText |
| The search that found it | searchQuery, position, scrapedAt |
▶️ How to scrape 2GIS places
- Open 2GIS Places Scraper and click Try for free.
- Put your searches into Search terms, one per line.
- Type the City, spelled however you like.
- Set Maximum places low for the first run, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with everything empty and you get one labelled sample row, which is not charged.
💰 How much does it cost to scrape 2GIS places?
$0.50 per 1,000 places. That is the free plan's price; paid plans pay a little less: $0.495 on Starter, $0.49 on Scale and $0.485 on Business. On the free plan, the $5 Apify gives you each month covers about 10,000 places.
One row is one place. The sample row and every diagnostic row are not charged, and a search that comes back empty produces no place rows to charge for. A place that does not meet your filters is never charged either. Emails and social links arrive inside the row, with nothing extra to pay.
📥 What you give it
{"searchQueries": ["кафе", "пиццерия"],"city": "Moscow","maxItems": 200}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, the form opens with кафе | One search per line. Local-language terms return more in Russian-speaking cities. |
city | none, the form opens with Moscow | English or local spelling both work: Moscow, Москва, Almaty, Dubai. Leave it empty only when you set a point: with neither, 2GIS returns a handful of places from anywhere (3 for кафе when we tried). |
startUrls | empty | 2GIS search pages or single place pages. Works alongside the fields above. |
maxItems | 50 | Hard cap on rows across every search, 1 to 5,000. You are charged per place returned, so this is your spend cap too. |
minRating | any rating | 3.0, 3.5, 4.0, 4.5 or 4.9. Only places 2GIS rates at least that high. Places with no rating are left out. |
hasPhotos, cardPayment, wifi, delivery, takeaway | off | Tick any to keep only places 2GIS lists with photos, card payment, Wi-Fi, delivery or takeaway. Tick several and a place needs all of them. |
sortBy | 2GIS's own order | name lists places A to Z. |
latitude, longitude | empty | Search around a point instead of a city. Both are needed. |
radiusMeters | 1000 | How wide that circle is, 50 to 40,000. Ignored without both coordinates. |
locale | Automatic | ru_RU, en_AE, en_RU, kk_KZ, uz_UZ, az_AZ or ky_KG. Not every language exists in every country. |
proxyConfiguration | off | Optional. Only fill this in if you want the run to go out through your own servers. |
📤 What you get back
A real place row from a run on 1 October 2026, a Moscow cafe search with the rating, Wi-Fi, card and
photo filters on. The raw openingHours block and a long WhatsApp link are cut short.
{"placeId": "4504127908546994","name": "Му-Му, кафе","nameShort": "Му-Му","brandName": "Му-Му, кафе","chainBranchCount": 18,"categoryPrimary": "Кафе","categories": ["Кафе", "Доставка еды", "Быстрое питание", "Суши-бары", "Кулинарии", "Кейтеринг"],"address": "площадь Семёновская, 1","addressFull": "Москва, площадь Семёновская, 1","addressComment": "-1 этаж","postcode": "105318","country": "Россия","region": "Москва","city": "Москва","cityAlias": "moscow","district": "Соколиная Гора","latitude": 55.78318,"longitude": 37.720392,"phone": "+74957818781","phones": ["+74957818781", "+74996784023", "+79165029127"],"website": "http://cafemumu.ru","websites": ["http://cafemumu.ru"],"email": "dostavka@cafemumu.ru","emails": ["dostavka@cafemumu.ru", "fastland@cafemumu.ru"],"socialProfiles": [{"type": "vkontakte", "url": "https://vk.com/cafemumu"},{"type": "odnoklassniki", "url": "https://ok.ru/group/51852991463629"},{"type": "whatsapp", "url": "https://wa.me/74957818781?text=..."},{"type": "telegram", "url": "https://t.me/mumuchatbot"}],"rating": 4.6,"reviewCount": 162,"openingHours": {"Mon": {"working_hours": [{"from": "08:00", "to": "21:00"}]}, "...": "..."},"openingHoursText": "Mon: 08:00-21:00; Tue: 08:00-21:00; Wed: 08:00-21:00; Thu: 08:00-21:00; Fri: 08:00-21:00; Sat: 10:00-21:00; Sun: 10:00-21:00","url": "https://2gis.ru/moscow/firm/4504127908546994","searchQuery": "кафе","position": 2,"scrapedAt": "2026-10-01T00:21:06.466Z"}
| Field | How to read it |
|---|---|
placeId | 2GIS's branch id. It is the dedupe key here and the key to join on between runs. |
brandName, chainBranchCount | The chain this branch belongs to, and how many branches it has. |
phone, email | The first of phones and emails. Plenty of small businesses publish none, and then both are empty. |
website, websites | Unwrapped from 2GIS's click tracker, tracking tags stripped. |
district, postcode, cityAlias | The address broken down, useful for splitting a city into smaller searches. |
rating, reviewCount | The branch score and how many reviews it came from. |
openingHoursText | Monday through Sunday on one line. openingHours keeps 2GIS's own arrays. |
position | Where the place sat in that search's results. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A place | It has a placeId and a name | yes |
| The sample row | Written only when the input was empty | no |
| A diagnostic | It carries an errorCode | no |
| Code | What it means |
|---|---|
CITY_NOT_FOUND | 2GIS could not place that city. The run stops there, so nothing is spent searching the wrong place. |
BAD_INPUT | minRating or sortBy is not one of the values above. The run stops before searching. |
BAD_URL | That entry is not a 2GIS address. The other jobs carry on. |
NOT_FOUND | Those place pages are gone, or they sat past your maxItems cap and were never fetched. |
NO_RESULTS | The search came back with nothing. |
API_ERROR, BAD_RESPONSE | 2GIS answered, but not with the data it normally carries. |
NETWORK, BLOCKED, KEY_REJECTED | 2GIS could not be read this time. Worth one re-run. |
TIME_LIMIT | The run reached its time limit first. Everything found before that is in the dataset, and a run that found nothing ends as failed. Give it more time to get the rest. |
💡 What people use it for
- Building a local business directory for Russia, the CIS or the UAE with phone, email and website already on the row.
- Counting how many branches a chain runs in a city, with coordinates ready to plot.
- Comparing ratings and review counts across a category before signing a lease.
- Splitting a city by
districtand walking each one, when a single search runs out of depth.
A business list that is filled in and checked:
- Run this on
стоматологияinAlmatywithminRatingat4.5. - Drop the rows with no
phoneand nowebsite, so every place left can be reached. - Paste the
urlof the places you keep into 2GIS Reviews Scraper and read what patients say before you call.
🚧 What it does not do
- No review text and no photos. You get
ratingandreviewCount, not what people wrote. 2GIS Reviews Scraper, linked below, reads the reviews. - Around 5,000 places per search term. 2GIS stops serving new pages somewhere near that depth,
whatever you set
maxItemsto. Split the job by district, by rubric, or walk a grid of coordinates. ratingis the branch score. For a chain branch 2GIS also publishes a company-wide rating; this returns the branch one.- No ordering by rating. 2GIS's rating order also weighs how many reviews a place has, so a 4.9
can sit above a 5.0. Use
minRatingto keep only well-rated places. - Filters apply to searches only. Place pages you paste are fetched as they are.
- A point search can run a little past the radius. In one test, 2 of 30 places sat 6 m and 65 m outside an 800 m circle.
- An unknown city ends the run. You get a
CITY_NOT_FOUNDrow, and any place URLs you pasted in the same run are not fetched either. Check the spelling and start again. - Paste more place URLs than
maxItemsallows and the extras are skipped. They come back asNOT_FOUND, which reads as if the page was missing. Raise the cap to match your list. - You can land a little under
maxItems. The same branch showing up on two pages is written once, and the cap is counted before that. The copy is not charged. - Rows are a snapshot. Hours change, places close, ratings move.
- It is not an official 2GIS tool. Dami's Studio is independent and is not affiliated with or endorsed by 2GIS, or by any other company named on this page.
🧭 Which directory scraper do you need?
| If you want | Use |
|---|---|
| Businesses and their contact details on 2GIS | This one |
| The reviews written about a 2GIS place | 2GIS Reviews Scraper |
| The same job on Yandex Maps | Yandex Maps Scraper |
| The same job on Google Maps | Google Maps Scraper |
❓ Questions people ask
Do I need a 2GIS account or an API key?
No. Nothing to register and no quota to watch.
Which countries does 2GIS actually cover?
Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, Belarus, Georgia, Armenia, Tajikistan, Cyprus and the UAE. Outside that list, 2GIS is the wrong source.
Should I search 2GIS in Russian or English?
Russian, in Russian-speaking cities: кафе finds more than cafe in Moscow. In Dubai it is the
other way round.
Do I get email addresses from 2GIS?
Where 2GIS holds one. In a 50-place Moscow sample, 38 listings had an email on them.
How do I get every cafe in a city?
Set the city, put your term in Search terms and raise Maximum places. Expect to top out near 5,000, then keep going per district.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/2gis-places-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping 2GIS legal?
These are public business listings. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search term, the city and the run ID. The
errorCode on the diagnostic row usually names the problem on its own.