How Ghost Works

A transparent look at how we collect, analyze, and signal ammunition price data across 230+ US retailers.

Last reviewed: April 2026

How does Ghost collect price data?

Ghost continuously monitors 230+ US ammunition retailers. Our scraping infrastructure runs on Cloudflare Workers, a globally distributed edge computing platform. Each retailer is checked every 2-4 hours, 24 hours a day, 7 days a week.

For each product listing, we extract: retail price, brand name, caliber, grain weight, bullet type (FMJ, JHP, soft point, etc.), round count per box or case, and current stock status. Every listing is timestamped at the moment of collection so you always know exactly how fresh the data is.

We use a tiered scraping approach. Most retailers serve standard HTML pages that we can parse directly. For retailers that render prices with JavaScript, we use Cloudflare Browser Rendering with headless Chromium to load the page fully before extracting data. This ensures we capture accurate prices even from the most complex retail sites.

Raw scrape data is stored in Cloudflare D1, a SQLite-based relational database at the edge. Each scrape run is logged with success/failure counts, duration, and error details. We retain raw price snapshots for 90 days and permanent daily aggregate statistics indefinitely, giving us a growing historical dataset for trend analysis.

What is CPR and how are prices normalized?

Raw prices are meaningless without context. A $15 box and a $300 case can't be compared at face value. Ghost normalizes every listing to Cost Per Round (CPR) — the total price divided by the number of rounds. This lets you compare deals across any box size, from 20-round boxes to 1,000-round cases, on a level playing field.

CPR Formula

CPR = Total Price ÷ Number of Rounds

For example: a box of 50 rounds priced at $15.00 has a CPR of $0.300. A case of 1,000 rounds priced at $180.00 has a CPR of $0.180. Despite the case costing 12x more at checkout, it is 40% cheaper per round. Without CPR normalization, you'd be comparing sticker prices that tell you nothing about actual value.

CPR normalization also enables fair comparison across calibers. When Ghost says 9mm averages $0.21/round and .308 Win averages $0.85/round, those numbers come from the same methodology applied consistently across every product listing in the database.

We apply CPR at the moment of ingestion. Every product in the Ghost database has a pre-calculated CPR field, so search results can be sorted by true value instantly without runtime computation.

How are BUY/HOLD/WAIT signals calculated?

Ghost's BUY/HOLD/WAIT signals are based on simple, transparent math. We compare the current best available CPR for each caliber against its historical moving average:

Signal Confidence Score

Each signal carries a confidence score from 1 to 3, displayed as dots on the caliber card. Confidence is calculated from three independent factors:

A 3-dot confidence signal means the data is fresh, well-sampled across multiple retailers, and the price trend is consistent. A 1-dot signal means one or more of those factors is weak — the signal may still be correct, but you should look at the chart and retailer data before acting.

Our promise

Signals update as new price data flows in. We never manufacture urgency — if the data says wait, we say wait.

Which retailers does Ghost track?

Ghost indexes 230+ US retailers including online-only stores, big-box retailers with ammo sections, and specialty ammunition dealers. Coverage spans well-known retailers like Lucky Gunner, SGAmmo, Palmetto State Armory, Natchez Shooters Supplies, Bulk Ammo, and many more.

Ghost only tracks retailers that ship within the United States. We verify each retailer's legitimacy before adding them to the index: we check their Ghost rating, verify their business address, confirm shipping policies, and validate that their listed prices match what actually appears at checkout.

Each retailer gets a trust score from 1 to 10 based on shipping reliability, pricing transparency, return policy, and customer reputation. These scores are visible on retailer profile pages and help you make informed decisions about where to buy.

We're constantly expanding coverage. If your favorite ammo retailer isn't on Ghost yet, let us know at hi@ghostsearch.devand we'll prioritize adding them.

How fresh and accurate is the data?

Every listing on Ghost shows a freshness indicator:

We verify prices by checking multiple times per day. Each scrape cycle processes every active retailer, compares the new data against the previous snapshot, and flags any anomalies. If a price changes by more than 50% between scrapes, the listing is flagged for review rather than published immediately.

If a retailer's data becomes unreliable (site redesign, errors, downtime), our circuit breaker system automatically pauses scraping for that retailer. The circuit breaker tracks consecutive failures and only resumes scraping after the issue is resolved. This prevents stale or incorrect data from polluting the index.

Historical accuracy improves over time. Daily aggregate statistics (average CPR, low, high, listing count) are computed each day and stored permanently. The 30-day and 90-day price history charts on caliber pages are built from these aggregates, giving you a reliable picture of price trends even if individual scrape runs occasionally miss data.

How does search work?

Ghost search uses SQLite FTS5 (full-text search) running on Cloudflare D1 at the edge. When you type a query, it's matched against product titles, brand names, and caliber descriptions using weighted relevance scoring.

Search results can be filtered by caliber, brand, bullet type, grain weight, round count, case material, and retailer. Results are sorted by CPR (cheapest first) by default, but you can sort by price, round count, or recency. Filters and sort preferences are reflected in the URL, so you can bookmark or share any search.

We cache frequent search results in Cloudflare Workers KV for fast response times. Cache entries expire every 15 minutes to ensure results stay current with the latest scrape data.

What calibers does Ghost cover?

Ghost tracks 105+ ammunition calibers across four categories:

Each caliber has its own dedicated page with current best price, BUY/HOLD/WAIT signal, 30-day and 90-day price history, retailer comparison table, and dynamically generated FAQs. Browse all calibers from the Search page or the Signals dashboard.

Does Ghost manipulate rankings or results?

No. Ghost will never gate results behind a paywall. We will never prioritize affiliate partners in rankings. Search results are sorted by CPR by default — the cheapest ammunition appears first, regardless of which retailer sells it.

If Ghost earns affiliate revenue in the future, it will be because our data helped you make a genuinely good buying decision — not because we manipulated what you see. Our Editorial Standards page documents this commitment in detail, including our corrections policy.

Privacy and data handling

Ghost does not use tracking cookies or advertising pixels. IP addresses are hashed with HMAC-SHA256 before storage — we never store raw IP addresses. Rate limiting uses hashed identifiers, not raw IPs. Email addresses collected through alerts are stored securely and never shared with third parties.

Full details are in our Privacy Policy, which includes CCPA/CPRA compliance information, data retention timelines, and a complete list of third-party services we use.