2GIS Places Scraper · Карты и организации / Maps & businesses avatar

2GIS Places Scraper · Карты и организации / Maps & businesses

Pricing

from $5.00 / 1,000 results

Go to Apify Store
2GIS Places Scraper · Карты и организации / Maps & businesses

2GIS Places Scraper · Карты и организации / Maps & businesses

russian map

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

ScraperX

ScraperX

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

3

Monthly active users

10 hours ago

Last modified

Categories

Share

2GIS Places Scraper — Extract Businesses, Phones, Websites & Reviews | Парсер 2ГИС

Turn any 2GIS search into a clean, structured dataset. This Actor searches 2GIS the same way a user does — a keyword plus a city — then opens every place card and returns the full business profile: name, category, address, coordinates, rating, review counts, opening hours, nearby metro stations, amenities and (optionally) phone numbers, e-mails, websites and social links.

🇷🇺 Парсер 2ГИС: соберите организации, телефоны, сайты и отзывы по любому запросу и городу. Экспорт в JSON, CSV, Excel — или сразу через API.

Works across 20 country domains (Russia, Kazakhstan, Uzbekistan, UAE, Azerbaijan, Georgia, Kyrgyzstan, Armenia, Belarus, Cyprus, Italy, Czechia, Chile, Bahrain, Qatar, Kuwait, Oman, Saudi Arabia, Tajikistan) and 14 interface languages.


What you get

📦 Data extracted⚙️ Built-in capabilities
🏢 Business name, short name, legal extension🔎 Multi-keyword search — many terms in one run
🗂️ 2GIS categories (rubrics) and POI category🌍 20 country domains + 14 languages
📍 Full address: country, region, city, district, street, house, postcode🎛️ 15+ native 2GIS filters (delivery, Wi-Fi, rating, price…)
🧭 Exact latitude / longitude🔁 Automatic proxy escalation on blocking
⭐ Rating, review count, rated-review count🚇 Nearest public-transport stations
💬 Individual reviews with text, date, likes and business replies💾 Live streaming to the dataset — results appear as they are found
☎️ Phones, e-mails, websites, VK / Telegram / WhatsApp📤 Export to JSON, CSV, Excel, XML, RSS
🕒 Weekly opening hours + amenities list🔌 API, scheduler, webhooks & integrations

Key features

  • Search like a human, get data like an API. Give the Actor one or more search phrases and a city — it handles pagination, place pages and data normalisation for you.
  • Bulk keywords. Pass an array of search terms (restaurant, dentist, car wash) and get one merged dataset. Varied wording dramatically improves coverage.
  • Contacts on demand. Turn on Fetch phones & websites to append phoneText, phoneValue, email, website and socials to every record — ideal for lead lists.
  • Real reviews, not just averages. Set a per-place review limit to pull individual reviews with rating, text, dates, like/comment counts, emoji reactions, trust factors and the official business reply.
  • Sentiment and sorting controls for reviews. Fetch only negative reviews (reputation monitoring), only positive ones (testimonials), or everything — sorted by trust or by last edit.
  • Native 2GIS filters. Menu & prices, home delivery, takeaway, has website, has photos, card payment, Wi-Fi, average-check range, recently added, minimum rating, and category (rubric) narrowing.
  • Anti-blocking that escalates by itself. Requests start direct; if 2GIS pushes back, the Actor switches to datacenter proxy, then to residential (up to 3 retries), and sticks with residential once it works. Every transition is written to the log.
  • Streaming output. Records are pushed to the dataset during the run, so a long job is never all-or-nothing.

Use cases

  • Local lead generation — build call lists of restaurants, clinics, salons or workshops in a city, complete with phone numbers and websites.
  • Cold outreach — filter for businesses without a website and pitch web design or marketing services.
  • Market & competitor research — map how many competitors operate in a district, their ratings and price levels.
  • Reputation monitoring — pull only negative reviews for your brand or your competitors and track what customers complain about.
  • Location intelligence & site selection — coordinates, districts and nearest metro stations for catchment analysis.
  • Directory & database enrichment — refresh an existing CRM or directory with current addresses, hours and contacts.
  • Franchise / chain analysisbrand.branchCount shows how many branches an organisation runs.
  • Academic and market datasets — export thousands of normalised business records to CSV or Excel.

