Экстрактор цен Яндекс товаров - источники и API
Экстрактор цен Яндекс товаров — источники и API
Контекст
Нужно сделать экстрактор с API для агента:
- агент ставит товар на индексацию по названию товара и интервалу;
- система регулярно собирает цену товара;
- отдельный эндпоинт возвращает историческую цену одного товара;
- отдельный эндпоинт возвращает цены по группе товаров;
- демо: 10 товаров;
- реальный проект: около 30 000 товаров;
- Яндекс за последнее время усилил антибот-защиту, поэтому простой собственный HTML-парсер сейчас не выглядит устойчивым вариантом.
Основная архитектурная идея
Источник данных должен быть заменяемым адаптером:
сегодня XMLRiver / Apify actor, завтра Yandex API или другой SERP/e-commerce provider, послезавтра Bright Data / DataForSEO.
Внутри продукта не нужно завязываться на конкретный парсер. Нужен слой source_adapter, который нормализует ответы разных поставщиков в одну модель:
product_query: исходное название/запрос;region;source:apify_yandex_market,xmlriver,dataforseo,bright_data, etc.;product_id / marketSku / url / canonicalUrl;title;seller;price;currency;availability;rating/reviews;collected_at;raw_response_ref.
Кандидаты источников
1. Apify — zen-studio/yandex-market-scraper-parser
Ссылка: https://apify.com/zen-studio/yandex-market-scraper-parser
Почему релевантен:
- это именно Yandex Market product data, а не просто поисковая выдача;
- заявлены price monitoring, competitor analysis, catalog export, product research;
- вход:
query,maxItems,region, опционально enrichment/reviews; - заявлены 70+ полей по товару: цена, продавец, наличие, доставка, рейтинги, характеристики, URL,
scrapedAt; - заявлена цена: от $2.99 / 1000 products; в AI-block указано
product_scraped $0.00599/product,review_scraped $0.0049/review; - заявлен API-вызов через ApifyClient:
actor("zen-studio/yandex-market-scraper-parser").call(run_input={...}), затем чтение dataset поdefaultDatasetId.
Предварительный вывод:
- лучший кандидат для демо на 10 товаров, потому что сразу отдает товарные данные и цены;
- для 30k товаров нужно проверить реальную стоимость, лимиты, стабильность, dedupe и качество matching одного и того же товара во времени.
2. Apify — johnvc/scrape-yandex
Ссылка: https://apify.com/johnvc/scrape-yandex
Почему релевантен:
- Yandex SERP scraper, структурированная выдача;
- органика, реклама, knowledge graph, inline images/videos, search metadata;
- поддерживает локализацию, языки, регионы;
- заявленная цена: от $0.01 / 1000 results;
- больше подходит для SERP/SEO/поиска источников, чем для надежного товарного price history.
Предварительный вывод:
- можно использовать как вспомогательный источник, чтобы находить страницы/карточки товара по названию;
- как основной источник цен хуже, чем Yandex Market actor, потому что SERP-выдача не гарантирует нормализованную карточку цены.
3. Apify — zen-studio/yandex-search-engine-scraper
Ссылка: https://apify.com/zen-studio/yandex-search-engine-scraper
Почему релевантен:
- Yandex SERP API / парсер поиска;
- вход:
query,maxPages,language; - выдаёт organic results, ads, entity cards, AI answers, related searches;
- в AI-block указана цена
search_result $0.007/result; - заявлены антибот/пагинация/парсинг внутри actor.
Предварительный вывод:
- подходит для поиска и мониторинга выдачи;
- не выглядит основным кандидатом для цен по товарам, если нужна именно история цены товара.
4. XMLRiver
Ссылка: https://xmlriver.com/
Что заявляют:
- парсинг живой выдачи Яндекс/Google/Wordstat;
- XML-ответы;
- берут на себя прокси, капчи и баны;
- топ-10 — топ-100, региональность, расширенные элементы выдачи;
- стоимость от 10–12 ₽ / 1000 запросов;
- есть отдельные сценарии: проверка индексации, реклама, Wordstat, подсветки.
Предварительный вывод:
- хороший дешёвый SEO/SERP источник для РФ;
- для истории цен товара нужен дополнительный слой извлечения цены из найденных страниц или переход к Yandex Market/merchant source;
- полезен как fallback/compare-source и для проверки индексации/наличия страниц.
5. Официальный Yandex Search API / deferred
Ссылки из прошлого ресерча:
- https://aistudio.yandex.ru/docs/en/search-api/pricing
- https://aistudio.yandex.ru/docs/en/search-api/concepts/limits
Вывод из прошлой заметки:
- самый белый и стабильный путь для поисковой выдачи;
- deferred дешевле synchronous;
- но это Search API, не полноценный API истории цен по товарам.
6. DataForSEO / SearchApi / Bright Data
Роль:
- международные SERP/API провайдеры с SLA/инфраструктурой;
- подходят, если нужен более enterprise-подход, несколько стран/поисковиков или контрактная стабильность;
- для русского товарного демо могут быть дороже или избыточны.
API продукта для агента
Поставить товар на индексацию
POST /products/watch
Пример body:
{
"name": "iPhone 15 128GB черный",
"group_id": "demo-phones",
"region": "moscow",
"interval": "24h",
"source_policy": ["apify_yandex_market", "xmlriver_fallback"],
"max_candidates": 10
}
Возвращает:
{
"watch_id": "...",
"status": "scheduled",
"next_run_at": "2026-05-20T06:00:00Z"
}
Получить историю цены товара
GET /products/{watch_id}/prices?from=2026-05-01&to=2026-05-20
Возвращает нормализованную временную серию:
{
"watch_id": "...",
"name": "iPhone 15 128GB черный",
"prices": [
{
"collected_at": "2026-05-20T06:00:00Z",
"price": 69990,
"currency": "RUB",
"seller": "...",
"source": "apify_yandex_market",
"product_url": "..."
}
]
}
Получить цены по группе товаров
GET /groups/{group_id}/prices/latest
Возвращает latest snapshot по всем товарам группы:
{
"group_id": "demo-phones",
"items": [
{
"watch_id": "...",
"name": "iPhone 15 128GB черный",
"latest_price": 69990,
"currency": "RUB",
"collected_at": "2026-05-20T06:00:00Z",
"source": "apify_yandex_market"
}
]
}
MVP на 10 товаров
- Взять Apify
zen-studio/yandex-market-scraper-parserкак primary source. - Создать маленький backend:
- Postgres tables:
watched_products,price_observations,raw_observations,product_groups; - scheduler: cron/RQ/Celery;
- source adapter: Apify actor wrapper;
- REST API для агента.
- Postgres tables:
- Для каждого товара сохранять:
- raw Apify dataset item;
- normalized price observation;
- candidate matching data, чтобы не перепутать похожие товары.
- На демо показать:
- постановку товара на monitoring;
- ручной/плановый сбор;
- историю цены;
- latest snapshot по группе.
Проверка перед масштабом 30k
На пилоте 100–1000 товаров нужно измерить:
- процент успешных сборов;
- среднее время run на 1 товар / 100 товаров / 1000 товаров;
- стоимость за один нормализованный price observation;
- стабильность идентификации одного и того же товара во времени;
- дубли и похожие модели;
- региональные отличия цены;
- лимиты Apify actor и платформы;
- можно ли делать batch-запросы выгоднее, чем один actor run на каждый товар;
- как быстро vendor реагирует на поломки из-за изменений Яндекса.
Предварительная рекомендация
- Для демо на 10 товаров: начать с
zen-studio/yandex-market-scraper-parserна Apify. - XMLRiver оставить как дешёвый SERP/индексационный источник и fallback для поиска страниц.
- Не строить MVP на собственном Playwright-парсере Яндекса: антибот Яндекса делает это хрупким и дорогим в поддержке.
- Сразу проектировать source-adapter boundary, чтобы завтра заменить Apify на XMLRiver/DataForSEO/Bright Data/официальный API без переписывания API продукта.
Связанные заметки / источники
- Локальная reference-заметка в skill:
/opt/data/skills/research/technical-solution-research/references/yandex-serp-scale.md. - Apify Yandex Market Scraper: https://apify.com/zen-studio/yandex-market-scraper-parser
- Apify Yandex Search Scraper by JohnVC: https://apify.com/johnvc/scrape-yandex
- Apify Zen Studio Yandex SERP scraper: https://apify.com/zen-studio/yandex-search-engine-scraper
- XMLRiver: https://xmlriver.com/