pricify

Data model

Clean enough to train on, traceable enough to trust.

One schema across segments, retailers and stores, so the data drops straight into analytics, pricing engines and machine-learning pipelines.

Entities

Four things, and how they relate.

A product has offers; an offer has observations; observations give rise to events.

  1. 01

    Product

    The canonical record of one manufacturer part: brand, model, structured specifications and identifiers. Every listing of that part, at any seller, points here.

  2. 02

    Offer

    One seller's price and availability for a product at one venue: a retailer's online channel or a named physical store. New, open-box and refurbished are separate offers.

  3. 03

    Observation

    A timestamped reading of an offer. Kept, never overwritten: the history of a price or a shelf is its series of observations.

  4. 04

    Event

    A change derived from observations and checked against history: a price drop, a restock, a sell-out.

An event record

What arrives when something changes.

An illustrative record from the live stream. Field names and shapes in a delivery are agreed per engagement; the content is this.

FieldTypeMeaning
eventstringThe kind of change: price_drop, restock.
observed_attimestampWhen it was observed, in UTC (ISO 8601).
segmentstringThe market segment: GPU, CPU, SSD, HDD, DRAM, PSU.
productstringThe canonical product the event is about.
retailerstringThe seller's retail source.
channelstringonline, or store for a physical store.
storestring or nullThe store, when the channel is a store.
price_usdnumberThe price observed, in US dollars.
previous_price_usdnumber or nullThe price before the change, when there was one.
change_pctnumber or nullThe size of the move, in percent.
currencystringAlways USD today.
product_urlstringWhere the product can be seen in public.
event.jsonIllustrative record from the live stream
{
  "event": "restock",
  "observed_at": "2026-10-04T05:18:55Z",
  "segment": "DRAM",
  "product": "G.SKILL Ripjaws V 16GB (2x8GB) DDR4-3200 CL16",
  "retailer": "Micro Center",
  "channel": "store",
  "store": "St. Louis Park",
  "price_usd": 134.99,
  "previous_price_usd": 134.99,
  "change_pct": null,
  "currency": "USD",
  "product_url": "https://rams.live/memory/gskill-ripjaws-v-16gb-2x8gb-ddr4-3200-cl16"
}

Conventions

Rules that hold everywhere.

01

One clock

Every timestamp is UTC. Local store hours and time zones never leak into the series.

02

One currency

US dollars, as numbers. Per-unit views ($/TB, $/GB) are derived fields, not separate datasets.

03

Stable identifiers

A product keeps its identifier when a seller renames a listing. When two records turn out to be the same part, the old identifier keeps resolving.

04

Nulls mean unknown

A missing value is null, never zero and never a guess. What a source doesn't state isn't filled in.

Glossary

The words we use, and what we mean by them.

Product (SKU)
One canonical record for one manufacturer part, with its specifications and identifiers, whatever each seller calls it.
Offer
One seller's price and availability for a product at one venue (a retailer's online channel, or one physical store), in one condition.
Observation
A timestamped reading of an offer. The history of a price or a shelf is its series of observations.
Event
A change worth acting on, derived from observations: a price drop, a restock, a sell-out.
First-party seller
The retailer selling in its own name. Third-party marketplace sellers on the same site are recorded separately.
Availability depth
In-stock offers per tracked product in a segment, online and in store. Lower means scarcer.
Venue
Where an offer can be taken: a retailer's online channel, or a named physical store.

See it on your own products.

Send us a list of part numbers or a segment, and we will return a sample in this shape.