Every Best Deal, Lightning Deal and price discount exactly as Amazon's own Seller Central screens show it — read from the screens, not from a feed.
Five different pulls carry deal data, and they disagree. This is every data point we hold, which pull it should come from, and which Amazon API actually serves it. Green is the one to trust; red means that pull has the field and it will lie to you. Nothing here is read from BigQuery — it is a map of the plumbing, kept by hand.
Amber means go to the green check in that same row instead. The one place it doesn’t is the two performance rows, where the hourly table isn’t a worse version of the number — it is literally storing the daily report’s copy of it.
| Data point | Hourly APIevery hour, :07 ETSP-API Promotions 2025-12-01 | Daily report6am ET · 2–3 days lateSP-API Reports 2021-06-30 · GET_PROMOTION_PERFORMANCE_REPORT | Browser · Dealstwice a day, 7:30 + 3:30 ETSeller Central internal /promotion-central/api/v1 | Browser · PEDonce a day, 8:00 ETsame endpoints, filtered to Fixed + Percentage off | Price feedprice read every 4h PTSP-API Product Pricing · getPricing · getCompetitivePricing | Where it should come from |
|---|
The official deals API. Runs itself.
2025-12-01GET /promotions · GET /promotions/{id} · GET /promotions/{id}/selections/{sel}sellingpartnerapi-na.amazon.comtbl_z_mtz_deals_unified, tbl_z_mtz_promotions_rtA file Amazon builds overnight. Three days behind.
2021-06-30GET_PROMOTION_PERFORMANCE_REPORTPOST /reports → poll → GET /documents/{id}tbl_z_mtz_promotion_productsReads Seller Central’s own screen. Needs the signed-in machine.
/promotion-central/api/v1/promotions · …/promotions/{id}/productsvw_promotion_central_current, …_products_current, …_blockedSame screen, your price-discount filter.
tbl_ped_discount_promotions, tbl_ped_discount_productsWhat we’re charging. Never lagged.
v0 and 2022-05-01getPricing (our own offer) · getCompetitivePricing (buy box) · getCompetitiveSummary (shopper price)getCompetitiveSummary is the only call that returns a Lightning Deal price — and it is switched off on the full pull todayeddie_v2_repricer.z_mtz_repricer_pricing_historyThe join. Everything hangs on report.promotions_api_mapping_id = api.promotionId.
The report’s own promotion_id is a short 8-character id in its own
namespace — joining on it, on a prefix, or on tracking_id returns zero
rows. The browser row is the bridge because it carries both keys: 492/492 deals
matched the hourly feed, 489/492 matched the report.
Two pulls need a person’s login. Browser · Deals and Browser · PED read Seller Central inside a signed-in session on the Seymour machine — that is not a published API and it is the one part of this that can quietly stop. Everything the browser owns alone (who’s blocked, deal type today, reference and website price, Amazon’s price ceiling) goes dark with it.
A NULL is an honest gap. Nothing in here may fill in Best Deal or Lightning Deal by guessing.