Run everything you never had time to implement. Define your process once, and keep it running with Qore.

All reports
Amazon Seller Central
Promotions & Coupons

Amazon Coupon Performance Report

Amazon's coupon performance report is the third-party seller view of what each coupon did — how many shoppers clipped it, how many redeemed it, what it has spent of its budget and the sales behind it — plus the list of ASINs the coupon applies to. Amazon serves sellers and vendors from the same report type but answers each with a different schema, and this page documents the seller one.

Known upstream as
GET_COUPON_PERFORMANCE_REPORT
One row is
One row per coupon
Refreshed
Point-in-time snapshot
Columns
20
Marketplaces
Not published by Amazon
History
Amazon supports request start dates up to two years before the current date. Coupons are selected by when their campaign started, so within that two-year horizon the request window decides which coupons come back rather than how much history each one carries.
Latency
Amazon updates this report daily, and says a coupon still in progress comes back with cumulative figures up to the day before the request, while a coupon that ended a day or more before the request comes back complete. The file has no per-day metric column, so a running coupon's clips, redemptions, budget figures and sales are restated from one pull to the next rather than added to.
Requires

What this report contains

This is the seller-side answer to "what did that coupon actually do". Amazon returns it as a JSON document rather than a flat export, and the seller document holds two row grains at once: a flat list of coupons, each with its clips, redemptions, budget figures and sales; and, under each coupon, the ASINs it applies to. They land as two tables for that reason, and this page documents both.

A coupon row carries its identity (coupon_id, name, website_message, merchant_id), its schedule (start_date_time, end_date_time), its configuration (discount_type, discount_amount) and then the four things people actually open the file for: clips and redemptions on the demand side, budget, budget_spent, budget_remaining and budget_percentage_used on the cost side, and sales with total_discount on the outcome side.

An ASIN row carries only coupon_id and asin. That is the whole grain — there is no per-ASIN breakdown of clips, redemptions or sales here, which is the single most common expectation this report disappoints.

Money is never converted: currency_code rides on the coupon row, and every money column on that row takes its unit from it.

Both tables also carry context columns that Amazon's document does not — marketplace_id, country_code and snapshot_date, and on the ASIN table a currency_code as well. They are added when the document is stored rather than returned in it, so the column reference does not describe them.

How to get it

Through the Selling Partner API, request the report type GET_COUPON_PERFORMANCE_REPORT for a marketplace with a start and end time, poll until Amazon returns a document id, then download it. What comes back is JSON, not the tab-separated text most Seller Central report types answer with, so a pipeline that assumes TSV fails on the first byte rather than on a column.

Two traps sit in that one request. The first is that Amazon uses this single report type for both sellers and vendors and answers each with a different schema: a seller account gets the flat coupons[] list described here, while a vendor account gets campaigns[] with coupons nested inside them. Code written against one shape does not read the other, and nothing in the request says which you will get — your account type does.

The second is what the date range means. Coupons are selected by when their campaign started, so you get every coupon that starts in the window, not every coupon that was running during it. A coupon that began before your range and ran all the way through it is simply absent. If the question is "what ran last month", the window has to cover when those coupons started.

Amazon's report-type reference gives the entry an Availability of "Sellers" and a Role of Brand Analytics — an application-level SP-API role, not a seller entitlement — and says the report can only be requested, never scheduled. What the entry does not give is a store list. The "Amazon store availability" line that other report types carry is simply absent here, so which marketplaces offer this report is not something Amazon publishes, and this page does not guess.

Sample rows

Illustrative values, not data from a real account. Shown to give the shape of the file.

coupon_idnamestart_date_timeend_date_timeclipsredemptionsbudgetbudget_spentsalescurrency_code
EXAMPLE-COUPON-0115% off Example Stainless Bottle2026-09-01T00:00:00Z2026-09-14T23:59:59Z42003181000.00769.005120.00USD
EXAMPLE-COUPON-02$5 off Example Trail Mix2026-09-05T00:00:00Z2026-09-19T23:59:59Z185096500.00480.001245.00USD
EXAMPLE-COUPON-0310% off Example Desk Lamp2026-09-10T00:00:00Z2026-09-24T23:59:59Z76041300.0091.00910.00USD
EXAMPLE-COUPON-0420% off Example Yoga Mat2026-09-18T00:00:00Z2026-10-02T23:59:59Z1200250.000.000.00USD

Field reference

Main table

