An interactive tour of how sponsored ads on Amazon actually get priced - the auction, the conversion-rate models, and the hourly bidding loop - built from the published literature.
Every search on Amazon runs an auction in the time it takes the page to load. The platform disclosed in 2026 that 92% of placed ads are not won by the highest bid, and that average winning bids fell 50% over six years while conversion rates rose 24%. Those numbers are only possible because the auction multiplies bids by predicted relevance - so the whole game is modeling. Below: three working models you can play with, each one a miniature of a system that exists in production somewhere.
The sponsored-search auction is a generalized second-price auction (Edelman, Ostrovsky & Schwarz 2007; Varian 2007) with a relevance multiplier. Each advertiser i is ranked by score = bidi × qi, where q is the platform's predicted conversion propensity for that exact (query, product, placement). Winners pay the minimum that would have held their rank:
Drag the sliders. Watch a high-bid / low-relevance advertiser lose to a cheap, well-converting one - and watch its price fall as its own q rises. Toggle bid-only ranking to see the world Amazon explicitly rejected.
The multiplier q is not observed; it is estimated, per search term and placement, from clicks and conversions. Head keywords have millions of observations. The tail - most keywords - has almost none, and the tail is where the unexploited auctions live. The working tool is a Beta-Binomial posterior: start from a prior shared across a keyword cluster, then update with every hour of evidence. A weak prior trusts raw data quickly (and whipsaws on noise); a strong prior shrinks hard toward the cluster mean (and is slow to notice a genuinely great keyword).
Production CVR models add three refinements the toy can't show: multi-task training over the whole impression space to fix selection bias (ESMM, Alibaba 2018), explicit correction for conversions that arrive days late (Chapelle 2014; Ktena et al. 2019), and de-biasing for the fact that top-of-search clicks were easier to win (position-based bandit learning-to-rank). The Bayesian skeleton underneath stays the same.
Given a CVR estimate and a margin per conversion, value per click is v = pCVR × margin. But no account is unconstrained: a daily budget must be spread across hours and keywords so the marginal return on the last dollar is equal everywhere (the Lagrangian condition behind Amazon's OPTIMUS bidder, +2-6% sales in A/B tests) and so the budget lasts the day (the pacing problem; Balseiro & Gur). Below: two policies on the same simulated day. Fixed sets one bid from a stale average CVR and never touches it. Hourly loop re-estimates the CVR posterior each hour and re-prices the bid toward true value, with a multiplicative pacing controller steering spend toward an even schedule. In this market, evening shoppers convert better - and evening auctions price accordingly.
In an auction, your treatment leaks: bid more aggressively in the treatment group and prices rise for the control group too. The fixes are their own literature - switchback experiments that randomize time blocks instead of users (with rerandomization to kill carryover), shadow-price corrections for the equilibrium effect, and simulators populated with adversarial-bandit bidders for anything too risky to try with real money (Amazon's AuctionGym won a best-paper award for exactly this). Offline, logged bids carry bandit feedback - you never see what an unsubmitted bid would have done - so evaluation runs through inverse-propensity and doubly robust estimators.
The meta-lesson of all four sections: the durable edge in this market is not a clever bid. It is a faster, more honest loop - better posteriors, margin-based value, disciplined pacing, and measurement that respects the marketplace.
Full derivations and the complete reference list: Amazon Ads, Deeply.