2GIS Scraper — Business Leads: Phones, Emails, Reviews & Hours avatar

2GIS Scraper — Business Leads: Phones, Emails, Reviews & Hours

Pricing

from $1.50 / 1,000 results

Go to Apify Store
2GIS Scraper — Business Leads: Phones, Emails, Reviews & Hours

2GIS Scraper — Business Leads: Phones, Emails, Reviews & Hours

Scrape 2GIS business listings by keyword or category across any city. Extract names, phones, emails, websites, social links, addresses, ratings, reviews and opening hours for B2B lead generation. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

2GIS Scraper — Business Leads: Phones, Emails, Reviews & Opening Hours (No API Key)

Apify Actor No API key Pay per result Category Export

An unofficial 2GIS scraper and structured 2GIS business-data API in a single Apify Actor. Pull local-business leads from 2GIS (2gis.ru) by keyword or by category, across one city or many cities at once — with phones, emails, websites, social links, addresses, GPS coordinates, ratings, review counts and opening hours on every row. Powered directly by 2GIS's own public Catalog API — no API key, no login, no cookies, no headless browser. Just fast HTTP and clean, flat JSON you can export to CSV, Excel or JSON. Three modes share one input form, and every result is tagged with _mode so you can mix modes in a single dataset and filter later.

🏆 Why this 2GIS scraper?

3 modes in 1 Actor (keyword search, whole-category sweep, batch details) · powered by 2GIS's own Catalog API · thousands of businesses per city · multi-city batch (loop many regions in one run) · full contact extraction (phones + emails + VK/Telegram/Instagram/WhatsApp) · clean split address fields (country / region / city / district) · keyless with automatic key refresh — no browser and no key to manage. The unofficial 2GIS API alternative for lead generation, local SEO, market mapping and AI agents.


✨ What this Actor does / Key features

  • 🔎 Keyword search — find every business matching a term (restaurant, dentist, coffee, аптека, hotel…), optionally scoped to one or more cities; paginates the full result set (thousands of matches).
  • 🗂️ Whole-category sweep — browse an entire 2GIS rubric (category) across one or many cities via rubric_id + region_id — e.g. every restaurant in Moscow (3,900+), every pharmacy, every beauty salon.
  • 🌍 Multi-city batch — pass an array of region IDs (and, in category mode, an array of rubric IDs) and the Actor loops the cross-product so one run sweeps many cities and verticals at once.
  • ☎️ Full contact extractionphone + all phones[], email + all emails[], website + all websites[], plus VK, Telegram, Instagram, WhatsApp and Facebook links — the real value for B2B lead gen.
  • 📍 Clean split addresscountry, region, city, district, address, postcode, plus precise lat/lon — geo fields most competitors flatten away.
  • Ratings & reviewsratingValue and reviewCount on every listing, straight from 2GIS/Flamp.
  • 🕒 Opening hours — a human-readable workingHours string, an is24x7 flag and a structured per-day scheduleStructured object.
  • 🧩 Batch details — feed many 2GIS firm/branch IDs at once with byId for enrichment.
  • 🔑 Keyless & self-healing — the Actor mints 2GIS's public web key itself at startup (with a built-in fallback), so you never supply a key. No browser, no OAuth; every item carries _mode and scrapedAt (ISO 8601).
  • 🗂️ 3 pre-built dataset views — Overview, Leads (contacts) and Location — slice the data with zero post-processing.

The 3 modes

ModeWhat it returns
searchFree-text business search by keyword (q), optional multi-city scope — highest volume
categoryWhole category (rubric) across one or more cities via rubric_id + region_id
byIdFull details for one or many 2GIS firm/branch IDs (batch)

🚀 Quick start (3 steps)

  1. Pick a Mode — start with search and a keyword to build a lead list, or category with a rubric_id + region_id to sweep a whole vertical of a city.
  2. Fill the fields that mode needs — the input form shows which apply (a query keyword, a regionId city, a rubricId category, or a batch of ids).
  3. Run & export — download results as JSON, CSV, Excel, HTML, RSS or JSON Lines, or pull them via the Apify API.

Empty input works too — it returns Moscow restaurants so you can see real rows immediately.

📥 Input

Pick a mode, then fill only the fields that mode needs. Nothing is required.

Example — keyword search for restaurants in Moscow

{
"mode": "search",
"query": "restaurant",
"regionId": "32",
"maxResults": 600
}

Example — sweep an entire category (all restaurants in Moscow)

