{
  "openapi": "3.0.1",
  "info": {
    "title": "Yandex Maps Scraper - Phones, Websites, Reviews & Hours",
    "description": "Scrape Yandex Maps places by search and city, map area or link: phones, websites, social links, address, coordinates, rating, hours, features, photos. Covers whole cities past Yandex's 1,000-place search limit; reviews, menus, website emails, monitor mode. $0.45 per 1,000 places, no start fee.",
    "version": "0.1",
    "x-build-id": "12jFyJQclspDSfe51"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~yandex-maps-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-yandex-maps-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/topapi~yandex-maps-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-yandex-maps-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/topapi~yandex-maps-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-yandex-maps-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, as typed into Yandex Maps, e.g. \"кафе\", \"стоматология\", \"hotel\". Russian terms find more places in Russia and the CIS. Searched in every location below.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, district or region to search in, in any language, e.g. \"Moscow\", \"Казань\", \"Almaty\", \"Istanbul\". Yandex Maps turns it into an area. Empty = Moscow."
          },
          "locations": {
            "title": "More locations",
            "type": "array",
            "description": "Optional. More cities, one per line, e.g. \"Saint Petersburg\" and \"Novosibirsk\". Every search term is searched in each.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Yandex Maps links",
            "type": "array",
            "description": "Organisation pages (yandex.ru/maps/org/name/1018907821/), short share links (yandex.ru/maps/-/CPqIUMo), search, category or chain links. Each search link keeps its own map area.",
            "items": {
              "type": "string"
            }
          },
          "businessIds": {
            "title": "Organisation ids",
            "type": "array",
            "description": "Yandex Maps organisation ids, e.g. 1018907821 (the number in an organisation link). Read 20 at a time - the fastest way to refresh a known list.",
            "items": {
              "type": "string"
            }
          },
          "latitude": {
            "title": "Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Optional. Search around an exact point instead of a city, e.g. 55.7558. Use with Longitude (two fields, so the pair cannot be swapped)."
          },
          "longitude": {
            "title": "Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Optional. e.g. 37.6173. Use with Latitude."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0.1,
            "maximum": 200,
            "type": "number",
            "description": "Used with Latitude/Longitude: only places within this distance come back, each with its distanceKm. Empty = a 3 km square."
          },
          "coordinates": {
            "title": "Coordinates (longitude,latitude)",
            "type": "string",
            "description": "Optional, Yandex's own order: longitude first, e.g. \"37.6173,55.7558\". Same as Latitude + Longitude; use one or the other."
          },
          "viewportSpan": {
            "title": "Viewport span",
            "type": "string",
            "description": "Optional, with Coordinates or Latitude/Longitude: the map window width and height in degrees, longitude first, e.g. \"0.2,0.1\"."
          },
          "boundingBox": {
            "title": "Bounding box",
            "type": "object",
            "description": "Optional exact area, e.g. {\"southLat\": 55.70, \"westLng\": 37.50, \"northLat\": 55.80, \"eastLng\": 37.70}. Searched as a whole and split while Yandex keeps finding places."
          },
          "restrictToArea": {
            "title": "Only places inside the area",
            "type": "boolean",
            "description": "On: Yandex returns only places inside your location or area. Off: Yandex may widen the search past it, as on its website.",
            "default": true
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "",
              "3.0",
              "3.5",
              "4.0",
              "4.5",
              "4.7",
              "4.9"
            ],
            "type": "string",
            "description": "Only places Yandex rates at least this high (Yandex's own rating filter). Places with no rating are left out.",
            "default": ""
          },
          "priceCategories": {
            "title": "Price band",
            "type": "array",
            "description": "Yandex's own price filter (restaurants, cafes and similar). Several = any of them.",
            "items": {
              "type": "string",
              "enum": [
                "price_cheap",
                "price_reasonable",
                "price_expensive",
                "price_very_expensive"
              ],
              "enumTitles": [
                "Low",
                "Average",
                "Above average",
                "High"
              ]
            }
          },
          "openNow": {
            "title": "Open now",
            "type": "boolean",
            "description": "Only places Yandex shows as open right now.",
            "default": false
          },
          "open24h": {
            "title": "Open 24 hours",
            "type": "boolean",
            "description": "Only places open around the clock.",
            "default": false
          },
          "goodPlaceOnly": {
            "title": "Good Place award only",
            "type": "boolean",
            "description": "Only places with Yandex's \"Good Place\" (Хорошее место) award.",
            "default": false
          },
          "amenities": {
            "title": "Must have",
            "type": "array",
            "description": "Yandex's feature filters, all must match. Which ones apply depends on the category; see filtersAvailable in RUN_SUMMARY for the full list of a search.",
            "items": {
              "type": "string",
              "enum": [
                "wi_fi",
                "payment_by_credit_card",
                "car_park",
                "food_delivery",
                "takeaway",
                "summer_terrace",
                "business_lunch",
                "breakfast",
                "coffee_to_go",
                "michelin",
                "ultima_guide_included",
                "has_booking_link",
                "wheelchair_accessability",
                "toilet_for_disabled",
                "nursery",
                "halal",
                "sports_broadcasts",
                "has_photo"
              ],
              "enumTitles": [
                "Wi-Fi",
                "Card payment",
                "Parking",
                "Food delivery",
                "Takeaway",
                "Summer terrace",
                "Business lunch",
                "Breakfast",
                "Coffee to go",
                "Michelin guide",
                "Ultima guide",
                "Online booking",
                "Wheelchair access",
                "Accessible toilet",
                "Kids' room",
                "Halal",
                "Sports broadcasts",
                "Has photos"
              ]
            }
          },
          "categoryIds": {
            "title": "Category ids",
            "type": "array",
            "description": "Yandex category ids, e.g. 184106390 (cafe), 184106394 (restaurant). The categoryIds field of any row shows them.",
            "items": {
              "type": "string"
            }
          },
          "chainIds": {
            "title": "Chain ids",
            "type": "array",
            "description": "Only branches of these chains, e.g. 6002072. The chainId field of any branch row shows it. With a whole-city search this lists every branch.",
            "items": {
              "type": "string"
            }
          },
          "customFilters": {
            "title": "Other Yandex filters",
            "type": "array",
            "description": "Any other filter Yandex offers, as id:value, e.g. \"type_cuisine:italian_cuisine\" or \"petfriendly:pets_allowed\". RUN_SUMMARY.filtersAvailable lists them.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "rating",
              "distance"
            ],
            "type": "string",
            "description": "Yandex's own order of the results.",
            "default": "relevance"
          },
          "language": {
            "title": "Language",
            "enum": [
              "ru",
              "en",
              "tr",
              "uk",
              "kk"
            ],
            "type": "string",
            "description": "Language of names, categories, hours and features. Some fields stay in Russian whatever you pick (Yandex's own data).",
            "default": "ru"
          },
          "withPhoneOnly": {
            "title": "With phone only",
            "type": "boolean",
            "description": "Skip places without a phone number. Skipped places are not charged.",
            "default": false
          },
          "withWebsiteOnly": {
            "title": "With website only",
            "type": "boolean",
            "description": "Skip places without a website.",
            "default": false
          },
          "withEmailOnly": {
            "title": "With email only",
            "type": "boolean",
            "description": "Keep only places whose own website shows an email (turns on Website contacts).",
            "default": false
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only places with at least this many written reviews, e.g. 10."
          },
          "skipClosedPlaces": {
            "title": "Skip closed places",
            "type": "boolean",
            "description": "Skip places Yandex marks as closed (temporarily or permanently) or moved.",
            "default": false
          },
          "minAverageBill": {
            "title": "Average bill from",
            "minimum": 0,
            "type": "integer",
            "description": "Only places whose average bill reaches this amount, in the local currency, e.g. 1500 (rubles in Russia)."
          },
          "maxAverageBill": {
            "title": "Average bill up to",
            "minimum": 0,
            "type": "integer",
            "description": "Only places whose average bill starts at or below this amount, e.g. 3000."
          },
          "excludeBusinessIds": {
            "title": "Exclude organisation ids",
            "type": "array",
            "description": "Places you already have (ids or links): never delivered, never charged.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Skip places whose name or category contains any of these words, e.g. \"сеть\", \"hostel\".",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "Reviews per place",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "0 = no reviews. Up to this many written reviews per place, nested on the row (text, rating, date, author, photos, owner reply). $0.22 per 1,000 reviews.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Review order",
            "enum": [
              "relevance",
              "newest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Order Yandex returns reviews in.",
            "default": "relevance"
          },
          "reviewsSince": {
            "title": "Reviews since",
            "type": "string",
            "description": "Only reviews published on or after this date, e.g. 2026-01-01 (reads newest first). Pairs with a daily schedule."
          },
          "reviewsMinRating": {
            "title": "Review rating from",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only reviews with at least this many stars (1-5)."
          },
          "reviewsMaxRating": {
            "title": "Review rating up to",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only reviews with at most this many stars, e.g. 2 for complaints."
          },
          "reviewsWithTextOnly": {
            "title": "Reviews with text only",
            "type": "boolean",
            "description": "Skip star-only reviews.",
            "default": false
          },
          "reviewsWithOwnerReplyOnly": {
            "title": "Reviews with owner reply only",
            "type": "boolean",
            "description": "Only reviews the business answered.",
            "default": false
          },
          "includeMenu": {
            "title": "Menu / price list",
            "type": "boolean",
            "description": "The place's full menu or price list from Yandex (categories, items, prices, photos). $0.001 per place that has one.",
            "default": false
          },
          "includeRelatedPlaces": {
            "title": "Similar places",
            "type": "boolean",
            "description": "The similar places Yandex shows on each place's page (name, category, rating, link). Free; one extra page per place.",
            "default": false
          },
          "enrichContacts": {
            "title": "Website contacts (emails + socials)",
            "type": "boolean",
            "description": "Visit each place's own website for emails and social profiles. $0.0018 per place where it finds an email or a new social profile.",
            "default": false
          },
          "maxWebsitePages": {
            "title": "Website pages per place",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "With Website contacts: pages to read per website (home, contact, about...).",
            "default": 3
          },
          "maxPhotos": {
            "title": "Photos per place",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Photo links per place, free. Up to 11 come with the place; more are read from its gallery (sizes, tags, author).",
            "default": 5
          },
          "includeReviewAspects": {
            "title": "Review aspects",
            "type": "boolean",
            "description": "What reviewers say about each aspect (food, staff, prices...) with positive / neutral / negative counts. Free; bigger answers.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (new places only)",
            "type": "boolean",
            "description": "Deliver only places earlier runs with the same store name did not deliver. Pairs with a daily or weekly schedule.",
            "default": false
          },
          "monitorChanges": {
            "title": "Also return changed places",
            "type": "boolean",
            "description": "In monitor mode, also deliver places whose rating, review count, hours, phone, website or status changed, with the previous values.",
            "default": true
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named storage that remembers delivered places. Use one name per watch list.",
            "default": "yandex-maps-monitor"
          },
          "maxResults": {
            "title": "Max places per search",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Per search term and location. One Yandex search lists up to 1,000 places (often fewer for a whole city); the area is split automatically to find the rest. 0 = every place found.",
            "default": 100
          },
          "maxItems": {
            "title": "Max places in total",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap for the whole run, across every search, link and id."
          },
          "compact": {
            "title": "Compact rows",
            "type": "boolean",
            "description": "Core fields only (name, categories, phones, website, address, coordinates, rating, hours, link) - smaller rows for AI tools and spreadsheets.",
            "default": false
          },
          "adaptiveGrid": {
            "title": "Split full areas",
            "type": "boolean",
            "description": "When an area gives 150+ places or runs into Yandex's 1,000-place end, split it into four and search each - how whole cities are covered.",
            "default": true
          },
          "cellSizeKm": {
            "title": "Start cell size (km)",
            "minimum": 0.2,
            "maximum": 500,
            "type": "number",
            "description": "Optional. Start from a grid of cells this wide instead of the whole area, e.g. 3 for a dense city."
          },
          "maxCells": {
            "title": "Max areas per search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper bound on the sub-areas one search may visit.",
            "default": 100
          },
          "maxPagesPerCell": {
            "title": "Pages per area",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Result pages (25 places each) read per area before it counts as full. 40 = Yandex's own end.",
            "default": 40
          },
          "maxRunSeconds": {
            "title": "Time limit (seconds)",
            "minimum": 10,
            "type": "integer",
            "description": "Optional. Stop starting new work after this many seconds and finish cleanly."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Requests in flight at once.",
            "default": 4
          },
          "residentialCountries": {
            "title": "Residential countries",
            "type": "array",
            "description": "Countries for the residential fallback, in order, e.g. \"KZ\", \"BY\", \"RU\". Used only when direct and datacenter connections are refused.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: direct first, then Apify datacenter proxy, then Apify residential under a byte budget. Choose a group to use only that.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}