2GIS Scraper — Local Business Data (Russia, CIS, Central Asia)
Pricing
from $3.00 / 1,000 results
2GIS Scraper — Local Business Data (Russia, CIS, Central Asia)
Scrape 2GIS local business listings across Russia, CIS and Central Asia. Get name, address, phone, website, rating, reviews, opening hours, category and coordinates. Great for lead generation. Export JSON, CSV, Excel.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
18 hours ago
Last modified
Categories
Features
Share
2GIS Scraper — Business Directory, Contacts, Ratings & Geo Data
The fastest, most reliable way to scrape 2GIS and extract local business data at scale. This 2GIS scraper pulls structured business listings from 2GIS — the dominant local search, maps, and enterprise business directory across Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, and Central Asia, where Google Maps coverage is sparse. Extract business names, verified street addresses, postcodes, direct phone numbers, decoded websites, contact emails, customer ratings, review counts, operating hours, categories, social media profiles, and GPS coordinates — with no login, no API key, and no coding.
Export everything to JSON, CSV, Excel, XML, or API.
Built for B2B lead generation specialists, sales development reps (SDRs), local SEO agencies, geomarketing analysts, and directory builders targeting Russian, CIS, and Central Asian markets.
⚡ At a glance
| Feature | Description |
|---|---|
| Coverage Area | 200+ cities and regions across Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, UAE (Dubai), and Central Asia |
| Input Options | Local-language keywords (searchTerms), city names (cities), or direct 2GIS Region IDs (regionIds) |
| Output Formats | JSON, CSV, Excel (XLSX), XML, HTML table |
| Key Data Fields | Name, primary phone & full phone list, decoded website, email, address, postal code, ratings, reviews, opening schedule, latitude & longitude, social links |
| Speed & Scale | HTTP-native API extraction with rotating datacenter proxy sessions; 50 businesses per request, scaling to 1,000+ items |
| Automatic Region Resolver | Translates city names (e.g. Москва, Алматы, Ташкент, Бишкек) into numeric 2GIS Region IDs automatically |
🔎 Why scrape 2GIS?
2GIS is the uncontested #1 business map and directory across Eastern Europe and Central Asia. In markets where Western mapping engines lack accurate local phone numbers or updated operating hours, 2GIS maintains deep, verified company databases. Local businesses routinely list mobile and landline phones, official web domains, social messenger channels (Telegram, WhatsApp, VKontakte), entrance instructions, and precise building coordinates.
Manually collecting these listings is prohibitive: results are paginated 50 at a time, websites use redirect links, and phone numbers are nested inside widget blocks. This 2GIS scraper automates end-to-end data harvesting: specify your target verticals and cities, and receive a normalized, de-duplicated dataset ready for your CRM or analysis pipeline.
Common reasons people scrape 2GIS:
- 📞 B2B Lead Generation: Build targeted cold-calling and outreach lists with verified telephone numbers and WhatsApp/Telegram links.
- 📊 Geomarketing & Expansion: Benchmark business density per square kilometer, analyze category saturation, and identify underserved neighborhoods.
- 🕵️ Competitor Intelligence: Monitor competitor branch footprints, customer satisfaction ratings, and working hour schedules.
- 🗺️ GIS & Map Enrichment: Feed routing engines and GIS software with exact geocoded latitudes, longitudes, and verified postal codes.
- 🏢 Local Business Directories: Populate regional industry portals and classifieds with fresh, enriched company listings.
- 📬 Direct Mail Marketing: Leverage 100% postal code coverage for hyper-local mail distribution and territory assignments.
✨ What this 2GIS scraper does
- 🔎 Multi-City & Multi-Keyword Targeting: Search multiple niches (
кафе,ресторан,стоматология,гостиница) across multiple metropolitan hubs (Москва,Санкт-Петербург,Алматы,Ташкент,Астана) in a single run. - 🔁 Unlocked Deep Pagination (1,000+ items): Automatically walks every 50-item page per search. Setting
maxPagesPerSearch: 0enables boundless pagination governed strictly by yourmaxItemstarget. - 📞 Rich Multi-Channel Contact Details: Captures primary phone, alternate phones, direct decoded website URLs (UTM parameters stripped), company emails, and direct social links (Telegram, VK, WhatsApp, Instagram).
- 📍 Verified Geocoding & Postal Data: Extracts latitude, longitude, formatted street addresses, and postal ZIP codes.
- ⭐ Reputation Metrics: Average star rating and total review counts to prioritize high-volume establishments.
- 🕐 Full Weekly Schedule: Structured weekly operating hours for every day of the week, including 24/7 flags.
- ⚡ Pure HTTP Performance: Extremely lightweight and fast, running smoothly on cost-effective Datacenter proxies without headless browser overhead.
📥 Input parameters
Configure the scraper using the Apify Console or pass JSON directly via the API. All fields are optional:
| Field | Type | Default | Description |
|---|---|---|---|
searchTerms | Array | ["кафе"] | Business categories or keywords in Russian or local language (e.g. ["кафе", "ресторан", "отель"]). |
cities | Array | ["Москва"] | City names to search. Automatically resolved to 2GIS Region IDs (e.g. ["Москва", "Алматы", "Ташкент"]). |
regionIds | Array | [] | Optional direct 2GIS Region IDs (e.g. ["32"] for Moscow). Overrides cities if provided. |
maxItems | Integer | 0 | Total maximum listings to collect across all searches. 0 = unlimited (governed by available listings). |
maxPagesPerSearch | Integer | 0 | Result pages per city/keyword (50 businesses/page). 0 = auto/unlimited (governed by maxItems). |
proxyConfiguration | Object | Datacenter | Apify Proxy Datacenter is enabled by default. Residential is unnecessary. |
Example input — multi-vertical lead generation
{"searchTerms": ["стоматология", "косметология"],"cities": ["Москва", "Санкт-Петербург"],"maxItems": 500,"maxPagesPerSearch": 0,"proxyConfiguration": {"useApifyProxy": true}}
Example input — single city deep harvest
{"searchTerms": ["ресторан"],"cities": ["Алматы"],"maxItems": 1000,"maxPagesPerSearch": 0}
📊 Extracted fields
Every scraped business returns structured fields across 5 distinct categories:
🏷️ Business identity & taxonomy
| Field | Type | Coverage | Description |
|---|---|---|---|
id | String | 🟢 High | Unique 2GIS firm identifier (de-duplication key) |
name | String | 🟢 High | Official company or trade name |
url | String | 🟢 High | Canonical 2GIS business profile link |
category | String | 🟢 High | Primary industry rubric / category |
categories | Array | 🟢 High | All associated categories and sub-rubrics |
org | String | 🟡 Conditional | Parent corporate or legal entity name |
📞 Contact information & web presence
| Field | Type | Coverage | Description |
|---|---|---|---|
phone | String | 🟢 High | Primary telephone number formatted for dialing |
phones | Array | 🟢 High | Full list of published landline and mobile telephone numbers |
website | String | 🟢 High | Direct decoded official website URL (redirect wrappers removed) |
websites | Array | 🟢 High | Full list of published company websites |
email | String | 🟡 Conditional | Direct business email address when publicly listed |
socials | Array | 🟢 High | Social media profiles including Telegram, VK, WhatsApp, Instagram |
📍 Location & geocoding
| Field | Type | Coverage | Description |
|---|---|---|---|
address | String | 🟢 High | Full formatted street address |
addressComment | String | 🟡 Conditional | Entrance notes, floor numbers, or landmark directions |
postcode | String | 🟢 High | Postal / ZIP code for the building address |
lat | Number | 🟢 High | Precise geographic latitude coordinate |
lon | Number | 🟢 High | Precise geographic longitude coordinate |
city | String | 🟢 High | Resolved city name |
regionId | String | 🟢 High | Internal 2GIS numeric region identifier |
⭐ Ratings & customer feedback
| Field | Type | Coverage | Description |
|---|---|---|---|
rating | Number | 🟢 High | Average customer star rating (1.0 to 5.0) |
reviewCount | Number | 🟢 High | Total number of published customer reviews |
photos | Array | 🟢 High | URLs of user-submitted and verified interior/exterior photos |
🕒 Operating hours & metadata
| Field | Type | Coverage | Description |
|---|---|---|---|
schedule | Object | 🟢 High | Structured opening and closing hours per day of the week |
searchTerm | String | 🟢 High | Search keyword that produced this result |
scrapedAt | String | 🟢 High | ISO 8601 scrape execution timestamp |
💻 Sample output record
{"id": "70000001018349821","name": "Кофемания","url": "https://2gis.ru/firm/70000001018349821","category": "Кофейни","categories": ["Кофейни", "Рестораны", "Кондитерские изделия"],"address": "Кудринская площадь, 1","addressComment": "1 этаж, высотка на Кудринской","postcode": "123242","phone": "+7 (495) 721-38-68","phones": ["+7 (495) 721-38-68","+7 (926) 111-22-33"],"website": "https://coffeemania.ru","websites": ["https://coffeemania.ru"],"email": "info@coffeemania.ru","socials": [{ "type": "telegram", "value": "https://t.me/coffeemania_ru" },{ "type": "vkontakte", "value": "https://vk.com/coffeemania" }],"rating": 4.7,"reviewCount": 482,"lat": 55.758814,"lon": 37.581521,"schedule": {"Mon": { "working_hours": [{ "from": "08:00", "to": "23:00" }] },"Tue": { "working_hours": [{ "from": "08:00", "to": "23:00" }] },"Wed": { "working_hours": [{ "from": "08:00", "to": "23:00" }] },"Thu": { "working_hours": [{ "from": "08:00", "to": "23:00" }] },"Fri": { "working_hours": [{ "from": "08:00", "to": "00:00" }] },"Sat": { "working_hours": [{ "from": "09:00", "to": "00:00" }] },"Sun": { "working_hours": [{ "from": "09:00", "to": "23:00" }] }},"org": "ООО Кофемания-Кудринка","photos": ["https://photogis.ru/preview/abc123_1024x768.jpg"],"city": "Москва","regionId": "32","searchTerm": "кафе","scrapedAt": "2026-11-10T13:00:00.000Z"}
🔁 Deep pagination & scale
2GIS organizes search results into pages of 50 businesses.
- Unlocked 1,000+ Pagination: Set
maxPagesPerSearch: 0(or leave default0) and specify your desiredmaxItems(e.g.2000). The scraper continuously pages until the entire city directory is exhausted or your limit is satisfied. - Automatic De-Duplication: Multiple keywords within the same city may surface overlapping listings. The actor indexes unique 2GIS firm IDs in-memory, ensuring you never pay for or export duplicated records.
- Region Scaling: Inputting multiple cities (e.g.
Москва,Алматы,Ташкент) processes each city in turn, distributing requests cleanly across proxy sessions.
⚙️ How to integrate via API
Trigger runs programmatically and stream leads into your CRM or database using Python or Node.js:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"searchTerms": ["стоматология"],"cities": ["Москва"],"maxItems": 250,"maxPagesPerSearch": 0}run = client.actor("haketa/2gis-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['name']} | Phone: {item['phone']} | Address: {item['address']}")
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/2gis-scraper').call({searchTerms: ['гостиница'],cities: ['Алматы', 'Астана'],maxItems: 300,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Successfully scraped ${items.length} hotel records.`);
💡 Practical tips for optimal results
- Local-Language Search: Russian or local language queries return exponentially more results than English equivalents (
кафеyields thousands of listings, whilecafeyields a small fraction). - Postal Code Segmentation: Filter or group outputs by
postcodeto assign field sales representatives specific geographic postal zones. - Messenger Lead Outreach: Take advantage of the
socialsarray — in CIS markets, businesses frequently reply faster via Telegram or WhatsApp than via traditional email. - Cost Efficiency: Keep Apify Datacenter proxies enabled. Residential proxies add unnecessary per-GB bandwidth fees without improving success rates.
❓ Frequently Asked Questions
Do I need a 2GIS API key or paid subscription? No. The scraper communicates with public directory endpoints and does not require an API token or 2GIS developer account.
How many cities are supported? More than 200 cities across Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Belarus, Azerbaijan, and several international territories (including Dubai).
Why are some email addresses missing? Small local shops and service providers often communicate exclusively via phone or messaging apps. Phone coverage is ~97%, while direct email is published on approximately 45–50% of listings.
Are the website URLs clean or wrapped in redirects?
All website links are automatically un-redirected and stripped of tracking parameters, giving you direct, clean canonical domains (e.g. https://example.com instead of https://link.2gis.ru/...?http...).
Can I export the data to Google Sheets or Excel? Yes. You can export in XLSX, CSV, or JSON format directly from the Apify platform, or automate real-time synchronization to Google Sheets via Apify Integrations.
🔗 Related directory scrapers
- Google Maps Scraper — Global local business listings and reviews.
- Kakao Map Scraper — South Korean local business and restaurant directory.
- Justdial Scraper — Indian B2B and local service listings.
- Hitta.se Business Scraper — Sweden company directory and phone numbers.
🏙️ Supported cities & major metropolitan regions
The scraper includes built-in automated region resolution for over 200 cities across 8 countries. Popular target markets include:
| Country | Key Cities Supported |
|---|---|
| Russia | Москва (Moscow), Санкт-Петербург (Saint Petersburg), Новосибирск (Novosibirsk), Екатеринбург (Yekaterinburg), Казань (Kazan), Нижний Новгород (Nizhny Novgorod), Челябинск (Chelyabinsk), Красноярск (Krasnoyarsk), Самара (Samara), Уфа (Ufa), Ростов-на-Дону (Rostov-on-Don), Краснодар (Krasnodar), Воронеж (Voronezh), Пермь (Perm), Волгоград (Volgograd), Сочи (Sochi) |
| Kazakhstan | Алматы (Almaty), Астана (Astana), Шымкент (Shymkent), Караганда (Karaganda), Актобе (Aktobe), Атырау (Atyrau), Павлодар (Pavlodar), Усть-Каменогорск (Oskemen) |
| Uzbekistan | Ташкент (Tashkent), Самарканд (Samarkand), Бухара (Bukhara), Наманган (Namangan), Андижан (Andijan) |
| Kyrgyzstan | Бишкек (Bishkek), Ош (Osh), Джалал-Абад (Jalal-Abad) |
| Azerbaijan | Баку (Baku), Гянджа (Ganja), Сумгаит (Sumqayit) |
| United Arab Emirates | Дубай (Dubai), Абу-Даби (Abu Dhabi) |
🔍 Recommended vertical search terms
For maximum recall, search using Russian terms. Here is a quick reference table of high-volume industry rubrics:
| Vertical | Russian Search Term | English Equivalent | Common Data Yield |
|---|---|---|---|
| Food & Dining | ресторан | Restaurant | High reviews, working hours, photos |
| Cafes & Bakeries | кафе, кофейня | Cafe / Coffee shop | High phone & social links |
| Healthcare | стоматология, клиника | Dentistry / Medical Clinic | Phone, doctor specialties, exact address |
| Beauty & Wellness | салон красоты, барбершоп | Beauty Salon / Barbershop | WhatsApp, Instagram, online booking |
| Automotive | автосервис, шиномонтаж | Auto Repair / Tire Fitting | Direct phone, schedule, emergency hours |
| Hotels & Travel | гостиница, отель, хостел | Hotel / Hostel | Website, star rating, full coordinates |
| Fitness | фитнес-клуб, тренажерный зал | Fitness Club / Gym | Opening schedule, website, phone |
| Retail & Shopping | супермаркет, аптека | Supermarket / Pharmacy | 24/7 hours flags, postal code |
🗺️ Geospatial analysis with GeoJSON conversion
Because every listing includes validated lat and lon coordinates, you can readily convert your scraped dataset into GeoJSON for mapping in QGIS, Mapbox, Kepler.gl, or Leaflet:
import jsonwith open('dataset_2gis.json', 'r', encoding='utf-8') as f:items = json.load(f)geojson = {'type': 'FeatureCollection','features': [{'type': 'Feature','geometry': {'type': 'Point','coordinates': [it['lon'], it['lat']]},'properties': {'name': it.get('name'),'phone': it.get('phone'),'category': it.get('category'),'address': it.get('address'),'rating': it.get('rating')}}for it in items if it.get('lat') and it.get('lon')]}with open('businesses.geojson', 'w', encoding='utf-8') as f:json.dump(geojson, f, ensure_ascii=False, indent=2)print(f'Converted {len(geojson["features"])} locations to GeoJSON.')
📋 Changelog
v1.2 — 2026-11
- Unlocked 1,000+ Deep Pagination: Updated
maxPagesPerSearchdefault to0(auto/unlimited), allowing deep pagination runs up to 1,000+ listings governed bymaxItems. - Enhanced Redirect Decoder: Improved regex decoding for 2GIS outgoing website redirects, stripping tracking query parameters cleanly.
- Optimized Datacenter Proxy Retries: Refined retry pacing with fast-timeout connection recycling for rapid prefill execution (<90s).
- Field Normalization: Standardized postal code and multi-channel messenger schemas across all CIS regions.
v1.1 — 2026-09
- Initial public release supporting 200+ cities across Russia, CIS, and Central Asia.
- Automatic city-to-region ID resolution without requiring manual region lookup.
- Extracted comprehensive contact information, weekly schedules, and reputation metrics.