Yandex Maps Places Scraper
Pricing
Pay per event
Yandex Maps Places Scraper
Yandex Maps scraper API: search Yandex Maps places by query and city and get name, address, coordinates, rating, phones, websites, categories and hours as JSON. No browser, no login. Built for lead-gen and local market research. Yandex Maps reviews text not included.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
🎯 What this scrapes
Yandex Maps is the dominant local-business directory across Russia and the CIS, and it has no public places API. This Actor turns a search such as cafe in Moscow into a deduplicated table of places with coordinates, ratings, phone numbers, websites, categories and opening hours. Give it a query and a city; get rows back. Review text is not included: you get the rating, rating count and review count.
🔥 What we handle for you
- 🛡️ We rotate browser fingerprints (curl-cffi impersonation, Firefox and Safari profiles) so the target sees a real-browser handshake, not Python.
- 🌐 We rotate Apify Proxy sessions with a fresh session and exit IP for every search and on every block.
- 🔁 We retry with exponential backoff on
408 / 429 / 503and network errors, up to 5 attempts per page, and we honourRetry-After. - 🧱 We pace requests at least three seconds apart and page in order, so a long run keeps its footing.
- 🧊 We keep the dataset clean — Pydantic-validated rows, deduplicated by place id, ISO-8601 timestamps, JSON / CSV / Excel export from the Apify Console.
- 💰 You pay only for results that land. No rows, no per-row charge (just the small start fee).
💡 Use cases
- Lead generation — build lists of cafes, pharmacies, clinics or salons per city with phone numbers and websites.
- Local market research — count and rate competitors by category and district.
- Site selection — map coordinates and ratings of nearby businesses before opening a location.
- Directory enrichment — refresh addresses, phones and opening hours in your own database.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searches | array | yes | [{'query': 'cafe', 'geoId': 213, 'city': 'moscow'}, {'query': 'pharmacy', 'geoId': 213, 'city': 'moscow'}] | Yandex Maps searches. Each item is an object {"query": "cafe", "geoId": 213, "city": "moscow"}, a Yandex Maps search… |
maxResults | integer | no | 50 | Cap on places per search. Yandex Maps serves 25 places per page; paging stops when the cap is reached. |
lang | string | no | 'en_US' | Yandex Maps locale. Titles and addresses come back as Yandex serves them; English (US) is the supported locale for now. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy configuration. Datacenter exit by default; pick a residential group if you need one. |
Example input
{"searches": [{"query": "cafe","geoId": 213,"city": "moscow"}],"maxResults": 5,"lang": "en_US","proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
id | string | Yandex Maps organization id, the dedupe key. |
name | string | Place name. |
address | string | Full address. |
lat | number | Latitude (WGS84). |
lon | number | Longitude (WGS84). |
coordinates | array | [lon, lat] as served. |
rating | number | Rating, 2 decimals. |
ratingCount | integer | Number of ratings. |
reviewCount | integer | Number of reviews. |
phones | array | Business phones. |
urls | array | Business websites. |
categories | array | Category names. |
workingTime | string | Opening hours as text. |
workingHours | array | Opening hours per weekday. |
sourceUrl | string | Yandex Maps place page URL. |
query | string | Search query that produced this row. |
geoId | integer | Search geoId. |
page | integer | 1-based page the row was first seen on. |
position | integer | 1-based rank within the search. |
scrapedAt | string | ISO-8601 UTC scrape timestamp. |
Example output
{"id": "243088808182","name": "Alkobufet","address": "Moscow, Sretenka Street, 36","lat": 55.771647,"lon": 37.632628,"coordinates": [37.632628,55.771647],"rating": 4.9,"ratingCount": 2757,"reviewCount": 1321,"phones": ["+79152776884"],"urls": ["https://taplink.cc/alkobufet.shashlik"],"categories": ["Cafe","the glass room"],"workingTime": "Mon-Thu 12:00–02:00; Fri,Sat 12:00–05:00; Sun 12:00–02:00","workingHours": [[{"from": {"hours": 12,"minutes": 0},"to": {"hours": 2,"minutes": 0}}]],"sourceUrl": "https://yandex.com/maps/org/alkobufet_shashlychnaya/243088808182","query": "cafe","geoId": 213,"page": 1,"position": 1,"scrapedAt": "2026-10-09T00:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result-row | $0.004 | Per unique dataset item |
Example: 1 000 results at the rates above ≈ $4.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- Review text, photos, and per-place detail pages are not included.
- A city other than Moscow needs its
geoIdand city slug from the Yandex Maps URL. maxResultsis a per-search cap of up to 500 rows. Yandex serves 25 places per page.- The language is English (US) for now; place names appear as Yandex serves them.
- The result order can shift between pages; we deduplicate by place id, so a place appears once per search.
❓ FAQ
How much does it cost?
$0.004 per result row, which is $4.00 per 1,000 results, plus a one-off $0.20 start fee per run. Duplicates are never charged.
How do I pick a city?
Pass {"query": "cafe", "geoId": 213, "city": "moscow"}, a Yandex Maps search URL, or text like cafe | 213 moscow. Moscow works by name alone (cafe | moscow). For any other city copy its geoId and slug from the Yandex Maps URL, for example /maps/213/moscow/.
Does it return review text?
No. You get rating, ratingCount and reviewCount per place. Review text is not part of this Actor.
Why do I get fewer rows than maxResults?
Yandex stops serving results when a search runs out of matches, so a narrow query in a small area can return fewer rows. The run still succeeds and the status message says what was scraped.
Do I need a Yandex account or API key?
No. The Actor reads publicly listed Yandex Maps data and needs no login.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.