Розроблення мобільного додатка для порівняння цін
Агрегатор цін — це перш за все задача парсингу та синхронізації даних. Мобільний додаток сам по собі нескладний: список товарів, фільтри, історія цін, сповіщення. Але вся архітектура завязана на бекенді, який збирає ціни з десятків джерел та тримає їх актуальними. Без цього — просто красиві оболонка без даних.
Як влаштована агрегація цін
Три джерела даних, у кожного свої плюси та обмеження:
Партнерські API магазинів. Офіційні фіди від Яндекс.Маркета, Google Shopping, Amazon Product Advertising API, партнерства крупних ритейлерів. Дані актуальні, є офіційний SLA. Мінус — охват обмежений афільованими магазинами.
Scrapers. Для магазинів без API. Тут починається війна з anti-bot захистою: Cloudflare, CAPTCHA, fingerprinting, rate limiting. Playwright/Puppeteer у headless режимі, ротація User-Agent та IP через proxy-пул. Легальність — сіра зона, залежить від країни та ToS магазину.
Користувацький краудсорсинг. Користувач сканує штрих-код у магазині та фіксує ціну. Працює в нішах, де офіційних даних немає (локальні ринки). Вимагає верифікації: ціна від одного користувача — підозріла, від трьох різних протягом доби — достовірна.
Сканер штрих-кодів
Основний спосіб пошуку для офлайн-шопінгу. На iOS: AVCaptureSession + AVMetadataObjectTypeEAN13Code, EAN8Code, UPCECode, QRCode. Важливо додати haptic feedback при успішному сканування — UIImpactFeedbackGenerator — користувач не завжди дивиться на екран.
Пошук за штрих-кодом — спочатку локальний кеш (LRU-кеш останніх N товарів), потім API-запит. Якщо товар знайдено в кеші — результат миттєвий. Це критично: користувач у магазині стоїть у полиці та чекає.
Історія цін
Кожна зміна ціни — окрема запис PriceHistory з productId, shopId, price, currency, recordedAt. Не перезаписуй поточну ціну — тільки додавай нову строку. Графік зміни ціни за 30/90/365 днів будується з цієї таблиці.
На мобільному клієнті кешуємо історичну криву як компактний бінарний формат (не JSON — JSON роздує трафік). Protocol Buffers або MessagePack для передачі цінової історії.
Сповіщення про зниження ціни
PriceAlert — користувач встановлює цільову ціну на товар. Бекенд перевіряє при кожному оновленні прайса: newPrice <= targetPrice. Доставка через FCM (Android) / APNs (iOS). Важливо: сповіщення повинно приходити швидко — користувач приймає рішення про покупку в моменті. Затримка більше 30 хвилин знижує конверсію.
Структура мобільного додатка
Пошук (текстовий + штрих-код), карточка товару з цінами по магазинам, фільтр по відстані (геолокація для пошуку найближчих магазинів з потрібною ціною), історія цін, watchlist з алертами. Offline-first для watchlist — локальний кеш, синк при появі сети.
Порівняння «корзини»: користувач набирає кілька товарів, додаток рахує, у якому магазині суммарно дешевше. Це вимагає нормалізації одиниць виміру (1 кг vs 500 г × 2).
Процес роботи
Головне рішення на старте — звідки беремо дані про ціни. Від цього залежить 60% архітектури. Якщо є партнерські договіреності з магазинами — завдання спрощується. Якщо немає — закладаємо scraping-інфраструктуру. Визначаємо категорії товарів, регіон, цільову базу магазинів.
Орієнтири за термінами
Мобільний додаток (без бекенду) з пошуком, карточками, історією цін з готового API — 4–7 тижнів. Повний продукт з власним бекендом збору цін, алертами та кошиковим порівнянням — 14–22 тижні. Вартість розраховується індивідуально.