ColumnTypeDescription
coupon_idstringAmazon's identifier for the coupon, and the only join key between the two row grains in this file — every ASIN row repeats the coupon_id of the coupon it belongs to.
promotions_api_mapping_idstringA second identifier carried beside coupon_id, tying the coupon to its record in Amazon's Promotions API. The evidence does not establish when the two differ, so treat coupon_id as the join key and this as a cross-reference.
merchant_idstringThe selling account the coupon belongs to.
namestringThe name the coupon was given. Free text, not unique, and not necessarily what a shopper sees — the shopper-facing text is website_message.
website_messagestringThe shopper-facing message carried with the coupon. Amazon's schema calls it the message displayed with the coupon on the product page, so it is customer copy on the detail page rather than an internal label; whether it renders anywhere else, search results included, is not documented.
start_date_timetimestamp_msWhen the coupon campaign starts. This is the column the request window is matched against — a coupon is in the file because it started in the requested range, not because it was running then.
end_date_timetimestamp_msWhen the coupon campaign ends. A row whose end is in the future is a coupon still running or still scheduled, and every figure on it is incomplete by definition.
discount_typestringThe kind of discount the coupon offers, which is what tells you how to read discount_amount. Amazon's schema enumerates two values — PERCENT_OFF_LIST_PRICE and AMOUNT_OFF_LIST_PRICE, a percentage or a fixed amount off the list price. That is the documented vocabulary rather than proof of what a file contains, so still read the set off your own.
discount_amountdecimalThe discount the coupon is configured to give. It is a bare number whose unit depends on discount_type — Amazon's schema documents it as a percentage under PERCENT_OFF_LIST_PRICE and a currency value under AMOUNT_OFF_LIST_PRICE — so it cannot be summed or averaged across rows of different types.
total_discountdecimalThe total amount customers saved across the coupon's redemptions, as opposed to the per-unit discount_amount. Amazon's schema keeps it distinct from budget_spent, which adds the clip and redemption fees the seller paid, so the two are different numbers and budget_spent is the larger — it, not this, is the coupon's cost. Both are gross values that include purchases later returned or cancelled.
clipsint64How many times shoppers clipped the coupon. A clip is interest, not a purchase — the shopper has taken the coupon and may never use it, which is why this is usually much larger than redemptions.
redemptionsint64How many times the coupon was actually used. This is the count that consumes budget and the one behind sales; the ratio of it to clips is the coupon's real conversion signal.
budgetdecimalThe budget configured for the coupon, in the currency named by currency_code.
budget_spentdecimalHow much of budget the coupon has consumed as of this pull. Amazon's schema defines it as the total the seller spent on the coupon including clip and redemption fees, which makes it larger than total_discount, the amount customers saved. It is a gross value that includes purchases later returned or cancelled.
budget_remainingdecimalWhat is left of the budget — the same fact as budget_spent seen from the other end, so do not add the two together and do not add either to budget.
budget_percentage_usedfloat64The share of the budget consumed, derived from budget_spent and budget. Amazon's schema names it a percentage and caps it at 100, and its worked example (0.4 against a budget_spent of 42.29 and a budget of 10000) is the 0-100 reading; but the same sentence defines it as budgetSpent divided by budget, which would be a 0-1 fraction. The document contradicts itself, so check one row against the two money columns before charting it.
salesdecimalSales attributed to the coupon, in the currency named by currency_code. There is no date on it, so it is the coupon's running total as of the pull rather than a figure for a day.
currency_codestringThe currency every money column on the row is denominated in. Carried per row and never converted, so a total that ignores it sums two different currencies as though they were one.

asins

ColumnTypeDescription
coupon_idstringThe coupon this ASIN belongs to — the join back to the coupon table, and the only thing on this table that ties a product to any of the metrics. It repeats once per ASIN the coupon covers, so it is not unique here.
asinstringOne ASIN the coupon applies to. One coupon can carry many, and this table is the only place the file says which products a coupon covered. It carries no metrics of its own — there is no per-ASIN clip, redemption or sales figure in this report.

Use cases

Judging whether a coupon paid for itself. sales against budget_spent and total_discount on the same row is the whole argument, and it is one join away from nothing else — no other Amazon report puts a coupon's cost and its attributed revenue side by side.

Reading the clip-to-redemption gap. clips counts shoppers who took the coupon; redemptions counts those who used it. A coupon clipped thousands of times and redeemed rarely is a discount that got attention and still lost the sale, which is a price or listing problem rather than a promotion problem.

