FM/QUERY PORTFOLIO

Type help for commands or search nine case studies.

← Work index / Skintific

Professional Experience Beauty and personal care (e-commerce)

NPD Price Tracking Automation and Dashboard

Built an Apps Script tool that snapshots new-product prices daily across online and offline channels, compares them against target SRP, and renders a dashboard so the commercial team can spot pricing gaps without manual data entry.

Published with protected details
Pricing tracker dashboard showing a daily summary snapshot and per-SKU price comparison across channels with synthetic data
Organization
Skintific
Role
Data Analyst
Timeline
2026–present
Stack
Google Apps Script · Google Sheets · HTML · CSS · JavaScript · Chart.js
My role

My contribution.

Work I directly owned or delivered within the broader team effort.

  1. 01

    Built an unattended daily snapshot workflow across online and offline price sources.

  2. 02

    Compared observed prices against target SRP and surfaced cross-channel gaps in one dashboard.

  3. 03

    Added recovery utilities and historical checks so commercial teams could trust the latest snapshot.

Analysis frame

Assumptions / constraints

  • Each tracked SKU has a target SRP used as a pricing benchmark.
  • Prices must be captured daily across Shopee, Watsons, Guardian, and Sociolla.
  • Source changes or failed runs can create missing history and therefore require recovery utilities.

Technical judgment

Decision log

  1. 01
    Use a time-driven daily snapshot rather than manual entry.Why

    Launch prices changed across channels and manual compilation was slow and error-prone.

  2. 02
    Store snapshots as historical records and build a SKU-by-date board.Why

    Commercial users needed to see price trends and drops over time.

  3. 03
    Add benchmark flags, backfill, repair, and run-health checks.Why

    Same-day follow-up and trust in current data depended on visible exceptions and complete history.

Domain referenceMetric dictionaryView definitions +
NPD
New product development.
SKU
Stock-keeping unit tracked separately by channel and date.
SRP
Target suggested retail price used as a comparison benchmark.
Snapshot
Daily stored record of each SKU's channel prices.

Snapshot

This internal tool automates new product development (NPD) price tracking for Skintific. It captures each SKU’s price per channel every day — Shopee online plus Watsons, Guardian, and Sociolla offline — compares prices against the target SRP, and presents the result in a dashboard so the commercial team can see undercut SKUs and channel gaps at a glance instead of compiling prices by hand.

The situation

New products launch across several channels at once, each with its own pricing. Keeping launch prices aligned to the target SRP required someone to open each channel, record the price per SKU, and flag anything off — a repetitive daily task that scaled poorly as the SKU list grew and was easy to get wrong.

The problem

  • Manual daily checks. Recording prices per SKU per channel by hand was slow and error-prone.
  • No single view. Online and offline prices lived in different places, so cross-channel gaps were hard to see.
  • Late detection. SKUs priced below the target SRP were often found after the fact, not the same day.

What I built

A Google Apps Script application with a Sheets store and an HtmlService dashboard:

  • Daily price snapshot. A time-driven trigger captures each SKU’s price per channel into a historical store every day, so trends and drops are visible over time.
  • NPD daily board. A per-SKU × per-date price matrix built from the historical store, so the team can scan a whole category’s pricing trajectory in one table.
  • Multi-channel comparison. The dashboard surfaces online (Shopee) versus offline (Watsons, Guardian, Sociolla) prices, computes offline averages, and compares them to the target SRP — flagging SKUs priced below benchmark.
  • Product tracking registry. Each tracked product carries brand, category, launch date, and target SRP, with a status the commercial team can manage.
  • Summary snapshot. A daily summary highlights total SKUs, undercut count versus Shopee, and the cheapest and most expensive channels.
// Sanitized: a daily trigger snapshots each SKU's channel prices into history.
function runDailyFlow() {
  const products = getTrackedProducts();          // SKU registry
  const snapshot = products.map(p => ({
    sku: p.sku,
    date: today(),
    shopee: fetchChannelPrice(p, 'shopee'),
    watson: fetchChannelPrice(p, 'watson'),
    guardian: fetchChannelPrice(p, 'guardian'),
    sociolla: fetchChannelPrice(p, 'sociolla')
  }));
  appendToHistory(snapshot);                      // historical store
  rebuildDailyBoard();                            // per-SKU x per-date matrix
}

Technical patterns

  • Append-only history. Daily snapshots accumulate, so the same store powers both the latest board and trend analysis without recomputation.
  • Recovery utilities. Backfill and repair functions restore missing snapshots, keeping the board accurate after source changes or failures.
  • Scheduled automation. A time-driven trigger runs the whole flow unattended; the dashboard reads the results without manual refresh.

Outcome

Daily price tracking moved from a manual task to an automated snapshot, cross-channel gaps became visible in one dashboard, and SKUs priced below benchmark are flagged the same day for commercial follow-up. Specific SKU counts and pricing figures are withheld as internal.

What I learned

The value of an operational tool is reliability over features. The dashboard only earned trust once the snapshot ran unattended every day and the recovery utilities kept the history complete — teams act on a number only when they are confident it is current.

Outcome Validated evidence

What changed.

Published outcomes stay within what can be supported by project evidence.

Replaced manual daily price checks with an automated snapshot

Made cross-channel pricing gaps visible in one dashboard

Flagged SKUs priced below benchmark for commercial follow-up

Related assets

Contact Continue the conversation

Want to discuss how this system was built?