2GIS icon

2GIS

From $1/1K. Extract business and place data from 2GIS.com at scale. Get names, addresses, phones, emails, websites, social links, opening hours,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

2GIS at a glance

2GIS is a ready-to-run Apify actor from abotapi for collecting lead generation data. Its documented output includes record type, id, full id, name and full name, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Lead Generation, Automation, Real Estate
Pricing
$1.80 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
39 options

From $1/1K. Extract business and place data from 2GIS.com at scale. Get names, addresses, phones, emails, websites, social links, opening hours, ratings, reviews, photos, coordinates, and 80+ fields per place. Supports all regions covered by 2GIS with fast, low-cost extraction.

What 2GIS $1💰 Extract Phones, Emails, Reviews & Locations can do

  • One flexible search. Combine a WHAT (a text query and/or a category) with a WHERE (a city, coordinates with a radius, or a map area bounding box) in a single mode, plus a separate mode for direct 2GIS links or IDs.
  • 80+ fields per place, with every contact channel split out individually: primary phone, all phones, email, website, WhatsApp, Telegram, Instagram, VK, Facebook and more.
  • Reviews on demand. Pull full review text, author, rating, date, source (2GIS or Flamp), photos and the official reply, filtered by rating, keyword, date or whether it has a reply.
  • Structured opening hours. All seven days, each with an explicit open or closed status, plus a ready to read summary string.
  • Wide coverage. Russia, Kazakhstan, Uzbekistan, Kyrgyzstan, Azerbaijan, Georgia, Armenia, the UAE, Saudi Arabia, Qatar, Kuwait, Czechia, Italy and every other region 2GIS covers.
  • Built for monitoring. Incremental mode classifies places and reviews as new, updated, unchanged or reappeared (and expired for places) on recurring runs, so a schedule returns only what changed.

Choose what to collect

These inputs let you configure 2GIS $1💰 Extract Phones, Emails, Reviews & Locations. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredsearch = find places by query, category, city, coordinates, or map area (any combination). url = scrape specific 2GIS links or IDs.

Choices: search, url

queryarrayWHAT to find, as free text, for example coffee shop, dentist, hotel. Each query runs separately. Optional: leave empty (and no categories) to return every place in the chosen area.
categoryQueryarrayWHAT to find, as category names, for example Restaurants, Pharmacies, Car repair. Each is matched against the 2GIS category tree and runs separately. Optional, and combine freely with queries.
latitudestringSearch around a center point. Latitude, for example 55.7558. Provide together with longitude. Overrides city.
longitudestringCenter longitude, for example 37.6173. Provide together with latitude.
radiusMetersintegerSearch radius around the center point, in meters. Max 40000. Only used when latitude and longitude are set.
bboxstringRectangle: lon1,lat1,lon2,lat2 (south-west corner then north-east corner), for example 37.55,55.70,37.70,55.80. Overrides city and coordinates.
Show 32 more inputs
More input fields
InputWhat it controls
urlsarrayPaste 2GIS links: place pages (/firm/ID), searches (/search/query), buildings (/inside/ID), short links (go.2gis.com), or raw numeric firm IDs. Multiple supported. Left untouched, it scrapes one example of each shape. Used only when mode = url.
citystringWhere to look, by city name, for example Moscow, Москва, Almaty, Dubai. Ignored if you provide coordinates or a map area.
languagestringResponse language for names and content. For a city or link on another 2GIS country site (for example 2gis.ae or 2gis.kz) the matching local locale is used automatically when this language is not offered there (Russian on 2gis.ae is served in English).

Choices: ru, en, ar, kk, ky, ka, az, cs, it, uz

sortBystringResult ordering. Distance only applies when searching around coordinates; otherwise it falls back to relevance. Newest listings and Name use the 2GIS catalog sort in search mode.

Choices: relevance, rating, distance, opened_time, name

minRatingstringKeep only places with rating at or above this value (0 to 5). Leave blank for no filter.
minReviewsintegerKeep only places with at least this many reviews. Leave blank for no filter.
onlyWithPhonebooleanSkip places that have no phone number.
onlyWithWebsitebooleanSkip places that have no website.
skipAdsbooleanSkip advertising or promoted entries.
rubricIdsarrayExact 2GIS rubric (category) ids to search, one search per id. Use alongside or instead of Category names.
onlyWithPhotosbooleanSearch mode: ask 2GIS for places that have photos.
onlyWithGoodsbooleanSearch mode: ask 2GIS for places that list goods or a menu.
openNowbooleanSearch mode: ask 2GIS for places open at run time.
maxReviewsintegerHow many reviews to fetch per place. 0 = do not fetch reviews. Reviews are pushed as separate records. Fetching reviews adds an extra request per place.
reviewsSortstringOrder of fetched reviews.

Choices: date_edited, date_created, rating, friends

reviewsProviderstringWhich review source to keep: all, 2GIS only, or Flamp only.

Choices: all, 2gis, flamp

