Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
2GIS Places Scraper icon

2GIS Places Scraper

Scrape 2GIS places: name, category, address, phone, email, website, rating and hours. Russia, the CIS, the UAE and Cyprus only. $0.50 per 1,000 places.

5 from 1 review on Apify 734 runs on Apify $0.0005 per place ($0.5 / 1,000)
Run this in the cloudRun on Apify →

Maps & Local Lead Generation

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQueries, city, startUrls (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0005 per place = $0.5 per 1,000

You are charged forWhenPrice
Place returnedCharged once per genuine place row. Sample rows, diagnostics, blocked requests and empty runs are never charged.$0.0005

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-07, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchQueriesWhat to look for on 2GIS, for example "pizza", "кафе", "dentist". One search per line. 2GIS is a Russian/CIS directory, so local-language terms return more.array
cityCity to search in. English or local spelling both work ("Moscow", "Москва", "Almaty", "Dubai"). You can also paste a numeric 2GIS city id. Leave it empty only if you set a point below: with no city and no point, 2GIS returns just a handful of places from anywhere.string
startUrlsOptional. Paste 2GIS search pages (https://2gis.ru/moscow/search/кафе) or single place pages (https://2gis.ru/moscow/firm/70000001044357973). Works alongside the fields above.array
maxItemsHard cap on rows returned across all searches (1-5000). You are charged per place returned.integer
minRatingOnly places 2GIS rates at least this high. Places with no rating are left out too.string
hasPhotosKeep places that have photos on 2GIS.boolean
cardPaymentKeep places 2GIS lists as accepting card payment.boolean
wifiKeep places 2GIS lists as having Wi-Fi for customers.boolean
deliveryKeep places 2GIS lists as offering delivery.boolean
takeawayKeep places 2GIS lists as taking takeaway orders.boolean
sortBy2GIS's own order puts the best matches first. Name lists places A to Z.string
latitudeSearch around a point instead of a whole city. Example: 55.7558string
longitudeUsed together with latitude. Example: 37.6173string
radiusMetersRadius around the latitude/longitude point. Ignored unless both coordinates are set.integer
localeOptional 2GIS locale for names and categories. Leave as Automatic unless you specifically need another language; not every locale is available in every country.string

What you get

A structured dataset — each result includes fields like:

namecategoryPrimaryaddressFullphonewebsiteemailratingreviewCountopeningHoursTextlatitudelongitudeurlplaceId

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Maps & Local Lead Generation

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

2GIS Reviews Scraper iconMaps & Local Lead Generation

2GIS Reviews Scraper

Scrape 2GIS reviews by place URL or city: rating, text, author, date, photos, owner replies. No API key. $0.50 per 1,000.

Ready to run — no setup

Yelp Scraper iconMaps & Local Lead Generation

Yelp Scraper

Scrape Yelp businesses and reviews through Yelp's official Fusion API. Get rating, review count, price, phone, address, GPS and text. Bring your own key.

Ready to run — no setup

Google Maps Reviews Scraper iconMaps & Local Lead Generation

Google Maps Reviews Scraper

Scrape Google Maps reviews: rating, full text, exact date, reviewer, owner reply and photos. Set a date cutoff. No API key. $0.27 per 1,000.

1 use cases

Yandex Maps Scraper iconMaps & Local Lead Generation

Yandex Maps Scraper

Scrape Yandex Maps business listings: name, address, coordinates, rating, reviews, phone, website and hours. No API key. $0.40 per 1,000 places.

1 use cases

Google Maps Scraper iconMaps & Local Lead Generation

Google Maps Scraper

Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.

28 use cases

Google Reviews Monitor — Multi-Location Alerts & Reports iconMaps & Local Lead Generation

Google Reviews Monitor — Multi-Location Alerts & Reports

Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.

4 use cases

See all Maps & Local Lead Generation →

2GIS Places Scraper: business listings with phone, email and opening hours

Type a search and a city the way you would into 2GIS, and get one row per business: name, category, full address down to the district, coordinates, phone, email, website, 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.

InputSearch terms plus a city, or 2GIS URLs
OutputOne row per place
Ceiling5,000 places per run
Account neededNone, and no API key
Price$0.50 per 1,000 places, flat on every plan

🏙️ 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://mozhayka.rvbar.ru/ and not a 300-character redirect.

📥 What you give it

{
  "searchQueries": ["кафе", "пиццерия"],
  "city": "Moscow",
  "maxItems": 200
}
FieldDefaultWhat it is
searchQueriesbox holds кафеOne search per line. Local-language terms return more in Russian-speaking cities.
citybox holds MoscowEnglish 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).
startUrlsempty2GIS search pages or single place pages. 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.
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, takeawayoffTick 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.
sortBy2GIS's own ordername lists places A to Z.
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.
localeAutomaticru_RU, en_AE, en_RU, kk_KZ, uz_UZ, az_AZ or ky_KG. Not every language exists in every country.
proxyConfigurationleave it aloneOptional. Only fill this in if you want the run to go out through your own servers.

Run it with everything empty and you get one labelled sample row.

📤 What you get back

A real place row from a recent run. The raw openingHours block is cut short here, since it repeats the same shape for all seven days.

{
  "placeId": "70000001063551091",
  "name": "Руки Вверх!, бар",
  "nameShort": "Руки Вверх!",
  "brandName": "Руки Вверх!, бар",
  "chainBranchCount": 9,
  "categoryPrimary": "Бары",
  "categories": ["Кафе", "Бары", "Ночные клубы", "Караоке-залы"],
  "address": "Можайское шоссе, 45Б",
  "addressFull": "Москва, Можайское шоссе, 45Б",
  "addressComment": "3 этаж",
  "postcode": "121353",
  "country": "Россия",
  "region": "Москва",
  "city": "Москва",
  "cityAlias": "moscow",
  "district": "Можайский",
  "latitude": 55.7165,
  "longitude": 37.407401,
  "phone": "+74951205368",
  "phones": ["+74951205368"],
  "website": "http://mozhayka.rvbar.ru/",
  "websites": ["http://mozhayka.rvbar.ru/"],
  "email": null,
  "emails": [],
  "socialProfiles": [{"type": "telegram", "url": "https://t.me/book_rvb_bot"}, {"type": "vkontakte", "url": "https://vk.com/rvbar.mozhayka"}],
  "rating": 4.8,
  "reviewCount": 332,
  "openingHours": {"Mon": {"working_hours": [{"from": "18:00", "to": "06:00"}]}, "...": "..."},
  "openingHoursText": "Mon: 18:00-06:00; Tue: 18:00-06:00; Wed: 18:00-06:00; ...",
  "url": "https://2gis.ru/moscow/firm/70000001063551091",
  "searchQuery": "кафе",
  "position": 1,
  "scrapedAt": "2026-09-20T07:01:26.351Z"
}
FieldWhat it is
placeId2GIS's branch id. It is the dedupe key here and the key to join on between runs.
brandName, chainBranchCountThe chain this branch belongs to, and how many branches it has.
phone, phones, email, emailsWhat 2GIS publishes on the listing. Plenty of small businesses have none.
website, websitesUnwrapped from 2GIS's click tracker, tracking tags stripped.
district, postcode, cityAliasThe address broken down, useful for splitting a city into smaller searches.
rating, reviewCountThe branch score and how many reviews it came from.
openingHoursTextMonday through Sunday on one line. openingHours keeps 2GIS's own arrays.
positionWhere the place sat in that search's results.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot it
A placeIt has a placeId and a name
The sample rowWritten only when the input was empty
A diagnosticIt carries an errorCode

Diagnostic rows are never charged.

CodeWhat it means
CITY_NOT_FOUND2GIS could not place that city. The run stops there, so nothing is spent searching the wrong place.
BAD_INPUTminRating or sortBy is not one of the values above. The run stops before searching.
BAD_URLThat entry is not a 2GIS address. 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.
API_ERROR, BAD_RESPONSE2GIS answered, but not with the data it normally carries.
NETWORK, BLOCKED, KEY_REJECTED2GIS was unreachable or turned the request down. Worth one re-run.

▶️ How to run it

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. 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.

💰 How much does it cost?

$0.50 per 1,000 places. Flat on every Apify plan, no volume tiers.

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.

💡 What people use it for

  • Building a local lead list 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 district and walking each one, when a single search runs out of depth.
  • Joining 2GIS data to your own records on placeId, on a schedule.

🚧 What it does not do

  • No review text and no photos. You get rating and reviewCount, not what people wrote. There

is a separate actor for that.

  • Around 5,000 places per search term. 2GIS stops serving new pages somewhere near that depth,

whatever you set maxItems to. Split the job by district, by rubric, or walk a grid of coordinates.

  • rating is 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 minRating to 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_FOUND row, 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 maxItems allows and the extras are skipped. They come back as

NOT_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.

🧭 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

❓ Questions people ask

Do I need a 2GIS account or an API key? No. Nothing to register and no quota to watch.

Which countries actually have data? Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, Belarus, Georgia, Armenia, Tajikistan, Cyprus and the UAE. Outside that list, 2GIS is the wrong source.

Should I search 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? Where 2GIS holds one. In a 50-place Moscow sample, 38 listings had an email on them. It arrives inside the row, with nothing extra to pay for it.

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 run it on a schedule? Yes. placeId is stable, so diffing hours, ratings or closures between runs is a straight join.

Is scraping 2GIS legal? These are public business listings. Apify's write-up on scraping and the law is a good place to start, 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.