{
  "openapi": "3.0.1",
  "info": {
    "title": "Парсер компаний 2ГИС | 2GIS Places Scraper",
    "description": "Парсер 2ГИС: компании города с телефонами, WhatsApp, Telegram, Instagram, email и сайтами, адрес, часы работы, рейтинг и отзывы. Вся выдача, а не 60 мест, фильтры по рубрикам, контактам и рейтингу, мониторинг новых мест. Excel, CSV, API. | 2GIS places scraper with phones, emails and websites.",
    "version": "0.1",
    "x-build-id": "hHXJPubEgeyydlm8l"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/anuarbakty~2gis-places-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-anuarbakty-2gis-places-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/anuarbakty~2gis-places-scraper/runs": {
      "post": {
        "operationId": "runs-sync-anuarbakty-2gis-places-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/anuarbakty~2gis-places-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-anuarbakty-2gis-places-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": "Что вы бы ввели в поиск 2ГИС: «стоматология», «автосервис», «аптека». Для каждого запроса актор возьмёт всю выдачу 2ГИС, а не 60 мест, как сайт. Нужен город или точка на карте ниже.<br><br>What you would type into 2GIS search. Needs a city or a map point below.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "categories": {
            "title": "Рубрики 2ГИС (Categories)",
            "type": "array",
            "description": "Рубрики, как в 2ГИС: «Частные стоматологии», «Аптеки», «Легковой автосервис», или их номера. Без поисковых запросов актор соберёт всю рубрику; с запросами — ищет их только в этих рубриках. Если на название 2ГИС отдаст рубрику с другим названием, актор скажет об этом в логе, в записи SUMMARY и в сообщении о статусе.<br><br>2GIS categories by name or ID. Alone they collect the whole category; with search queries they narrow the search.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "cities": {
            "title": "Города или области (Cities or provinces)",
            "type": "array",
            "description": "«Москва», «Санкт-Петербург», «Химки», «Алматы», «Астана», «Бишкек», «Ташкент», «Дубай» — как на сайте 2ГИС. Берутся места только этого города: пригороды и сёла вокруг, которые в 2ГИС входят в тот же регион, отсекаются. Можно вписать область, край или республику — «Самарская область», «Краснодарский край», «Татарстан»: актор пройдёт её города и сёла во всех регионах 2ГИС, где они есть. Страну целиком указать нельзя. Каждый запрос ищется в каждом городе.<br><br>Cities as on 2GIS. Only places of the city are taken, without the suburbs of its 2GIS region. A province works too (Самарская область, Krasnodar Krai, Tatarstan): all its cities and villages are searched. A whole country does not.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "startUrls": {
            "title": "Ссылки или ID 2ГИС (2GIS links or IDs)",
            "type": "array",
            "description": "Место (…/firm/…), поиск (…/search/стоматология), все организации здания (…/inside/…), филиалы сети (…/branches/…), короткие ссылки go.2gis.com или просто ID места. Удобно, чтобы дополнить свою базу контактами.<br><br>Place, search, building, chain or short links, or plain place IDs.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "maxPlacesPerSearch": {
            "title": "Мест с каждого поиска (Places per search)",
            "minimum": 0,
            "type": "integer",
            "description": "Сколько мест брать из каждого запроса в каждом городе, после фильтров. Область считается одним городом: предел общий на все её города, и первыми его занимают те, по которым 2ГИС ответил раньше. Нужна вся область — поставьте 0. Так же ограничиваются филиалы каждой сети и организации каждого здания. В мониторинге считаются только новые места: уже известные предел не расходуют. 0 — все места, сколько найдёт 2ГИС.<br><br>Places taken from each search in each city, after filters (a province counts as one city); the same limit applies to a chain's branches and a building's companies. In monitoring only new places count against it. 0 = all of them.",
            "default": 100
          },
          "maxPlaces": {
            "title": "Всего мест за запуск (Places per run)",
            "minimum": 0,
            "type": "integer",
            "description": "Общий лимит на запуск. 0 — без лимита. Потратить больше заданного в Apify лимита стоимости запуска актор не может в любом случае.<br><br>Total places per run. 0 = no limit. The run cost limit set in Apify always applies.",
            "default": 0
          },
          "latitude": {
            "title": "Широта центра (Latitude)",
            "type": "string",
            "description": "Искать вокруг точки вместо города: например, 55.7558. Координаты можно взять в 2ГИС: правый клик по карте → «Что здесь?».<br><br>Search around a point instead of a city."
          },
          "longitude": {
            "title": "Долгота центра (Longitude)",
            "type": "string",
            "description": "Например, 37.6173.<br><br>For example, 37.6173."
          },
          "radiusMeters": {
            "title": "Радиус, метров (Radius, meters)",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Радиус круга вокруг точки, до 50 000 м.<br><br>Radius around the point, up to 50,000 m.",
            "default": 1000
          },
          "polygon": {
            "title": "Область на карте, GeoJSON (Map area)",
            "type": "object",
            "description": "Точные границы района, квартала или торговой зоны: GeoJSON с типом Polygon или MultiPolygon. Нарисуйте область на geojson.io и вставьте результат. Координаты в GeoJSON идут в порядке «долгота, широта».<br><br>Exact area as a GeoJSON Polygon or MultiPolygon (draw it on geojson.io)."
          },
          "districts": {
            "title": "Районы (Districts)",
            "type": "array",
            "description": "Оставить места только этих районов: «Тверской», «Пресненский», «Басманный». Хватит части названия.<br><br>Keep only places of these districts; part of the name is enough.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "website": {
            "title": "Сайт (Website)",
            "enum": [
              "all",
              "with",
              "without"
            ],
            "type": "string",
            "description": "«Без сайта» — компании, которым можно предложить сайт.<br><br>“Without a website” finds businesses to offer a website to.",
            "default": "all"
          },
          "requiredContacts": {
            "title": "Обязательные контакты (Required contacts)",
            "type": "array",
            "description": "Оставить только места, у которых есть все выбранные контакты.<br><br>Keep only places that have all the selected contacts.",
            "items": {
              "type": "string",
              "enum": [
                "phone",
                "email",
                "website",
                "whatsapp",
                "telegram",
                "instagram"
              ],
              "enumTitles": [
                "Телефон (Phone)",
                "Email",
                "Сайт (Website)",
                "WhatsApp",
                "Telegram",
                "Instagram"
              ]
            }
          },
          "minRating": {
            "title": "Рейтинг не ниже (Minimum rating)",
            "enum": [
              "",
              "3",
              "3.5",
              "4",
              "4.5",
              "4.8"
            ],
            "type": "string",
            "description": "Оставить только места с рейтингом 2ГИС не ниже выбранного. Места без рейтинга отсеиваются.<br><br>Keep only places rated at least this on 2GIS. Places without a rating are left out.",
            "default": ""
          },
          "minReviews": {
            "title": "Отзывов не меньше (Minimum reviews)",
            "minimum": 0,
            "type": "integer",
            "description": "Оставить только места, у которых в 2ГИС не меньше стольких отзывов. 0 — без фильтра.<br><br>Keep only places with at least this many reviews on 2GIS. 0 = no filter.",
            "default": 0
          },
          "features": {
            "title": "Есть в карточке (Features)",
            "type": "array",
            "description": "Оставить места, у которых в карточке 2ГИС отмечено всё выбранное.<br><br>Keep places whose 2GIS card lists all the selected features.",
            "items": {
              "type": "string",
              "enum": [
                "delivery",
                "takeaway",
                "wifi",
                "cardPayment",
                "is24x7"
              ],
              "enumTitles": [
                "Доставка (Delivery)",
                "Навынос (Takeaway)",
                "Wi-Fi",
                "Оплата картой (Card payment)",
                "Круглосуточно (24/7)"
              ]
            }
          },
          "withPhotos": {
            "title": "Только с фото (Only with photos)",
            "type": "boolean",
            "description": "Работает и для филиалов сетей, и для организаций здания.<br><br>Applies to a chain's branches and a building's companies too.",
            "default": false
          },
          "openedAfter": {
            "title": "Новые места: появились в 2ГИС после (New places since)",
            "type": "string",
            "description": "Только места, которые появились в 2ГИС после этой даты: дата или период, например «30 days». Удобно, чтобы находить только что открывшиеся заведения. Места идут от самых новых.<br><br>Only places that appeared in 2GIS after this date, newest first."
          },
          "excludePromoted": {
            "title": "Без рекламных мест (Skip advertised places)",
            "type": "boolean",
            "description": "Убрать компании, которые платят 2ГИС за продвижение. Такие места стоят в начале выдачи: по запросу «стоматология» в Москве на первых двух страницах выдачи рекламные все места, на тридцатой — 3 из 36 московских, на пятидесятой — ни одного. Актор идёт дальше по выдаче, пока не наберёт нужное число мест. Удобно, чтобы искать компании, которые ещё не тратятся на рекламу.<br><br>Skips businesses that pay 2GIS for promotion. They rank first, so the Actor keeps paging until it has enough places.",
            "default": false
          },
          "minAverageCheck": {
            "title": "Средний чек от (Average bill from)",
            "minimum": 0,
            "type": "integer",
            "description": "Только места, у которых 2ГИС показывает средний чек не ниже этого числа, в местной валюте. Места без чека не попадут.<br><br>Only places whose average bill in 2GIS is at least this, in local currency."
          },
          "maxAverageCheck": {
            "title": "Средний чек до (Average bill to)",
            "minimum": 0,
            "type": "integer",
            "description": "Только места, у которых средний чек не выше этого числа.<br><br>Only places whose average bill is at most this."
          },
          "exactName": {
            "title": "Точное название (Exact name)",
            "type": "string",
            "description": "Оставить только места с таким названием — точно, без учёта регистра. «Магнит» не даст «Магнит Косметик». Удобно для аудита своей сети.<br><br>Keeps only places with exactly this name, case-insensitive."
          },
          "sortBy": {
            "title": "Порядок (Sort by)",
            "enum": [
              "relevance",
              "rating",
              "opened_time",
              "name",
              "distance"
            ],
            "type": "string",
            "description": "«По расстоянию» — от центра точки или области на карте.<br><br>“Distance” counts from the map point or area.",
            "default": "relevance"
          },
          "scrapeBranches": {
            "title": "Все филиалы найденных сетей (All branches of chains)",
            "type": "boolean",
            "description": "Для каждой найденной сети добавить все её филиалы в том же городе и области.<br><br>For every chain found, add all its branches in the same region.",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Отзывов на место (Reviews per place)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Добавить к каждому месту последние отзывы: текст, оценка, дата, ответ компании. Оплачивается каждый отзыв. 0 — без отзывов. Все отзывы с фильтрами и мониторингом — в нашем «Парсере отзывов 2ГИС».<br><br>Latest reviews added to each place; each review is paid. 0 = none.",
            "default": 0
          },
          "reviewsSortBy": {
            "title": "Какие отзывы брать (Review order)",
            "enum": [
              "date_created",
              "date_edited",
              "trust"
            ],
            "type": "string",
            "description": "Какие отзывы добавлять, если у места их больше лимита: самые новые, недавно изменённые или те, которые 2ГИС считает самыми полезными.<br><br>Which reviews to add when a place has more than the limit: the newest, recently edited, or the ones 2GIS ranks as most trusted.",
            "default": "date_created"
          },
          "reviewsRatings": {
            "title": "Оценки отзывов (Review star ratings)",
            "type": "array",
            "description": "Добавлять только отзывы с выбранными оценками, например только 1 и 2 звезды. Пусто — все оценки.<br><br>Add only reviews with these star ratings, for example 1 and 2 stars. Empty = all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "★ 1",
                "★★ 2",
                "★★★ 3",
                "★★★★ 4",
                "★★★★★ 5"
              ]
            }
          },
          "includeReviewAuthor": {
            "title": "Имя автора отзыва (Reviewer name)",
            "type": "boolean",
            "description": "Имя автора у каждого добавленного отзыва. Выключите, если имена не нужны.<br><br>The reviewer’s name in each added review. Turn off if you don’t need names.",
            "default": true
          },
          "onlyNewPlaces": {
            "title": "Только новые места с прошлого запуска (Only new places)",
            "type": "boolean",
            "description": "Первый запуск выдаёт все места и запоминает их; следующие — только места, которых раньше не было. Уже выданные не оплачиваются. Запускайте по расписанию с тем же вводом.<br><br>The first run returns everything; later runs only places that were not there before. Repeats are free.",
            "default": false
          },
          "includeChangedPlaces": {
            "title": "Также места с изменёнными контактами (Also changed places)",
            "type": "boolean",
            "description": "Присылать и уже известные места, если у них сменились название, адрес, рубрика, телефоны, почта, сайт, мессенджеры или часы работы. Поле changedFields покажет, что именно. Включает мониторинг само по себе — галочка выше не обязательна.<br><br>Also send known places whose name, address, category, contacts or hours changed. Turns monitoring on by itself.",
            "default": false
          },
          "includeClosedPlaces": {
            "title": "Также места, пропавшие из 2ГИС (Also closed places)",
            "type": "boolean",
            "description": "Присылать места, которые были в прошлых запусках, а теперь исчезли из выдачи 2ГИС — с пометкой changeType: closed и данными последнего сбора. Работает только если запуск проходит всю выдачу: без лимитов «мест с поиска» и «всего мест», без фильтра «новые места» и без ошибок поиска — иначе отсутствие места ничего не значит. Если место вернётся, придёт с пометкой returned.<br><br>Also send places that were in earlier runs and are gone from 2GIS now (changeType: closed). Needs a run without place limits, so absence really means absence.",
            "default": false
          },
          "monitoringName": {
            "title": "Имя памяти мониторинга (Monitoring memory name)",
            "type": "string",
            "description": "Своё имя для памяти мониторинга. Оставьте пустым — актор посчитает его сам по вводу. Одинаковое имя в разных задачах = общая память; новое имя = начать с чистого листа.<br><br>Your own name for the monitoring memory. Empty means it is derived from the input; the same name shares memory between tasks."
          },
          "resetMonitoring": {
            "title": "Забыть всё и начать заново (Reset monitoring)",
            "type": "boolean",
            "description": "Один раз стереть память мониторинга: этот запуск выдаст все места заново и запомнит их. Не забудьте снять галочку после запуска.<br><br>Clears the monitoring memory once: this run returns everything again. Uncheck it afterwards.",
            "default": false
          },
          "language": {
            "title": "Язык данных (Language)",
            "enum": [
              "auto",
              "ru",
              "en",
              "kk",
              "uz",
              "ky",
              "ar",
              "hy",
              "az",
              "ka",
              "tg",
              "cs",
              "es",
              "it"
            ],
            "type": "string",
            "description": "Язык названий, адресов и рубрик. «Автоматически» — основной язык страны города: для Казахстана и России русский, для ОАЭ английский.<br><br>Language of names, addresses and categories. Auto uses the main language of the city’s country.",
            "default": "auto"
          },
          "includeRawData": {
            "title": "Исходные данные 2ГИС (Raw 2GIS data)",
            "type": "boolean",
            "description": "Добавить к каждому месту полный объект 2ГИС в поле raw.<br><br>Adds the full 2GIS object in the raw field.",
            "default": false
          },
          "failIfAllInputsFail": {
            "title": "Завершать запуск ошибкой при неверном вводе (Fail the run on bad input)",
            "type": "boolean",
            "description": "По умолчанию запуск с вводом, по которому нечего собирать (город не найден, место удалено, пустой ввод, непонятная дата), завершается успешно: причина — в сообщении о статусе и в записи SUMMARY. Включите, если вашей автоматизации нужен статус FAILED.<br><br>By default a run whose input gives nothing to collect (city not found, place deleted, empty input, unreadable date) succeeds, with the reason in the status message and in the SUMMARY record. Turn on if your automation needs a FAILED status instead.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Прокси (Proxy configuration)",
            "type": "object",
            "description": "Обычно не нужен: места и отзывы идут напрямую через API 2ГИС, а на серверах Apify повторы неудачных запросов актор сам направляет через резидентный прокси. Укажите свой прокси, только если хотите, чтобы все запросы шли через него.<br><br>Usually not needed: data comes straight from the 2GIS APIs, and on Apify the Actor retries failed requests through a residential proxy by itself.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}