Catching a coupon about to run out of budget. budget_remaining near zero well before end_date_time means the coupon will not survive its own schedule. What Amazon does at that moment is not established, but the warning is in the file days ahead of anyone noticing the coupon stopped working.

Auditing the live coupon calendar. One pull gives every coupon whose campaign starts in the window with its schedule, discount configuration and shopper-facing website_message already populated — which is a review of what is booked, from the same file that later reports how it went.

Building a coupon-to-ASIN map. The ASIN grain is the only place this report says which products a coupon covered. Joined on coupon_id, it is what lets coupon activity be lined up against ASIN-level sales and traffic reporting — which is also the only way to get anything ASIN-level out of a coupon at all.

Limitations and gotchas

The window selects on campaign start, not on activity. This is the mistake that silently loses rows: a long-running coupon that started before the requested range does not appear in it, however much it redeemed during it.

The ASIN grain has no metrics. coupon_id and asin is the entire row. Anyone expecting the per-ASIN breakdown that the promotions performance report provides will not find one here, and a per-ASIN number built by dividing coupon sales across its ASINs is an invention, not a measurement.

There is no date column on the metrics. Nothing in either grain says which day the clips, redemptions or sales happened on, so the figures read as totals for the coupon so far: Amazon states that a coupon still in progress comes back with cumulative data up to the day before the request, and that a coupon which ended a day or more earlier comes back complete. A daily series means diffing successive pulls, not grouping a column.

Scheduled and still-running coupons are in the file with little to show. A coupon whose end_date_time is in the future has incomplete figures by definition, and averaging redemptions or budget_percentage_used across every row without filtering on the schedule drags the average toward zero.

The same report type answers vendors differently. A vendor account's document is campaigns[] with nested coupons, not the flat coupons[] documented here, so a parser shared between account types needs to branch on the shape it received.

discount_amount is not comparable across rows. Its unit depends on discount_type, so summing or averaging it across a file that mixes types produces a number that means nothing.

Do not assume every coupon brings ASIN rows. The schemas were validated against a production US file holding 3 seller coupons over 15 ASINs — a small file, which is also a reason to treat the column list as what that file contained. Join left from the coupon grain.

Money is not converted. Every money column takes its unit from currency_code on the same row, and a pull covering more than one marketplace mixes currencies in the same column.

FAQ

What is one row in the Amazon coupon performance report?

There are two kinds. One row per coupon carries its clips, redemptions, budget, budget spent and attributed sales. One row per ASIN within a coupon carries only the coupon id and the ASIN, joining back to the coupon it belongs to.

What is the difference between clips and redemptions?

Clips count how many shoppers took the coupon; redemptions count how many actually used it. Clips are normally far higher, and the gap between the two is the most useful signal in the file.

Why is a coupon that ran last month missing from my file?

Because the report selects coupons by when their campaign started. A coupon that started earlier and was still running through your range will not be returned. Widen the request to cover when it started.

Does this report break coupon performance down by ASIN?

No. The ASIN rows list which products the coupon applies to and nothing else. There is no per-ASIN clip, redemption, discount or sales figure anywhere in this report.

Is this the same report vendors get?

It is the same report type, GET_COUPON_PERFORMANCE_REPORT, but not the same file. Seller accounts receive a flat list of coupons; vendor accounts receive campaigns with coupons nested inside them. This page documents the third-party seller schema only.

Can I see coupon performance day by day?

Not from a single file. Neither grain has a date column on the metrics, so the numbers are totals for the coupon as of the pull. A day-by-day view has to be built by comparing successive pulls.

Sources

