{
  "openapi": "3.0.1",
  "info": {
    "title": "2GIS Scraper [$3/1K💰] | Business Directory | Reviews | Jobs",
    "description": "Extract business listings, reviews, jobs and real-estate data from 2GIS — the leading directory and map platform across Russia, Kazakhstan and Central Asia. Get names, addresses, coordinates, phones, ratings and vacancies. Built for local market research and lead generation. $3 per 1,000 places.",
    "version": "0.1",
    "x-build-id": "9s7o3wqudwxvCY84J"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ahmed_jasarevic~2gis-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-2gis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/ahmed_jasarevic~2gis-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ahmed_jasarevic-2gis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/ahmed_jasarevic~2gis-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ahmed_jasarevic-2gis-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Search terms to find businesses (e.g., 'cafe', 'restaurant', 'hotel'). Each query is searched in each location below.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (City Names, Coordinates, or Polygons)",
            "type": "array",
            "description": "City names (e.g., 'Moscow', 'Dubai', 'Almaty'), coordinates as 'lat,lon' (e.g., '55.751597,37.622161'), or a polygon as WKT 'POLYGON((lon lat,lon lat,...))' (e.g., 'POLYGON((37.5 55.65,37.75 55.65,37.75 55.85,37.5 55.85))'). Each query is searched in each location. Jobs and realty boards need city names.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "2GIS URLs",
            "type": "array",
            "description": "Full 2gis.* URLs: /{city}/search/{query} or /{city}/firm/{id}. Mix freely with search queries. Example: https://2gis.ru/moscow/search/cafe",
            "items": {
              "type": "string"
            }
          },
          "organizationIds": {
            "title": "Firm / Organization IDs",
            "type": "array",
            "description": "Numeric 2GIS firm IDs or firm URLs to scrape directly (e.g., 4504128908474189).",
            "items": {
              "type": "string"
            }
          },
          "includeBranches": {
            "title": "Walk All Organization Branches",
            "type": "boolean",
            "description": "When a scraped firm belongs to a multi-branch organization, also fetch every other branch of that organization (each branch becomes its own row, including its reviews).",
            "default": false
          },
          "scrapeMode": {
            "title": "Scrape Mode",
            "enum": [
              "places",
              "reviews",
              "all"
            ],
            "type": "string",
            "description": "What to scrape: places, reviews, or both. Reviews require maxReviewsPerPlace > 0 (defaults to 20 in 'reviews' mode).",
            "default": "places"
          },
          "maxResultsPerQuery": {
            "title": "Max Places Per Query per Location",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of places to fetch for each search target. Results are paged 50 at a time up to this limit. When client-side filters are on, more pages are scanned to still fill this limit.",
            "default": 50
          },
          "maxItems": {
            "title": "Max Items (Global Cap)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on all pushed rows (places + reviews + jobs + realty listings) per run. 0 means no cap.",
            "default": 0
          },
          "searchRadiusKm": {
            "title": "Search Radius (km)",
            "minimum": 0.1,
            "maximum": 50,
            "type": "number",
            "description": "Radius around coordinate locations ('lat,lon'). Ignored for city names and polygons.",
            "default": 50
          },
          "locale": {
            "title": "Locale",
            "enum": [
              "en_RU",
              "ru_RU",
              "en_AE",
              "ar_AE",
              "en_KZ",
              "ru_KZ",
              "en_UZ",
              "ru_UZ",
              "en_KG",
              "ru_KG",
              "en_TJ",
              "ru_TJ",
              "en_GE",
              "ru_GE",
              "en_AM",
              "ru_AM",
              "en_AZ",
              "ru_AZ",
              "en_CY",
              "ru_CY"
            ],
            "type": "string",
            "description": "Language for results (e.g., 'en_RU', 'ru_RU', 'en_AE', 'ar_AE'). 2GIS locales are region-specific: if the chosen locale is not available for a location, the Actor automatically retries with the region's default locale.",
            "default": "en_RU"
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "relevance",
              "distance",
              "rating",
              "name",
              "opened_time"
            ],
            "type": "string",
            "description": "Order of search results. 'distance' requires coordinates in locations.",
            "default": "relevance"
          },
          "categoryIds": {
            "title": "Category / Rubric IDs (Optional)",
            "type": "array",
            "description": "Filter results by 2GIS category (rubric) IDs, e.g., '164' for restaurants. Leave empty to search all categories.",
            "items": {
              "type": "string"
            }
          },
          "minRating": {
            "title": "Minimum Rating",
            "minimum": 1,
            "maximum": 5,
            "type": "number",
            "description": "Only places with this 2GIS rating or higher. Places without a rating are dropped."
          },
          "avgBillMin": {
            "title": "Average Bill From",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum average bill (in the city's local currency). Places without an average bill still pass."
          },
          "avgBillMax": {
            "title": "Average Bill To",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum average bill. Places without an average bill still pass."
          },
          "hasSite": {
            "title": "Has Website",
            "type": "boolean",
            "description": "Only places with a website in their contacts.",
            "default": false
          },
          "hasPhotos": {
            "title": "Has Photos",
            "type": "boolean",
            "description": "Only places that have photos on 2GIS (server-side filter).",
            "default": false
          },
          "hasGoods": {
            "title": "Has Prices / Goods",
            "type": "boolean",
            "description": "Only places with a 2GIS price list / goods (server-side filter).",
            "default": false
          },
          "delivery": {
            "title": "Delivery",
            "type": "boolean",
            "description": "Only places that offer delivery.",
            "default": false
          },
          "takeaway": {
            "title": "Takeaway",
            "type": "boolean",
            "description": "Only places that offer takeaway.",
            "default": false
          },
          "wifi": {
            "title": "Wi-Fi",
            "type": "boolean",
            "description": "Only places that advertise Wi-Fi.",
            "default": false
          },
          "cardPayment": {
            "title": "Card Payment",
            "type": "boolean",
            "description": "Only places that accept credit cards.",
            "default": false
          },
          "open24h": {
            "title": "Open 24 Hours",
            "type": "boolean",
            "description": "Only places open around the clock.",
            "default": false
          },
          "skipClosedPlaces": {
            "title": "Skip Closed Places",
            "type": "boolean",
            "description": "Drop places whose name looks permanently closed.",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Max Reviews Per Place",
            "minimum": 0,
            "type": "integer",
            "description": "How many reviews to pull for each place. 0 disables reviews unless scrape mode is 'reviews' (then it defaults to 20).",
            "default": 0
          },
          "reviewSortBy": {
            "title": "Review Sort",
            "enum": [
              "date_edited",
              "date_created"
            ],
            "type": "string",
            "description": "Order used on the 2GIS reviews API.",
            "default": "date_edited"
          },
          "reviewRatings": {
            "title": "Review Sentiment",
            "enum": [
              "all",
              "positive",
              "negative"
            ],
            "type": "string",
            "description": "positive = rating >= 4, negative = rating <= 2.",
            "default": "all"
          },
          "repliesOnly": {
            "title": "Only Reviews With an Official Reply",
            "type": "boolean",
            "description": "Keep reviews that have an official business reply.",
            "default": false
          },
          "reviewKeywords": {
            "title": "Review Keywords",
            "type": "array",
            "description": "Keep a review if its text or the official reply contains any of these strings (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "reviewSource": {
            "title": "Review Source",
            "enum": [
              "all",
              "2gis",
              "flamp",
              "booking"
            ],
            "type": "string",
            "description": "2GIS mirrors some reviews from Flamp or Booking on the same branch.",
            "default": "all"
          },
          "reviewDateFrom": {
            "title": "Reviews From Date",
            "type": "string",
            "description": "Inclusive start date: YYYY-MM-DD or a relative offset like '-7d' or '-30 days'."
          },
          "reviewDateTo": {
            "title": "Reviews To Date",
            "type": "string",
            "description": "Inclusive end date: YYYY-MM-DD or a relative offset."
          },
          "includeUnratedReviews": {
            "title": "Include Unrated Reviews",
            "type": "boolean",
            "description": "Also fetch unrated reviews (rated=false pass on the reviews API).",
            "default": false
          },
          "includeReviewerData": {
            "title": "Include Reviewer Name / ID",
            "type": "boolean",
            "description": "When off, the reviewer user object is cleared before rows are saved.",
            "default": true
          },
          "includeJobs": {
            "title": "Include Jobs (Vacancies)",
            "type": "boolean",
            "description": "Also scrape the 2GIS vacancy board of every location below. Each location must be a city name.",
            "default": false
          },
          "maxJobsPerLocation": {
            "title": "Max Jobs Per Location",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of vacancies to fetch per location.",
            "default": 100
          },
          "includeRealty": {
            "title": "Include Realty Listings",
            "type": "boolean",
            "description": "Also scrape the 2GIS realty board (sale/rent apartments, houses and commercial property) of every location. Each location must be a city name.",
            "default": false
          },
          "realtyDeal": {
            "title": "Realty Deal",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Buy or rent.",
            "default": "sale"
          },
          "realtyPropertyType": {
            "title": "Realty Property Type",
            "enum": [
              "residential",
              "commercial",
              "all"
            ],
            "type": "string",
            "description": "Which property segment to scrape.",
            "default": "residential"
          },
          "realtySort": {
            "title": "Realty Sort",
            "enum": [
              "default",
              "price_asc",
              "price_desc",
              "area_asc",
              "area_desc"
            ],
            "type": "string",
            "description": "Order of realty listings (server-side).",
            "default": "default"
          },
          "realtyRooms": {
            "title": "Realty Rooms (Optional)",
            "type": "array",
            "description": "Only these room counts. Allowed values: studio, 1, 2, 3, 4, 5+. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "realtyMinPrice": {
            "title": "Realty Min Price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in the local currency. 0 disables the bound.",
            "default": 0
          },
          "realtyMaxPrice": {
            "title": "Realty Max Price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in the local currency. 0 disables the bound.",
            "default": 0
          },
          "realtyMinArea": {
            "title": "Realty Min Area (m²)",
            "minimum": 0,
            "type": "number",
            "description": "Minimum total area in square meters. 0 disables the bound.",
            "default": 0
          },
          "realtyMaxArea": {
            "title": "Realty Max Area (m²)",
            "minimum": 0,
            "type": "number",
            "description": "Maximum total area in square meters. 0 disables the bound.",
            "default": 0
          },
          "realtyProviders": {
            "title": "Realty Listing Sources (Optional)",
            "type": "array",
            "description": "Only listings from these services. Allowed values: cian, domclick. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "maxRealtyListingsPerLocation": {
            "title": "Max Realty Listings Per Location",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of realty listings to fetch per location.",
            "default": 100
          },
          "monitoringMode": {
            "title": "Monitoring Mode (Only New Items)",
            "type": "boolean",
            "description": "When on, the Actor remembers every item it has ever pushed (keyed by item type + id) in a named key-value store and pushes only items it has not seen before. Re-run the same input on a schedule to get just the new places, reviews, jobs and listings.",
            "default": false
          },
          "monitoringStoreName": {
            "title": "Monitoring State Store Name",
            "type": "string",
            "description": "Name of the named key-value store that keeps the seen-item state. Change it to start a fresh monitoring series (for example when you switch to a different search).",
            "default": "2gis-monitoring"
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Select proxies to be used by your crawler."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}