Retailer coverage is expanding — keep checking back as selection grows!
CorrectionLast updated July 30, 2026

Correction: The 9mm 'Price Decline' We Published Was a Coverage Artifact

We reported a 38.4% thirty-day decline in tracked 9mm pricing. Re-measured against a stable set of products and retailers, the change over that window was zero. The move was in our data coverage, not in the market.

On July 17, 2026 we published a post reporting that IronScout's tracked 9mm observed in-stock median had fallen 16.6% in seven days and 38.4% over thirty days, and that this was the fourth consecutive week-over-week decline.

Those figures did not describe a change in ammunition prices. They were an artifact of how we measure, and we should not have published them.

This page now carries the correction in place of the original article. Below is what we claimed, what the data actually shows, and why our own tooling did not stop it.

What we claimed

Original claimStatus
9mm observed median $0.600/rd on July 17Accurate as a raw figure
−16.6% over seven days ($0.720 → $0.600)Not a price change
−38.4% over thirty days ($0.975 → $0.600)Not a price change
Four consecutive week-over-week declinesArtifact of the same cause
In-stock products 619 → 714 as evidence of restockingMisattributed

What the data actually shows

IronScout's observed median is computed by pooling, for every tracked 9mm product with an in-stock listing, the best per-round price seen that day, then taking the median across a rolling 30-day window. That pool spans every retailer eligible in our data at the time of computation. It is not normalized to a stable set of retailers.

Between June 17 and July 17, the number of retailers contributing 9mm observations to that pool went from 9 to 13. The retailers that began contributing during the window are structurally cheaper than the ones already there. Per-retailer observed medians across the July 17 window:

RetailerIn the poolObserved median
Midway USAbefore the window$1.375/rd
Primary Armsbefore the window$1.160/rd
Brownellsbefore the window$0.874/rd
SGAmmojoined during$0.479/rd
True Shot Ammojoined during$0.416/rd
Freedom Munitionsjoined during$0.296/rd

"Joined during" means first contributing to this statistic during the window. These retailers were being tracked earlier; their observations only began reaching the pooled median once they became eligible.

Adding a cheaper retailer to the pool lowers the median with no price changing anywhere. That is what happened.

We re-measured the same window on a like-for-like basis — the 544 product-and-retailer pairs observed in both the June 17 and the July 17 window, the same items at the same sellers:

Measurement of the same windowResult
What we published (pooled median, changing basket)−38.4%
Median of the per-pair price changes0.0%
Change in the median of the matched set+1.4%

We report both like-for-like estimators because they answer slightly different questions — the typical item's change, and the change in the typical price — and neither is the one we published. Over the window we described as a 38.4% collapse, matched 9mm prices were flat, if anything fractionally higher.

The claim that should have caught it

The original post cited rising in-stock product counts (619 → 714) as corroborating evidence, arguing that restocking was pulling cheaper products back into the observed mix.

That was the error, stated plainly. The product count did not rise because shelves refilled. It rose because we added retailers. We presented the cause of the artifact as proof that the artifact was real.

Why our tooling did not stop this

This is the part we consider most serious, because the check already existed.

IronScout's signal engine emits a basket-shift caution whenever the tracked retailer count moves more than 20% between two compared snapshots. Over this window it moved +44%. The caution fired. It was written into an internal editorial digest — and nothing required the published copy to carry it.

Three changes have been made:

  1. A build-time guard. Any post asserting a period-over-period move in an observed median now fails the build unless it also discloses that the tracked retailer basket can change between the compared windows. This post and its companion were the only two existing posts that tripped it.
  2. Affected comparisons are now suppressed rather than annotated. When the retailer basket behind two compared figures has shifted, the percentage does not render at all — a caveat attached to a wrong number still publishes the wrong number. This now covers the thirty-day comparison, which previously had no coverage check behind it at all, and it stops a coverage artifact from being ranked as the week's biggest story.
  3. A written standard for when a comparison over time may be published at all, recorded as an architectural decision rather than editorial habit.

We should be precise about what these changes do and do not achieve. They detect coverage change using retailer and product counts, which is a proxy: it will not catch a case where the count holds steady but the retailers themselves swap. The durable fix is to compute the series on matched baskets by construction — the method used to produce the 0.0% figure above. That work is not built yet. Until it is, the surfaces go quiet on a comparison rather than guess at it.

What this does and does not mean

It does not mean tracked 9mm prices rose, and it does not mean our current per-round figures are wrong. The level — what 9mm costs today across the retailers we track — was never in question and is not affected. What was wrong was the comparison across time, because the thing being compared changed underneath us.

It also does not mean our coverage growth is a problem. Adding retailers makes every current figure more representative. It simply makes any before-and-after comparison across that growth invalid unless it is measured on a stable basket.

Current per-caliber figures and distribution bands are on the Ammo Price Index, and the 9mm caliber page carries live pricing context. The market recap for the same week has been corrected for the same reason.


Correction published 2026-07-30. Original article published 2026-07-17. Figures re-derived from IronScout caliber market snapshots and the underlying observation record. The like-for-like comparison covers the 544 product-retailer pairs observed in both the June 17 and July 17 thirty-day windows, each pair summarised by its median daily-best per-round price within each window. Observed daily-best per-round medians from tracked online retailers, in stock at observation time; they may not reflect the entire market. Market context only — not a recommendation.