2GIS Places Scraper | Парсер 2ГИС: Phones, Emails, Ratings
Pricing
from $0.50 / 1,000 businesses
2GIS Places Scraper | Парсер 2ГИС: Phones, Emails, Ratings
Scrape 2GIS business listings across Russia, Central Asia, Cyprus and the UAE. Phone numbers, published emails, ratings, addresses and branch counts, by city or category.
Pricing
from $0.50 / 1,000 businesses
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
7
Monthly active users
a day ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Type a business category or name and a city, and get the matching businesses from 2GIS, the map and business directory used across Russia and Central Asia: name, categories, address with district and postcode, coordinates, phone numbers, website, published email, social profiles, rating, review count and chain size. The data comes from 2GIS's own public catalog API, the one its website calls, so contacts arrive inline. No 2GIS account, no API key of your own and no browser.
Why choose this actor?
- Contacts in the same row, not a second lookup. Our scheduled check on 30 September returned 3 Moscow cafes in a 6 second run; all 3 had a phone number, a website and a rating, and 2 also had a published email (for example
dostavka@cafemumu.rufor the Му-Му chain). 2GIS reported 8,607 cafes in Moscow for that one query. - $0.50 per 1,000 businesses on every plan. You pay only for businesses delivered to your dataset. A business found by two of your queries is delivered and charged once, an unknown city or an empty search costs nothing beyond the $0.005 start fee, and the summary rows are free.
- Pay once per business on repeat runs. Turn on
monitorModeand scheduled runs deliver and charge only businesses your account has not received from this actor before (up to 50,000 remembered business IDs), so a weekly sweep bills you for new listings, not the whole directory again.
Part of The Mine Works Leads and business directories family: B2B Leads Finder, Google Maps Email Scraper, Skip Trace Lookup, JustDial Scraper, IndiaMART Scraper, Yandex Maps Scraper.
Try it in one minute
Paste this into the JSON tab of the input page and press Start:
{"queries": ["кафе"],"city": "Москва","maxItems": 10}
You get 10 Moscow cafes, usually in under a minute: one API page holds 50 businesses and answered in about 1.3 seconds when it did not stall.
Give queries as business categories or names, one per line in the Console form or an array of strings in JSON. Search in the local language: кафе, аптека, стоматология or автосервис match far more listings than English words. A brand or business name works too, since 2GIS searches names as well as categories. Give city in its local spelling as 2GIS shows it (Москва, Санкт-Петербург, Алматы, Новосибирск), or as a numeric 2GIS region ID. maxItems caps the number of businesses across all queries.
Apify's free plan includes $5 of credit every month, which covers about 9,900 businesses at this actor's price ($0.0005 a business plus the $0.005 start fee, in runs of 5,000).
Copy to your AI assistant
themineworks/2gis-places-search on Apify. Searches 2GIS (Russia and Central Asia business directory) by category or name in one city and returns one row per business with name, categories, address, district, coordinates, phones, website, emails, social links, rating, review count and chain size. Call ApifyClient("TOKEN").actor("themineworks/2gis-places-search").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: queries (string[], best in the local language, e.g. "кафе", "аптека"). Optional: city (local spelling such as "Москва" or "Алматы", or a numeric 2GIS region id; default "Москва"), maxItems (1 to 5000, default 50), monitorMode (default false; deliver and charge only businesses this account has not received before). Rows with _type "summary" or "info" are run reports and are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~2gis-places-search/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Up to 33 fields per business. IDs and names, the primary category plus every category 2GIS assigns, address with floor or entrance note, building name, postcode, district, city, region and country, coordinates, all phones, websites and emails, social links (VK, Telegram, Instagram, Facebook, WhatsApp, YouTube, Odnoklassniki), rating, review count, chain name and branch count, a 24/7 flag, the description when 2GIS has one, and a link back to the listing.
- 50 businesses per request, up to 5,000 per run. Each query is paged 50 at a time, up to 100 pages, and stops early when 2GIS runs out of results or two pages in a row add nothing new.
- Many queries in one run, deduplicated. Every query runs in the same city; a business found by more than one query appears once, under the first query that found it.
- Any city in 2GIS's own region list. The city is matched live against the region list the 2GIS API serves (the first 200 regions it returns): exact name first, then a partial match, then a numeric region ID.
- Stalls handled cheaply. Measured against this API, about one request in three stalls instead of failing. Each request gets 20 seconds, then a retry on a fresh proxy session, up to 3 attempts. A page that fails all three is skipped, and 5 failed pages in a row end the run rather than paying for more.
- New-listing monitor.
monitorModeremembers the newest 50,000 business IDs your account has received from this actor and skips them on the next run, before any charge.
How to use it
Basic: one category in one city
{"queries": ["стоматология"],"city": "Алматы","maxItems": 300}
Six pages of 50 dental clinics in Almaty. The log line for each page shows how many businesses 2GIS has in total for the query, which is a quick way to size a market before you pull all of it.
Several categories at once, merged
{"queries": ["кафе", "кофейня", "ресторан"],"city": "Санкт-Петербург","maxItems": 1000}
The queries share one maxItems budget and run in order, so the first query fills the run first. A business that is both a cafe and a restaurant is delivered and charged once.
B2B lead list with emails
{"queries": ["автосервис", "шиномонтаж"],"city": "Новосибирск","maxItems": 2000}
Filter the dataset on email (present only when the business published one) for an email sequence, and use phones for the rest. is_chain and chain_branch_count separate independent garages from chain outlets, which usually need a different pitch. For runs above about 2,000 businesses, raise the run timeout from the default 900 seconds to 3,600 seconds (see Input parameters).
Weekly new-listing watch
{"queries": ["салон красоты"],"city": "Казань","maxItems": 5000,"monitorMode": true}
Save it as a task and schedule it weekly (for example 0 7 * * 1, Mondays at 07:00). The first run delivers everything up to maxItems and sets the baseline; each later run delivers and charges only businesses your account has not received from this actor before. The summary row reports already_delivered, the number skipped as already seen.
One monitor memory per account. The list of business IDs that monitorMode remembers is shared by every monitor-mode run of this actor in your Apify account, whatever the query or city. If you watch several categories, put them in one run's queries, or a business delivered to one task will be skipped in another.
Chain and competitor mapping
Search a chain's brand name or its category, then group the rows by chain_name: chain_branch_count is 2GIS's own count of branches for the chain, and latitude and longitude put each outlet on a map.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
queries | array of strings | required (form prefill: кафе) | Business categories or names to search. Trimmed, duplicates removed, run in order in the same city. Local language works best. |
city | string | Москва (also the form prefill) | City in its local spelling as 2GIS shows it, matched against 2GIS's region list (exact name, then partial match), or a numeric 2GIS region ID. If no city matches, the run ends with a summary row that says unknown city and nothing is charged. |
maxItems | integer (1 to 5,000) | 50 | Most businesses to deliver across all queries. |
monitorMode | boolean | false | Deliver and charge only businesses this account has not received from this actor before. See "One monitor memory per account" above. |
Run options. The default timeout is 900 seconds and the default memory is 1 GB. A page of 50 usually takes a second or two, but a stalled request waits 20 seconds before its retry, so plan on about 10 seconds per page on average. That makes 2,000 businesses (40 pages) about 7 minutes and 5,000 businesses (100 pages) about 15 minutes or more; for runs above 2,000, set the timeout to 3,600 seconds. If a run does reach its timeout, it stops 15 seconds early, keeps every business already delivered and adds a summary row with ended_on_deadline: true. Memory can be lowered to 512 MB; the start fee is one event either way.
What data do you get?
One row per business. Fields 2GIS does not have for a listing are left out of that row rather than sent as null; the list fields are always present and may be empty.
The business: business_id (2GIS firm ID), name, name_full, category (the primary category), categories (every category 2GIS assigns), description (when the listing has one), maps_url (the listing on 2GIS).
Where it is: address (street and number), address_comment (floor or entrance note, such as 3 этаж), building (named building or mall), postcode, district, city, region, country, latitude, longitude.
How to reach it: phone (the first number) and phones (all of them), website and websites (the real host name, with 2GIS's redirect wrapper removed), email and emails (only addresses the business published to 2GIS), social_links (VK, Telegram, Instagram, Facebook, WhatsApp, YouTube and Odnoklassniki links).
Reputation and size: rating, review_count, chain_name, chain_branch_count, is_chain (true when the chain has more than one branch), schedule_is_24x7.
Where it came from: search_query, search_city, scraped_at.
Phone numbers are kept exactly as 2GIS prints them: the groups of digits are separated by the figure dash character (Unicode U+2012), not a hyphen, which is why the examples below show it as the JSON escape \u2012. Strip everything except digits and + before you dial or match numbers.
Each run ends with a _type: "summary" row (city, queries, delivered, already_delivered) and, when something was delivered, a _type: "info" row. Neither is a business and neither is ever charged. Skip rows that have a _type field when you load the data.
Stable fields for automations
These 15 fields were present in every business row we sampled from the live build. The 5 list fields and is_chain are always written, even when empty or false.
| Field | What it holds |
|---|---|
business_id | 2GIS firm ID; the key for deduplication and monitor mode |
name | Business name as 2GIS shows it |
category | Primary category |
categories | All categories, as a list |
address | Street address |
city | City |
latitude | Latitude (number) |
longitude | Longitude (number) |
phones | All phone numbers, as a list |
emails | Published emails, as a list (often empty) |
social_links | Social profile links, as a list |
is_chain | true if the business has more than one branch |
search_query | The query that found it |
maps_url | Link to the listing on 2GIS |
scraped_at | ISO timestamp when the row was captured |
We will not rename these fields. New fields may be added over time; existing ones keep their names.
Output examples
Real rows from our scheduled run of the live build on 1 October 2026 (кафе, Москва, maxItems: 3), with long links trimmed.
A chain cafe with two published emails and four social links:
{"business_id": "70000001007179642","name": "Му-Му, кафе","name_full": "Му-Му, кафе","category": "Кафе","categories": ["Кафе", "Доставка еды", "Быстрое питание", "Кулинарии", "Столовые"],"address": "Манежная площадь, 1 ст2","address_comment": "-2 этаж; Средний уровень","building": "Охотный ряд","postcode": "125009","country": "Россия","region": "Москва","city": "Москва","district": "Тверской","latitude": 55.755301,"longitude": 37.614586,"phone": "+7 (495) 781\u201287\u201281","phones": ["+7 (495) 781\u201287\u201281", "+7\u2012985\u2012129\u201282\u201276"],"website": "cafemumu.ru","websites": ["cafemumu.ru"],"email": "dostavka@cafemumu.ru","emails": ["dostavka@cafemumu.ru", "fastland@cafemumu.ru"],"social_links": ["https://vk.com/cafemumu", "https://t.me/mumuchatbot", "https://wa.me/74957818781", "https://ok.ru/group/51852991463629"],"rating": 4.8,"review_count": 1107,"chain_name": "Му-Му, кафе","chain_branch_count": 18,"is_chain": true,"schedule_is_24x7": false,"search_query": "кафе","search_city": "Москва","maps_url": "https://2gis.ru/firm/70000001007179642","scraped_at": "2026-10-01T09:04:22.768Z"}
A bar with no published email: email is left out and emails is an empty list.
{"business_id": "70000001063551091","name": "Руки Вверх!, бар","category": "Бары","categories": ["Кафе", "Бары", "Ночные клубы", "Караоке-залы"],"address": "Можайское шоссе, 45Б","address_comment": "3 этаж","postcode": "121353","district": "Можайский","city": "Москва","latitude": 55.7165,"longitude": 37.407401,"phone": "+7 (495) 120\u201253\u201268","phones": ["+7 (495) 120\u201253\u201268"],"website": "mozhayka.rvbar.ru","emails": [],"social_links": ["https://vk.com/rvbar.mozhayka", "https://t.me/book_rvb_bot"],"rating": 4.8,"review_count": 332,"chain_name": "Руки Вверх!, бар","chain_branch_count": 9,"is_chain": true,"schedule_is_24x7": false,"search_query": "кафе","maps_url": "https://2gis.ru/firm/70000001063551091","scraped_at": "2026-10-01T09:04:22.511Z"}
The summary row of the same run (never charged):
{"_type": "summary","city": "Москва","queries": "кафе","delivered": 3,"already_delivered": 0,"scraped_at": "2026-10-01T09:04:23.125Z"}
Pricing
Pay per event: you pay for each business delivered to your dataset, plus a small start fee per run. The price is the same on every Apify plan.
| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
business-scraped, per business | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
business-scraped, per 1,000 businesses | $0.50 | $0.50 | $0.50 | $0.50 |
apify-actor-start, per run | $0.005 per GB of run memory, minimum one event | same | same | same |
The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 1 GB by default, so a default run pays $0.005. At 512 MB it is still one event, $0.005.
Worked examples. 300 dental clinics in Almaty cost $0.15 plus $0.005. A full 5,000 business run costs $2.50 plus $0.005. A weekly monitor run that finds 40 new listings costs $0.02 plus $0.005.
Never charged: a business found by more than one query (charged once), businesses skipped by monitor mode, an unknown city, a search with no results, failed or stalled requests and their retries, and the summary and info rows. A run that delivers nothing pays only the start fee.
There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your plan; if it and this table ever differ, the Pricing tab is right.
FAQ
What is 2GIS? 2GIS is a city map and business directory, strongest in Russia and Kazakhstan and also used in other Central Asian and Caucasus markets. Each listing carries a business's address, categories, opening hours, contacts and reviews. This actor reads the same public catalog data the 2gis.ru website shows to any visitor.
Which cities can I search?
Any city in the region list the 2GIS API serves (the first 200 regions it returns), named in the local spelling 2GIS uses, such as Москва, Санкт-Петербург, Новосибирск, Екатеринбург, Казань or Алматы. If you already know a 2GIS region ID, you can pass the number instead. A name that matches nothing ends the run with an unknown city summary and no charge; copy the spelling from the city switcher on 2GIS itself.
Should I search in Russian or English?
In the local language. 2GIS's categories are in Russian (and local languages in some markets), so аптека finds far more pharmacies than pharmacy.
How many businesses can I get?
Up to 5,000 per run. One query can have far more listings than that: 2GIS reported 8,607 cafes in Moscow for кафе. To go beyond 5,000, split by narrower categories (кофейня, столовая, пекарня) or run the same query with monitorMode on so each run continues with businesses you have not received yet.
Does every business have a phone and an email?
No. Contacts appear when the business listed them on 2GIS. In our scheduled checks of the live build, all 3 sampled Moscow cafes had a phone, a website and a rating, and 2 of the 3 had an email. Expect phones on most listings and emails on a smaller share; emails is an empty list when there is none, and the business is still delivered and charged.
How fresh is the data? Every run queries 2GIS live; nothing is cached between runs. Ratings and review counts are the values 2GIS shows at that moment.
Do I need a 2GIS account, an API key or cookies? No. The actor uses the public browser key that 2GIS's own website embeds in its pages. It tries to read the current key from the site at the start of each run and falls back to the last known key if that read fails, which is what happened in our recent runs, and they all delivered. If 2GIS ever retires that key, runs will deliver nothing and charge nothing until we update the actor.
Which proxy does it use? Apify's datacenter proxy, which is included in the price. Residential proxies are not needed.
Why do run times vary so much? The same 3 business check took between 6 and 71 seconds across 15 runs, because some requests to the 2GIS API stall instead of answering. The actor gives each request 20 seconds before retrying on a fresh session. Long runs average this out to roughly 10 seconds per page of 50.
Can I schedule it and get only new businesses?
Yes. Save your input as a task, add a schedule in Apify Console (Schedules, then Create new), and set monitorMode: true. Each run then delivers and charges only businesses your account has not received from this actor before. The memory is shared by all monitor-mode runs of this actor in your account.
How do I export the data?
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. List fields such as phones and categories become numbered columns in CSV and Excel.
Can I use it from Claude, ChatGPT or another AI assistant?
- Connector URL:
https://mcp.apify.com/?tools=themineworks/2gis-places-search. - Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http 2gis-places-search "https://mcp.apify.com/?tools=themineworks/2gis-places-search".
Is it legal to scrape 2GIS? The actor reads only public business listings that anyone can see on 2GIS without logging in, and it does not get past any login or paywall. Business phone numbers and emails can still count as personal data in some cases (for example a sole trader's own number), so you are responsible for how you use them, including 2GIS's terms and data protection laws such as Russia's 152-FZ, Kazakhstan's personal data law, GDPR and CCPA, and for having a lawful basis before you contact anyone. This is general information, not legal advice.
Integrations
- Google Sheets: export a run to a sheet, or use Apify's Google Sheets integration to append each monitor run's new businesses.
- Make, Zapier and n8n: use the Apify app or node to start a run and send new businesses to your CRM, a call list or a Telegram channel.
- Webhooks: have Apify call your URL when a run succeeds, then read the dataset.
- API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
- MCP clients: Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor as a tool through
https://mcp.apify.com.
For a second source on the same market, Yandex Maps Scraper returns ratings and phones and, on paid placements, the advertiser's registered legal name and tax ID (ИНН).
More from The Mine Works
Leads and business directories
- B2B Leads Finder
- Google Maps Email Scraper
- Skip Trace Lookup
- JustDial Scraper
- IndiaMART Scraper
- Yandex Maps Scraper
- Contact Details Scraper
- US Business Registry
- Google Maps Scraper
- Yellow Pages Scraper
- Lead Generation MCP
- Google Maps Reviews Scraper
Social media and video
Marketing, SEO and reviews
Real estate
Science, health and government data
Jobs and hiring
E-commerce and marketplaces
Company and business data
Food and local services
Developer and AI tools
More tools
- Tennis Match & Player Data Scraper
- Google Hotels Prices Scraper
- LandWatch Scraper
- Capterra Reviews Scraper
Support
Found a city that does not match, or a field you need? Open an issue on the Issues tab of this page with your input and the run ID, and we will reply there. To ask for a new directory or data source, email dmineworks@gmail.com. A guide for this actor also lives at themineworks.com.
2GIS Places Scraper turns a 2GIS search into clean business rows with phones, emails, ratings and chain size, at $0.50 per 1,000 businesses on every plan.