reviewsRatingstringKeep all reviews, only positive (4 to 5 stars), or only negative (1 to 3 stars).

Choices: all, positive, negative

reviewsMinRatingstringKeep only reviews at or above this star rating (1 to 5). Leave blank for no limit.
reviewsWithAnswerbooleanKeep only reviews that have an official reply from the place.
reviewsStartDatestringKeep only reviews created on or after this date (YYYY-MM-DD). Leave blank for no limit.
reviewsKeywordstringKeep only reviews whose text contains this word or phrase. Leave blank for no filter.
includePhotosbooleanInclude photo URLs available in the place record.
maxResultsintegerMaximum total places across all queries / URLs. 0 = unlimited (capped at the 2GIS per-query ceiling of about 3000).
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl of places without returning or charging for places already collected there. Use this after an interrupted run, or when continuing a large pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching places (and their reviews) as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED places and reviews. COMPARED: every output field of a place (name, address, rating, review count, hours, phone, website, photos, attributes, categories and so on) and every field of a review (rating, text, dates, likes, owner answer, photos). EXCLUDED on places (they change on every fetch, or are derived or re-sent copies of compared fields): fullId, contactsRaw, adsRaw, scrapedAt, pageNumber, searchUrl, searchRubricId, searchRubricLabel, createdAt, updatedAt, mainPhotoUrl, brand, attributeGroups, scheduleSpecial, phoneText, phoneValue; they are still returned in the output. Use "Ignore fields when detecting changes" to exclude more. Places and reviews are tracked separately, so a place with a brand-new review is not itself reported as UPDATED. Turn on "Emit unchanged" or "Emit expired" only when you also want those rows returned (and billed). State is kept separately for each search/category/URL and filter setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/category/URL and filter settings, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return places and reviews that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return places that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max places capped it or when Resume was used. Reviews do not have an EXPIRED state: review fetching is limited by Max reviews per place and the review filters, so an absent review is not reliable evidence it was deleted. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Field names that must NOT count as a change when incremental mode compares a place or review with the previous run, for example photos or rating. A name matches that field at any depth (a plain name also matches inside nested lists and objects); use dotted paths such as address.city for one specific nested field. Ignored fields are still returned in the output, they just never make a row UPDATED or appear in changedFields. Changing this list does not mark everything as UPDATED. Always ignored already on places: fullId, contactsRaw, adsRaw, scrapedAt, pageNumber, searchUrl, searchRubricId, searchRubricLabel, createdAt, updatedAt, mainPhotoUrl, brand, attributeGroups, scheduleSpecial, phoneText, phoneValue.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordTypeRecord Type (text)
idID (text)
fullIdFull ID (text)
nameName (text)
fullNameFull Name (text)
shortNameShort Name (text)
nameExtensionName Extension (text)
urlURL (link)
typeType (text)
subtypeSubtype (text)
purposePurpose (text)
descriptionDescription (text)
Show 115 more fields
rubricsCategories (array)
rubricIdsCategory IDs (array)
primaryRubricPrimary Category (text)
ratingRating (number)
reviewCountReviews (number)
ratingCountRating Count (number)
isReviewableIs Reviewable (boolean)
orgRatingOrganization Rating (number)
orgReviewCountOrganization Review Count (number)
flampRatingFlamp Rating (number)
flampReviewCountFlamp Review Count (number)
addressAddress (text)
fullAddressFull Address (text)
addressCommentAddress Comment (text)
postcodePostcode (text)
buildingIdBuilding ID (text)
countryCountry (text)
regionRegion (text)
cityCity (text)
districtDistrict (text)
livingAreaLiving Area (text)
streetStreet (text)
houseNumberHouse Number (text)
latitudeLat (number)
longitudeLon (number)
timezoneOffsetTimezone Offset (number)
nearestStationsNearest Stations (array)
buildingNameBuilding Name (text)
floorCountFloor Count (number)
undergroundFloorsUnderground Floors (number)
orgIdOrganization ID (text)
orgNameOrganization Name (text)
orgBranchCountOrganization Branch Count (number)
isPromotedIs Promoted (boolean)
isAdvertisedIs Advertised (boolean)
isClosedIs Closed (boolean)
badgesBadges (array)
hasPhotosHas Photos (boolean)
adTextAd Text (text)
adDisclaimerAd Disclaimer (text)
photosPhotos (array)
photoCountPhoto Count (number)
attributesAttributes (array)
attributesByTagAttributes by Tag (object)
is24x7Open 24/7 (boolean)
hoursHours (object)
hoursTextHours Text (text)
scheduleCommentSchedule Comment (text)
searchQuerySearch Query (text)
contactsRawRaw Contacts (array)
admDivRawRaw Admin Divisions (array)
adsRawRaw Ads (object)
linksRawRaw Links (object)
phonePhone (text)
phonesAll Phones (array)
emailEmail (text)
emailsAll Emails (array)
websiteWebsite (link)
websitesAll Websites (array)
faxFax (text)
socialsSocial Networks (object)
whatsappWhatsApp (text)
telegramTelegram (text)
instagramInstagram (text)
vkVK (text)
okOK.ru (text)
facebookFacebook (text)
viberViber (text)
youtubeYouTube (text)
twitterTwitter (text)
skypeSkype (text)
tiktokTikTok (text)
maxMax (text)
pinterestPinterest (text)
icqICQ (text)
changeTypeChange type (incremental mode) (text)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
createdAtCreated At (text)
updatedAtUpdated At (text)
mainPhotoUrlMain Photo (image)
brandBrand (object)
attributeGroupsAttribute Groups (array)
scheduleSpecialSpecial Hours (array)
phoneTextPhone Text (text)
phoneValuePhone Value (text)
searchRubricIdSearch Category ID (text)
searchRubricLabelSearch Category (text)
searchUrlSearch URL (link)
pageNumberPage Number (number)
scrapedAtScraped At (text)
reviewIdReview ID (text)
placeIdPlace ID (text)
placeNamePlace (text)
textReview (text)
dateCreatedDate Created (text)
dateEditedDate Edited (text)
reviewUrlReview URL (link)
authorNameAuthor (text)
authorIdAuthor ID (text)
authorPublicIdAuthor Public ID (text)
authorUrlAuthor URL (link)
authorPhotoUrlAuthor Photo (image)
authorReviewsCountAuthor Reviews Count (number)
likesCountLikes (number)
commentsCountComments (number)
isVerifiedIs Verified (boolean)
isHiddenIs Hidden (boolean)
hasOfficialAnswerHas Official Answer (boolean)
providerSource (text)
sourceData Source (text)
officialAnswerTextOfficial answer (text)
officialAnswerDateOfficial Answer Date (text)
officialAnswerOrgOfficial Answer Org (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "place",
  "id": "70000001063551091",
  "name": "Кофейня Сюрприз",
  "url": "https://2gis.ru/moscow/firm/70000001063551091",
  "type": "branch",
  "rating": 4.6,
  "reviewCount": 128,
  "primaryRubric": "Кофейни",
  "rubrics": [
    "Кофейни",
    "Кафе"
  ],
  "phone": "+74951234567",
  "phones": [
    "+74951234567"
  ],
  "email": "info@example.com",
  "website": "http://example.com",
  "whatsapp": "https://wa.me/74951234567",
  "telegram": "https://t.me/example",
  "instagram": "https://instagram.com/example",
  "vk": "https://vk.com/example",
  "fullAddress": "Москва, Тверская улица, 5",
  "country": "Россия",
  "region": "Москва",
  "city": "Москва",
  "district": "Тверской",
  "street": "Тверская улица",
  "houseNumber": "5",
  "postcode": "125009",
  "latitude": 55.7558,
  "longitude": 37.6173,
  "is24x7": false,
  "hoursText": "Mon: 09:00-21:00; Tue: 09:00-21:00; Wed: 09:00-21:00; Thu: 09:00-21:00; Fri: 09:00-21:00; Sat: 10:00-20:00; Sun: closed",
  "photos": [
    "https://cdn.example.com/0000.jpg"
  ],
  "photoCount": 1,
  "orgName": "Sample Org",
  "isPromoted": false,
  "attributesByTag": {
    "food_service_food_european": "Европейская кухня"
  }
}