{
"mode": "category",
"rubricId": "164",
"regionId": "32",
"maxResults": 2000
}

Example — multi-city lead sweep (dentists in 3 cities)

{
"mode": "search",
"query": "dentist",
"regionIds": ["32", "2", "1"],
"maxResults": 1500
}

Example — batch details by 2GIS ID

{
"mode": "byId",
"ids": ["70000001031659781", "70000001006481143"]
}
FieldTypeDefaultUsed byDescription
modestring (select)searchallsearch, category or byId.
querystringкафеsearchFree-text business keyword (a type or brand).
regionIdstringsearch, category2GIS region/city ID, e.g. 32 = Moscow.
regionIdsarray[]search, categoryMany region IDs to sweep several cities in one run.
rubricIdstring164category2GIS category (rubric) ID, e.g. 164 = Restaurants.
rubricIdsarray[]categoryMany rubric IDs to sweep several categories.
idstringbyIdA single 2GIS firm/branch ID.
idsarray[]byIdBatch of 2GIS firm/branch IDs.
maxResultsinteger200allRow cap across the whole run; drives pagination.
proxyConfigurationobjectApify Proxy (auto)allProxy settings; default works well.

Finding region and rubric IDs

  • Region (city) ID appears in a city's 2gis.ru URL and in the regionId you pass. Common ones: 32 Moscow · 2 Saint Petersburg · 1 Novosibirsk · 4 Yekaterinburg · 54 Kazan.
  • Rubric (category) ID: the easiest way is to run a search first and read the categories field on the results, or copy the ID from a 2gis.ru category URL. Common ones: 164 Restaurants · 161 Cafes · 165 Bars · 271 Pharmacies · 327 Beauty salons.

📤 Output — what data you get

Results stream to the dataset; every item is a flattened business lead tagged with _mode and scrapedAt. Contacts are the headline value, so phones, emails and socials are all extracted.

Field reference

FieldTypeDescription
idstring2GIS firm/branch ID.
namestringBusiness name.
typestringObject type (branch, building, admin, street…).
categoriesstringAll 2GIS categories (rubrics), comma-joined.
primaryCategorystringThe primary category only.
addressstringFull street address (address_name).
addressCommentstringExtra locator (floor, entrance…).
postcodestringPostal code.
countrystringCountry (from adm_div).
regionstringRegion / oblast (from adm_div).
citystringCity (from adm_div).
districtstringCity district (from adm_div).
latnumberLatitude.
lonnumberLongitude.
phonestringFirst / primary phone.
phonesarrayAll phone numbers.
websitestringPrimary website.
websitesarrayAll websites.
emailstringFirst email.
emailsarrayAll emails.
vkstringVKontakte URL.
telegramstringTelegram URL.
instagramstringInstagram URL.
whatsappstringWhatsApp contact.
facebookstringFacebook URL.
workingHoursstringHuman-readable opening hours (e.g. Mon 09:00-22:00; Sat 10:00-23:00, or 24/7).
is24x7booleanWhether the business is open 24/7.
scheduleStructuredobjectPer-day working_hours[] ({from,to}) object.
ratingValuenumberAverage rating.
reviewCountnumberNumber of reviews.
descriptionstringShort description, when present.
orgIdstringParent organization ID (chains).
branchCountnumberNumber of branches of the parent org.
twogisUrlstringCanonical https://2gis.ru/firm/<id> link.
_modestringWhich mode produced the row.
scrapedAtstringISO-8601 timestamp.

Output example

{
"_mode": "category",
"rubricId": "164",
"regionId": "32",
"id": "70000001031659781",
"name": "Мясо&Рыба, ресторан",
"type": "branch",
"categories": "Рестораны, Доставка еды",
"primaryCategory": "Рестораны",
"address": "улица Архитектора Щусева, 4 к1",
"addressComment": "1 этаж",
"postcode": "115432",
"country": "Россия",
"region": "Москва",
"city": "Москва",
"district": "Даниловский",
"lat": 55.766672,
"lon": 37.599969,
"phone": "+74956409640",
"phones": ["+74956409640", "+79917271660"],
"website": "delikateska.ru",
"websites": ["delikateska.ru", "dzen.ru"],
"email": "mail@delikateska.ru",
"emails": ["mail@delikateska.ru"],
"vk": "https://vk.com/delikateska",
"telegram": "https://t.me/delikateska_ru",
"instagram": null,
"whatsapp": null,
"facebook": null,
"workingHours": "24/7",
"is24x7": true,
"scheduleStructured": null,
"ratingValue": 4.8,
"reviewCount": 4130,
"description": null,
"orgId": "4504136499435533",
"branchCount": 11,
"twogisUrl": "https://2gis.ru/firm/70000001031659781",
"scrapedAt": "2026-07-24T12:00:00.000Z"
}

