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.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | 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. |
searchQueries | array | optional | One query per line, for example 'coffee' or 'dentist'. Used by searchPlaces, and by getReviews when no business IDs or URLs are supplied. |
city | string | optional | City 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
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | 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. |
searchQueries | array | optional | One query per line, for example 'coffee' or 'dentist'. Used by searchPlaces, and by getReviews when no business IDs or URLs are supplied. |
city | string | optional | City name in any language, for example 'Moscow', 'Kazan' or 'Istanbul'. Yandex Maps resolves the city centre and passes it to the search. |
coordinates | string | optional | 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. |
radiusKm | integer | optional | Keep only places within this distance of the centre point or city centre. Results are measured by straight-line distance and filtered strictly. |
bbox | string | optional | Optional rectangular area, for example '37.45,55.65,37.85,55.85'. Results outside the rectangle are dropped. |
businessIds | array | optional | Yandex Maps organization IDs, one per line. Use for getDetails or getReviews. |
startUrls | array | optional | Yandex Maps organization URLs, short links or search URLs, one per line. Business and search URLs work in both getDetails and getReviews. |
maxItems | integer | optional | Run-wide cap. In searchPlaces and getDetails it counts places; in getReviews it counts reviews across all businesses. |
maxReviewsPerPlace | integer | optional | 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. |
reviewSort | string | optional | 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. |
reviewMinRating | integer | optional | Keep only reviews with at least this many stars (1-5). |
reviewMaxRating | integer | optional | Keep only reviews with at most this many stars (1-5). |
reviewDateFrom | string | optional | Keep reviews published on or after this date (YYYY-MM-DD). |
reviewDateTo | string | optional | Keep reviews published on or before this date (YYYY-MM-DD). |
reviewTextContains | array | optional | One phrase per line. A review is kept when its text contains any of these phrases, ignoring case. |
reviewRequireOwnerReply | boolean | optional | Keep only reviews where the business wrote a reply. |
minRating | string | optional | Drop businesses below this rating. Businesses without a rating are dropped when a threshold is set. Applies to place records. |
minReviewCount | integer | optional | Drop businesses with fewer text reviews. 0 disables the filter. Applies to place records. |
requirePhone | boolean | optional | Drop businesses without a phone number. Applies to searchPlaces and getDetails. |
requireWebsite | boolean | optional | Drop businesses without a website. Applies to searchPlaces and getDetails. |
openNow | boolean | optional | Keep only businesses that Yandex reports as open at collection time. Applies to place records. |
goodPlace | boolean | optional | Yandex Good Place quality filter. Used as a server-side search filter and verified client-side on place records. |
priceCategories | array | optional | Keep businesses in any of these price bands. Leave empty for all prices. Server-side in searchPlaces, verified client-side elsewhere. |
categoryIds | array | optional | 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. |
maxPagesPerQuery | integer | optional | Yandex returns 25 businesses per page. More pages find more places but take longer. |
maxConcurrency | integer | optional | How many business pages or review batches to process at once. Higher is faster but more likely to trigger rate limiting. |
yandexDomain | string | optional | Regional Yandex domain. yandex.com works worldwide; regional domains return local metadata. |
language | string | optional | Interface and metadata language. Review text stays in the reviewer's language and translations are returned separately. |
proxyConfiguration | object | optional | 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. |
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.
| Field | Type | Required | Description |
|---|---|---|---|
results | string | optional | Dataset 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:
maxItemscounts 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,sourceUrlandscrapedAt. - 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 pageaddress,city,country,postalCode,addressDetails— locationcoordinates—{ lat, lng };distanceKmwhen a centre point was usedrating,ratingCount,reviewCount— Yandex's rating value, star-rating count and text-review countcategories,categoryDetails— category names and Yandex category IDsphone,phones,website,websites,socialLinks— contactsworkingHours,workingHoursText,isOpenNow,openStatus— structured week schedule and current statusfeatures,featureGroups— amenities, payment methods and other business attributespriceRange,priceCategory,priceCategoryName— price signals when Yandex publishes themchain,isChain,verifiedOwner,isGoodPlace,goodPlaceYear,businessStatuspopularTimes— Yandex's 24-hour popularity histogram per weekdayaspects— review-aspect sentiment (staff, drinks, atmosphere, …)photos,photoCount,logoUrlmetro,stops— nearest transit with distanceadvertiser— legal name and TIN when the row is a promoted listingsearchQuery,searchCity,position— search provenance when applicablesourceUrl,scrapedAt,recordType
Review record
reviewId,rating,text,textLanguage,translationsdate,updatedAt— review date and full timestampauthor,authorUrl,authorPublicId,authorAvatarUrl,authorLevellikes,dislikes,isPinnedownerReply—{ text, date, updatedAt }when the business repliedphotos,photoCountplaceId,placeName,placeUrl,placeRating,placeReviewCount,placeAddress,placeCity,placePhone,placeWebsitesortOrder,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
- The actor fetches the normal Yandex Maps search or organization page.
- It reads the page's
state-viewJSON (config,stack[0].results) instead of parsing fragile HTML. - For additional search pages and reviews it calls Yandex's internal
/maps/api/searchand/maps/api/business/fetchReviewsendpoints, signing each request with the samesparameter the site's frontend computes. - 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.
Source build D8zEadOFOCSTloS2r. Documentation is regenerated from the default published build; private drafts are not included.