How it works

  1. You describe the search — one or more keywords, a city or district, and an optional country domain and language.
  2. The Actor builds real 2GIS search URLs, applying any filters and category IDs you selected, and walks the result pages until your per-query limit is reached.
  3. Firm IDs are collected from the listing (API interception with an HTML fallback), so nothing is missed when the page renders dynamically.
  4. Each place page is opened (3 in parallel) and the full server-side profile is parsed into a flat, predictable record.
  5. Optional extras — contacts and reviews are fetched only for the places you asked for them.
  6. Every record is pushed to the dataset immediately, ready to download or forward to your app.

Quick start

  1. Click Try for free / Start on the Actor page.
  2. In Search terms, type what you are looking for — e.g. Ресторан or dentist.
  3. In City & area, type the city — e.g. Москва, Алматы, Dubai.
  4. Set Max places per query (start with 10–50 while testing).
  5. Optionally switch on Fetch phones & websites.
  6. Press Save & Start, then open the Output tab and export as CSV, JSON or Excel.

Minimal input

{
"query": ["Ресторан"],
"locationQuery": "Москва",
"maxItems": 25
}

Input configuration

Only query is required. Everything else has a sensible default.

FieldTypeDefaultDescription
queryarray of strings— (required)One or more search phrases, exactly as you would type them into 2GIS.
locationQuerystringМоскваCity, district, street or landmark to search in.
maxItemsinteger10Maximum places per search term. 0 = take everything the site returns.
domainstringauto2GIS country domain: auto, 2gis.ru, 2gis.kz, 2gis.uz, 2gis.ae, 2gis.az, 2gis.ge, 2gis.kg, 2gis.am, 2gis.by, 2gis.tj, 2gis.com.cy, 2gis.it, 2gis.cz, 2gis.cl, 2gis.bh, 2gis.qa, 2gis.kw, 2gis.om, 2gis.sa.
languagestringautoInterface language: auto, ru, en, ar, az, hy, ka, kk, ky, tg, uz, cs, es, it.

Contacts

FieldTypeDefaultDescription
includeContactsbooleanfalseAdds phoneText, phoneValue, email, website and socials to each place.

Reviews

FieldTypeDefaultDescription
maxReviewsPerPlaceinteger0How many individual reviews to fetch per place. 0 = ratings/counts only.
reviewSortBystringtrusttrust (most useful first) or date_edited (newest edits first).
reviewRatingsstringallall, negative or positive.
includeUnratedReviewsbooleanfalseAlso return text reviews left without a star rating.
includeReviewerDatabooleanfalseAdds the review author's id, public id, name, review count and avatar.

Filters

FieldTypeDefaultDescription
rubricIdsarray[]Narrow to specific 2GIS categories (rubrics).
filterHasGoodsbooleanfalseOnly places with a menu / price list.
filterHomeDeliverybooleanfalseOnly places offering delivery.
filterTakeawaybooleanfalseOnly places offering takeaway.
filterHasSitebooleanfalseOnly places that have a website.
filterHasPhotosbooleanfalseOnly places with photos on the card.
filterPaymentCardbooleanfalseOnly places accepting card payment.
filterWifibooleanfalseOnly places with Wi-Fi.
filterCreatedRecentlybooleanfalseOnly recently added places.
filterAvgPriceMinintegerMinimum average check.
filterAvgPriceMaxintegerMaximum average check.
filterRatingstringMinimum rating band: rating_rating_perfect, rating_rating_excellent, rating_rating_pretty_good, rating_rating_nice, rating_rating_not_bad.

Proxy: there is no proxy field to configure. The Actor manages the direct → datacenter → residential escalation automatically.


