Экстрактор цен Яндекс товаров - источники и 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

Ссылки из прошлого ресерча:

Вывод из прошлой заметки:

  • самый белый и стабильный путь для поисковой выдачи;
  • 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 товаров

  1. Взять Apify zen-studio/yandex-market-scraper-parser как primary source.
  2. Создать маленький backend:
    • Postgres tables: watched_products, price_observations, raw_observations, product_groups;
    • scheduler: cron/RQ/Celery;
    • source adapter: Apify actor wrapper;
    • REST API для агента.
  3. Для каждого товара сохранять:
    • raw Apify dataset item;
    • normalized price observation;
    • candidate matching data, чтобы не перепутать похожие товары.
  4. На демо показать:
    • постановку товара на 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 продукта.

Связанные заметки / источники