Amazon Pricing Feed Preview
A read-only, per-SKU preview of exactly what the pricing sync would send (or last sent) to Amazon and Repricer — prices, quantities, shipping group, and any guard blocks — without pushing anything.
Screenshot

Purpose
- Pricing / Sales managers use it as a dry-run before a real push, to confirm prices, fulfillment and shipping group are correct.
- Surfaces every SKU the sync would touch and why blocked SKUs are held back (price-deviation guard + validation violations).
- Two modes: Live Preview (rebuilds the feed now) and Last Sent (replays the most recent completed submission log).
- Filter by Channel (Amazon / Repricer / Both) to mirror what each downstream system receives.
How to Access
Desk > Reports > Amazon Pricing Feed Preview, or /app/query-report/Amazon Pricing Feed Preview.
Report type: Script Report. Reference DocType: Amazon Product Pricing.
Roles: Sales Manager, System Manager.
Filters
| Filter | Type | Required | Description |
|---|---|---|---|
| Source | Select (Live Preview / Last Sent) |
Yes | Live Preview builds the feed live from active pricing records; Last Sent reads the latest completed Amazon Pricing Submission Log (status != Dry Run, feed content set). Default Live Preview. |
| Channel | Select (Both / Amazon / Repricer) |
No | Drops the Amazon-only or Repricer-only columns and, in Last Sent mode, picks which submission log(s) to replay. Default Both. |
| Proxy SKU | Link (Proxy SKU) | No | Restrict to a single SKU. |
| Refresh Strategies (Live Preview only) | Check | No | When set, runs bulk_refresh_strategies() first so active strategies are re-selected before the feed is built. |
Columns
| Column | Type | Description |
|---|---|---|
| Proxy SKU | Link (Proxy SKU) | The SKU (Amazon seller SKU). |
| Item | Link (Item) | Underlying Item from the Proxy SKU. |
| Active Strategy | Link (Amazon Product Strategy) | The currently selected strategy (Amazon Product Pricing.active_strategy). |
| FBA | Check | Proxy SKU.is_fba. |
| Publishing Mode | Data | Navgold Settings.amazon_publishing_mode (defaults to Stock Only). Blank in Last Sent mode. |
| Amazon Min | Currency | minimum_seller_allowed_price from the feed's purchasable_offer patch. |
| Amazon Max | Currency | maximum_seller_allowed_price from the feed patch. |
| Amazon Our Price | Currency | our_price from the feed patch. |
| Qty | Int | quantity from the fulfillment_availability patch. |
| Fulfillment | Data | Built from the availability patch: fulfillment_channel_code + optional lead {n}d + optional restock {date}, joined by ·. |
| Shipping Group | Data | merchant_shipping_group UUID mapped to a label — SFP (57d54587…), Main Revised (a31ca016…), or Two-Day (85513b3c…). |
| Repricer Min | Currency | Repricer band min. Live: Amazon Min, else fallback Amazon Product Pricing.current_min_price. Last Sent: price_min from the Repricer CSV. |
| Repricer Max | Currency | Repricer band max. Live: Amazon Max, else fallback current_max_price. Last Sent: price_max from the CSV. |
| Repricer Rule | Data | Amazon Product Strategy.repricer_rule for the active strategy (Live) / repricer_name from the CSV (Last Sent). |
| Status | Data | OK / Blocked (Live) or Sent / Blocked (Last Sent). Blocked renders red, bold via the JS formatter. |
| Reason | Data | ; -joined block reasons (deviation guard + validation violations), else blank. |
In Channel = Amazon the Repricer columns (repricer_min, repricer_max, repricer_rule) are dropped; in Channel = Repricer the Amazon columns (amazon_min/max/our_price, quantity, fulfillment, shipping_group) are dropped.
How It Works
Live Preview pulls active Amazon Product Pricing records, optionally narrows to an allow-list via get_allowed_pricing_proxy_skus() (when restricted, a message reports how many SKUs would actually receive prices), then calls build_pricing_feed() to produce the real Amazon JSON_LISTINGS_FEED. Each message's PATCH operations are parsed back into readable price/qty/shipping fields. The same price guards as a real push run here: partition_pricing_by_price_deviation() flags excessive deviation, and collect_pricing_violations() flags validation errors — both feed the Status/Reason columns. Last Sent mode skips feed-building and instead parses the stored feed content (Amazon JSON) / CSV (Repricer) plus the blocked_records from the latest submission log.
flowchart LR
subgraph Live[Source = Live Preview]
APP[Amazon Product Pricing<br/>is_active=1] --> FEED[build_pricing_feed]
FEED --> PARSE[parse feed PATCHes<br/>price / qty / shipping]
APP --> GUARD[price-deviation guard +<br/>pricing validators]
end
subgraph Last[Source = Last Sent]
LOG[Amazon Pricing Submission Log<br/>latest completed] --> RP[parse JSON feed / Repricer CSV<br/>+ blocked_records]
end
PARSE --> ROWS[preview rows]
GUARD --> ROWS
RP --> ROWS
META[Proxy SKU + Pricing + Strategy<br/>item, is_fba, repricer_rule] --> ROWS
ROWS --> OUT[Amazon + Repricer columns<br/>Status / Reason]
Notes
- Read-only — building the feed here never submits it to Amazon or Repricer.
- In Stock Only publishing mode the feed carries no price, so Repricer min/max fall back to the pricing record's
current_min_price/current_max_price. - Blocked SKUs get no Repricer band in Live Preview (they'd be held back from a real push).
- An empty result under an allow-list means the allow-list is empty, not that there are no SKUs.
- Last Sent shows nothing for a channel if no completed (non-Dry-Run) submission log exists.
- Related: Amazon Strategy Price Comparison for per-strategy band vs. live price.