Output data

Every dataset row is one place. Fields are flat and stable, so CSV and Excel exports stay tidy.

FieldTypeDescription
idstring2GIS firm ID.
titlestringBusiness name.
shortName / extensionstringShort name and legal-form extension.
urlstringCanonical 2GIS place URL.
rubricsarray2GIS category names.
categorystringPOI category.
totalScorenumberAverage rating.
reviewsCountnumberTotal reviews.
ratingCountnumberReviews that carry a star rating.
summarystringTagline or description text from the card.
country, region, city, districtstringAdministrative breakdown.
street, houseNumber, address, postcodestringAddress components and full address line.
locationobject{ "lat": …, "lng": … }.
working_hoursobjectPer-day { "from": "…", "to": "…" } for Mon–Sun.
nearestStationsarray{ name, distance, comment } for nearby stops/stations.
attributeGroupsarrayAmenity labels (Wi-Fi, card payment, delivery…).
mainPhotoUrlstringMain photo from the place card.
brandobject{ name, shortName, extension, branchCount, rating: { score, reviews } }.
detailsTypestring2GIS record type (branch, building…).
searchString, searchUrl, pageNumberstring / numberWhich query and result page produced the row.
scrapedAtstringUTC ISO timestamp of extraction.

Added when includeContacts is on: phoneText[], phoneValue[], email[], website[], socials (vk, telegram, whatsapp).

Added when maxReviewsPerPlace > 0: reviewsMeta (branch rating, total/fetched counts, applied sort and filters) and reviews[] — each with id, provider, rating, text, dateCreated, dateEdited, isRated, likesCount, commentsCount, emojis, trustFactors, officialAnswer, and user when includeReviewerData is on.

Example output

{
"id": "70000001006523000",
"title": "White Rabbit",
"shortName": "White Rabbit",
"url": "https://2gis.ru/moscow/firm/70000001006523000",
"rubrics": ["Ресторан", "Панорамный ресторан"],
"category": "food_and_drink",
"totalScore": 4.6,
"reviewsCount": 4821,
"ratingCount": 4310,
"summary": "Панорамный ресторан современной русской кухни",
"country": "Россия",
"region": "Москва",
"city": "Москва",
"district": "Пресненский",
"street": "Смоленская площадь",
"houseNumber": "3",
"address": "Смоленская площадь, 3",
"postcode": "121099",
"location": { "lat": 55.747, "lng": 37.582 },
"working_hours": { "Mon": { "from": "12:00", "to": "00:00" } },
"nearestStations": [{ "name": "Смоленская", "distance": 320, "comment": "метро" }],
"attributeGroups": ["Wi-Fi", "Оплата картой", "Веранда"],
"mainPhotoUrl": "https://photo.2gis.com/…",
"brand": {
"name": "White Rabbit Family",
"branchCount": 12,
"rating": { "score": 4.6, "reviews": 4821 }
},
"phoneText": ["+7 495 663-03-13"],
"website": ["http://whiterabbitmoscow.ru"],
"socials": { "telegram": ["whiterabbitmoscow"] },
"searchString": "Ресторан",
"pageNumber": 1,
"scrapedAt": "2026-08-10T09:14:22Z"
}

Values above are illustrative; your run returns live 2GIS data.


Usage examples

Lead list — businesses without a website

{
"query": ["Стоматология", "Стоматологическая клиника"],
"locationQuery": "Казань",
"maxItems": 0,
"includeContacts": true
}

Export, then filter rows where website is empty — those are your prospects.

Reputation monitoring — negative reviews only

{
"query": ["Пятёрочка"],
"locationQuery": "Санкт-Петербург",
"maxItems": 50,
"maxReviewsPerPlace": 30,
"reviewRatings": "negative",
"reviewSortBy": "date_edited",
"includeReviewerData": true
}

Restaurants with delivery, top rated, in Dubai

