{
  "openapi": "3.0.1",
  "info": {
    "title": "2GIS Reviews Scraper - Ratings, Text & Owner Replies",
    "description": "2GIS reviews scraper for any place, from place links or a search and a city. Each row has the star rating, full text, author, dates, photos and the owner's reply, plus the place's name, address, coordinates and overall rating. $0.50 per 1,000 reviews.",
    "version": "0.1",
    "x-build-id": "VWfLSiI7pHvBqEAaM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~2gis-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-2gis-reviews-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-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-2gis-reviews-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-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-2gis-reviews-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": {
          "startUrls": {
            "title": "2GIS place URLs",
            "type": "array",
            "description": "The places whose reviews you want. Paste 2GIS place pages (https://2gis.ru/moscow/firm/70000001044357973), the reviews tab of a place, or bare numeric place ids. 2GIS search pages (https://2gis.ru/moscow/search/кафе) also work, every place the search finds gets scraped.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search terms (instead of URLs)",
            "type": "array",
            "description": "Optional. Find places by search term and scrape the reviews of each one. Use with \"City\" below. 2GIS is a Russian/CIS directory, so local-language terms return more.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Which city the search terms apply to. English or local spelling both work (\"Moscow\", \"Москва\", \"Almaty\", \"Dubai\"). A numeric 2GIS city id works too. Ignored when you only paste place URLs."
          },
          "maxReviewsPerPlace": {
            "title": "Maximum reviews per place",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Newest first. 2GIS serves every review a place has, so this is what stops a 5,000-review chain from eating your whole budget.",
            "default": 100
          },
          "maxItems": {
            "title": "Maximum reviews in total",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap across all places. You are charged per review returned.",
            "default": 500
          },
          "maxPlaces": {
            "title": "Maximum places",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many places to take from the search terms / search URLs. Pasted place URLs count towards this too.",
            "default": 10
          },
          "sortBy": {
            "title": "Review order",
            "enum": [
              "date_created",
              "date_edited",
              "trust",
              "friends"
            ],
            "type": "string",
            "description": "How 2GIS orders the reviews before this actor takes the first N. There is no rating sort on 2GIS's side, use \"Minimum rating\" below to keep only the stars you care about. \"Friends first\" only means something to someone signed in to 2GIS. This actor reads 2GIS signed out, and there 2GIS returns exactly the \"date edited\" order.",
            "default": "date_created"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews of this many stars or more. 0 keeps everything. Set 1 to drop reviews that carry text but no star rating.",
            "default": 0
          },
          "onlyWithText": {
            "title": "Only reviews with text",
            "type": "boolean",
            "description": "Skip star-only reviews that have no written text.",
            "default": false
          },
          "onlyWithPhotos": {
            "title": "Only reviews with photos (paid option)",
            "type": "boolean",
            "description": "Keep only reviews with at least one photo. 2GIS cannot filter on photos itself, so the run reads the reviews and leaves out the ones without a photo. Each review it checks and leaves out is billed as a review checked and left out (see the Pricing tab); reviews you keep are billed as usual, and reviews the two filters above drop are never billed. Photo reviews are rare, often a handful in a hundred. With this ticked, Maximum reviews per place is how many reviews are read on each place and Maximum reviews in total is how many photo reviews come back, so raise the first and keep the second to what you need. Your maximum cost per run still holds.",
            "default": false
          },
          "locale": {
            "title": "Response language",
            "enum": [
              "",
              "ru_RU",
              "en_AE",
              "en_RU",
              "kk_KZ",
              "uz_UZ",
              "az_AZ",
              "ky_KG"
            ],
            "type": "string",
            "description": "Optional 2GIS locale for place names and categories. Review text is always returned exactly as the author wrote it, nothing is translated. Leave as Automatic unless you specifically need another language. 2GIS only has a place in the languages it holds for that country: Kazakh changes the category and address of an Almaty place, while English leaves a Moscow or Almaty place in Russian.",
            "default": ""
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}