Yandex Maps Quick Scraper
Pricing
from $1.00 / 1,000 results
Yandex Maps Quick Scraper
Deprecated[💰 $1.00 / 1K] Extract Yandex Maps businesses with phones, emails, websites, ratings, reviews, photos, opening hours, and 60+ more fields. Search by query + city, by 100+ categories, or by direct Yandex business ID. Optional contact-scraping from each place's website. Pay only for what you collect.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Kitcune Mia
Actor stats
1
Bookmarked
2
Total users
0
Monthly active users
12 hours ago
Last modified
Categories
Share
🗺 Yandex Maps Places Scraper
The fast, captcha-resilient way to extract every business on Yandex Maps. Names, phones, emails, websites, ratings, reviews, photos, opening hours, menus — and 60+ more fields — straight into your Apify dataset.
Why this scraper?
| This actor | Typical Yandex scraper | |
|---|---|---|
| Cost | $3 / 1,000 places | $4–8 / 1,000 |
| Engine | Direct HTTP (curl_cffi + TLS impersonation) | Headless Chromium |
| Speed | ~150 places/min on a single run | ~30–60 places/min |
| Captcha resilience | Residential proxy + auto session rotation (5 retries) | Often blocks mid-run |
| Coverage | 60+ fields including emails / website phones / reviews / menus | 15–25 fields |
| Regions | 6: RU, BY, KZ, TR, AZ, EN | usually RU only |
| Billing | Pay-per-event — you control what you pay for | Flat rate, you pay for unused |
What makes it fast and reliable
- No browser — Yandex server-renders the entire app state into a single JSON payload on every search/place URL. We parse that directly. No Chromium boot, no JS execution, no rendering loop.
- Chrome TLS fingerprint —
curl_cffisends a TLS ClientHello byte-identical to real Chrome, defeating Yandex's JA3-based bot detection. - Auto proxy pairing — your selected
Languageautomatically picks the matching residential country (RU → RUIPs,BY → BY,TR → TR…). No more cross-region captcha loops. - Captcha-aware retry — on 403 /
showcaptcha/ suspicious response we rotate the proxy session, recreate the curl context (clean cookie jar + new exit IP), and retry up to 5 times before giving up. - Parallel enrichment — reviews and website-contact scrapes run concurrently per place, halving wall-time when you opt into both.
- 15s ceiling per request — broken proxies fail fast, healthy ones return in well under 2s.
What you can do with it
| Use case | Workflow |
|---|---|
| 🎯 Lead generation | query="dentist", locations=[Moscow, SPB], emails=ON → CSV with names, addresses, websites, emails harvested from each place's website, phones |
| 📊 Local market research | categories=[Pizzeria], locations=[10 cities] → per-city ratings, density, price tiers — perfect for franchise scouting |
| ⭐ Reviews monitoring | organizationIds=[your shops], maxReviews=50, sort=newest → JSON of customer feedback, sortable by date or rating |
| 📚 Directory building | query="carwash", maxItems=2000 → bulk-extract every car wash with full metadata |
| 🕵 Competitor intelligence | one company's placeId → features, opening hours, photos, social links, menu sections, awards |
Quick start
- Search queries — type what you'd type in the Yandex Maps search bar
(e.g.
coffee,auto repair,dentist). One per line. - Location — pick one or more cities from the dropdown (~90 major Russian cities listed in English: Moscow, Saint Petersburg, Novosibirsk…) or type your own city name.
- Number of places to extract —
20is a good start. - Language — sets the Yandex regional domain. Defaults to Russian.
- (optional) Filter by rating, price tier, category, or "good places only".
- (optional) Enable reviews, extra photos, or email/phone from each place's website.
- Save & Start.
💡 No
Search queries? Pick a category — the actor will use category names as queries automatically (English + Russian for max coverage).
Pricing — Pay only for what you collect
| Event | Cost | When it fires |
|---|---|---|
| Result | $3.00 / 1,000 | Each place pushed to the dataset |
| Review scraped | $0.50 / 1,000 | Each individual review extracted |
| Image scraped | $0.50 / 1,000 | Each extra photo (the main image is free) |
| Actor start | $0.00005 | Once per run |
| Platform usage (compute, proxy, dataset) | free — included | — |
🛡 You set the ceiling. In Run Options set
maxTotalChargeUsd(e.g.5) and the actor will stop before exceeding your budget. Reviews, extra photos, and contact-scraping are off by default — turn them on only if you need them.
Real-world budget examples
| Goal | Setup | Cost |
|---|---|---|
| 500 leads with phones + emails | 500 places + contact scraping | $1.50 |
| 500 places + 10 reviews each | 500 + 5,000 reviews | $4.00 |
| 200 restaurants with photos & reviews | 200 + 5 photos × 5 reviews | $1.10 |
| 2,000 carwashes for a directory | 2,000 places, no extras | $6.00 |
Input
Top-level fields
| Field | Description |
|---|---|
| 🔎 Search queries | List of search terms. Each query runs against every selected city. |
| 📍 Location | Cities to limit the search. Pre-loaded with ~90 major Russian cities in English; type any custom city to add it. |
| 💯 Number of places to extract | Max items per (query × city) pair. |
| 🟢 Language | Yandex regional domain: RU → yandex.ru, BY → yandex.by, EN → yandex.com, KK → yandex.kz, TR → yandex.com.tr, AZ → yandex.az. Proxy country auto-paired. |
🔧 Filters & categories (optional)
| Field | Effect |
|---|---|
| Rating | Minimum average rating threshold: Any · 3.0+ · 3.5+ · 4.0+ · 4.5+ · 4.7+ · 4.9+. |
| Price categories | Multi-select: Low · Average · Above average · High. |
| Good place | Only places with rating ≥ 4.5 and ≥ 50 reviews. |
| Categories | 100+ presets (Carwash, Pizzeria, Dental clinic, Driving school…). Bilingual matching — works with Yandex's Russian category names automatically. |
| Append to global dataset | Also append unique places to a persistent global dataset (cross-run dedupe). |
🖼 Photos (optional, paid)
| Field | Effect |
|---|---|
| Number of additional images per place | Extra photo URLs collected. 0 disables. The main image is always free. |
| Include image authors | Add author metadata for each extra photo. |
⭐ Reviews (optional, paid)
| Field | Effect |
|---|---|
| Number of reviews per place | Reviews fetched from each place's /reviews/ page. 0 disables. |
| Reviews sorting | By default · Newest first · Highest rating first · Lowest rating first. |
| Include reviewers' data | Author profile fields (name, avatar, public ID) on each review. |
| 📧 Email & phones from website | Visits each place's website, harvests mailto: / tel: links plus inline emails from /contacts and /contact pages → fills emails and websitePhones fields. |
🍽 Collect menu (optional)
| Field | Effect |
|---|---|
| Collect menu | Pull menu sections and items where Yandex exposes them (mostly restaurants). |
🏢 Scrape with place IDs (optional)
| Field | Effect |
|---|---|
| Organization IDs | Skip search entirely — open these Yandex business OIDs directly. Reviews / photos / contacts still apply per place. |
Output
Each scraped place becomes one dataset record with 60+ fields. The high-value ones:
| Field | Example |
|---|---|
title / shortTitle | "PizzaFabrika" |
categoryName / categories | "Pizzeria" · ["Pizzeria", "Cafe"] |
address / fullAddress | "Moscow, Mikhaylova Street, 30Ak2" |
phone / phoneUnformatted / phones | "+7 800 550-06-00" |
website / urls | "https://pizzafabrika.ru" |
emails (opt-in) | ["info@pizzafabrika.ru"] |
websitePhones (opt-in) | ["+78005500600"] |
totalScore / ratingCount / reviewsCount | 4.9 · 350 · 116 |
reviews (opt-in) | [{author, rating, text, updatedTime, businessReply, ...}] |
location | { "lat": 55.84, "lng": 37.62 } |
mainPhotoUrl | "https://avatars.mds.yandex.net/.../XXL" |
photos / photoDetails (opt-in) | extra photo URLs + alt/id metadata |
workingHours / openingHoursText / isOpenNow | day-by-day schedule + status |
featureDetails | structured features (Wi-Fi, parking, kids-friendly…) |
metroDetails / stopDetails | nearby metro / transit stops with distances |
socialLinks | Instagram / VK / Telegram links |
menu / menuCategories / menuItemCount | menu data (when Yandex exposes it) |
placeId / yandexUri / url | Yandex business ID, internal URI, canonical URL |
chain / awards / parentRubrics | brand info, awards, broader rubrics |
panorama / panoramaPreviewUrl | nearby panorama |
bounds / entrances | geometry corners and known entrances |
scrapedAt | ISO timestamp of extraction |
The Output tab in Apify Console gives you pre-built table views: Overview · Contacts · Ratings · Features · Media · Menu · Reviews · All fields.
Tips & gotchas
- Russian cities work in either spelling. Type
MoscoworМосква— Yandex resolves both. - Belarusian language — pick
BYwhen scraping Minsk / Gomel / Brest / Grodno to route throughyandex.by+ Belarusian residential IPs. Drastically lowers captcha rate vs running onyandex.ru. - Rating 4.9+ is strict. Most popular places sit at 4.5–4.8. If you get 0 results, lower the threshold.
maxItems × locations × queriesis your upper bound on records. Need exactly 100? Use one query, one location,maxItems: 100.- Reviews & photos are opt-in extras. Leave them at
0if you only need names / addresses / phones / emails. - Captchas are rare thanks to TLS impersonation + per-language residential proxies. When they do happen, the actor auto-rotates and retries up to 5 times.
FAQ
Do you support cities outside Russia?
Yes. The dropdown is curated for Russian cities, but you can type any
city — Minsk, Almaty, Istanbul, Ankara, Baku — and it works. Pick the
matching Language for best results.
Is the proxy configurable?
Not needed — proxy country is auto-paired with Language
(RU → RU, BY → BY, KK → KZ, TR → TR, AZ → AZ, EN → US). This setup
minimizes captcha rate. If you have a special use case, contact me.
What if a place has no website?
The emails and websitePhones fields stay null. You still pay only
for the place itself ($3 / 1,000), not for the attempted contact scrape.
What if a place has zero reviews?
The actor sees reviewsCount=0 from Yandex and skips the reviews
fetch entirely — you don't pay the review billing event for empty
results.
Can I limit total spend per run?
Yes — set maxTotalChargeUsd in Run Options. The actor honors it and
stops before exceeding.
How fast is it? ~150 places per minute on a single run with reviews + contacts off. Add 0.5–1.5s per place when contacts are on (depends on the place's website speed).
My output is empty — why? Check the Log tab. Common causes:
- Empty
Search queries+ emptyCategories+ emptyOrganization IDs→ nothing to do. - Too-strict filters (Rating 4.9+ on a small city, Good place + niche category).
- Russian-language city while
Language=TR→ yandex.com.tr doesn't index Russian cities. UseRUinstead.
How do I run this from the API? Click the API button in Console — copy ready-to-paste cURL or SDK snippets.
What about reviews for non-Russian places?
Pass the Language matching the region (KK for Kazakh, TR for
Turkish, etc.). Reviews are scraped from each place's /reviews/
page on the same Yandex regional domain.
Author
Built and maintained by kitcunemia.
Open for custom scraping projects and bulk one-off extractions. Need a different source covered (Google Maps, 2GIS, OpenStreetMap)? Send a message via my Apify profile — typical turnaround is a few days.
Changelog
- v0.7 — Belarusian language support, parallel reviews+contacts, reviewsCount=0 short-circuit, slimmer contacts paths, faster timeouts.
- v0.6 — Pay-per-event billing, email/phone scraping, bilingual categories, English UI.
- v0.5 — Initial release: 60+ fields, Apify-proxy auto-rotation, TLS impersonation.