Nimbryxo Studio

Yandex Maps Business Search, Details & Reviews Scraper

Search Yandex Maps by keyword, fetch full business details, or collect customer reviews - with address, phone, rating, working hours, photos, coordinates, and review text across six regional domains.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to collect. searchPlaces finds businesses by keyword. getDetails returns full business cards for IDs or URLs. getReviews collects customer reviews for IDs, URLs or a search.
searchQueriesarrayoptionalOne query per line, for example 'coffee' or 'dentist'. Used by searchPlaces, and by getReviews when no business IDs or URLs are supplied.
citystringoptionalCity name in any language, for example 'Moscow', 'Kazan' or 'Istanbul'. Yandex Maps resolves the city centre and passes it to the search.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to collect. searchPlaces finds businesses by keyword. getDetails returns full business cards for IDs or URLs. getReviews collects customer reviews for IDs, URLs or a search.
searchQueriesarrayoptionalOne query per line, for example 'coffee' or 'dentist'. Used by searchPlaces, and by getReviews when no business IDs or URLs are supplied.
citystringoptionalCity name in any language, for example 'Moscow', 'Kazan' or 'Istanbul'. Yandex Maps resolves the city centre and passes it to the search.
coordinatesstringoptionalOptional point for a local search, for example '55.7558,37.6173'. When set, it overrides the city centre. Combine with Radius to search around the point.
radiusKmintegeroptionalKeep only places within this distance of the centre point or city centre. Results are measured by straight-line distance and filtered strictly.
bboxstringoptionalOptional rectangular area, for example '37.45,55.65,37.85,55.85'. Results outside the rectangle are dropped.
businessIdsarrayoptionalYandex Maps organization IDs, one per line. Use for getDetails or getReviews.
startUrlsarrayoptionalYandex Maps organization URLs, short links or search URLs, one per line. Business and search URLs work in both getDetails and getReviews.
maxItemsintegeroptionalRun-wide cap. In searchPlaces and getDetails it counts places; in getReviews it counts reviews across all businesses.
maxReviewsPerPlaceintegeroptionalReview cap for each business. Yandex exposes up to 600 reviews per sort order; the actor combines four orders to reach up to 2,400 unique reviews per business.
reviewSortstringoptionalPrimary review order. When you ask for more than 600 reviews per place, the actor also walks the other three orders and merges them, removing duplicates.
reviewMinRatingintegeroptionalKeep only reviews with at least this many stars (1-5).
reviewMaxRatingintegeroptionalKeep only reviews with at most this many stars (1-5).
reviewDateFromstringoptionalKeep reviews published on or after this date (YYYY-MM-DD).
reviewDateTostringoptionalKeep reviews published on or before this date (YYYY-MM-DD).
reviewTextContainsarrayoptionalOne phrase per line. A review is kept when its text contains any of these phrases, ignoring case.
reviewRequireOwnerReplybooleanoptionalKeep only reviews where the business wrote a reply.
minRatingstringoptionalDrop businesses below this rating. Businesses without a rating are dropped when a threshold is set. Applies to place records.
minReviewCountintegeroptionalDrop businesses with fewer text reviews. 0 disables the filter. Applies to place records.
requirePhonebooleanoptionalDrop businesses without a phone number. Applies to searchPlaces and getDetails.
requireWebsitebooleanoptionalDrop businesses without a website. Applies to searchPlaces and getDetails.
openNowbooleanoptionalKeep only businesses that Yandex reports as open at collection time. Applies to place records.
goodPlacebooleanoptionalYandex Good Place quality filter. Used as a server-side search filter and verified client-side on place records.
priceCategoriesarrayoptionalKeep businesses in any of these price bands. Leave empty for all prices. Server-side in searchPlaces, verified client-side elsewhere.
categoryIdsarrayoptionalOptional Yandex category IDs, one per line. The category ID appears in each place's categoryDetails. Used server-side in searchPlaces and verified client-side.
maxPagesPerQueryintegeroptionalYandex returns 25 businesses per page. More pages find more places but take longer.
maxConcurrencyintegeroptionalHow many business pages or review batches to process at once. Higher is faster but more likely to trigger rate limiting.
yandexDomainstringoptionalRegional Yandex domain. yandex.com works worldwide; regional domains return local metadata.
languagestringoptionalInterface and metadata language. Review text stays in the reviewer's language and translations are returned separately.
proxyConfigurationobjectoptionalOptional. The actor works without a proxy and negotiates access automatically. Supply a proxy only if you want to pin a specific country or provider.

