{
  "openapi": "3.0.1",
  "info": {
    "title": "Yandex Maps Reviews Scraper: Ratings, Replies, Place Summary",
    "description": "Scrape Yandex Maps reviews by place URL, id or search: stars, text, date, likes, photos and the business's reply, with the place on every row. Newest first, star and date filters, optional per-place summary (topics, reply rate, recent averages), new-review monitoring. Reviewer names only on request.",
    "version": "0.1",
    "x-build-id": "izDxG7sZ91IYXNrjs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/amitaviv~yandex-maps-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-amitaviv-yandex-maps-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/amitaviv~yandex-maps-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-amitaviv-yandex-maps-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/amitaviv~yandex-maps-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-amitaviv-yandex-maps-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": {
          "places": {
            "title": "Places (Yandex Maps URLs or ids)",
            "type": "array",
            "description": "The places whose reviews you want: a Yandex Maps place URL (https://yandex.com/maps/org/caffe_la_vita/117242594967/ or its /reviews/ tab, from any Yandex domain: yandex.ru, yandex.com.tr, yandex.kz, …), the link of the Share button (https://yandex.ru/maps/-/…), a map URL with the place open on it (oid=… or poi[uri]=…), the place's yandex.ru/profile/… page, or the numeric place id (117242594967). A Yandex Maps search URL also works: the reviews of its first places (see Max places per search) are read. A place given twice, or given directly and also found by a search, is read once.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search term (instead of, or as well as, places)",
            "type": "string",
            "description": "Find places by a search on Yandex Maps, as you would type it (e.g. dentist, кофейня, kuaför, or a business name), and read the reviews of the first places it lists. Use with Location."
          },
          "location": {
            "title": "Location (with the search term)",
            "type": "string",
            "description": "City or district for the search term (e.g. Kazan, Almaty, Kadıköy Istanbul). It is added to the search text, the way you would type \"dentist Almaty\" into Yandex Maps."
          },
          "maxPlaces": {
            "title": "Max places per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many places a search (search term or search URL) contributes, in the order Yandex Maps lists them, 1 to 100 (default 5). Permanently closed places are skipped.",
            "default": 5
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many reviews to deliver per place, 1 to 10,000 (default 100). You are charged only for delivered reviews. Yandex Maps lists at most 600 reviews of a place in one list. Above 600 the run also reads Yandex's other orders and the lists of reviews that mention each topic Yandex extracted for the place (for places with up to 1,200 reviews the other orders first, for larger ones the topic lists first), and keeps the reviews it has not delivered yet: a large place gets well over 600 different reviews, but not always all of them, and those past the first 600 are not in your chosen order (their order field says which list they came from).",
            "default": 100
          },
          "sort": {
            "title": "Order",
            "enum": [
              "newest",
              "relevance",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "The order in which reviews are read, the same choice the place's reviews tab offers: newest first (default), Yandex's default (most relevant), highest rated first, lowest rated first. \"Only new reviews\" always reads newest first.",
            "default": "newest"
          },
          "minRating": {
            "title": "Min stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Deliver only reviews with at least this many stars (1 to 5). Reviews left out are not charged. Empty: all."
          },
          "maxRating": {
            "title": "Max stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Deliver only reviews with at most this many stars (1 to 5), e.g. 2 for complaints only. Reviews left out are not charged. Empty: all."
          },
          "reviewsNewerThan": {
            "title": "Only reviews newer than",
            "type": "string",
            "description": "A date (2026-01-01) or a period back from now (30 days, 12 weeks, 6 months, 1 year). Only reviews dated on or after it are delivered; in newest-first order the run stops reading a place at the first older review. Empty: no date limit."
          },
          "includePlaceSummary": {
            "title": "Add a summary record per place",
            "type": "boolean",
            "description": "Adds one record per place (recordType: placeSummary, charged as a place summary): Yandex's rating, rating and review counts, the topics Yandex extracts from reviews with positive/neutral/negative mention counts, and figures over the reviews the run read: their star distribution (ratingDistributionRead), average, share with a business reply, median reply delay, and the number and average rating of reviews in the last 30, 90 and 365 days (given only when the run read back that far, so read newest first with enough reviews). With \"Only new reviews\", a summary is added only for places that have new reviews in that run; none is added (or charged) for a place whose reviews the run did not get to read before its timeout.",
            "default": false
          },
          "includeReviewerNames": {
            "title": "Include reviewer names (personal data)",
            "type": "boolean",
            "description": "Off (default): the reviewer's name, avatar and profile link are not delivered, and in the review text and the business's reply [name] replaces the reviewer's name, the name a reply opens with or addresses, names written with a patronymic, first names after a staff role word or a relative (\"официант Артур\", \"our waitress Anna\", \"дочку Соню\"), the people a thank-you names, and about 720 common first names (Russian, Tatar, Kazakh, Caucasian, Turkish, English) in any case form anywhere, with the surname next to them. This is best effort: rare names and surnames written alone can stay in the text. On: reviewerName, reviewerAvatarUrl and reviewerProfileUrl are filled and texts are delivered as written. Reviewer and staff names are personal data of private persons: by turning this on you confirm that you have a lawful basis under the GDPR (or the law that applies to you) to process them.",
            "default": false
          },
          "includeIndividuals": {
            "title": "Include individual practitioners",
            "type": "boolean",
            "description": "Off (default): places that are a person working under their own name (a notary, lawyer, psychologist or tutor listed by surname, or a title that says self-employed) are skipped and not charged; reviews of such a place are about a person. The recognition is the one of our Yandex Maps Scraper and is a heuristic. On: their reviews are delivered; turn it on only if you have a lawful basis.",
            "default": false
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "ru",
              "tr",
              "uk",
              "kk"
            ],
            "type": "string",
            "description": "Language of place names, addresses and categories, as far as Yandex Maps has them: en (default), ru, tr, uk or kk. Review text is always delivered as the reviewer wrote it (textLanguage says which language).",
            "default": "en"
          },
          "onlyNew": {
            "title": "Only new reviews (monitoring)",
            "type": "boolean",
            "description": "Deliver and charge only new reviews: reviews that earlier runs of this actor in your account have not delivered for the same place. The first run delivers the newest reviews up to the maximum per place; later runs read newest first and stop at the first page that holds a review seen before. An unseen review dated more than 3 days before the newest review earlier runs saw is an old review that Yandex moved up the list, not a new one: it is remembered and not delivered. When a later run stops at the maximum per place (or the charge limit, or the timeout) before all new reviews are delivered, the next runs deliver the rest. Run it on a schedule to be told about new reviews. The memory is a key-value store named yandex-maps-reviews-scraper-monitor in your account; delete it to start over.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Only with \"Only new reviews\". A free-text name (e.g. weekly-clinics). Runs with the same place and monitor name share one memory; give two schedules different names to keep their memories apart."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave off (default). The actor sends requests directly and, when Yandex Maps answers with its captcha page, switches to Apify Proxy on its own: datacenter addresses first, residential after 3 blocked answers. Set a proxy here only to force every request through it from the start.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}