2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС avatar

2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС

Pricing

from $0.49 / 1,000 places

Go to Apify Store
2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

115

Total users

65

Monthly active users

5 hours ago

Last modified

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.

InputSearch terms plus one or more cities, a point or a polygon, or 2GIS URLs and place ids
OutputOne row per place: name, chain, categories, full address, coordinates, phones, emails, website, social links, rating, review count, opening hours, average check, nearest metro
Ceiling5,000 places per run, and around 5,000 per search term
Account neededNone
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?
Actordami_studio/2gis-places-scraper
Set one fieldsearchQueries, labelled "Search terms" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/2gis-places-scraper
How oftenWeekly 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 getField
The place and 2GIS's ID and page for itplaceId, name, nameShort, url
The chain it belongs to, and its sizebrandName, chainBranchCount, organizationId
CategoriescategoryPrimary, categories, categoryIds
The address, down to the districtaddress, addressFull, addressComment, postcode, country, region, city, cityAlias, district, districtId, street, houseNumber, landmark
Map position and nearby stationslatitude, longitude, nearestStations
Phones, emails and websitesphone, phones, email, emails, website, websites
Social linkssocialProfiles
Ratingsrating, reviewCount (the branch), companyRating, companyReviewCount (the whole chain), flampRating, flampReviewCount
What the place offersaverageCheck, lunchPrice, paymentMethods, features, awards
Opening hoursopeningHours, openingHoursText, isOpen24x7
Listing dates and advertscreatedAt, updatedAt, isAdvertised, promoText
Photo links (optional)photoCount, mainPhotoUrl, photoUrls
The search that found itsearchQuery, position, scrapedAt

▶️ How to scrape 2GIS places

  1. Open 2GIS Places Scraper and click Try for free.
  2. Put your searches into Search terms, one per line.
  3. Type the City, spelled however you like, and any More cities.
  4. Set Maximum places low for the first run, then click Start.
  5. 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
}
FieldDefaultWhat it is
searchQueriesnone, the form opens with кафеOne search per line. Local-language terms return more in Russian-speaking cities.
citynone, the form opens with MoscowEnglish 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).
citiesemptyMore 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.
startUrlsempty2GIS search pages, place pages, or place ids on their own. Works alongside the fields above.
maxItems50Hard cap on rows across every search, 1 to 5,000. You are charged per place returned, so this is your spend cap too.
maxItemsPerQueryno capPlaces per search term in each city, so the first term cannot take the whole run.
minRatingany rating3.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, onlyWithWebsiteoffTick 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.
sortBy2GIS's own ordername lists places A to Z. newest puts the latest createdAt first.
addedWithinDaysemptyOnly places whose createdAt falls within this many days.
latitude, longitudeemptySearch around a point instead of a city. Both are needed.
radiusMeters1000How wide that circle is, 50 to 40,000. Ignored without both coordinates.
polygonemptyAn area as POLYGON((lon lat, lon lat, ...)), longitude first, the first point repeated at the end. Places outside it are not charged.
districtIds, categoryIdsempty2GIS 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.
localeAutomaticru_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.
onlyNewPlacesoffReturn only places that no earlier run with the same store returned. Runs newest first.
newPlacesStoreNameemptyNeeded with onlyNewPlaces: letters, digits and hyphens. The first run creates this store on your Apify account.
photosPerPlace0Up to 10 photo links per place, plus the photo count and the main photo. Links only, no files.
proxyConfigurationoffOptional. Only fill this in if you want the run to go out through your own servers.

📤 What you get back

Real run output

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% в течение недели после дня рождения и комплименты от шефа!"
}
FieldHow to read it
placeId2GIS's branch id. It is the dedupe key here and the key to join on between runs.
phone, emailThe first of phones and emails, as the business published them on 2GIS. Plenty of small businesses publish none, and then both are empty.
rating, reviewCountThe branch score and how many reviews it came from. companyRating and companyReviewCount cover every branch of the chain.
flampRating, flampReviewCountThe place's numbers on Flamp, a separate review site 2GIS shows beside its own. Empty when Flamp has none.
averageCheck, lunchPrice, featuresAs 2GIS writes them, in the local language and currency. 43 of 50 Moscow cafes had an average check on 17 October 2026.
createdAt, updatedAtThe 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.
nearestStationsThe nearest metro and rail stations 2GIS lists (one to three in Moscow), with the line and the distance in metres.
isAdvertised, promoTextWhether the place pays 2GIS for promotion, and the advert text it shows.
photoUrls, mainPhotoUrlLinks to photos on 2GIS, only when photosPerPlace is above 0. Each photo stays with 2GIS and its owner.

🧾 Reading the output

RowHow to spot itCharged
A placeIt has a placeId and a nameyes
The sample rowWritten only when the input was emptyno
A diagnosticIt carries an errorCodeno
CodeWhat it means
CITY_NOT_FOUND2GIS could not place that city. With one city the run stops there; with several, the others carry on.
BAD_INPUTA field holds a value the actor cannot use, such as a polygon that does not close. The run stops before searching.
BAD_URLThat entry is not a 2GIS address or place id. The other jobs carry on.
NOT_FOUNDThose place pages are gone, or they sat past your maxItems cap and were never fetched.
NO_RESULTSThe search came back with nothing.
STORE_UNAVAILABLEThe store named for Only new places could not be used. Pick a new name.
MORE_TO_CHECKOnly new places checked some of your searches this run; the next run with the same store starts with the rest.
API_ERROR, BAD_RESPONSE2GIS answered, but not with the data it normally carries.
NETWORK2GIS could not be read this time. Worth one re-run.
NOT_SERVEDThis place was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED or KEY_REJECTED here.
TIME_LIMITThe 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_ERRORThe 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:

  1. Run this on стоматология in Almaty with minRating at 4.5.
  2. Keep the rows in the category and district you care about.
  3. Paste the url of 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. photoUrls point 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 minRating to 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_FOUND row each, and any place URLs you pasted in the same run are not fetched either.
  • Paste more place URLs than maxItems allows and the extras are skipped. They come back as NOT_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 wantUse
Businesses and their contact details on 2GISThis one
The reviews written about a 2GIS place2GIS Reviews Scraper
The same job on Yandex MapsYandex Maps Scraper
The same job on Google MapsGoogle Maps Scraper
Emails, phones and contact forms from the websites in your listContact 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-client
from apify_client import ApifyClient
client = 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 results
continue
print(row.get("name"), row.get("rating"))

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.