💡 Use cases

  • B2B lead generation — build targeted lists of local businesses (restaurants, dentists, gyms, contractors…) with phones, emails and social channels ready for outreach or CRM import.
  • Local SEO & citation building — audit a category across a city, check names/addresses/phones (NAP), find businesses with missing websites or hours.
  • Market & competitor mapping — pull every competitor in a vertical per city, plot them by lat/lon, compare ratings and review volume.
  • Sales territory planning — sweep multiple cities in one run and segment leads by district, category and rating.
  • Data enrichment — feed your own business IDs into byId to attach fresh contacts, hours and ratings.
  • AI agents & RAG — wire the Actor as a tool so an LLM can answer "list top-rated pharmacies in Kazan with phone numbers" and return structured leads.

👥 Who uses it

Sales & lead-gen teams building outreach lists · local-SEO and marketing agencies · market researchers and analysts mapping verticals · data teams enriching a CRM · directory and aggregator builders · AI-agent developers wiring 2GIS as a data tool.

💰 Pricing

This Actor runs on a simple pay-per-result model — you pay for the leads you extract, with no separate Apify platform fees to calculate. It uses no browser (just HTTP against 2GIS's JSON API), so runs are quick and lightweight. Try it on the free tier first, then scale up. See the Pricing tab on this page for the current rate.

⚙️ How it works

The Actor calls 2GIS's own public Catalog API (catalog.api.2gis.com) — the same endpoint the 2gis.ru web map uses. That API needs a public "web API key", which the Actor mints itself at startup by reading the current webApiOutsourceKey from 2gis.ru (with a known-good built-in fallback), so you never supply a key. In search and category modes it paginates 50 results per page until it hits maxResults or the last page, looping every region (and rubric) you pass. Requests go through Apify Proxy (residential group) with a fresh IP per retry — the 2GIS API blocks datacenter IPs, so residential proxying is handled automatically for you. There is a ~4-minute time budget: on very large sweeps it pushes what it has collected and exits successfully rather than running forever.

🧭 Tips for best results

  • Scope by city for cleaner leads. Pass a regionId (e.g. 32 for Moscow) so results are one city; leave it empty only if you want the broadest possible match.
  • Use category for exhaustive coverage. Keyword search is great for a term; rubric_id + region_id returns the entire vertical of a city (thousands of rows).
  • Sweep many cities in one run with regionIds, and many verticals with rubricIds — the Actor loops the cross-product automatically.
  • Discover rubric IDs by running a quick search first and reading the categories field, then switch to category mode with that ID.
  • Raise maxResults to pull a whole city; keep it modest (100–500) for a fast, cheap sample.
  • Filter for leads with contacts after export by keeping rows where phone or email is non-null.
  • Coordinates are real numbers (lat/lon) — drop them straight into a map or geo join.
  • Chains share an orgId and expose branchCount; de-dupe on orgId if you only want one row per brand.
  • Localized text: 2GIS data is primarily Russian/CIS; names and categories come back in the local language.
  • Re-run on a schedule to keep phones, hours and ratings fresh.

🔌 Integrations

Push 2GIS leads anywhere Apify connects:

  • Google Sheets — export the dataset straight into a sheet for the sales team.
  • Slack — notify a channel when a new sweep finishes.
  • Zapier / Make / n8n — trigger workflows on new items (add to CRM, enrich, email).
  • Webhooks — POST results to your own endpoint on run completion.
  • Schedules — refresh a city/category dataset daily or weekly.
  • Apify API & clients — pull items on demand from your stack (see below).

🧑‍💻 API usage

Run the Actor and fetch results from your own code. Get your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~2gis-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"category","rubricId":"164","regionId":"32","maxResults":500}'

Node.js (Apify client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/2gis-scraper').call({
mode: 'search',
query: 'restaurant',
regionId: '32',
maxResults: 600,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'leads');