Download the published input schema

View complete JSON
{
  "description": "Search Yandex Maps for businesses, fetch full business cards, or collect reviews. Cookieless: no login, API key, cookies or browser are needed.",
  "properties": {
    "bbox": {
      "description": "Optional rectangular area, for example '37.45,55.65,37.85,55.85'. Results outside the rectangle are dropped.",
      "editor": "textfield",
      "title": "Bounding box (west,south,east,north)",
      "type": "string"
    },
    "businessIds": {
      "description": "Yandex Maps organization IDs, one per line. Use for getDetails or getReviews.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Business IDs",
      "type": "array"
    },
    "categoryIds": {
      "description": "Optional Yandex category IDs, one per line. The category ID appears in each place's categoryDetails. Used server-side in searchPlaces and verified client-side.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Category IDs",
      "type": "array"
    },
    "city": {
      "description": "City name in any language, for example 'Moscow', 'Kazan' or 'Istanbul'. Yandex Maps resolves the city centre and passes it to the search.",
      "editor": "textfield",
      "prefill": "Moscow",
      "title": "City",
      "type": "string"
    },
    "coordinates": {
      "description": "Optional point for a local search, for example '55.7558,37.6173'. When set, it overrides the city centre. Combine with Radius to search around the point.",
      "editor": "textfield",
      "title": "Centre point (latitude,longitude)",
      "type": "string"
    },
    "goodPlace": {
      "default": false,
      "description": "Yandex Good Place quality filter. Used as a server-side search filter and verified client-side on place records.",
      "prefill": false,
      "title": "Only Good Place businesses",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "description": "Interface and metadata language. Review text stays in the reviewer's language and translations are returned separately.",
      "editor": "select",
      "enum": [
        "en",
        "ru",
        "tr",
        "de",
        "fr",
        "uk",
        "kk",
        "uz"
      ],
      "enumTitles": [
        "English",
        "Russian",
        "Turkish",
        "German",
        "French",
        "Ukrainian",
        "Kazakh",
        "Uzbek"
      ],
      "title": "Language",
      "type": "string"
    },
    "maxConcurrency": {
      "default": 5,
      "description": "How many business pages or review batches to process at once. Higher is faster but more likely to trigger rate limiting.",
      "maximum": 20,
      "minimum": 1,
      "title": "Maximum concurrent requests",
      "type": "integer"
    },
    "maxItems": {
      "default": 100,
      "description": "Run-wide cap. In searchPlaces and getDetails it counts places; in getReviews it counts reviews across all businesses.",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "title": "Maximum records",
      "type": "integer"
    },
    "maxPagesPerQuery": {
      "default": 10,
      "description": "Yandex returns 25 businesses per page. More pages find more places but take longer.",
      "maximum": 50,
      "minimum": 1,
      "title": "Maximum search pages per query",
      "type": "integer"
    },
    "maxReviewsPerPlace": {
      "default": 100,
      "description": "Review cap for each business. Yandex exposes up to 600 reviews per sort order; the actor combines four orders to reach up to 2,400 unique reviews per business.",
      "maximum": 2400,
      "minimum": 1,
      "title": "Maximum reviews per place",
      "type": "integer"
    },
    "minRating": {
      "default": "any",
      "description": "Drop businesses below this rating. Businesses without a rating are dropped when a threshold is set. Applies to place records.",
      "editor": "select",
      "enum": [
        "any",
        "3",
        "3.5",
        "4",
        "4.5",
        "4.7",
        "4.9"
      ],
      "enumTitles": [
        "Any rating",
        "3+ stars",
        "3.5+ stars",
        "4+ stars",
        "4.5+ stars",
        "4.7+ stars",
        "4.9+ stars"
      ],
      "title": "Minimum place rating",
      "type": "string"
    },
    "minReviewCount": {
      "default": 0,
      "description": "Drop businesses with fewer text reviews. 0 disables the filter. Applies to place records.",
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum place review count",
      "type": "integer"
    },
    "mode": {
      "default": "searchPlaces",
      "description": "What to collect. searchPlaces finds businesses by keyword. getDetails returns full business cards for IDs or URLs. getReviews collects customer reviews for IDs, URLs or a search.",
      "editor": "select",
      "enum": [
        "searchPlaces",
        "getDetails",
        "getReviews"
      ],
      "enumTitles": [
        "Search places by keyword",
        "Get business details for IDs or URLs",
        "Get reviews for businesses or a search"
      ],
      "prefill": "searchPlaces",
      "title": "Mode",
      "type": "string"
    },
    "openNow": {
      "default": false,
      "description": "Keep only businesses that Yandex reports as open at collection time. Applies to place records.",
      "prefill": false,
      "title": "Only open businesses",
      "type": "boolean"
    },
    "priceCategories": {
      "default": [],
      "description": "Keep businesses in any of these price bands. Leave empty for all prices. Server-side in searchPlaces, verified client-side elsewhere.",
      "editor": "select",
      "items": {
        "enum": [
          "price_cheap",
          "price_reasonable",
          "price_expensive",
          "price_very_expensive"
        ],
        "enumTitles": [
          "Inexpensive",
          "Moderate",
          "Expensive",
          "Very expensive"
        ],
        "type": "string"
      },
      "prefill": [],
      "title": "Price categories",
      "type": "array",
      "uniqueItems": true
    },
    "proxyConfiguration": {
      "description": "Optional. The actor works without a proxy and negotiates access automatically. Supply a proxy only if you want to pin a specific country or provider.",
      "editor": "proxy",
      "title": "Proxy configuration",
      "type": "object"
    },
    "radiusKm": {
      "description": "Keep only places within this distance of the centre point or city centre. Results are measured by straight-line distance and filtered strictly.",
      "maximum": 50,
      "minimum": 1,
      "title": "Radius (km)",
      "type": "integer"
    },
    "requirePhone": {
      "default": false,
      "description": "Drop businesses without a phone number. Applies to searchPlaces and getDetails.",
      "prefill": false,
      "title": "Only businesses with a phone",
      "type": "boolean"
    },
    "requireWebsite": {
      "default": false,
      "description": "Drop businesses without a website. Applies to searchPlaces and getDetails.",
      "prefill": false,
      "title": "Only businesses with a website",
      "type": "boolean"
    },
    "reviewDateFrom": {
      "description": "Keep reviews published on or after this date (YYYY-MM-DD).",
      "editor": "textfield",
      "title": "Reviews from date",
      "type": "string"
    },
    "reviewDateTo": {
      "description": "Keep reviews published on or before this date (YYYY-MM-DD).",
      "editor": "textfield",
      "title": "Reviews to date",
      "type": "string"
    },
    "reviewMaxRating": {
      "description": "Keep only reviews with at most this many stars (1-5).",
      "maximum": 5,
      "minimum": 1,
      "title": "Maximum review rating",
      "type": "integer"
    },
    "reviewMinRating": {
      "description": "Keep only reviews with at least this many stars (1-5).",
      "maximum": 5,
      "minimum": 1,
      "title": "Minimum review rating",
      "type": "integer"
    },
    "reviewRequireOwnerReply": {
      "default": false,
      "description": "Keep only reviews where the business wrote a reply.",
      "prefill": false,
      "title": "Only reviews with an owner reply",
      "type": "boolean"
    },
    "reviewSort": {
      "default": "relevance",
      "description": "Primary review order. When you ask for more than 600 reviews per place, the actor also walks the other three orders and merges them, removing duplicates.",
      "editor": "select",
      "enum": [
        "relevance",
        "time",
        "rating_desc",
        "rating_asc"
      ],
      "enumTitles": [
        "Most relevant",
        "Newest first",
        "Highest rating first",
        "Lowest rating first"
      ],
      "title": "Review sort order",
      "type": "string"
    },
    "reviewTextContains": {
      "description": "One phrase per line. A review is kept when its text contains any of these phrases, ignoring case.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Review text contains",
      "type": "array"
    },
    "searchQueries": {
      "description": "One query per line, for example 'coffee' or 'dentist'. Used by searchPlaces, and by getReviews when no business IDs or URLs are supplied.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [
        "coffee"
      ],
      "title": "Search queries",
      "type": "array"
    },
    "startUrls": {
      "description": "Yandex Maps organization URLs, short links or search URLs, one per line. Business and search URLs work in both getDetails and getReviews.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Business or search URLs",
      "type": "array"
    },
    "yandexDomain": {
      "default": "yandex.com",
      "description": "Regional Yandex domain. yandex.com works worldwide; regional domains return local metadata.",
      "editor": "select",
      "enum": [
        "yandex.com",
        "yandex.ru",
        "yandex.com.tr",
        "yandex.kz",
        "yandex.uz",
        "yandex.by"
      ],
      "enumTitles": [
        "International (yandex.com)",
        "Russia (yandex.ru)",
        "Turkey (yandex.com.tr)",
        "Kazakhstan (yandex.kz)",
        "Uzbekistan (yandex.uz)",
        "Belarus (yandex.by)"
      ],
      "prefill": "yandex.com",
      "title": "Yandex domain",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Yandex Maps Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalDataset with scraped Yandex Maps places and reviews. Use the Places, Reviews and Detailed views in the run's Storage tab.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One dataset containing Yandex Maps place records (recordType=place) and review records (recordType=review). Empty fields are omitted.",
  "properties": {
    "results": {
      "description": "Dataset with scraped Yandex Maps places and reviews. Use the Places, Reviews and Detailed views in the run's Storage tab.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Yandex Maps results",
      "type": "string"
    }
  },
  "title": "Yandex Maps Business Search, Details & Reviews Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "Yandex Maps Results",
  "views": {
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "address": {
            "format": "text",
            "label": "Address"
          },
          "aspects": {
            "format": "array",
            "label": "Review aspects"
          },
          "author": {
            "format": "text",
            "label": "Review author"
          },
          "authorLevel": {
            "format": "text",
            "label": "Author level"
          },
          "authorUrl": {
            "format": "link",
            "label": "Author URL"
          },
          "categories": {
            "format": "array",
            "label": "Categories"
          },
          "categoryDetails": {
            "format": "array",
            "label": "Category details"
          },
          "chain": {
            "format": "object",
            "label": "Chain"
          },
          "city": {
            "format": "text",
            "label": "City"
          },
          "coordinates": {
            "format": "object",
            "label": "Coordinates"
          },
          "country": {
            "format": "text",
            "label": "Country"
          },
          "date": {
            "format": "text",
            "label": "Review date"
          },
          "dislikes": {
            "format": "number",
            "label": "Dislikes"
          },
          "distanceKm": {
            "format": "number",
            "label": "Distance (km)"
          },
          "features": {
            "format": "array",
            "label": "Features"
          },
          "goodPlaceYear": {
            "format": "text",
            "label": "Good Place year"
          },
          "hasOwnerReply": {
            "format": "text",
            "label": "Owner replied"
          },
          "isGoodPlace": {
            "format": "text",
            "label": "Good Place"
          },
          "isOpenNow": {
            "format": "text",
            "label": "Open now"
          },
          "isPinned": {
            "format": "text",
            "label": "Pinned"
          },
          "likes": {
            "format": "number",
            "label": "Likes"
          },
          "name": {
            "format": "text",
            "label": "Name"
          },
          "openStatus": {
            "format": "text",
            "label": "Open status"
          },
          "ownerReply": {
            "format": "object",
            "label": "Owner reply"
          },
          "phone": {
            "format": "text",
            "label": "Phone"
          },
          "phones": {
            "format": "array",
            "label": "Phones"
          },
          "photos": {
            "format": "array",
            "label": "Photos"
          },
          "placeId": {
            "format": "text",
            "label": "Place ID"
          },
          "placeName": {
            "format": "text",
            "label": "Place"
          },
          "popularTimes": {
            "format": "object",
            "label": "Popular times"
          },
          "position": {
            "format": "number",
            "label": "Position"
          },
          "priceCategory": {
            "format": "text",
            "label": "Price category"
          },
          "priceRange": {
            "format": "text",
            "label": "Price"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "ratingCount": {
            "format": "number",
            "label": "Rating count"
          },
          "recordType": {
            "format": "text",
            "label": "Type"
          },
          "reviewCount": {
            "format": "number",
            "label": "Review count"
          },
          "reviewId": {
            "format": "text",
            "label": "Review ID"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped at"
          },
          "searchQuery": {
            "format": "text",
            "label": "Search query"
          },
          "socialLinks": {
            "format": "array",
            "label": "Social links"
          },
          "sortOrder": {
            "format": "text",
            "label": "Sort order"
          },
          "sourceUrl": {
            "format": "link",
            "label": "Source URL"
          },
          "text": {
            "format": "text",
            "label": "Review text"
          },
          "translations": {
            "format": "object",
            "label": "Translations"
          },
          "url": {
            "format": "link",
            "label": "URL"
          },
          "verifiedOwner": {
            "format": "text",
            "label": "Verified owner"
          },
          "website": {
            "format": "link",
            "label": "Website"
          },
          "websites": {
            "format": "array",
            "label": "Websites"
          },
          "workingHours": {
            "format": "object",
            "label": "Working hours"
          },
          "workingHoursText": {
            "format": "text",
            "label": "Hours"
          }
        }
      },
      "title": "Detailed view",
      "transformation": {
        "fields": [
          "recordType",
          "placeId",
          "placeName",
          "name",
          "url",
          "sourceUrl",
          "address",
          "city",
          "country",
          "coordinates",
          "distanceKm",
          "rating",
          "ratingCount",
          "reviewCount",
          "priceRange",
          "priceCategory",
          "phone",
          "phones",
          "website",
          "websites",
          "socialLinks",
          "workingHoursText",
          "isOpenNow",
          "openStatus",
          "features",
          "chain",
          "verifiedOwner",
          "goodPlaceYear",
          "isGoodPlace",
          "popularTimes",
          "aspects",
          "categories",
          "categoryDetails",
          "photos",
          "author",
          "authorUrl",
          "authorLevel",
          "reviewId",
          "text",
          "date",
          "translations",
          "ownerReply",
          "likes",
          "dislikes",
          "isPinned",
          "sortOrder",
          "searchQuery",
          "position",
          "scrapedAt",
          "hasOwnerReply",
          "workingHours"
        ]
      }
    },
    "places": {
      "display": {
        "component": "table",
        "properties": {
          "address": {
            "format": "text",
            "label": "Address"
          },
          "categories": {
            "format": "array",
            "label": "Categories"
          },
          "city": {
            "format": "text",
            "label": "City"
          },
          "name": {
            "format": "text",
            "label": "Name"
          },
          "phone": {
            "format": "text",
            "label": "Phone"
          },
          "placeId": {
            "format": "text",
            "label": "Place ID"
          },
          "priceRange": {
            "format": "text",
            "label": "Price"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "recordType": {
            "format": "text",
            "label": "Type"
          },
          "reviewCount": {
            "format": "number",
            "label": "Reviews"
          },
          "url": {
            "format": "link",
            "label": "Yandex Maps URL"
          },
          "website": {
            "format": "link",
            "label": "Website"
          }
        }
      },
      "title": "Places",
      "transformation": {
        "fields": [
          "recordType",
          "placeId",
          "name",
          "address",
          "city",
          "rating",
          "reviewCount",
          "priceRange",
          "phone",
          "website",
          "categories",
          "url"
        ]
      }
    },
    "reviews": {
      "display": {
        "component": "table",
        "properties": {
          "author": {
            "format": "text",
            "label": "Author"
          },
          "date": {
            "format": "text",
            "label": "Date"
          },
          "hasOwnerReply": {
            "format": "text",
            "label": "Owner replied"
          },
          "placeName": {
            "format": "text",
            "label": "Place"
          },
          "placeUrl": {
            "format": "link",
            "label": "Place URL"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "recordType": {
            "format": "text",
            "label": "Type"
          },
          "reviewId": {
            "format": "text",
            "label": "Review ID"
          },
          "text": {
            "format": "text",
            "label": "Review"
          }
        }
      },
      "title": "Reviews",
      "transformation": {
        "fields": [
          "recordType",
          "placeName",
          "reviewId",
          "author",
          "rating",
          "date",
          "text",
          "hasOwnerReply",
          "placeUrl"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Yandex Maps Business Search, Details & Reviews Scraper

Collect business listings, full business cards and customer reviews from Yandex Maps — the map service used across Russia, Belarus, Kazakhstan, Uzbekistan and Turkey. The actor reads Yandex Maps' public server-rendered pages and its internal JSON endpoints directly, so it needs no login, no API key, no cookies and no browser.

What this actor does

  • Three modes: search by keyword and location (searchPlaces), fetch complete business cards (getDetails), or collect reviews (getReviews).
  • Search precisely: combine a query with a city, a centre point and radius, or a bounding box. Filter by rating, review count, phone, website, price band, category, current opening status and Yandex's Good Place flag.
  • Full business cards: contacts, categories, rating breakdown, price range, structured opening hours, features, chain membership, verified-owner flag, popular times, review-aspect sentiment, metro/stops, photos and coordinates.
  • Deep reviews: up to 2,400 unique reviews per business. Yandex exposes at most 600 reviews per sort order, so the actor walks all four orders (relevance, newest, highest rated, lowest rated) when you ask for more than 600, then removes duplicates.
  • Review filters: rating range, date range, text phrases and "has an owner reply".
  • Run-wide caps and global deduplication: maxItems counts records across the whole run, not per query. Duplicate businesses and reviews are removed across queries and pages.
  • Omit-empty records: a field is written only when Yandex has a real value for it. Every record carries recordType, sourceUrl and scrapedAt.
  • International: six regional domains and eight interface languages.

Output per record

Each dataset item is either a place (recordType: "place") or a review (recordType: "review").

Place record

  • placeId, name, shortName, description, url — identity and canonical Yandex Maps page
  • address, city, country, postalCode, addressDetails — location
  • coordinates — { lat, lng }; distanceKm when a centre point was used
  • rating, ratingCount, reviewCount — Yandex's rating value, star-rating count and text-review count
  • categories, categoryDetails — category names and Yandex category IDs
  • phone, phones, website, websites, socialLinks — contacts
  • workingHours, workingHoursText, isOpenNow, openStatus — structured week schedule and current status
  • features, featureGroups — amenities, payment methods and other business attributes
  • priceRange, priceCategory, priceCategoryName — price signals when Yandex publishes them
  • chain, isChain, verifiedOwner, isGoodPlace, goodPlaceYear, businessStatus
  • popularTimes — Yandex's 24-hour popularity histogram per weekday
  • aspects — review-aspect sentiment (staff, drinks, atmosphere, …)
  • photos, photoCount, logoUrl
  • metro, stops — nearest transit with distance
  • advertiser — legal name and TIN when the row is a promoted listing
  • searchQuery, searchCity, position — search provenance when applicable
  • sourceUrl, scrapedAt, recordType

Review record

  • reviewId, rating, text, textLanguage, translations
  • date, updatedAt — review date and full timestamp
  • author, authorUrl, authorPublicId, authorAvatarUrl, authorLevel
  • likes, dislikes, isPinned
  • ownerReply — { text, date, updatedAt } when the business replied
  • photos, photoCount
  • placeId, placeName, placeUrl, placeRating, placeReviewCount, placeAddress, placeCity, placePhone, placeWebsite
  • sortOrder, position, sourceUrl, scrapedAt, recordType

Input

Field Type Default Description
mode string searchPlaces searchPlaces, getDetails or getReviews
searchQueries array of strings – Keywords for searchPlaces, and for getReviews discovery when no IDs/URLs are supplied
city string – City name in any language; resolved to Yandex's region centre
coordinates string – Centre point as lat,lng, e.g. 55.7558,37.6173
radiusKm integer – Keep places within 1–50 km of the centre (strict client-side distance filter)
bbox string – Rectangle as west,south,east,north; results outside it are dropped
businessIds array of strings – Yandex organization IDs for getDetails / getReviews
startUrls array of strings – Organization URLs, short links or Yandex search URLs
maxItems integer 100 Run-wide record cap (1–5,000)
maxReviewsPerPlace integer 100 Reviews per business (1–2,400)
reviewSort string relevance relevance, time, rating_desc or rating_asc
reviewMinRating integer – Minimum review stars (1–5)
reviewMaxRating integer – Maximum review stars (1–5)
reviewDateFrom string – Earliest review date (YYYY-MM-DD)
reviewDateTo string – Latest review date (YYYY-MM-DD)
reviewTextContains array of strings – Keep reviews containing any phrase (case-insensitive)
reviewRequireOwnerReply boolean false Only reviews with a business reply
minRating string any Minimum place rating: any, 3, 3.5, 4, 4.5, 4.7, 4.9
minReviewCount integer 0 Minimum text reviews for a place
requirePhone boolean false Only places with a phone
requireWebsite boolean false Only places with a website
openNow boolean false Only places Yandex reports as open now
goodPlace boolean false Yandex Good Place filter (server-side in search, verified on every place record)
priceCategories array of strings [] price_cheap, price_reasonable, price_expensive, price_very_expensive
categoryIds array of strings – Yandex category IDs (see categoryDetails in the output)
maxPagesPerQuery integer 10 Search pages per query, 25 businesses each
maxConcurrency integer 5 Concurrent business/review workers (1–20)
yandexDomain string yandex.com yandex.com, .ru, .com.tr, .kz, .uz, .by
language string en en, ru, tr, de, fr, uk, kk, uz
proxyConfiguration object – Optional. The actor works without a proxy; supply one only to pin a country/provider

Example: coffee shops in Moscow

{
  "mode": "searchPlaces",
  "searchQueries": ["coffee"],
  "city": "Moscow",
  "maxItems": 3
}

Example: cafés within 3 km of a point

{
  "mode": "searchPlaces",
  "searchQueries": ["coffee"],
  "coordinates": "55.7558,37.6173",
  "radiusKm": 3,
  "maxItems": 100
}

Example: full cards from a search URL

{
  "mode": "getDetails",
  "startUrls": ["https://yandex.com/maps/?text=coffee%20Moscow"],
  "maxItems": 20
}

Example: newest negative reviews with owner replies

{
  "mode": "getReviews",
  "businessIds": ["150968830833"],
  "maxReviewsPerPlace": 300,
  "reviewSort": "time",
  "reviewMaxRating": 3,
  "reviewRequireOwnerReply": true
}

Example: Turkish restaurants in Istanbul

{
  "mode": "searchPlaces",
  "searchQueries": ["restaurant"],
  "city": "Istanbul",
  "yandexDomain": "yandex.com.tr",
  "language": "tr",
  "maxItems": 50
}

Use cases

  • Lead generation — build lists of local businesses with phones, websites and social links by category and city.
  • Market research — compare ratings, price bands and feature adoption across a city or district.
  • Reputation monitoring — pull recent reviews with owner replies and translations on a schedule.
  • Location analysis — count nearby competitors within a radius or rectangle and read popular-times curves.
  • Data enrichment — resolve Yandex organization IDs and URLs into structured business cards.

How it works

  1. The actor fetches the normal Yandex Maps search or organization page.
  2. It reads the page's state-view JSON (config, stack[0].results) instead of parsing fragile HTML.
  3. For additional search pages and reviews it calls Yandex's internal /maps/api/search and /maps/api/business/fetchReviews endpoints, signing each request with the same s parameter the site's frontend computes.
  4. If the signature or an endpoint changes, the actor refreshes the page state and retries once, then falls back to the server-rendered page and reports a partial-result warning instead of silently returning wrong data.

FAQ

Does this need a Yandex account, API key or cookies? No. It uses public pages and the site's own session cookies, which are set automatically. Nothing is sent to Yandex except the normal request parameters.

Why is maxItems applied to the whole run? So two queries cannot return more rows than you asked for. The same business found by several queries is emitted once. Use maxPagesPerQuery to control search depth.

How many reviews can I get per business? Up to 2,400 unique reviews. Yandex returns at most 600 reviews per sort order; the actor fetches the selected order and, when you request more than 600, the other three orders too, then de-duplicates by review ID.

Why does a broad search return fewer places than Yandex's result count? Yandex's totalResultCount is unstable and Yandex repeats businesses across pages. The actor stops after three pages without a new business, at maxPagesPerQuery, or at maxItems. Narrow the query with a city, radius or category to get more precise coverage.

Are review texts translated? The original text is always in text; translations holds Yandex's translations when available. Set language to change the interface and metadata language, not the review language.

Does the actor use a proxy? It works without one. If Yandex blocks the direct connection, the actor retries with a fresh session and can switch to Apify Proxy automatically. You can also supply your own proxy configuration; it is never required and never prefilled.

What is missing? Yandex does not publish email addresses, a full menu, an official legal-entity block or an AI review summary on these public pages. Promoted rows sometimes expose an advertiser name and TIN. Those gaps are documented in docs/RESEARCH-yandex-maps.md.

Is this affiliated with Yandex? No. This is an independent third-party actor that reads publicly available Yandex Maps pages. It is not affiliated with or endorsed by Yandex.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build D8zEadOFOCSTloS2r. Documentation is regenerated from the default published build; private drafts are not included.