Book a consult

Loading scheduler…

Reconciling Kroger promo lift across SPINS & scan

Why this matters

Kroger promo lift reconciliation starts the Tuesday a brand's quarterly TPR at Kroger ends. Three different lift numbers land on three different desks.

SPINS reports the promo at +30% lift, against the brand's 12-week trailing baseline. 84.51° Stratum puts the same promo at +18% lift, against the brand's pre-promo loyalty-attached purchase rate. And Kroger in-store scan data, pulled through the brand's KPM or category-buyer relationship, reports +35% lift, against the same period last year, raw.

Same promo. Same brand. Same Kroger banners. The numbers are 17 percentage points apart. The CMO wants one clean number for the board deck. The CFO wants the most conservative one. The category lead wants whatever defends the promo to the buyer. Doing the Kroger promo lift reconciliation properly means none of them gets to just pick a favorite.

So this page is about which number answers which question, and how to reconcile all three without quietly choosing the most flattering.

What each source actually measures during a promo

If you want the full background on the sources, SPINS vs. 84.51° Stratum vs. Circana has it, and Choosing a baseline period for SPINS post-promo lift covers the baseline mechanics behind much of the disagreement. Here's the promo-specific version:

SourceWhat it measuresCadenceBaseline defaultBlind spots
SPINSProjected $ at Kroger from syndicated panelWeekly with multi-week lagTrailing N-week pre-promo or YoYNo household, no basket; banner-level is a paid add-on; suppression on small cells
84.51° StratumLoyalty-card-attached purchases at Kroger family of bannersNear-real-time (days, not weeks)Pre-promo loyalty-attached purchase rate, often comparable to a 4–8 week trailing windowLoyalty-attached only (~50% of trips per 84.51°'s public framing); behavior-shift on non-loyalty trips invisible
Kroger in-store scan (via KPM or buyer-shared data)Raw POS dollars at the banner level, all tripsDaysOften YoY raw, or "prior 4 weeks" (varies by buyer)No household attribution, no cross-retailer context, baseline choice not standardized

The disagreement starts right here. The three sources work off different universes, default to different baselines, and run on different lags. So they produce different lift numbers by design, not because somebody's data is broken. Reconciling them means accepting that each one answers a slightly different version of "did the promo work."

Why the three numbers diverge: five real causes

1. Loyalty-attached vs. total trips

Stratum only sees loyalty-card-attached purchases, and per 84.51°'s public framing, roughly half of Kroger trips have a card attached. So a promo that mostly pulled in non-loyalty trips, walk-in shoppers reacting to in-store signage, will read bigger in SPINS and scan than in Stratum, because Stratum simply can't see that non-loyalty incremental.

Flip it around: a promo that mostly drove existing loyalty buyers to buy more will read bigger in Stratum than in SPINS. SPINS treats that as ordinary baseline behavior, while Stratum surfaces the per-household frequency change.

2. Baseline choice

SPINS's default baselines, trailing 4 or 12 weeks, handle pre-promo pull-forward differently than scan's usual "prior 4 weeks" cut. And Stratum's loyalty-attached pre-promo rate is its own baseline that doesn't line up neatly with either. Same promo, three baselines, three lifts. Try to reconcile them without first aligning the baseline window definitions and you're doing apples-to-oranges math.

The five common SPINS baseline choices and their tradeoffs are in Choosing a baseline period for SPINS post-promo lift.

3. Banner-level vs. total-Kroger reads

SPINS delivers total-Kroger by default, and banner-level is the paid add-on. Stratum and scan usually hand you banner-level out of the box. So when a promo over-indexes at certain banners, Ralphs, King Soopers, the natural and urban-leaning ones, the banner-level reads show strength that the total-Kroger SPINS read just averages away. See A workflow for monitoring Kroger banner performance in SPINS and Reading Kroger total-store performance.

4. Basket substitution

A promo on the brand's 6 oz pack can cannibalize the brand's 12 oz pack inside the same trip. SPINS only catches that wash at the brand-aggregate level, and only if the SKUs are rolled up. At SKU level, the 6 oz looks like a hero while the 12 oz looks soft. Stratum's basket-level view shows the within-trip substitution directly. SPINS and scan don't.

5. Reporting lag and what counts as the "promo period"

SPINS' weekly cadence and Circana-licensed conventional data both run on a multi-week lag and a fixed weekly cut. A promo that ran Tuesday to Tuesday gets reported inside a Sunday-to-Saturday weekly bucket, which drags in a non-promo day or two. Stratum's near-real-time cut and scan data can isolate the actual promo dates. Same promo, different period boundaries, different totals.

A Kroger promo lift reconciliation framework

Three steps to make the numbers actually comparable instead of just sitting next to each other.

Step 1: align the baseline definitions

Pick one baseline window and push it across all three sources wherever you can. For SPINS, pull the trailing 8 weeks pre-promo, dropping the immediate pre-promo week to limit pull-forward contamination (see Choosing a baseline period for SPINS post-promo lift). For Stratum, pull that same 8-week pre-promo window in loyalty-attached terms. For scan, pull the same 8-week window from the raw scan feed.

You're still left with the universe differences, Stratum being loyalty-only, but at least the baseline windows now match.

Step 2: align the period boundaries

Define the "promo period" by the actual TPR start and end dates, not by the syndicator's weekly bucket. Where the weekly bucket is your only option, as with SPINS, say so plainly: the SPINS read drags in one or two non-promo days at the edges.

Step 3: reconcile what each source is "actually saying"

Build a small table that breaks each lift number down into its universe and its baseline:

SourceLift %Numerator (incremental $)UniverseComment
SPINS+30%+$120K syndicated-projection $Total Kroger family, all tripsIncludes loyalty + non-loyalty, includes panel projection
Stratum+18%+$50K loyalty-attached $Loyalty cards only (~50% of trips)Loyalty buyers, likely existing brand customers
Scan+35%+$140K raw POS $Total Kroger, raw POSNo baseline rigor; raw YoY can include brand growth

Now the numbers actually hang together. Scan's +35% includes the brand's organic growth, because there's no trend adjustment. Back out the brand's roughly 10% YoY growth and you land near +25% trend-adjusted. SPINS's +30% is the syndicated-projected lift, and it sits broadly in line with that trend-adjusted scan read. Stratum's +18% is loyalty-attached only. If loyalty trips are about half of total, then scaling to the full population means the +18% is loyalty lift plus some unknown non-loyalty lift. For the math to reach the trend-adjusted SPINS and scan reads around 25 to 30%, non-loyalty trips must have lifted harder than loyalty trips. That tracks: non-loyalty shoppers tend to be the ones responding to promo signage.

So here's the real story. The brand's promo over-indexed on non-loyalty trips. The three numbers were never disagreeing. They were each measuring a different slice.

Worked example: a Kroger TPR across banners

A wellness brand runs a 25%-off TPR on its 8 oz hero SKU across all Kroger banners, week of 2025-09-09. The brand has been growing roughly 10% YoY.

SourceReported liftBaseline usedPeriod boundaryBanner detail available?
SPINS (banner-level add-on)+30% Kroger total; +42% Ralphs, +38% King Soopers, +22% core banner-name, +35% Fred MeyerTrailing 12 weeks pre-promoSun–Sat weekly bucketYes
84.51° Stratum+18% loyalty-attached, brand levelTrailing 8 weeks pre-promo (loyalty-attached)Promo start–end datesYes; broadly tracks the banner pattern
Kroger scan (KPM)+35% raw YoY, Kroger total; banner skew matches SPINSYoY raw, week of last yearPromo start–end datesYes

Reconciled, it reads like this. The SPINS lift, +30% on a 12-week trailing baseline in-period, is already trend-implicit, because a trailing-12 baseline is a current-state baseline. Take it as reported. It's defensible. The scan lift, +35% raw YoY, becomes +25% once you subtract the brand's roughly 10% YoY growth, which puts it within range of SPINS. The Stratum loyalty-attached lift is +18%, and the gap to the +25 to +30% SPINS and scan reads tells you non-loyalty incremental ran higher than loyalty incremental. Probably the in-store signage worked better on impulse trips than on planned-list loyalty trips.

The right way to write that up:

"Kroger TPR delivered roughly +25–30% trend-adjusted lift across the family of banners, with the strongest reads at Ralphs (+42%) and Fred Meyer (+35%), where the brand's category fit is highest. The Stratum loyalty-attached read of +18% suggests the promo over-indexed on non-loyalty (impulse) trips relative to the brand's typical promo pattern."

That summary uses all three sources, names the difference out loud, and never pretends the +35% scan number is the same animal as the +30% SPINS number.

Anti-patterns

  • Grabbing the highest of the three lift numbers and running with it unadjusted. The +35% scan number still has brand trend baked in. Use it raw and you overstate promo effectiveness and skew every future promo-investment call.
  • Grabbing the lowest of the three and calling it "the conservative one." Stratum's loyalty-attached lift is narrower in universe, not more conservative. It leaves out a real slice of incremental dollars that SPINS and scan are correctly counting.
  • Averaging the three. The mean of +18%, +30%, and +35% is +27.7%, and there's no methodology on earth that produces that number. It's numerology, not analysis.
  • Comparing different baseline windows across sources. If SPINS is on trailing-12 and scan is on YoY, the two lifts simply aren't comparable. Re-pull on aligned baselines, or document the gap.
  • Reporting Stratum's loyalty-attached lift as "Kroger lift" with no universe footnote. The number is correct for loyalty-attached trips. It is not the brand's full Kroger lift.
  • Ignoring banner-level skew when you report a total. A flat total-Kroger lift can be hiding +40% at urban-skewed banners and -10% at value-skewed ones. See A workflow for monitoring Kroger banner performance in SPINS.

Doing this in Scout

Scout's promo-analysis surface lets you put SPINS-extracted Kroger lift side by side with uploaded Stratum exports and, where the brand has them, scan exports, with aligned baseline windows you can configure across all three. The scenario explorer view shows each source's lift number, the baseline window it used, and the universe footnote, so the reconciliation table above is the default view instead of something you assemble by hand. Direct API feeds to Stratum and Kroger scan aren't wired today, so integration is upload-driven.

Summary + further reading

  • SPINS, 84.51° Stratum, and Kroger scan each measure a different slice of the same promo. The three lift numbers will disagree by design. That disagreement is not a data-quality problem.
  • The framework: align baseline windows, align period boundaries, then decompose the lift gap into universe differences (loyalty vs. total) and methodology differences (raw vs. trend-adjusted).
  • Report the picture from all three sources instead of picking the most flattering. The universe gap, loyalty vs. non-loyalty, banner skew, is often the actual strategic finding.

Related: SPINS vs. 84.51° Stratum vs. Circana: Kroger data sources · Choosing a baseline period for SPINS post-promo lift · A workflow for monitoring Kroger banner performance in SPINS

Want this as a Google Sheet?

Drop your email and we'll send the worked example.

Book a demo with your data