{
"query": ["restaurant"],
"locationQuery": "Dubai",
"domain": "2gis.ae",
"language": "en",
"maxItems": 200,
"filterHomeDelivery": true,
"filterRating": "rating_rating_excellent"
}

Multi-city sweep with several keywords

{
"query": ["автосервис", "шиномонтаж", "автомойка"],
"locationQuery": "Алматы",
"domain": "2gis.kz",
"maxItems": 100,
"includeContacts": true,
"filterPaymentCard": true
}

Run it from your own code

The Actor is callable from any language through the Apify API, and from the official Python, JavaScript/Node.js and CLI clients.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("scraperx/2gis-places-scraper").call(run_input={
"query": ["Ресторан"],
"locationQuery": "Москва",
"maxItems": 50,
"includeContacts": True,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
print(place["title"], place.get("phoneText"), place.get("address"))

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('scraperx/2gis-places-scraper').call({
query: ['Ресторан'],
locationQuery: 'Москва',
maxItems: 50,
includeContacts: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

curl -X POST "https://api.apify.com/v2/acts/scraperx~2gis-places-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":["Ресторан"],"locationQuery":"Москва","maxItems":25}'

Integrations

Results can be pushed straight into Google Sheets, Airtable, Slack, Zapier, Make, GitHub, Google Drive and any HTTP endpoint via webhooks. You can also run the Actor on a schedule so your dataset refreshes daily or weekly without you touching anything.


Pricing

This Actor runs on Apify's pay-per-event model — you are charged for the results you actually receive (dataset items, plus optional review and contact extras), not for machine time you cannot predict. The current, authoritative rates are always shown on the Pricing tab of this Actor's page, and Apify displays the estimated cost before and during every run.

New Apify accounts include free monthly platform credit, which is enough to test the Actor end-to-end.


Limits & good to know

  • Coverage follows 2GIS. 2GIS paginates search results, so extremely broad queries in huge cities will stop at the site's own ceiling. Split them into narrower keywords or districts for deeper coverage.
  • maxItems is per search term, not per run — three keywords with maxItems: 100 can return up to 300 rows.
  • Fields are returned only when 2GIS publishes them. A business without a website simply has an empty website array.
  • The following inputs are accepted but not applied in the current version, and the run log warns you when you set them: sortBy, customGeolocation, maxMediaPerPlace (extra photo/video extraction) and enableGlobalDataset (cross-run deduplication). Photos are limited to mainPhotoUrl.
  • Runs default to 4 GB memory and a 1-hour timeout; raise the timeout for very large sweeps.

FAQ

Do I need a 2GIS account, API key or cookies? No. The Actor only reads publicly available pages.

Which countries are supported? Everywhere 2GIS operates — 20 country domains, selectable with the domain field, or left on auto.

Can I get e-mail addresses? Yes, when a business publishes one on its 2GIS card and you enable Fetch phones & websites. Not every listing has an e-mail.

How do I scrape an entire city? Set maxItems to 0 and use several specific keywords rather than one broad one. Add category filters to keep results relevant.

Can I get only recent or only negative reviews? Yes — combine maxReviewsPerPlace with reviewRatings: "negative" and reviewSortBy: "date_edited".

What happens if 2GIS blocks the run? The Actor escalates automatically: direct → datacenter proxy → residential proxy with up to three retries, then stays on residential. You will see each switch in the log.

In which formats can I export? JSON, CSV, Excel (XLSX), XML and RSS — from the UI, or through the API.

Can I schedule recurring runs? Yes. Use Apify Schedules for daily/weekly refreshes, and webhooks to notify your system when a run finishes.


This Actor collects only data that 2GIS publishes publicly — the same information any visitor can see. It does not log in, bypass paywalls, or access private data. You are responsible for ensuring your use of the collected data complies with 2GIS's terms, applicable law, and data-protection rules such as GDPR (personal data — including business phone numbers and e-mails — requires a lawful basis for processing).

Support

Found a bug or need an extra field? Open an issue on the Actor's Issues tab. Feature requests that make the Actor better for everyone are welcome.