Yandex Maps businesses in Russia, Türkiye, Kazakhstan and the CIS: phones, website, Telegram/WhatsApp/VK, hours, rating and owner verification. Searches whole cities view by view, not just the first pages. Optional website check: emails with their source and whether the site works.
README only: a region's outline on Yandex can include the city it surrounds (Московская область returns Moscow places;
test run IXJgoWesQrGxYzIUM: the first 20 were all in Moscow). No change to the code.
0.1.14 — 2026-10-01 (private build)
Fixes from the second independent README review (Q15) of build 0.1.13:
More chat, link and directory pages are not taken for the business's website: jivo.chat, vk.me, kazan-guide.ru,
mekan.com, tumisyeri.com, tikla.com.tr, booking.medflex.ru, app.1denta.ru (6 of about 2,400 places in the 0.1.13 tests;
info@jivo.ru and kazan-guide@mail.ru were delivered as the business's email, and two places' real websites, listed
second, were skipped).
Emails are cleaned before they are checked: maito:stom@… → stom@…, mailto%3adentolider@… → dentolider@…,
%c2%a0skazka…@… → skazka…@…, and a phone or postal code glued to the start (644-51-87your-stom@…, 1825info@…) is
removed (7 such addresses in the 0.1.13 tests). Addresses on international domains (info@лояльность.com) stay.
Also left out: admin@admin.ru, mail@google.com, VK widget addresses (…@stacks.vk-portal.net) and the Ministry of
Health (info@rosminzdrav.ru).
Call-tracking and Yandex-source tags are removed from websites too (calltouch_tm=…, rs=yandex-map, rs=ya_…; 5 of
1,200 Moscow websites).
Input form: the radius describes a circle ("places within this many kilometres of the point"), and the location
description says that only places inside Yandex's outline of it are kept.
0.1.13 — 2026-10-01 (private build)
Fixes from the independent README review (Q15) of builds 0.1.11–0.1.12:
Fix: a city search keeps only places inside the city. The area was the rectangle around the location, so a "Москва"
search also delivered towns of the Moscow region: 557–575 of 1,200 rows in the 1,200-place tests. Places are now kept
only inside Yandex's outline of the location (city, district or region). On those 1,200 rows the outline keeps all 643
rows addressed "Москва" and drops all 557 addressed "Московская область"; a local 300-place run after the change: 300 of
300 in Moscow. Without an outline from Yandex the rectangle (2% margin) is used as before.
Fix: coordinates + radiusKm is a circle. It was a square, so places up to 1.4× the radius away were delivered
(Kadıköy 2 km test: 5 of 100 cafés at 2.0–2.21 km). Local test after the change: 150 cafés, farthest 1.96 km.
After Yandex's ranked pages, the map views nearest the centre are searched first (a 100-place Moscow run continued in the
south-west corner before).
More addresses that are not the business's are left out: the compulsory medical insurance funds (general@mofoms.ru,
…tfoms…), placeholders (box@domain.tld, info@domen.ru, ivanov@mail.ru) and hosting addresses on subdomains
(…beget.tech). Short-link and link-in-bio pages (clc.to, to.click, mssg.me) are not treated as the business's
website (their own addresses were delivered as the business's email).
The coordinates area is named "lat, lon (radius N km)".
0.1.12 — 2026-10-01 (private build)
Fix: the contact page is a page, not a stylesheet. The website check followed the first link whose address contains
"contact" or "kontakt", also <link> tags: on WordPress sites with the "contact-form-7" plugin that was the plugin's CSS
file. In the 0.1.11 tests 200 of 1,020 contactPageUrl values were such files, so the real contact page and its emails
were missed. Only <a> links to pages count now (and Cyrillic addresses such as /контакты/). Re-checked on 20 of
those sites: 15 now get their real contact page and 4 an email they did not have.
0.1.11 — 2026-10-01 (private build)
Faster area lookup for big cities. Yandex's answer for a city like Moscow is 4.7 MB, and some sessions took 20–60 s to
deliver it: in the platform tests the area lookup took 20–102 s in about one run of five, before any place was searched.
When the first request has not answered after 8 s, a second one now starts on another session, and the first answer wins.
0.1.10 — 2026-10-01 (private build)
More pages are recognised as not the business's own website: a lawyer directory (avukatrehber.net), the sites of Turkish
bar associations (the Ankara Bar's addresses were delivered as a lawyer's email), a salon platform (vse-v-salon.ru,
info@vse-v-salon.ru), Kazakh clinic platforms (macdent.kz, clinica.kz), QR-menu and booking links (restify.one,
qr-cafe.ru, splitpay-service.ru, mikroturk.com, allzinapp.com), Yandex Dzen, and mail providers listed as a website
(hotmail.com). In all test runs 51 of 3,528 places had such a page as their website; it now stays in websites only and
is not checked or charged.
Their accounts (instagram.com/avukatrehber for 10 Ankara lawyers, instagram.com/macdent.kz, instagram.com/ankara.barosu)
no longer fill the instagram column.
0.1.9 — 2026-10-01 (private build)
The first places of a run are the ones Yandex ranks highest. A search now starts with the first four result pages for
the centre of the area, in the order Yandex's search returns them, and then searches the area map view by map view. Before, a run
with a small maxResults got the places of the first map views, a corner of the city: in the 100-place tests of build
0.1.6 only 0–47 of the first 100 places were among Yandex's top results, and those top results have a website far more
often (Almaty 81% against 26%). Local test after the change: 67 of Yandex's top 73 Moscow dental clinics among the first
100 places (before: 0). A whole-area search still searches the whole area (corrected wording: it does not find every
place, see the README).
The log line of a search counts the pages read in Yandex's order.
0.1.8 — 2026-10-01 (private build)
Fixes from checking every email of 2,768 places delivered in the platform tests:
Wrong emails removed.rating@mail.ru came from the Mail.ru counter's HTML comment and was the only email of 11
sites (6 cafés of one chain among them); HTML comments are no longer read. Form placeholders (mail@mail.ru), abuse@
addresses and addresses with an ending that exists nowhere (u@ab.po) are dropped.
Booking, directory and short-link pages are not the business's website. kolayrandevu.com, dikidi, zoon, dugun.com,
estelink.ru, telegra.ph, bit.ly and a few directories were checked as if they were the business's own site, and their
support addresses were delivered as its email (destek@kolayrandevu.com for 7 hairdressers, info@dikidi.net,
info@zoon.ru, press@bitly.com). These links stay in websites; website is empty, websiteStatus is no-website,
and no website check is charged.
Platform accounts are not the business's Instagram. Yandex lists instagram.com/kolayrandevu or
instagram.com/doktortakvimi for some places; the instagram column now takes the business's own account when Yandex
lists one, otherwise stays empty (socialLinks keeps everything Yandex lists).
ROT13-hidden emails are decoded (vasb@fx-yrtraqn.eh → info@sk-legenda.ru, two Moscow clinic sites).
Sites that do not answer the platform are tried once more through Apify Proxy. 35 of 1,109 Moscow clinic websites timed
out from the Apify platform's own address in a test, while 17 of 18 such sites opened through the Apify datacenter proxy.
Such a site now gets a second try through the run's proxy (20 s); SOURCE_REPORT.websites.proxyRecovered counts them.
Job, press and marketing addresses (hr@, resume…@, advert@, press@…) come after the other addresses of the same
kind, so email is more often the front desk.
0.1.7 — 2026-10-01 (private build)
Fix: a run never delivers more places than maxResults. When saving a row reported an error although the row had reached
the dataset (seen once, on build 0.1.5, right after the stall fixed in 0.1.6), the place was counted as not delivered and
replaced by another: that run wrote 1,203 rows for 1,200. A row whose saving reports an error now keeps its place in
maxResults: at worst one row fewer, never more.
The main phone is the first number in E.164: a city service number listed first (122 at a Moscow clinic) stays in phones
only.
WhatsApp links with a short number lose Yandex's prefilled message too (wa.me/56816?text=… → wa.me/56816).
The run's status message says what it counts: "(searches: 1 OK)".
Actor description: "searches whole cities view by view, not just the first pages" (it named a 1,000-result limit that was
never measured).
0.1.6 — 2026-10-01 (private build)
Fix: a website with a very long inline image no longer freezes the run. The email search scanned such pages in quadratic
time (50,000 characters: 1 s; a 1–2 MB page: minutes), so a 1,200-place test run (build 0.1.5) stopped delivering for 5.5
minutes while every other request waited. Emails are now found from each "@" outwards and links and tags are read in one pass:
a 2 MB page takes milliseconds. Same results on the test pages.
0.1.5 — 2026-10-01 (private build)
Fix: a run moved to another server by the platform no longer starts over. In a 1,200-place test run that the platform moved
twice (build 0.1.4), the Actor restarted from scratch each time and wrote 1,757 rows (1,226 different places): places would have
been delivered and charged twice. The run now keeps the ids it delivered, the searches it finished and its counters in the
key-value store (RUN_STATE), stops writing rows when the move is announced, and continues on the new server without repeating
a place. Checked with a simulated move: 60 rows, 60 different places for maxResults 60.
Place links on yandex.com.tr come back in Turkish and links on yandex.com in English when the language is automatic (before:
always Russian).
32 website checks run at once (was 16): they wait on the network, not on the processor.
0.1.4 — 2026-10-01 (private build)
Website addresses are looked up through public DNS resolvers (1.1.1.1, 8.8.8.8) on the platform too, with the platform's own
resolver as the fallback: in a 100-place test the public resolvers were faster (0.55 s against 1.2 s per site) and had fewer
timeouts (7 against 16).
0.1.3 — 2026-10-01 (private build)
Website check is faster: every website's address is looked up once per run and at most six lookups run at a time (parallel
lookups were the slow part: 48 at once took 8.3 s each in a test). On the Apify platform the platform's own resolver was used
in this build (changed in 0.1.4).
Every website request has a hard time limit (a server that sends bytes very slowly no longer holds its slot).
The SOURCE_REPORT record shows where website-check time goes (lookup, first byte, download) and the slowest requests.
0.1.2 — 2026-10-01 (private build)
A slow Yandex answer is given up after 20 s (was 30 s) and retried through a fresh IP.
The website check of one site now has a 30-second budget (12 s per request), so one silent website cannot hold the run.
The log and the SOURCE_REPORT record show how long the area lookup took and the slowest Yandex request and website.
0.1 — 2026-10-01
First version (private build; not yet published).
Search by query and area: a city or district name (looked up on Yandex Maps), or coordinates with a radius. The area is searched map view by map view; a full view is split into four, the smallest views are paged. Each place is delivered once per run and only if it lies inside the area.
Specific places by Yandex Maps link (any Yandex domain, also /harita/org/…) or id.
Place rows: name, categories, phones in E.164 (with extension, type and Yandex's label), the business website without tracking parameters, every social link Yandex lists (Telegram, WhatsApp, VK, Instagram, MAX, Viber…), rating, number of ratings and reviews, Monday-first weekly hours, open now, status (open / temporarily / permanently closed), owner verification, chain, address parts, coordinates and the Yandex Maps link.
Website check (on by default): website status (ok, domain-not-found, dns-error, parked, spam, hacked, empty, protected, blocked, unreachable, redirects-to-platform, or no-website) with the reason; emails from the home page and the contact page, each with its source page and kind (website domain, free mail, other domain); Instagram, WhatsApp and Telegram links from the website. Regulators' addresses (shown on Russian clinic sites by law), placeholder and hosting-provider addresses are removed.
Filters: only places with a phone, a website or an email; minimum rating; skip permanently closed places.
Output in Russian, Turkish or English (automatic by country).
Pay-per-event billing: place per delivered place, site-checked per delivered place whose website was checked. Status rows, duplicates, places outside the area and filtered places are free. The run stops within the user's spending limit.
Apify datacenter proxy by default; residential proxy when Yandex keeps refusing.
Free status rows and a SOURCE_REPORT record explain every search that delivered nothing.
Prepared for a Standby API (/places, /place); published in batch mode.