Analysis6 min read

Amazon prices: your offer vs the Featured Offer

Compare your Amazon offer with the Featured Offer using matched context, known shipping and a tested offline model that preserves missing data.

On this page

Before calculating a gap between your Amazon offer price and a Featured Offer price, establish that both observations describe the same product, marketplace and selected customer context. Keep the seller identity and price components attached to each observation. If shipping or the required offer is unknown, hold the comparison.

This is a diagnostic for developers of authorized seller tools. The downloadable model makes that decision explicit before calculating a pre-promotion item-plus-known-shipping subtotal. All example records are synthetic. The fixed scope is US/USD, Consumer, New, one unit; there is no quantity field, so single-unit input is an assumption your adapter must enforce.

A lower item price can produce a higher subtotal

In the first synthetic case, your seller is seller-A. Both records use the same ASIN, NON_PRIME membership, representative location and shipping-service labels, with observation times 30 seconds apart:

ObservationItemKnown shippingSubtotalSeller
Your offer$19.00$4.00$23.00seller-A
Selected Featured Offer$21.00$0.00$21.00seller-B

The model calculates (19 + 4) - (21 + 0) = +2.00 USD. Your item price is lower, but your defined subtotal is $2 higher. Positive output means your subtotal is higher; negative means lower. Known zero shipping is evidence; missing shipping cannot be replaced with zero.

A second case gives both sellers a $20 item price and known $0 shipping. The gap is 0.00, while featured_is_own_seller is false: the selected Featured Offer still belongs to seller-B. A third case changes that seller to seller-A and returns true. Price equality and seller identity answer separate questions.

These results explain the supplied records. They do not explain why Amazon selected an offer or establish a price that will win.

Select the response that answers your question

The field name “price” is insufficient provenance. Choose the record by the question it answers:

QuestionAppropriate evidenceComparison role
What offer does my seller/SKU report?Requested offers from getListingsItem, scoped to marketplace and offer typeOwn-offer observation
Which offer is featured for the selected segment?featuredBuyingOptions from getCompetitiveSummary, scoped to ASIN/marketplaceFeatured-offer observation
What are the lowest-priced offers?Separate lowestPricedOffers data in the retrieval guideDifferent question; cannot substitute for featured data
What external price reference is reported?CompetitivePrice outside Japan; CompetitivePriceThreshold in JapanExternal-retailer reference; see the migration announcement
What price might make my offer featured?Featured Offer Expected Price, or FOEPComputed guidance, separate from an observed offer

FOEP describes a computed listing price before promotions. Amazon explicitly withholds a Featured Offer guarantee because competing offers and customer-specific fulfillment capabilities can affect selection.

For the own side, request offers explicitly: getListingsItem defaults to summaries. Validate the seller/SKU request context and map the selected marketplace's SKU to the intended ASIN before joining competitive data. Select the applicable B2C offer and audience. The Listings Items model keeps these offer fields separate from the summary.

That response alone does not supply all the shipping, membership and location context required by this model. Your adapter needs separately evidenced inputs for those fields. Until they are known, retain the own price but leave this subtotal comparison unresolved.

Make comparability an explicit contract

The model accepts normalized records, not raw Amazon responses. Its complete cases file shows the exact shape. Each pair declares an expected_own_seller_id independently of both observations, then supplies source type, seller, ASIN, marketplace, currency, condition, customer type, membership, location, shipping service, timestamp and price components.

Apply these checks before passing real observations into that shape:

  1. Validate the individual response. A successful batch envelope does not establish every member's success. Check each member's status, body, ASIN, marketplace and requested dataset. Preserve failed, absent and incomplete observations. The Pricing model defines per-member status and optional datasets.
  2. Select the intended context. Featured offers are segmented by membership and regional context. Optional sampleLocation represents a location within the segment, not an exact delivery quote for every shopper. Retain what the source actually establishes.
  3. Preserve unknown components. Pricing listingPrice excludes shipping, Points and promotions; shipping options are optional estimates. The same model therefore cannot justify silently treating missing shipping as free.
  4. Keep the calculation narrow. Amazon warns that returned promotions may omit active promotions. This subtotal excludes taxes, Amazon Points, coupon eligibility, complete promotion coverage and fulfillment quality. It is not a checkout total. Promotion coverage.

The executable checks exact equality of normalized membership, location and service strings. Those are trusted labels, not proof of equivalent Amazon contexts. It also trusts the adapter's source, seller and product labels. Use null when context is unknown; two invented unknown strings would create false confidence. US and STANDARD are lab labels, not a raw marketplace ID or a claimed Amazon shipping-option value.

Run the model and inspect the holds

Extract the complete comparison ZIP, open a terminal in the directory containing compare.py, and run:

sh
python3 -B compare.py
python3 -B compare.py --csv
python3 -B -m unittest -v test_compare.py

No packages or account credentials are needed. The README documents the contract; compare.py and the test suite are individually inspectable. Compare stdout with the recorded JSON and CSV matrix.

The 14 synthetic cases produce three comparisons and 11 holds under the default policy:

CasesResultInterpretation
Lower item price, higher subtotalCompare; +2.00Defined own subtotal is higher
Equal subtotals, different sellerCompare; 0.00, seller flag falseMatching amount does not identify your seller
Equal subtotals, same sellerCompare; 0.00, seller flag trueSelected record identifies your seller
Missing shipping; membership/location/currency mismatch; wrong own sellerFive holdsResolve the missing evidence or incorrect join
Failed or missing Featured OfferTwo holdsPreserve unavailable observations
External reference, FOEP or lowest-price substitutionThree holdsSelect featured-offer evidence
Observations 360 seconds apartOne holdExceeds the default time-skew policy

A hold has no calculated subtotals or gap: JSON uses null, CSV uses empty cells. Invalid input instead stops the command with a nonzero exit. To experiment, edit a copy of cases.json and pass --cases your-cases.json; CSV is output, not an input format.

The default maximum skew is 300 seconds, inclusive, configurable with --max-skew-seconds. It checks the distance between observation times. It checks neither absolute age nor Amazon freshness: two equally old records can compare. Choose an evidence-age policy separately before using the result operationally.

Method: ipvolt prepared this analysis with AI assistance, checked the primary sources and ran the offline model plus 14 passing tests on 16 September 2026 using CPython 3.14.7. Python 3.11+ is the source target; 3.11 was not exercised in that recorded run. No seller account, API response mapping or retail price collection was tested.

For a mismatch between a submitted price and your own observed listing, use Amazon listing updates: accepted is not live. To schedule durable refreshes after listing events, use the companion SP-API notification guide. Keep this comparison's result attached to its two observations and stated subtotal basis before making a pricing decision.

ipvolt is in development. Join the early-access list for one email when access opens. Nothing else.

Sources

  1. getListingsItem
  2. Listings Items API 2021-08-01 model, pinned revision
  3. getCompetitiveSummary
  4. Retrieve featured offers for a batch of ASINs
  5. Product Pricing API 2022-05-01 model, pinned revision
  6. Competitive-price migration and Japan exception
  7. getFeaturedOfferExpectedPriceBatch

Tagged:ProxiesTroubleshooting