The lowest price does not automatically win the Amazon Buy Box because Amazon picks the featured offer on more than price: it names competitive pricing, delivery speed and performance. You can measure the result for any listing with one call to /api/amazon-product-offers - compare the featured offer's landed price with the cheapest New offer and look at what differs between them: delivery date, shipping cost, seller rating. The Python below does it and lists the visible reasons.
Key Takeaways
- Amazon selects the featured offer on criteria such as competitive pricing, delivery speed and performance - price is one of them.
- Since July 2026 Amazon has been removing seller eligibility requirements for the featured offer, completing by the end of 2026.
- Compare landed prices (totalPrice) of New offers only; a used offer is not the Buy Box's competitor.
- Amazon says featured offers are commonly at or below the lowest price; where one sits above it, compare delivery date and shipping first.
- One offers call per ASIN gives both prices and the visible reasons; the algorithm itself stays Amazon's.
How does Amazon choose the featured offer?
Amazon does not publish a formula. Its own announcements describe the selection as based on criteria most important to customers, "such as competitive pricing, delivery speed, and performance". Until July 2026, Amazon first screened sellers on performance-based eligibility; since then it has been removing that step store by store, completing by the end of 2026, without changing how the featured offer itself is selected. Amazon also says fulfilling orders yourself can be just as effective as FBA. What an API can show is the outcome: which offer was chosen and how it differs from the cheapest one.
| Field | Compare | What it reflects |
|---|---|---|
deliveryDate | Earlier arrival | Delivery speed is weighed |
shippingPrice | Free vs paid shipping | Shipping cost is weighed |
| sellerName = Amazon | Amazon's own offer | First-party offer on the listing |
positivePercentage | Seller feedback | One visible part of performance |
totalPrice | Landed price | Price is weighed, not decisive |
How do I measure the gap between the Buy Box and the lowest price?
buy_box_gap() reads the offers once, keeps New offers with a real price, and compares the featured offer with the cheapest of them. It separates three cases that are not a gap at all: a listing with no offers, one where Amazon shows no featured offer, and a featured offer that is not New. "Cheapest" means the cheapest on the first page of the offer listing, and the list of reasons can be empty. get() and new_session() come from the Python quickstart; the fields are explained in the offer listing guide.
buybox_gap.py - featured offer vs cheapest New offer
"""How far the featured offer is above the cheapest New offer, and the visible reasons."""
from sellermagnet import get, new_session
def _price(offer: dict) -> float | None:
p = offer.get("totalPrice")
return round(p, 2) if isinstance(p, (int, float)) and p > 0 else None
def buy_box_gap(asin: str, marketplace_id: str) -> dict:
d = get(new_session(), "amazon-product-offers", asin=asin, marketplaceId=marketplace_id)
box, offers = d.get("buyBox") or {}, d.get("offers") or []
if not offers:
return {"asin": asin, "state": "no offers"}
if d.get("buyBoxSuppressed") or not box:
return {"asin": asin, "state": "no featured offer"}
new = [o for o in offers if o.get("condition") == "New" and _price(o)]
if box.get("condition") != "New" or not new or not _price(box):
return {"asin": asin, "state": "not comparable"}
cheapest = min(new, key=_price)
gap = round(_price(box) - _price(cheapest), 2)
reasons = []
if gap > 0: # visible differences, not Amazon's scoring
if box.get("deliveryDate", "N/A") != "N/A" and cheapest.get("deliveryDate", "N/A") != "N/A" \
and box["deliveryDate"] < cheapest["deliveryDate"]:
reasons.append(f"featured offer arrives {box['deliveryDate']}, cheapest {cheapest['deliveryDate']}")
if not box.get("shippingPrice") and cheapest.get("shippingPrice"):
reasons.append(f"featured offer ships free, cheapest charges {cheapest['shippingPrice']} shipping")
if box.get("sellerName") == "Amazon":
reasons.append("Amazon itself holds the featured offer")
elif cheapest.get("sellerName") != "Amazon" and \
(box.get("positivePercentage") or 0) > (cheapest.get("positivePercentage") or 0):
reasons.append(f"seller rating {box['positivePercentage']}% vs {cheapest.get('positivePercentage') or 0}%")
return {"asin": asin, "state": "featured", "featured": _price(box), "cheapest_new": _price(cheapest),
"gap": gap, "gap_pct": round(100 * gap / _price(cheapest), 1),
"cheapest_seller": cheapest.get("sellerName"), "reasons": reasons}
if __name__ == "__main__":
print(buy_box_gap("B0CL61F39H", "ATVPDKIKX0DER"))
Example result (illustrative values)
{'asin': 'B0CL61F39H', 'state': 'featured', 'featured': 444.98, 'cheapest_new': 419.83,
'gap': 25.15, 'gap_pct': 6.0, 'cheapest_seller': 'Example Shop',
'reasons': ['featured offer arrives 2026-09-28, cheapest 2026-10-02',
'featured offer ships free, cheapest charges 12.0 shipping',
'Amazon itself holds the featured offer']}

Visible reasons, not the algorithm
The reasons the script lists are differences you can see in the offers. Delivery date and shipping cost match Amazon's stated criteria; Amazon holding the offer is only an observation, and Amazon says FBA and seller-fulfilled offers are treated equally. None of it is Amazon's scoring. Two offers can look identical in the data and still be treated differently, for example through seller performance the API does not show.
How big is the gap usually?
It depends on the listing. Amazon says featured offers are commonly at or below the lowest-priced alternative. Where the cheapest offer arrives later or charges shipping, gaps of a few percent occur, and Amazon's own offer can hold the Buy Box above cheaper sellers. Measure your own listings over a few weeks - the Buy Box history guide shows who held it and for how long.

Can I check a listing from the command line?
Yes. jq prints the featured offer's landed price and the cheapest New offer side by side.
Featured vs cheapest New offer with curl and jq
curl -sG "https://sellermagnet-api.com/api/amazon-product-offers" \
-H "X-Api-Key: $SELLERMAGNET_API_KEY" --max-time 120 \
--data-urlencode "asin=B0CL61F39H" \
--data-urlencode "marketplaceId=ATVPDKIKX0DER" \
| jq -r 'if .success then
"featured: \(.data.buyBox.totalPrice // null | if . then (. * 100 | round / 100) else "none" end)",
((.data.offers // []) | map(select(.condition == "New" and .totalPrice > 0))
| if length == 0 then "cheapest: no New offer"
else (min_by(.totalPrice) | "cheapest: \(.totalPrice) \(.fulfillmentType) \(.sellerName)") end)
else error(.message) end'
Frequently Asked Questions
Why doesn't the lowest price win the Buy Box?
Amazon selects the featured offer on several criteria, such as competitive pricing, delivery speed and performance. A slightly more expensive offer with faster or free delivery can win.
What changes for the Buy Box in 2026?
Since July 2026 Amazon has been removing seller eligibility requirements for the featured offer, completing by the end of 2026. How the featured offer is selected does not change.
Which price should I compare?
totalPrice, the landed price including shipping, and only between New offers. Round the featured offer's price to cents first.
What if a listing has no featured offer?
Then buyBoxSuppressed is true and buyBox is empty. There is no gap to measure; the script reports the state instead.
How much does it cost?
One credit per ASIN and check. The offers call returns both prices and the fields behind the reasons.
Bottom line: one offers call per ASIN shows how far the featured offer sits above the cheapest New offer and which visible factors - delivery, shipping, rating, Amazon itself - separate them. The product offers page lists every field, and a free account includes 150 credits.