Every researched claim on this page, and the Amazon or Walmart page it came from.

  • history_window — developer-docs.amazon.com/report-type-values-performance — the Seller Coupons Performance Report entry lists among its report behaviors "This report supports start dates up to two years before the current date." The same sentence opens the `sellerCouponReport` schema description.
  • latency — developer-docs.amazon.com/report-type-values-performance — the same entry states "Data for this report is updated on a daily basis, so some fields might not reflect the most up-to-date state of the coupon", that "If a selected coupon is in progress when you request a report, the report will contain cumulative data for the coupon up until the day prior to your report request", and that a report "will contain complete information on a selected coupon if the coupon ended one day or more before the time you requested the report".
  • marketplaces (not-published) — developer-docs.amazon.com/report-type-values-performance — the Seller Coupons Performance Report entry gives "Availability: Sellers" and "Role: Brand Analytics" and carries no "Amazon store availability" line. That line is how Amazon names regions where it publishes them: developer-docs.amazon.com/report-type-values-analytics gives each Brand Analytics report an "Amazon store availability" of "NA (all Amazon stores), EU (Spain, United Kingdom, France, Netherlands, Germany, Italy, Sweden, Turkey, Saudi Arabia, United Arab Emirates, India), FE (all Amazon stores)", and developer-docs.amazon.com/report-type-values-inventory gives two FBA reports "Spain, UK, France, Germany, and Italy Amazon stores". Its absence on the coupon entry is the finding: Amazon does not publish where this report exists, which is what `not-published` records.
  • report_type — developer-docs.amazon.com/report-type-values-performance — the entry titled "Seller Coupons Performance Report" gives its `reportType` value as `GET_COUPON_PERFORMANCE_REPORT`, which is the name used throughout this page.
  • how-to-get-it (availability, role, request-only) — developer-docs.amazon.com/report-type-values-performance — the same entry gives "Availability: Sellers", "Role: Brand Analytics", "Requested/scheduled: This report can only be requested" and "Report output type: JSON". The role is an application-level SP-API role, so it stays in the prose rather than in `requires`.
  • grain (two row grains) — github.com/sellerCouponReport.json — every coupon in `coupons[]` carries its own `asins[]` array, and `AsinDetails` has the single property `asin` ("The asin of the product"). Amazon's document nests the ASIN level inside the coupon and gives it no metrics either, which is the split this page documents as two tables. The headline grain stays `coupon`.
  • fields (promotions_api_mapping_id) — github.com/sellerCouponReport.json — Amazon's published `sellerCouponReport` schema, linked as **Schema** from the report-type reference, describes it as a "Unique identifier to cross-reference promotions with the Selling Partner Promotions API", which is what the description above already says.
  • fields (promotions_api_mapping_id) — developer-docs.amazon.com/sp-api-release-notes — the August 26, 2026 entry adds the field to `GET_COUPON_PERFORMANCE_REPORT` so that "Sellers and vendors can use this field to cross-reference performance report data with promotions managed through the Promotions API", confirming it is a cross-reference rather than a second join key.
  • fields (discount_type, discount_amount) — github.com/sellerCouponReport.json — `discountType` is an enum of `PERCENT_OFF_LIST_PRICE` and `AMOUNT_OFF_LIST_PRICE`, and `discountAmount` "Reflects a percentage when discountType is PERCENT_OFF_LIST_PRICE and a currency value when discountType is AMOUNT_OFF_LIST_PRICE".
  • fields (total_discount, budget_spent, budget_remaining) — github.com/sellerCouponReport.json — `totalDiscount` is the "Total amount saved by customers redeeming the coupon", `budgetSpent` the "Total amount spent by the seller on the coupon, including clip fees and redemption fees", and `budgetRemaining` is "equal to budget minus budgetSpent". `redemptions`, `totalDiscount`, `budgetSpent`, `budgetRemaining` and `sales` each carry the sentence "Represents a gross value, including purchases that were returned or cancelled"; `clips` does not — it is the "Number of times the coupon has been applied on the product page by unique customers".
  • fields (budget_percentage_used) — github.com/sellerCouponReport.json — "Percentage of the allocated budget that has been spent, equal to the budgetSpent divided by budget", with `minimum: 0`, `maximum: 100` and the example 0.4 alongside budgetSpent 42.29 and budget 10000. The cap and the example say 0-100; the wording says a quotient.
  • fields (website_message) — github.com/sellerCouponReport.json — `websiteMessage` is "The message displayed with the coupon on the product page".
  • fields (conflict: marketplace_id, customer_segment) — github.com/sellerCouponReport.json — `CouponDetails` lists `marketplaceId` ("Marketplace the coupon is running in") and `customerSegment` ("Customer segment that the coupon is available to") as required properties; the production file checked has neither. The page follows the file.
  • how-to-get-it (console path to the coupons feature) — sell.amazon.com/seller-promotions — "To add a coupon to a product, hover over Advertising in the Seller Central main menu, then select Coupons" and "You can edit and deactivate coupons as needed from your Coupons dashboard." Amazon does not describe a coupon-performance view there, and the report type itself is documented as "This report can only be requested".