Define what the record must prove

For reductions announced from 1 January 2027, rule 4(13) requires the prior price alongside the reduced price. The government explains the prior price as the lowest offered price during the preceding 30 days. Anchor the query to a particular announcement, not the date someone opens a dashboard.

Orders cannot establish all offers: a low price might attract no purchases. Today’s Shopify price and compare-at fields are not a historical ledger either. Decide which variant, currency, market and offer conditions each record represents. These fields are engineering recommendations, not a statutory schema; conditional offers may also need legal interpretation.

Sources: Official Gazette: 2026 amendment, rule 4(13) PIB explanation of the offered-price window

Connect the history to the below-MRP label

The product-display check is straightforward: current selling price is lower than verified MRP. The value displayed as the 30-day lowest prior price needs a different record—the actual offered prices in the relevant historical window. Keep those two checks separate in your data model.

Store MRP as an identified reference rather than automatically copying Shopify’s compare-at field. For an advertised reduction, retain the legally relevant pre-announcement window and its evidence. The label appears with the discount; the historical window does not mean the label must be shown before the claim.

  • Current price and MRP must refer to the same product or selected variant.
  • The prior-price value must retain its reference dates and coverage.
  • A later MRP edit should not silently rewrite the evidence behind an earlier comparison.

Sources: Official Gazette: 2026 amendment, rule 4(13) PIB explanation of the offered-price window

Carry the opening price into an interval ledger

Consider a fictional announcement at 00:00 IST on 31 January 2027. The window starts at 00:00 IST on 1 January. Suppose reliable records establish a ₹999 offer from 28 December until 10 January. A query containing only changes dated inside January would omit that opening price.

Represent each supported offer as an interval. Include intervals that overlap the window, not just events that begin inside it. The following example uses IST and exclusive end times; it assumes a continuous, evidenced record for the same variant and offer conditions.

Illustrative interval ledger for the January window
Effective fromEffective untilOffered priceWhy retain it?
28 December 2026, 09:0010 January 2027, 12:00₹999Establishes the price already in effect at window start
10 January 2027, 12:0010 January 2027, 15:00₹899Three-hour offer determines the minimum
10 January 2027, 15:0031 January 2027, 00:00₹949Covers the rest of the window

Webhooks help, but delivery is not proof of completeness

Shopify documents that webhook delivery and delivery order are not guaranteed, and duplicate deliveries can occur. Verify HMAC signatures, process duplicates idempotently and distinguish receipt time from the time represented by the underlying event. An older event arriving late should not blindly overwrite a newer state.

Shopify recommends reconciliation. Periodically comparing your records with available source data can expose discrepancies and help restore current state. Keep gap flags and preserve source evidence when correcting a record. A scheduled snapshot, reconciliation job or webhook retry cannot be assumed to recover an unobserved transient offer: if ₹899 appears and disappears between successful captures, later observations may reveal neither change.

Likewise, installing a recorder today does not establish yesterday’s prices. Historical imports help only where their provenance and coverage support the interval being reconstructed.

Sources: Shopify developer documentation: webhook delivery, ordering and reconciliation Shopify developer documentation: HMAC verification and duplicate processing

Ask a provider to explain the gaps, not just show a chart

Use these questions when assessing an app, internal integration or data export. Prefer explicit limitations over a reassuring “30-day history” label with no explanation.

  • What captures the price in effect before the window starts, including for newly connected variants?
  • Which price sources and offer conditions are observed, and which are outside coverage?
  • How are missed, duplicate and out-of-order events detected or handled?
  • Can the record identify an intraday offer, its timestamps and its original evidence?
  • Can you export the exact campaign calculation, coverage gaps and inputs after prices change?

Freeze a decision, not a moving dashboard

Save the announcement timestamp, relevant intervals, selected minimum and reviewer decision as a campaign snapshot. Keep raw evidence separate from corrected interpretations. If coverage is incomplete, mark the result as provisional internally and investigate before using it for a reduction claim. Neither a polished chart nor a successful sync resolves missing historical evidence.

Read the primary sources

Official Gazette: 2026 amendment, rule 4(13) ↗PIB explanation of the offered-price window ↗Shopify developer documentation: webhook delivery, ordering and reconciliation ↗Shopify developer documentation: HMAC verification and duplicate processing ↗

General guidance for e-commerce merchants, with primary sources linked above.

FROM UNDERSTANDING TO A WORKFLOW

Price Transparency

Selling below MRP? Show the 30-day lowest prior price beside your current price, backed by a clear history.

Explore the app

See the wider 2027 overview · Browse all guides