Oracle Retail12 min readBy Priyanshu Pandey

Competitive Shopping in RMS

Learn how Oracle RMS manages competitor pricing data. Understand the COMP_SHOP_LIST and COMP_PRICE tables, and how retailers use this data to execute price matches and maintain market share.

Phase 6 · Pricing · Oracle RMS Series

Competitive Shopping: Tracking Competitor Pricing

Retailers do not operate in a vacuum. If a competitor drops the price of a flagship television by $100, you must know about it instantly to protect your market share. Learn how Oracle RMS stores competitor pricing data, links competitor stores to your own, and drives automated price matching strategies.

12 min read📅August 8, 2026✍️Priyanshu Pandey📚Oracle RMS Series

In highly commoditized retail sectors (like electronics, groceries, or basic apparel), consumers are extremely price-sensitive. A difference of a few dollars can shift massive amounts of volume from one retailer to another.

Oracle Retail provides a Competitive Shopping module to track rival pricing. While modern retailers often use advanced third-party web-scraping tools, that data eventually must flow back into the core ERP to drive actual price change events. This guide explains the data model used to house this competitive intelligence.



1. Competitor and Store Setup

Before you can track prices, you must define who you are tracking. RMS allows you to create Competitors (e.g., Target, Walmart, Best Buy).

Because pricing is hyper-local, RMS also requires you to define Competitor Stores. You then link a specific Competitor Store to one of your own Stores. This creates a 1-to-1 or 1-to-Many mapping.

  • My Store 200 (Downtown) is linked to Competitor Store 99 (Target Downtown).
  • If Target Downtown drops their price on milk, the pricing analyst knows to evaluate a price drop specifically for My Store 200 to defend that local market.

2. Competitive Shopping Lists

Retailers carry millions of items, but they only competitively shop a small subset—known as KVIs (Key Value Items) or Traffic Builders. These are the items consumers know the price of by heart (e.g., gallons of milk, 65-inch TVs, diapers).

In RMS, these KVIs are grouped into Competitive Shopping Lists. These lists are generated and assigned to store associates or third-party auditors. The auditors walk the competitor's store, find the items on the list, and record the prices.


3. Capturing Competitor Prices

When the auditor returns, the observed prices are uploaded into RMS (often via an integration layer processing the third-party data).

The data captured includes:

  • The Item.
  • The Competitor Store.
  • The Date of observation.
  • The Regular Retail Price.
  • Any Promotional Price (and the promotion type, like BOGO or % Off).

Once this data is housed in RMS, it is fed into the Pricing engine (RPM) or an advanced analytics platform. RPM allows analysts to write rules such as: "If Competitor X drops the price of KVI Item Y by more than 5%, automatically generate a Regular Price Change in RPM to match it."


4. Core Tables Reference

COMP_STORE
Master table defining the physical locations of competitor stores.
COMP_STORE_LINK
Mapping table linking your stores to competitor stores.
COMP_SHOP_LIST
The header for the list of items to be competitively shopped.
COMP_PRICE
The historical ledger of observed competitor prices for specific items.

Competitor Price Intelligence (COMP_PRICE)

ColumnTypeDescription
COMP_STORE
NUMBER(10)The specific competitor location.
ITEM
VARCHAR2(25)The item being shopped.
SHOP_DATE
DATEWhen the price was observed.
REG_RETAIL
NUMBER(20,4)The competitor's standard shelf price.
PROMO_RETAIL
NUMBER(20,4)The competitor's promotional price (if active).
MULTI_UNITS
NUMBER(4)If the price requires bulk purchase (e.g., 2 for $5).

5. SQL Deep Dives

Finding Instances Where We Are Being Undersold

This query compares your current UNIT_RETAIL against the most recently observed competitor price for linked stores, highlighting items where you are priced higher than the local rival.

Identify competitive pricing threats
sql
SELECT 
    csl.loc AS my_store,
    csl.comp_store AS rival_store,
    cp.item,
    il.unit_retail AS my_price,
    cp.reg_retail AS rival_price,
    (il.unit_retail - cp.reg_retail) AS price_disadvantage,
    cp.shop_date
FROM comp_store_link csl
JOIN comp_price cp ON csl.comp_store = cp.comp_store
JOIN item_loc il ON csl.loc = il.loc AND cp.item = il.item
WHERE cp.shop_date = (
    SELECT MAX(shop_date) 
    FROM comp_price 
    WHERE comp_store = cp.comp_store AND item = cp.item
)
AND il.unit_retail > cp.reg_retail
ORDER BY price_disadvantage DESC;

6. Official Oracle Resources

For further reading, consult the official Oracle documentation:

RetailCoder
All systems operational
v1.0 Live

RC:OMS

Multi-channel order management with double-entry inventory ledger. Amazon, Flipkart, Shopify, WooCommerce — one source of truth.

Launch demo →
v1.0 Live

RC:Storefront

Self-hosted headless e-commerce. Your server, your data, zero transaction fees. Native RC:OMS inventory sync.

Visit Storefront →
Pipeline

RC:Pulse

AI-powered retail analytics and demand forecasting — built natively on top of your RC:OMS and Storefront data.

Request early access →
Built in India 🇮🇳  ·  Architected by Priyanshu PandeyTalk to an engineer →