Python (Apify client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/2gis-scraper").call(run_input={
"mode": "category",
"rubricId": "164",
"regionId": "32",
"maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item.get("phone"))

🤖 Use with AI agents (MCP)

This Actor works as a tool for LLM agents via the Apify MCP server, so an assistant can fetch live 2GIS leads on demand. Point your MCP client at Apify, expose logiover/2gis-scraper, and prompt naturally — e.g. "Get me 100 top-rated coffee shops in Saint Petersburg (region 2) with phone numbers and websites, as a table." The agent runs the Actor and reads the structured dataset back.

❓ Frequently Asked Questions

Do I need a 2GIS API key or account?

No. This is an unofficial 2GIS scraper that reads publicly available data through 2GIS's own Catalog API. The Actor mints the required public web key itself (with a built-in fallback), so you only need an Apify account — no 2GIS key, no login, no cookies.

Is this a 2GIS API or a 2GIS API alternative?

Both, effectively. It works as an unofficial 2GIS API and a practical 2GIS data-export alternative: send structured input (keyword, category, IDs), get structured JSON back with contacts, geo, ratings and hours — without applying for 2GIS's official developer API.

How do I scrape 2GIS phone numbers and emails?

Every row includes phone (first) and phones[] (all), plus email and emails[] when the business publishes them. Use search with a keyword or category with a rubric ID, then filter exported rows to those with a non-empty phone or email.

Which cities and countries does it cover?

2GIS covers Russia and several CIS/other markets (e.g. Kazakhstan, Kyrgyzstan, the UAE, and more). Scope any city with its regionId (e.g. 32 Moscow, 2 Saint Petersburg), or sweep several at once with regionIds.

How do I find a region ID or a rubric (category) ID?

A region ID appears in a city's 2gis.ru URL. For a rubric ID, run a quick search first and read the categories field on the results, or copy the ID from a 2gis.ru category URL. Common rubrics: 164 restaurants, 161 cafes, 271 pharmacies.

How many businesses can one run return?

A single city category can hold thousands of businesses (e.g. 3,900+ restaurants in Moscow). The Actor paginates up to your maxResults, and with regionIds / rubricIds you can sweep many cities and verticals in one run.

Why are some fields empty (null)?

Not every business publishes every detail. A listing may have no email, no website, or no posted hours — those fields come back null while the rest of the row is fully populated. Contacts are extracted whenever 2GIS exposes them.

Can I get opening hours in a structured form?

Yes. workingHours is a readable string, is24x7 is a boolean, and scheduleStructured is a per-day object with {from,to} spans — use whichever fits your pipeline.

How do I export 2GIS data to CSV, JSON or Excel?

Run any mode and download the dataset as CSV, JSON, Excel (XLSX), HTML, RSS or JSON Lines from the run page, or pull it via the Apify API. This makes it a simple 2GIS data-export and business-directory tool.

How fast is it, and does it use a browser?

It uses no browser — just HTTP against 2GIS's JSON API (through residential proxies, which the 2GIS API requires) — so it's efficient. Large sweeps stop at a ~4-minute time budget and still return everything collected so far.

The Actor collects only publicly available business data served by 2GIS's own endpoints. You are responsible for using the data in compliance with 2GIS's terms of service, applicable privacy laws (e.g. for personal data) and any local regulations.

This Actor extracts only publicly available business information served by 2GIS's own public endpoints, and is intended for legitimate use such as lead generation, market research, local SEO and dataset-building. It does not bypass any login or access control. You are responsible for complying with 2GIS's terms of service, applicable data-protection/privacy laws when handling any personal data (for example, contacting individuals), and any other relevant local regulations.

Building a local-business or lead-gen dataset? Pair 2GIS with the rest of the suite:

ActorWhat it does
B2B Lead ScraperSector + country B2B leads (company, person, email) from open map data
LinkedIn Company ScraperCompany profiles & firmographics, no login
Meta Ad Library ScraperAdvertiser ads, spend and impressions
Company Registry ScrapersOfficial company registries across many countries

👉 Browse all logiover scrapers on Apify Store — 180+ actors across real estate, jobs, crypto, social media & B2B data.


📝 Changelog

2026-07-24

  • 🎉 Initial release: three 2GIS modes (keyword search, whole-category sweep, batch details) over 2GIS's public Catalog API — keyless with automatic web-key refresh, multi-city/multi-category batch, full contact extraction (phones + emails + VK/Telegram/Instagram/WhatsApp), clean split address (country/region/city/district), coordinates, ratings, review counts and opening hours. Three dataset views: Overview, Leads and Location.