IronScout reports observed ammunition prices — what tracked retailers actually listed, over a defined window, measured the same way every day. This page explains how a listing becomes a published figure, what has to be true for it to count, and the limits of what the numbers describe.
Every figure is a price per round (total listed price divided by the round count in the pack), so differently-sized packs compare on the same basis. Prices are the advertised per-round cost before shipping and tax.
Round count is not printed in a reliable field — it has to be derived from how each retailer describes the pack, and a box of 20 mistaken for a case of 200 is a tenfold error in the only number that matters. So round-count normalization is treated as a validated step with its own checks rather than as arithmetic, and a listing whose pack size cannot be resolved is held back rather than assigned a guess.
Every observation IronScout ingests has to clear a fixed chain of checks before it is allowed to affect any published number. The checks are versioned and run in order, because each one depends on the last:
Only observations that clear the whole chain are marked certified, and only certified observations are consumed by a published statistic. The ordering matters: per-round plausibility is meaningless until pack quantity and product binding are settled, so the later checks are defined to depend on the earlier ones rather than running independently.
Figures are drawn from tracked online retailers and reflect listings recorded as in stock at the time they were observed. Coverage varies by retailer and source, and in-store or local pricing is not included. Each caliber page states how many retailers and products its numbers are based on.
A retailer only contributes while it is eligible, and eligibility is applied when the figures are computed rather than when the data was collected. Data continues to be ingested from retailers that are not currently eligible, and none of it reaches a published price. The same applies at the source level: a source whose collection permissions are not affirmatively in good standing contributes nothing.
Where eligibility or identity is ambiguous, the observation is excluded rather than included. The consistent bias is toward showing less data, not more.
Market summaries use a rolling 30-day window ending on a UTC-midnight boundary. A shorter rolling 7-day window backs the recent-low figure.
The core primitive is the daily-best price. For each product at each retailer, IronScout takes the lowest observed in-stock price per round on each UTC day, then takes the lowest of those across retailers to get one figure per product per day. Aggregate statistics are computed over those daily-best observations, not over raw listing snapshots, so a product refreshed many times in a day cannot skew the market figures.
Within the window IronScout reports the lowest observed price, the 25th percentile, the per-product median (midpoint), the 75th percentile, the 95th percentile as the published high, and the count of products and retailers the figures are drawn from. The 95th percentile is published instead of the raw maximum because the maximum tends to sit against the outlier filter's own ceiling — one premium or mislabeled listing priced just under the cutoff — so it describes the filter rather than the market.
Two outlier filters run before those percentiles. A fixed per-caliber price-per-round band, defined independently of current data, is applied first, so contaminated observations cannot widen the very bounds meant to catch them. A relative fence then drops anything far below or far above the window's own median. Both are applied to the daily-best set, before publication.
The median is a per-product midpoint across all listed loads. Because a caliber's catalog often splits between range/practice and defensive/premium loads, where the data supports it we also report each segment's own midpoint so the blended median is not misread as “the typical price.”
Sufficiency is a threshold, not a judgment call. Percentiles are only computed once a caliber has at least five surviving daily-best observations in the window, and a caliber summary is only published once it has at least fifteen. Below those floors the summary is withheld and the page says so, rather than rendering a number derived from a handful of listings.
A threshold like this governs what is visible, not what was measured. The underlying observations are the same either way; the floor only decides whether IronScout is willing to summarize them.
The same principle applies to the segment breakdowns: a range/practice or defensive/premium midpoint is only shown once that segment on its own clears the floor, so a segment figure is never a restatement of two or three listings.
The underlying price history is append-only. A recorded observation is never edited in place and never deleted.
Bad data still happens — a retailer publishes a placeholder price, a pack size is misread, a listing is mislabeled. IronScout handles that with an explicit corrections overlay: the original observation stays in the record, and a separate, audited correction either revokes it or adjusts it. Corrections carry their own history and can themselves be revoked.
The practical consequence is worth stating plainly: a published figure can change after the fact when a correction lands. What append-only guarantees is not that the number never moves — it is that every version of it remains reconstructible from the record, including what was corrected and when.
A market figure describes the retailers and products IronScout tracked at the moment it was computed. If that set changes between two windows, the difference between them is not necessarily a price movement — it can be a change in coverage. Onboarding a few structurally cheaper retailers can move a pooled median substantially while no seller has changed a price.
So a period-over-period change is only published when the two endpoints are coverage-comparable: the contributing retailer counts have to be within 20% of each other, and the product counts within a factor of two. When they are not, IronScout reports both price levels and states the coverage change instead of reporting a percentage move.
Coverage that cannot be verified is treated the same as coverage that is known to have shifted — the comparison is withheld. An unverified basket is not assumed to be a stable one.
IronScout reports what the data shows. It does not tell you whether to buy, rank products against each other, assign deal scores or ratings, or predict where prices are headed. Trend figures describe movement already recorded in the history; they are not projections of future prices.
The numbers describe the market as a whole, not any single product or the specific order in front of you. Coverage is partial by construction: IronScout can only describe the retailers it tracks, and a figure drawn from them is not a claim about the entire market.
The decision is always yours.