{
  "openapi": "3.0.1",
  "info": {
    "title": "2GIS Scraper - Places, Ratings & Hours | Парсер 2ГИС",
    "description": "2GIS scraper for business listings in Russia, the CIS, the UAE and Cyprus. Each row has the name, category, full address, coordinates, phones, emails, website, social links, rating, review count and opening hours. Filter by rating, Wi-Fi, card or delivery. $0.50 per 1,000 places.",
    "version": "0.1",
    "x-build-id": "q0s8aQgf0shkCjzHt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~2gis-places-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-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/dami_studio~2gis-places-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-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/dami_studio~2gis-places-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-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 terms",
            "type": "array",
            "description": "What to look for on 2GIS, for example \"pizza\", \"кафе\", \"dentist\". One search per line. 2GIS is a Russian/CIS directory, so local-language terms return more.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City to search in. English or local spelling both work (\"Moscow\", \"Москва\", \"Almaty\", \"Dubai\"). You can also paste a numeric 2GIS city id. Leave it empty only if you set a point or a polygon below: with no city and no area, 2GIS returns just a handful of places from anywhere."
          },
          "cities": {
            "title": "More cities",
            "type": "array",
            "description": "Optional. Run every search term in each of these cities too, one per line, up to 50 in all. A city 2GIS does not know gets its own free CITY_NOT_FOUND row and the others carry on.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "2GIS URLs or place ids",
            "type": "array",
            "description": "Optional. Paste 2GIS search pages (https://2gis.ru/moscow/search/кафе), single place pages (https://2gis.ru/moscow/firm/70000001044357973), or place ids on their own (70000001044357973, the placeId of an earlier run). Works alongside the fields above.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum places",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on rows returned across all searches (1-5000). You are charged per place returned.",
            "default": 50
          },
          "maxItemsPerQuery": {
            "title": "Maximum places per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Optional. Cap each search term in each city at this many places, so the first term cannot take the whole run. Leave it empty for no cap per search."
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "",
              "3.0",
              "3.5",
              "4.0",
              "4.5",
              "4.9"
            ],
            "type": "string",
            "description": "Only places 2GIS rates at least this high. Places with no rating are left out too.",
            "default": ""
          },
          "hasPhotos": {
            "title": "Only places with photos",
            "type": "boolean",
            "description": "Keep places that have photos on 2GIS.",
            "default": false
          },
          "cardPayment": {
            "title": "Only places that take cards",
            "type": "boolean",
            "description": "Keep places 2GIS lists as accepting card payment.",
            "default": false
          },
          "wifi": {
            "title": "Only places with Wi-Fi",
            "type": "boolean",
            "description": "Keep places 2GIS lists as having Wi-Fi for customers.",
            "default": false
          },
          "delivery": {
            "title": "Only places that deliver",
            "type": "boolean",
            "description": "Keep places 2GIS lists as offering delivery.",
            "default": false
          },
          "takeaway": {
            "title": "Only places with takeaway",
            "type": "boolean",
            "description": "Keep places 2GIS lists as taking takeaway orders.",
            "default": false
          },
          "onlyWithWebsite": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "Keep places that list a website on 2GIS.",
            "default": false
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "",
              "name",
              "newest"
            ],
            "type": "string",
            "description": "2GIS's own order puts the best matches first. Name lists places A to Z. Newest puts the most recently dated listings first (createdAt), including places listed as opening soon.",
            "default": ""
          },
          "addedWithinDays": {
            "title": "Added in the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Optional. Only places whose 2GIS date (createdAt) falls within this many days. The search runs newest first and stops at the first older place."
          },
          "latitude": {
            "title": "Latitude (optional)",
            "type": "string",
            "description": "Search around a point instead of a whole city. Example: 55.7558"
          },
          "longitude": {
            "title": "Longitude (optional)",
            "type": "string",
            "description": "Used together with latitude. Example: 37.6173"
          },
          "radiusMeters": {
            "title": "Radius in metres",
            "minimum": 50,
            "maximum": 40000,
            "type": "integer",
            "description": "Radius around the latitude/longitude point. Ignored unless both coordinates are set.",
            "default": 1000
          },
          "polygon": {
            "title": "Polygon",
            "type": "string",
            "description": "Optional. Search inside an area drawn as POLYGON((lon lat, lon lat, ...)), longitude first, the first point repeated at the end. Example: POLYGON((37.60 55.74, 37.64 55.74, 37.64 55.765, 37.60 55.765, 37.60 55.74)). Places outside it are dropped and not charged. Use it instead of a point, not with one."
          },
          "districtIds": {
            "title": "District ids",
            "type": "array",
            "description": "Optional. Keep places in these 2GIS districts, up to 50 ids. Every row carries its own districtId, so run a city once and pick from there.",
            "items": {
              "type": "string"
            }
          },
          "categoryIds": {
            "title": "Category ids",
            "type": "array",
            "description": "Optional. Keep places in these 2GIS categories, up to 50 ids (164 is restaurants in Moscow, for example). Every row lists its own in categoryIds. With no search terms, the categories alone are the search.",
            "items": {
              "type": "string"
            }
          },
          "locale": {
            "title": "Response language",
            "enum": [
              "",
              "ru_RU",
              "en_AE",
              "en_RU",
              "kk_KZ",
              "uz_UZ",
              "az_AZ",
              "ky_KG",
              "ar_AE",
              "ar_OM",
              "en_QA",
              "en_BH",
              "en_AM",
              "ru_AM",
              "ru_TJ"
            ],
            "type": "string",
            "description": "Optional 2GIS locale for names and categories. Leave as Automatic unless you specifically need another language; not every locale is available in every country.",
            "default": ""
          },
          "onlyNewPlaces": {
            "title": "Only new places",
            "type": "boolean",
            "description": "Return only places no earlier run with the same store returned. Searches run newest first and stop at the first place already seen, and only the new places are charged. Needs a store name below.",
            "default": false
          },
          "newPlacesStoreName": {
            "title": "Store name for new places",
            "type": "string",
            "description": "A name of letters, digits and hyphens, for example \"moscow-cafes\". The first run creates a store with this name on your Apify account and remembers the places it returned; later runs with the same name skip them."
          },
          "photosPerPlace": {
            "title": "Photo links per place",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "0 for none. Otherwise each row gets photoCount, mainPhotoUrl and up to this many photoUrls: links to the photos on 2GIS, not copies. No extra charge.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Leave this alone unless you need the run to go out through a particular network. Your own proxy servers are used exactly as given."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}