Back to workDashboards

A platform that collects competitors’ prices from online stores automatically, matches equivalent products and shows where the brand’s prices sit in the market. Every number can be traced back to its source.

Request a similar project
Stack
Django · DRF · PostgreSQL
Screens
6 images

Overview

Market Radar was built for a manufacturer that wanted to know where its prices stood against competitors and the market median. On a schedule, the system collects prices from several online stores, normalises messy and inconsistent titles, works out which listings are the same product, drops outliers, and shows the result in a dashboard, a competitor comparison page and an alert centre.

The problem

Pricing without solid market data means either falling behind competitors or giving away margin. Collecting prices from dozens of stores by hand is slow and error-prone. The same product is listed under different titles in every store (Persian, English, Arabic letter variants, different units), and the numbers in a report usually can’t be traced back to where they came from.

The solution

A complete pipeline: collect → normalise → match products → validate and remove outliers → aggregate → daily indicators → alerts. The core design principle is a “chain of evidence”: every number on the dashboard can be traced back to the raw listing, its original title and the source link. When the system isn’t sure about something, it sends it to a human review queue instead of guessing.

How I built it

  1. 01

    Collectors are plugins. One generic collector, with no site-specific code, reads prices, titles and per-size prices from any standard store, while respecting request spacing and limits.

  2. 02

    The normalisation engine cleans up Persian and English titles: converting Arabic digits and letters, and extracting brand, type, colour, finish, quantity and unit (even two-word units).

  3. 03

    A rule-based and fuzzy matching engine links each listing to its equivalent product and sorts results into “certain”, “probable” and “needs review”. Only certain matches count toward the market median.

  4. 04

    Outliers are detected with statistical methods (IQR and MAD), and each source gets a data-quality score.

  5. 05

    Daily indicators (median, min, max, sample count) and the brand’s price position against the market are calculated and shown on price-trend charts. Users can also link equivalent products by hand.

  6. 06

    The alert engine raises alerts for sudden price rises or drops, gaps from the market, source errors and drops in data quality.

  7. 07

    The whole pipeline runs on a schedule with Celery. The API uses JWT authentication and role-based access, and every sensitive action is written to an audit log. More than 130 automated tests back the code.

Features

  • Automatic, scheduled price collection from online stores
  • Normalisation of Persian and English product titles
  • Automatic matching of equivalent products across sources
  • Human review queue for uncertain matches
  • Outlier detection and a quality score for each source
  • Brand vs. competitors vs. market median comparison
  • Price-trend charts from 7 days to one year
  • Alert centre for important market changes
  • Chain of evidence: trace every number to its source
  • User roles, JWT authentication and audit log
  • Excel report export
  • Full deployment with Docker Compose

Result

Instead of gathering prices by hand, the sales and management teams get a fresh, reliable picture of the market every day, and they make pricing decisions on data where the source of every number is known.

Technologies

  • Django
  • DRF
  • PostgreSQL
  • Celery
  • Redis
  • React
  • TypeScript
  • Docker
Next projectKarnama: smart job search app
Next project

If you need something similar or have an idea for custom software, let’s talk about it.