People ask me a version of this question constantly, usually at a party, usually after I have made the mistake of explaining what I do: okay, so which store is actually cheapest?
I have been dodging it. Partly because the honest answer is "it depends what is in your cart," which is true and also the single most annoying thing you can say to somebody who asked a simple question. And partly because until this year I did not have enough of my own data to answer without hand-waving.
Now I do. So here is the answer, with the caveats attached rather than buried at the bottom where nobody reads them.
The short version
Aldi, and it is not close. Across seven staple categories where our data is clean enough to trust, Aldi has the lowest median price per unit in six of them. In most of those six, Giant Eagle runs somewhere between thirty and sixty percent higher per unit, and Kuhn's Market lands in a similar band.
The seventh category goes the other way, and I think it is the most useful thing in this whole piece, so it gets its own section further down.
What we compared, and how
Smopper holds just under twenty-eight thousand individual store prices across five chains and a bit over sixteen hundred store locations. For the Pittsburgh question I threw out everything that was not Aldi, Giant Eagle or Kuhn's Market, which is the coverage that actually matters for my own shopping radius.
Then, for each staple category, I did four things.
Converted everything to a single unit first. This is the part that takes the real work and the part that makes everything after it meaningful. A 12-ounce bacon and a 16-ounce bacon get reduced to a price per ounce before anything is compared. Milk goes to fluid ounces, ground beef to pounds, rice to ounces. Nothing is ever compared across two different units.
Used the median, not the average, and not the minimum. Taking the cheapest price at any one location would be flattering and useless. Averages get wrecked by parsing artifacts. A pack size read as a single item will produce a per-unit price that is off by a factor of twelve, and a handful of those will drag a mean anywhere you like. The median describes what the shelf actually looks like and shrugs.
Trimmed the outer tenth at each end before taking it. Belt and braces on the same problem.
Required at least four observations per store per category. Anything thinner than that got dropped rather than reported, which is why you will not see eggs below.
What came out
SMOPPER INSIGHTS
Median price per unit, measured against Aldi
Trimmed median price per canonical unit, all Smopper prices on file. Minimum four observations per store per category.
The caveat that matters most
I want to put this here rather than at the end, because it changes how you should read that chart.
These are medians across everything in the category, not a like-for-like swap of one specific product. And the three stores do not stock the same mix. Giant Eagle carries far more premium and specialty product than Aldi does: more imported cheese, more grass-fed beef, more single-origin anything. When you take the median across a store's whole cheddar section, a store with a deeper premium range will land higher, and some of that gap is range rather than markup.
So the direction here is solid and the magnitude is not a receipt. If you buy the cheapest qualifying item at each store, the real gap will be narrower than sixty percent. If you buy the middle of the range at each store, it will look about like this.
The reason I still think the chart is worth publishing is that the middle of the range is what most people actually buy. Nobody walks into a store and systematically selects the cheapest thing in every category. You buy roughly what you always buy, from roughly the middle of what is in front of you, and the middle of what is in front of you is genuinely more expensive at one of these stores than another.
The spaghetti exception
Aldi is the most expensive of the three on dried spaghetti. Kuhn's is the cheapest, Giant Eagle is a rounding error behind it, and Aldi is roughly twenty percent above both.
I have gone back and forth on whether this is real or an artifact and I have come down on real. Dried pasta is the single most competitive shelf-stable item in an American grocery store. It stores forever, it is nearly indistinguishable between brands, and it is the classic item a conventional grocer will run at or below cost to get you in the door. A discounter with a flat everyday-price model has no answer to that, because it does not do loss leaders.
Which is the actual lesson of this whole exercise, and it generalises well beyond pasta:
A discounter beats a conventional grocer on the average item and loses to it on the promoted item. The more of your cart is made of things that get promoted, the smaller the discounter's advantage gets.
If your list is largely staples you buy on repeat, Aldi wins by a lot. If your list is largely built around what happened to be on sale that week, the gap narrows sharply and can invert.
Where the data was not good enough to tell you
Three categories I wanted to include and could not, quickly, because I would rather list them than let you assume I checked.
Eggs. The numbers I get for Aldi eggs work out to something like eleven dollars a dozen, which is obviously wrong. Six observations, and at least some of them have a pack size that has been misread. Six bad rows are enough to poison a category and not enough to spot by eye.
Bananas. Same problem in the other direction. One store's median comes out absurdly high because a banana-adjacent product, I suspect a bunch priced as a unit, is being read as a per-pound price.
Black beans. Only one of the three stores had four clean observations. Not wrong, just not enough to compare.
All three are the same underlying issue, and it is the one I think about most: deciding that two products are comparable, and how much of each there is, is where a price comparison is either trustworthy or decorative.
The coupon problem, which I want to be straight about
Everything above is shelf price. No digital coupons, no loyalty discounts, no fuel perks. That decision favours Aldi and I should say so plainly.
Aldi's model is a low shelf price with almost no promotional machinery bolted onto it. Giant Eagle's model is a higher shelf price with a great deal of it: digital offers, personalised discounts, fuel points, weekly circulars. If you are a shopper who reliably clips the digital offers before every trip, the real gap is meaningfully smaller than what you see above.
I cannot tell you how much smaller. Those offers are account-specific, we do not collect them, and I would rather say "we do not know" than build a model of it and present the model as a finding.
If you never open the app, though, the chart is your chart.
What I actually do
Aldi for the base of the week. That is where the money is and the data has made me more committed to it rather than less.
Giant Eagle when the meat flyer is genuinely good, which is often enough to be worth checking and not often enough to be a default. Their promotional pricing on meat is aggressive in a way that the steady-state numbers above completely fail to capture, and a good week there is not beatable.
Kuhn's for a set of reasons that are mostly not price reasons, which I got into separately.
Three stores sounds exhausting and is really about one extra stop a week. If your list looks nothing like mine, and it probably does not, since mine is built out of my own habits, you can price your own basket and get the version of this that applies to your cart instead of the version that applies to a median.
What I would fix in the next one
Branch coverage is uneven, and it is uneven in a way that flatters nobody in particular but does add noise. We hold far more Giant Eagle locations than Kuhn's, partly because there are far more of them and partly because of gaps on our end. A median across a handful of locations is not the same quality of number as a median across a hundred.
The premium-mix problem in the caveat section above is fixable, and fixing it is the obvious next piece of work: match specific comparable products across the three stores rather than taking a category-wide median, and report on that instead. It is slower and it is right.
And I would like to run this again in a year. Seasonality is real, particularly in produce, and one reading is one reading.


