Methodology
How INGOTX Tracks Premium Data
INGOTX tracks every major US bullion dealer's daily pricing across 60+ product categories. Premium-over-spot is computed at ingest time and stored on every observation, so when we report that a dealer was “lowest premium on X days out of 60,” we're reading from a denormalized field on the raw price history table — not a model estimate.
Scrape cadence
We scrape each tracked dealer roughly 5 days per week. A “90-day” tracking window therefore yields ~60–65 distinct observation dates per dealer, not 90. We describe windows as “60+ days over the last ~3 months” in editorial content to keep the framing accurate.
Premium computation
For each product observation, premium = (dealer price − spot price) / spot price. We filter observations to the0 ≤ percent_over_spot ≤ 100band to exclude data-quality outliers (negative premiums from stale spot snapshots, extreme commemoratives over 1,000% markup). We also restrict to in-stock products: a price you can't actually buy at isn't a price.
“Lowest premium dealer on a given day”
For each category, each day, we compute every tracked dealer's median premium across that category's in-stock products. The dealer with the lowest category median for that day wins the day for that category. A dealer that isn't carrying any in-stock products in a category that day simply doesn't participate — we don't penalize them with a high “default” value.
Peer set
The current dealer-review peer set is 11 dealers: Money Metals Exchange, APMEX, JM Bullion, SD Bullion, BullionExchanges, BGASC, Hero Bullion, GoldenStateMint, Provident Metals, SilverGoldBull, and Kitco. Two dealers (GoldenStateMint at ~23 tracked products and Kitco at ~91) carry narrower catalogs than the major-8 and should be read as specialists when they show up as winning a category. We include them with that asterisk rather than excluding them — excluding any dealer with strong data invites valid “cherry-picked” criticism.
Refresh cadence on reviews
Dealer-review articles are refreshed quarterly. The “Last updated” date on each review and thedateModifiedfield in the page's JSON-LD both pull from the database row'smodified_atcolumn — never hardcoded. If a refresh materially changes a dealer's standing on a key product, we update the verdict section accordingly.