Ways to use this data

  • Lead generation and sales prospecting: build contact lists of phones, emails and websites for a category across a city or region.
  • Local SEO and directory audits: check how a business appears on 2GIS, including hours, photos, rating and categories.
  • Competitive and market research: map every competitor in a category across a city, with ratings and review counts.
  • Reputation monitoring: pull all reviews for a set of places, including official replies, to track sentiment over time.
  • Data enrichment: attach verified addresses, coordinates and contact details to an existing list of businesses through URL mode.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does 2GIS return?

The documented output for 2GIS includes record type, id, full id, name, full name, short name, name extension and url. Availability of each field depends on the source page and the selected mode.

How much does 2GIS cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Why is there no separate "category" or "coordinates" mode?

Search mode already covers all of it. WHERE precedence is a map area (bbox) beats coordinates (latitude/longitude) beats city, the more specific one wins and the others are ignored. WHAT is query and/or categoryQuery; leave both empty to pull every place found in the area.

Can I get only new or changed places on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared places and reviews by default, classified against the run before it, and unchanged rows are not billed unless you turn on Emit unchanged.

Why did my run fail instead of returning an empty dataset?

A run fails only in two situations: resumeFromRunId points to a run or dataset id that could not be read, or incrementalMode is combined with resumeFromRunId on a search that already has saved incremental state (remove one of the two, or use a different stateKey). Everything else, including a search or category that matches nothing, or review filters that keep zero reviews, finishes as a normal successful run with an empty or smaller dataset.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each place or review into Notion, Linear or Airtable.

Ready to collect with 2GIS?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.