2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС
Pricing
from $0.49 / 1,000 places
2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС
2GIS scraper for 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
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
115
Total users
65
Monthly active users
5 hours ago
Last modified
Categories
Share
2GIS scraper for 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, or place ids, instead if you 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. Oman, Qatar,
Bahrain and Prague answer too, but most listings there were last updated years ago, so check
updatedAt. Anywhere else there is nothing to find.
| Input | Search terms plus one or more cities, a point or a polygon, or 2GIS URLs and place ids |
| Output | One row per place: name, chain, categories, full address, coordinates, phones, emails, website, social links, rating, review count, opening hours, average check, nearest metro |
| Ceiling | 5,000 places per run, and around 5,000 per search term |
| Account needed | None |
| 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 |
| Using an AI agent? | |
|---|---|
| Actor | dami_studio/2gis-places-scraper |
| Set one field | searchQueries, labelled "Search terms" in the Console |
| Cap the bill | maxTotalChargeUsd on the run, for example 0.10: it never charges past that |
| MCP, one link | https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/2gis-places-scraper |
| How often | Weekly or monthly; places change slowly |
🔍 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. Add more cities and every term runs in
each. Give it a point and a radius, or a polygon, and it searches that area instead.
URLs and ids. Paste a 2GIS search page, a place page, or a placeId from an earlier run.
Filters. Rating floor, photos, card payment, Wi-Fi, delivery, takeaway, a website, districts or categories. 2GIS applies them to the search, and every row is checked again before it is written, so a place that does not match is never charged.
Only new places. Name a store, schedule the run, and each later run returns and charges only the places no earlier one returned.
Website links come out clean, without 2GIS's click tracker or tracking tags.
📋 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, organizationId |
| Categories | categoryPrimary, categories, categoryIds |
| The address, down to the district | address, addressFull, addressComment, postcode, country, region, city, cityAlias, district, districtId, street, houseNumber, landmark |
| Map position and nearby stations | latitude, longitude, nearestStations |
| Phones, emails and websites | phone, phones, email, emails, website, websites |
| Social links | socialProfiles |
| Ratings | rating, reviewCount (the branch), companyRating, companyReviewCount (the whole chain), flampRating, flampReviewCount |
| What the place offers | averageCheck, lunchPrice, paymentMethods, features, awards |
| Opening hours | openingHours, openingHoursText, isOpen24x7 |
| Listing dates and adverts | createdAt, updatedAt, isAdvertised, promoText |
| Photo links (optional) | photoCount, mainPhotoUrl, photoUrls |
| 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, and any More cities.
- 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, or that an earlier run returned when Only new places is on, is never charged either. Emails, social links and photo links arrive inside the row, with nothing extra to pay.
📥 What you give it
{"searchQueries": ["кафе", "пиццерия"],"city": "Moscow","cities": ["Kazan"],"maxItems": 200,"maxItemsPerQuery": 50}
| 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 or a polygon: with no area, 2GIS returns a handful of places from anywhere (3 for кафе when we tried). |
cities | empty | More cities, up to 50 with city. Every search term runs in each. An unknown one gets a free CITY_NOT_FOUND row and the rest carry on. |
startUrls | empty | 2GIS search pages, place pages, or place ids on their own. 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. |
maxItemsPerQuery | no cap | Places per search term in each city, so the first term cannot take the whole run. |
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, onlyWithWebsite | off | Tick any to keep only places 2GIS lists with photos, card payment, Wi-Fi, delivery, takeaway or a website. Tick several and a place needs all of them. |
sortBy | 2GIS's own order | name lists places A to Z. newest puts the latest createdAt first. |
addedWithinDays | empty | Only places whose createdAt falls within this many days. |
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. |
polygon | empty | An area as POLYGON((lon lat, lon lat, ...)), longitude first, the first point repeated at the end. Places outside it are not charged. |
districtIds, categoryIds | empty | 2GIS district or category ids, up to 50 each. Rows carry their own in districtId and categoryIds. Categories alone, with no term, are a search too. |
locale | Automatic | ru_RU, en_AE, en_RU, kk_KZ, uz_UZ, az_AZ, ky_KG, ar_AE, ar_OM, en_QA, en_BH, en_AM, ru_AM or ru_TJ. Not every language exists in every country. |
onlyNewPlaces | off | Return only places that no earlier run with the same store returned. Runs newest first. |
newPlacesStoreName | empty | Needed with onlyNewPlaces: letters, digits and hyphens. The first run creates this store on your Apify account. |
photosPerPlace | 0 | Up to 10 photo links per place, plus the photo count and the main photo. Links only, no files. |
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 from a Moscow cafe search on 17 October 2026. The raw openingHours block, a long
WhatsApp link and the features list are cut short.
{"placeId": "70000001037012930","name": "Capito, ресторан","nameShort": "Capito","brandName": "Capito, ресторан","chainBranchCount": 1,"categoryPrimary": "Доставка еды","categories": ["Кафе", "Доставка еды", "Рестораны"],"address": "3-я улица Ямского Поля, 2 к13","addressFull": "Москва, 3-я улица Ямского Поля, 2 к13","addressComment": "1 этаж","postcode": "125124","country": "Россия","region": "Москва","city": "Москва","cityAlias": "moscow","district": "Беговой","latitude": 55.781199,"longitude": 37.582993,"phone": "+74954886597","phones": ["+74954886597", "+79260900002", "+74950014739"],"website": "http://capito.moscow","websites": ["http://capito.moscow", "http://t.me/capitomoscow"],"email": "capito-cafe@yandex.ru","emails": ["capito-cafe@yandex.ru"],"socialProfiles": [{"type": "vkontakte", "url": "https://vk.com/capito.moscow"},{"type": "whatsapp", "url": "https://wa.me/79260900002?text=..."},{"type": "telegram", "url": "https://t.me/+79260900002"}],"rating": 4.9,"reviewCount": 132,"openingHours": {"Mon": {"working_hours": [{"from": "12:00", "to": "24:00"}]}, "...": "..."},"openingHoursText": "Mon: 12:00-24:00; Tue: 12:00-24:00; Wed: 12:00-24:00; Thu: 12:00-24:00; Fri: 12:00-24:00; Sat: 12:00-24:00; Sun: 12:00-24:00","url": "https://2gis.ru/moscow/firm/70000001037012930","searchQuery": "кафе","position": 47,"scrapedAt": "2026-10-17T17:50:32.032Z","organizationId": "70000001037012929","categoryIds": ["161", "1203", "164"],"districtId": "4504209512726542","street": "3-я улица Ямского Поля","houseNumber": "2 к13","landmark": "ДЦ Ямское поле","nearestStations": [{"name": "Белорусская", "line": "D1 Белорусско-Савёловский диаметр", "distanceMeters": 600},{"name": "Белорусская", "line": "Замоскворецкая линия", "distanceMeters": 650}],"companyRating": 4.7,"companyReviewCount": 132,"flampRating": 5,"flampReviewCount": 8,"averageCheck": "Чек 2000 ₽","lunchPrice": null,"paymentMethods": ["Оплата картой", "Наличный расчёт", "Оплата по QR-коду"],"awards": ["Номинант 2026", "Лучшее кафе 2025", "Лучшее кафе 2022"],"features": ["Европейская кухня", "Завтрак", "Заказ столиков", "Летняя веранда", "Wi-Fi для клиентов"],"isOpen24x7": false,"createdAt": "2019-04-30T00:00:00Z","updatedAt": "2026-09-25T12:03:31Z","isAdvertised": true,"promoText": "Скидка 20% в течение недели после дня рождения и комплименты от шефа!"}
| Field | How to read it |
|---|---|
placeId | 2GIS's branch id. It is the dedupe key here and the key to join on between runs. |
phone, email | The first of phones and emails, as the business published them on 2GIS. Plenty of small businesses publish none, and then both are empty. |
rating, reviewCount | The branch score and how many reviews it came from. companyRating and companyReviewCount cover every branch of the chain. |
flampRating, flampReviewCount | The place's numbers on Flamp, a separate review site 2GIS shows beside its own. Empty when Flamp has none. |
averageCheck, lunchPrice, features | As 2GIS writes them, in the local language and currency. 43 of 50 Moscow cafes had an average check on 17 October 2026. |
createdAt, updatedAt | The date 2GIS gives the listing, and its last edit. 2GIS's app shows a place as new for 90 days after createdAt; a place listed as opening soon can carry a date in the future. Many older listings have no createdAt. |
nearestStations | The nearest metro and rail stations 2GIS lists (one to three in Moscow), with the line and the distance in metres. |
isAdvertised, promoText | Whether the place pays 2GIS for promotion, and the advert text it shows. |
photoUrls, mainPhotoUrl | Links to photos on 2GIS, only when photosPerPlace is above 0. Each photo stays with 2GIS and its owner. |
🧾 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. With one city the run stops there; with several, the others carry on. |
BAD_INPUT | A field holds a value the actor cannot use, such as a polygon that does not close. The run stops before searching. |
BAD_URL | That entry is not a 2GIS address or place id. 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. |
STORE_UNAVAILABLE | The store named for Only new places could not be used. Pick a new name. |
MORE_TO_CHECK | Only new places checked some of your searches this run; the next run with the same store starts with the rest. |
API_ERROR, BAD_RESPONSE | 2GIS answered, but not with the data it normally carries. |
NETWORK | 2GIS could not be read this time. Worth one re-run. |
NOT_SERVED | This place was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED or KEY_REJECTED here. |
TIME_LIMIT | The run reached its time limit first. Everything found before that is in the dataset, and a run that found nothing still ends as succeeded, with an amber status message. Give it more time to get the rest. |
UNEXPECTED_ERROR | The run stopped early on an unexpected error. The results before this row are kept. |
💡 What people use it for
- Counting how many branches a chain runs in a city, with coordinates ready to plot.
- Comparing ratings, average checks and review counts across a category before signing a lease.
- A weekly run with Only new places to see what opened in a city since last time.
A business list that is filled in and checked:
- Run this on
стоматологияinAlmatywithminRatingat4.5. - Keep the rows in the category and district you care about.
- Paste the
urlof the places you keep into 2GIS Reviews Scraper and read what patients say before you choose one.
🚧 What it does not do
- No review text. You get the rating and review counts, not what people wrote. 2GIS Reviews Scraper, linked below, reads the reviews.
- Photos are links, never files.
photoUrlspoint at 2GIS; nothing is copied or stored. - Around 5,000 places per search term. 2GIS stops serving new pages somewhere near that depth.
Split the job with
districtIds,categoryIds, a polygon, or a grid of points. - No ordering by rating. 2GIS's rating order 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 and ids 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.
- The run ends when none of your cities is found. You get a
CITY_NOT_FOUNDrow each, and any place URLs you pasted in the same run are not fetched either. - Paste more place URLs than
maxItemsallows and the extras are skipped. They come back asNOT_FOUND. Raise the cap to match your list. - Only new places follows 2GIS's dates. A place 2GIS lists with an older date than the newest one you already have is not picked up as new.
- 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 |
| Emails, phones and contact forms from the websites in your list | Contact Details Scraper |
❓ Questions people ask
Do I need a 2GIS account?
No, not from you.
Which countries does 2GIS actually cover?
Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, Belarus, Georgia, Armenia, Tajikistan, Cyprus and the UAE. Oman, Qatar, Bahrain and Prague answer too, with older listings.
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.
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 with districtIds.
Can I call it from code or connect it to an AI assistant?
The API tab has code for Python, JavaScript and the
CLI. MCP clients like Claude and ChatGPT use
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/2gis-places-scraper; coding assistants can load our
skill file.
All three bill your Apify account at the same price.
# pip install apify-clientfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("dami_studio/2gis-places-scraper").call(run_input={"searchQueries": ["кафе"],"city": "Moscow","maxItems": 50,},max_total_charge_usd=0.10, # the most this run may spend)for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row.get("ok") is False: # free note rows, not resultscontinueprint(row.get("name"), row.get("rating"))
Is scraping 2GIS legal?
These are public business listings, read the way a signed-out visitor sees them. Phones and e-mails a sole trader publishes can still be personal data: GDPR, PIPEDA and similar laws apply, so keep only what you need, and anti-spam laws such as CASL, the EU's e-privacy rules and CAN-SPAM decide how you may contact anyone. 2GIS's own terms still apply to what you do with the data. 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.