What this report contains
One row is a pairing: an ASIN of yours, an ASIN that was bought in the same customer order, the rank of that pairing among the ASINs most often bought with yours, and the share of qualifying orders the pairing accounts for. An ASIN of yours therefore occupies several rows — one per partner ASIN — ordered by purchased_with_rank, and the six columns are the entire file.
The grain is listed as one row per ASIN, and that names the anchor rather than the whole row. The row's real key is the pair (asin, purchased_with_asin): count rows and you are counting pairings, count distinct asin values and you are counting your own products. Anything that expects one row per ASIN — a join, a GROUP BY left off, a row count read as a product count — will multiply by the length of the ranked list.
The asymmetry between the two ASIN columns is the report. asin is always in the selling partner's catalogue. purchased_with_asin need not be, and the interesting answers are usually the ones you do not already sell. What the file gives you about that partner ASIN is an identifier, a rank and a share — no title, no brand, no price, no seller, no order count — so anything else about it comes from a catalogue lookup you do yourself.
start_date and end_date bound the period the counting happened over. Nothing in the row is dated more finely, and there is no marketplace column: the marketplace is a property of the request that produced the file, not of the row.
How to get it
Amazon states availability for this report type as sellers and vendors who hold the Brand Analytics Selling Partner API role and are registered in Brand Registry, so this is not a seller-only report even though it is filed here under Seller Central. The gates Amazon publishes for Brand Analytics on the seller side are a Professional selling account and Brand Representative status on a brand enrolled in Brand Registry. The Brand Analytics role is a different kind of thing — a permission on the application you authorise, not an entitlement you hold as a seller — which is why it is named here rather than among this report's requirements.
Through the Selling Partner API the report type is GET_BRAND_ANALYTICS_MARKET_BASKET_REPORT, and the document that comes back is JSON rather than a flat file: a reportSpecification echoing the request that was made, and a single dataByAsin collection holding the rows. Flattening that collection gives the table of pairings.
The trap is the file format. A tab-separated parser aimed at this document produces a file with the right columns and nothing in them, so if a first pull comes back all nulls, a JSON document was read as a flat file.
There is no publishing clock to wait on. Amazon's reference says this report can only be requested and never scheduled, and every request names a reportPeriod of DAY, WEEK, MONTH or QUARTER, with dataStartTime and dataEndTime having to fall on valid first and last days of that period — a WEEK request has to start on a Sunday and end on a Saturday. The daily cadence is the period a row covers, not a rate at which anything is refreshed: on a DAY request start_date and end_date are the same day. Amazon publishes no refresh statement for this report.
The second trap is the marketplace. Amazon rejects a request naming more than one marketplace for this report type outright — not a truncated answer, a refused request — so one request per marketplace is a hard requirement here, and combining marketplaces is something you do after the fact.
In Seller Central, the same analysis lives at Brands → Brand Analytics from the main menu, under the Customer Behavior Analytics drop-down, as the Market Basket Analysis dashboard. That is the only console path Amazon publishes: a vendor holding the Brand Analytics role pulls the same report type through the API, and where the equivalent dashboard sits in Vendor Central is not written down anywhere outside the login. Either way the dashboard is not the same artefact as the report — Amazon describes it as showing the top three products most frequently bought with yours, where the API answers a ranked list you pull one marketplace at a time.
Sample rows
Illustrative values, not data from a real account. Shown to give the shape of the file.
| start_date | end_date | asin | purchased_with_asin | purchased_with_rank | combination_pct |
|---|---|---|---|---|---|
| 2026-09-14 | 2026-09-14 | B0EXAMPLE01 | B0EXAMPLE77 | 1 | 0.1240 |
| 2026-09-14 | 2026-09-14 | B0EXAMPLE01 | B0EXAMPLE42 | 2 | 0.0710 |
| 2026-09-14 | 2026-09-14 | B0EXAMPLE01 | B0EXAMPLE05 | 3 | 0.0480 |
| 2026-09-14 | 2026-09-14 | B0EXAMPLE02 | B0EXAMPLE31 | 1 | 0.0960 |
| 2026-09-14 | 2026-09-14 | B0EXAMPLE02 | B0EXAMPLE01 | 2 | 0.0520 |
Field reference
| Column | Type | Description |
|---|---|---|
start_date | timestamp_ms | The first day of the reporting period the row covers. Together with end_date it bounds the orders the pairing was counted over; nothing in the row is dated more precisely than this period. |
end_date | timestamp_ms | The last day of the reporting period the row covers. On a DAY request it is the same day as start_date; a wider reportPeriod makes the row a range total rather than a day. |
asin | string | One of the selling partner's own ASINs — the anchor of the pairing. This column is always something in your catalogue, and it repeats across every row that ranks a partner ASIN against it. |
purchased_with_asin | string | The ASIN bought in the same customer order as asin. It may or may not be in your own catalogue — that asymmetry is the point of the report — so joining it to your listings will legitimately miss. |
purchased_with_rank | int64 | Where this pairing sits among the ASINs most often bought with asin, with the strongest pairing first. It orders the rows within one asin, and is only comparable inside that group. |
combination_pct | float64 | Amazon's share for this pairing, as a fraction between 0 and 1 — its published schema bounds it at a minimum of 0 and a maximum of 1, with examples like 0.4342, despite the name. It is the share of orders containing both this ASIN and purchased_with_asin, against all orders that held this ASIN and at least one other item. Not comparable across anchor ASINs, since each has its own denominator. |
Use cases
Deciding what to bundle. Take the pairings where purchased_with_asin is already in your catalogue and purchased_with_rank is 1 or 2, and you have a shortlist of combinations customers are already assembling themselves, ordered by combination_pct.
Finding the gap in your own catalogue. The partner ASINs that do not resolve against your listings are the point of the report: they are identifiers of things bought alongside yours that you do not currently offer. The file will not tell you what they are — that is a catalogue lookup — but it tells you which ones to look up first.
Ordering a cross-sell module. purchased_with_rank gives a defensible order for anything that has to show "goes with this" in a fixed number of slots, rather than ordering by whatever you happen to want to sell.
Watching a pairing move. Because each row carries its own period, successive pulls let you track one pairing's combination_pct and its rank over time. A pairing climbing the rank list is a different signal from one whose share rose while everything else rose too.
Segmenting the anchor ASINs. Grouping rows by asin shows which of your products sit in large baskets at all. An ASIN whose top pairing has a low combination_pct is bought on its own more often than one whose top pairing is large, which is a different merchandising problem.
Limitations and gotchas
The schema is a contract, not a file. These six columns are the ones Amazon's published sellingPartnerMarketBasketAnalysisReport.json in amzn/selling-partner-api-models declares, and it pins all six as required. They have not been settled against a production pull. The thing to watch on a first live run is schema drift: a field in the answer that this schema does not carry will be dropped silently by anything built to the schema.
It is a ranked list, not a whole basket. The rows are the ASINs most often bought with yours, so shares will not sum to anything meaningful and a pairing's absence is not evidence that the combination never happened — only that it did not make the list.
One marketplace per file, and the file does not say which. Since Amazon refuses a multi-marketplace request, every file is single-marketplace by construction, and there is no marketplace column in the row. If you union pulls together you have to carry the marketplace yourself or the rows become unattributable.
purchased_with_asin will not join. Code that inner-joins the partner ASIN to your own catalogue silently discards precisely the rows the report exists to surface. Use an outer join and treat the misses as results.
It is a co-occurrence count, not a reason. Two ASINs in one order is what the row records. The file carries nothing about who sells the partner ASIN, what it costs, whether it is a substitute or an accessory, or whether either purchase influenced the other.
Do not compare combination_pct across anchors without care. The denominator is per anchor: Amazon's schema counts the orders that contained that asin alongside at least one other different item. So a 0.10 pairing on a low-volume ASIN and a 0.10 pairing on a high-volume one stand on very different numbers of orders — and the file does not give you those order counts.
FAQ
One pairing. A row names one of your ASINs, one ASIN that was bought in the same customer order, the rank of that pairing among the ASINs most often bought with yours, and the share of qualifying orders it accounts for. One of your ASINs appears on as many rows as it has ranked pairings.
Not necessarily. The anchor ASIN is always in your catalogue; the purchased-with ASIN may be anything a customer put in the same order. That asymmetry is the value of the report, so code that assumes the partner ASIN is yours will drop the most useful rows.
No. Amazon rejects a request naming more than one marketplace for this report type outright, so you issue one request per marketplace and combine the results afterwards. The rows themselves carry no marketplace column.
Amazon's published schema defines it as the share of customer orders containing both your product and the purchased-with ASIN, measured against every customer order that contained your product and at least one other different item. That schema bounds the number between 0 and 1 and gives 0.028 and 0.4342 as examples, so it arrives as a fraction rather than out of 100 despite the column name. That is Amazon's published contract for the field, and it has the same standing as every other column here: declared, not yet read off a production file.
No. It gives you the ASIN, its rank and its share. Title, brand, price, category and who sells it all come from a separate catalogue lookup.
No — they are two different Brand Analytics reports that happen to share plumbing. Both arrive as JSON with one rows collection, but repeat purchase measures buying again over time while market basket measures what shared an order.
Sources
Every researched claim on this page, and the Amazon or Walmart page it came from.
- marketplaces — developer-docs.amazon.com/report-type-values-analytics — the Market Basket Analysis Report entry (reportType GET_BRAND_ANALYTICS_MARKET_BASKET_REPORT) gives Amazon store availability as NA (all Amazon stores), EU (Spain, United Kingdom, France, Netherlands, Germany, Italy, Sweden, Turkey, Saudi Arabia, United Arab Emirates, India), FE (all Amazon stores). The two all-stores phrases were expanded to the marketplace terms this directory lists under those regions — us, ca, mx, br and jp, au, sg — and the EU stores Amazon does not name (pl, be, ie, eg, za) were left out. The same page carries the sibling repeat purchase report, which holds the identical availability line and then enumerates its stores outright as US, MX, CA, BR, ES, UK, FR, NL, DE, IT, SE, TR, SA, AE, IN, SG, AU and JP: the same 18 stores this list holds, which is the corroboration for the expansion.
- requires — developer-docs.amazon.com/report-type-values-analytics — Availability for this report type is stated as sellers and vendors who have the Brand Analytics Selling Partner API role and are registered in Amazon Brand Registry.
- requires — sell.amazon.com/amazon-brand-analytics — under "Who can use Brand Analytics?": to access Brand Analytics you need a Professional selling account, and you also need to be a Brand Representative for a brand enrolled in Amazon Brand Registry. This is why the field carries professional-plan as well as brand-registry. Amazon states it of Brand Analytics as a Seller Central tool, so it is the seller-side gate; the Brand Analytics Selling Partner API role in the report-type reference is application-level and is named in the body rather than in requires.
- seller_type — developer-docs.amazon.com/report-type-values-analytics — Availability for the Market Basket Analysis Report reads "Sellers and vendors who have the Brand Analytics Selling Partner API role and are registered in Amazon Brand Registry", which is why seller_type is both even though the page sits under the Seller Central source. The seller-facing pages that give the console path (sell.amazon.com) speak only of Seller Central, and Vendor Central's help is behind a login, so only the Seller Central console path is stated and no vendor path is claimed.
- history_window — sell.amazon.com/brand-analytics — data in Brand Analytics usually goes back three years and is generally available within three days, with quarter-end data typically available within one week. Amazon says this of the Brand Analytics dashboards, not of the SP-API report type.
- latency — developer-docs.amazon.com/report-type-values-analytics — the entry states that this report can only be requested, and carries no publication or refresh statement, where the rapid retail analytics entries on the same page state theirs (for example traffic data available approximately 65 to 115 minutes after the close of an hour, lookback window 30 days).
- grain — github.com/sellingPartnerMarketBasketAnalysisReport.json — the schema describes purchasedWithRank as the relative frequency of the purchasedWithAsin and the asin having been purchased together, with rank 1 the most common, so one anchor ASIN carries a ranked list of rows rather than a single row. The grain term stays `asin` for the anchor, the closest single term the directory has, and the body states the row is really one per (asin, purchased_with_asin) pairing.
- cadence — developer-docs.amazon.com/report-type-values-analytics — the required reportOptions value reportPeriod takes DAY, WEEK, MONTH and QUARTER, and requests can span multiple reporting periods.
- combination_pct — github.com/sellingPartnerMarketBasketAnalysisReport.json — the schema the reference links for this report type types combinationPct as number with minimum 0 and maximum 1, examples 0.4342 and 0.0155, and describes it as the percentage of customer orders that contain both the selling partner's product and the purchasedWithAsin in comparison to the total number of customer orders that contained at least two different items including the selling partner's product.
- console path — sell.amazon.com/amazon-brand-analytics — access Brand Analytics from the Seller Central main menu by selecting Brands, then Brand Analytics.
- console path — sell.amazon.com/brand-analytics — the Market Basket Analysis dashboard is located under the Customer Behavior Analytics drop-down menu on the Brand Analytics page, and displays the top three products customers most frequently purchase with the products you offer.
- one marketplace per request — github.com/sellingPartnerMarketBasketAnalysisReport.json — marketplaceIds states that this report type supports only one marketplaceId per report and that specifying multiple marketplaces results in a fatal error and fails to generate the report.