What this report contains
The Seller Performance report is Seller Central's Account Health page handed over as JSON. One document is one marketplace, holding a top-level list of account statuses and a list of performance metrics whose entries carry roughly twenty named metric objects of a few recurring shapes. Trellis lands those as three tables mirroring the sections the page itself draws — customer service performance, policy compliance and shipping performance — so a table can be reconciled against the screen it restates.
One row is one metric, for one marketplace, over that metric's own measurement window. The window is in reporting_date_from and reporting_date_to, and it is Amazon's rolling trailing window for that metric, different from row to row in the same file. It is not a range you asked for, and nothing here is safe to partition by day.
The tables are long rather than wide: metric says which metric a row is, and only the columns belonging to that metric's shape carry values. A metric a marketplace does not have simply emits no row — the US and DE documents carry unitOnTimeDeliveryRate and the CA and BR ones do not, and that shows up as absent rows, not as a half-null column. Late shipment rate is the one metric that arrives as a list of windows rather than a single number, so it lands as several rows that differ only in their window; the figure the Account Health page headlines is the 30-day one.
Every rate and every target in the file is a measurement rather than money — rate, target_value and ahr_score are float, the counts are integers, and nothing here is a currency amount. The targets travel with the rows, so a check can compare rate against the target_value in the same row instead of carrying a number of its own around in code.
How to get it
Through the Selling Partner API, this is the Reports API report type GET_V2_SELLER_PERFORMANCE_REPORT, which answers a JSON document rather than a flat file. You ask for it with a marketplace and nothing else: Trellis requests it bare, with no date range and no report options at all.
That bareness is the trap, and it is one Trellis fell into first. The request used to send ShowSalesChannel — an option that belongs to the order reports — together with a dataStartTime and dataEndTime both set to today. That is a zero-width window asked of a report that measures fixed trailing windows of its own. There is no date range to set here, because every window in the answer is Amazon's choice, not yours.
One document is one marketplace. Every file fawcett has validated carried exactly the requested marketplace's entries in both of its lists, so a multi-marketplace picture is several pulls, not one. The extractors still read each entry's own reported_marketplace_id instead of stamping the requested one on, which means a file that ever did span marketplaces would land visibly rather than quietly mislabelled — and it means your code should read that column too.
In Seller Central, the same numbers are the Account Health page, which sits under the Performance tab — and which the top menu links to directly, since it shows the account health status.
Sample rows
Illustrative values, not data from a real account. Shown to give the shape of the file.
| reported_marketplace_id | metric | reporting_date_from | reporting_date_to | status | target_value | target_condition | rate | order_count | late_shipment_count |
|---|---|---|---|---|---|---|---|---|---|
| ATVPDKIKX0DER | lateShipmentRate | 2026-08-11T00:00:00Z | 2026-09-10T00:00:00Z | GOOD | 0.0500 | LESS_THAN | 0.0120 | 2500 | 30 |
| ATVPDKIKX0DER | unitOnTimeDeliveryRate | 2026-08-11T00:00:00Z | 2026-09-10T00:00:00Z | GOOD | 0.9000 | GREATER_THAN | 0.9600 | ||
| A1PA6795UKMFR9 | lateShipmentRate | 2026-08-11T00:00:00Z | 2026-09-10T00:00:00Z | GOOD | 0.0500 | LESS_THAN | 0.0240 | 1250 | 30 |
| A2EUQ1WTGCTBG2 | lateShipmentRate | 2026-08-11T00:00:00Z | 2026-09-10T00:00:00Z | GOOD | 0.0500 | LESS_THAN | 0.0000 | 400 | 0 |
Field reference
customer_service
| Column | Type | Description |
|---|---|---|
reported_marketplace_id | string | Customer service table. The marketplace the metric entry names, carried from the entry rather than from the request, exactly as in the other two tables. |
metric | string | Customer service table. Which customer service metric the row restates. Amazon's report-type reference names these metric objects as invoiceDefectRate and orderDefectRate, the second of which is split into afn and mfn entries; which of them a given file carries is not established here, and only lateShipmentRate and unitOnTimeDeliveryRate are observed anywhere in the evidence. A metric the marketplace does not carry produces no row at all. |
reporting_date_from | timestamp_ms | Customer service table. The start of the metric's measurement window — Amazon's own trailing window for that metric, not a range you asked for. |
reporting_date_to | timestamp_ms | Customer service table. The end of the metric's measurement window. Different metrics in the same file end their windows on different dates. |
status | string | Customer service table. Amazon's verdict on this metric against its target, on the same GOOD, BAD and NONE vocabulary as the other two tables. |
target_value | float64 | Customer service table. The target Amazon ships with the row, for this metric and this window. Compare the row's own rate against it rather than carrying a number around in code. Never money. |
target_condition | string | Customer service table. Which side of target_value counts as meeting it — GREATER_THAN, LESS_THAN or EQUALS in Amazon's schema. The direction matters, because some metrics pass by being low and others by being high. |
fulfillment_type | string | Customer service table. The fulfilment channel the row covers, on the metrics Amazon splits by channel — Amazon splits the order defect rate into afn and mfn objects and writes those two values. Which of them a real file carries is not established here, so treat it as a grouping key rather than a filter with known contents. |
order_count | int64 | Customer service table. Orders in the window, on the metrics measured over orders. |
rate | float64 | Customer service table. The metric's rate for its window. Never money, and the scale is not established here — compare it against the target_value in the same row rather than against a number of your own. |
order_with_defects_count | int64 | Customer service table. Orders in the window counted as carrying a defect. This counts orders, while the three component columns below count events, so they do not necessarily add up to it. |
order_with_defects_status | string | Customer service table. Amazon's status for the orders-with-defects component of the row. |
claims_count | int64 | Customer service table. Claims counted against the account in the window. |
claims_status | string | Customer service table. Amazon's status for the claims component of the row. |
chargebacks_count | int64 | Customer service table. Chargebacks counted against the account in the window. |
chargebacks_status | string | Customer service table. Amazon's status for the chargebacks component of the row. |
negative_feedback_count | int64 | Customer service table. Negative feedback entries counted in the window. Feedback itself, entry by entry, is a different report; this is only the count that feeds this metric. |
negative_feedback_status | string | Customer service table. Amazon's status for the negative feedback component of the row. |
invoice_defect_count | int64 | Customer service table. Invoice defects counted in the window. The two columns that follow name kinds of invoice problem, but nothing in the evidence establishes that they sum to this one. |
invoice_defect_status | string | Customer service table. Amazon's status for the invoice defect component of the row. |
missing_invoice_count | int64 | Customer service table. Invoices counted as missing in the window. |
missing_invoice_status | string | Customer service table. Amazon's status for the missing invoice component of the row. |
late_invoice_count | int64 | Customer service table. Invoices counted as late in the window. |
late_invoice_status | string | Customer service table. Amazon's status for the late invoice component of the row. |
policy_compliance
| Column | Type | Description |
|---|---|---|
reported_marketplace_id | string | Policy compliance table. The marketplace the metric entry names, carried from the entry rather than from the request, exactly as in the other two tables. |
metric | string | Policy compliance table. Which policy metric the row restates. Amazon's report-type reference names these metric objects as listingPolicyViolations, the product authenticity, condition and safety complaint metrics, receivedIntellectualPropertyComplaints, suspectedIntellectualPropertyViolations, restrictedProductPolicyViolations, foodAndProductSafetyIssues, customerProductReviewsPolicyViolations and otherPolicyViolations, alongside accountHealthRating; which of them a given file carries is not established here. A metric the marketplace does not carry produces no row at all. |
reporting_date_from | timestamp_ms | Policy compliance table. The start of the metric's measurement window — Amazon's own trailing window for that metric, which on the policy metrics is typically far longer than the shipping ones. |
reporting_date_to | timestamp_ms | Policy compliance table. The end of the metric's measurement window. |
status | string | Policy compliance table. Amazon's verdict on this metric against its target, on the same GOOD, BAD and NONE vocabulary as the other two tables. |
target_value | float64 | Policy compliance table. The target Amazon ships with the row, for this metric and this window. Compare the row's own count against it rather than carrying a number around in code. Never money. |
target_condition | string | Policy compliance table. Which side of target_value counts as meeting it — GREATER_THAN, LESS_THAN or EQUALS in Amazon's schema. |
defects_count | int64 | Policy compliance table. The policy defects counted in the metric's window. |
ahr_score | float64 | Policy compliance table. The Account Health Rating score Amazon reports for the marketplace. The scale it is on, and what any particular value means for an account, are not established by the evidence behind this page — read it against target_value and status in the same row. |
shipping
| Column | Type | Description |
|---|---|---|
reported_marketplace_id | string | Shipping table. The marketplace the metric entry names, carried from the entry rather than from the request, exactly as in the other two tables. |
metric | string | Shipping table. Which shipping metric the row restates. Two values are observed in the evidence, lateShipmentRate and unitOnTimeDeliveryRate; Amazon's report-type reference names the shipping metric objects as lateShipmentRate, onTimeDeliveryRate, unitOnTimeDeliveryRate, validTrackingRate and preFulfillmentCancellationRate, which is what the values are rather than which ones a given file carries. A metric the marketplace does not carry produces no row at all. |
reporting_date_from | timestamp_ms | Shipping table. The start of the metric's measurement window. Late shipment rate arrives as a list of windows rather than a single figure, so several rows of the same metric differ only here and in reporting_date_to. |
reporting_date_to | timestamp_ms | Shipping table. The end of the metric's measurement window. The headline late shipment rate on the Account Health page is the 30-day entry of that list. |
status | string | Shipping table. Amazon's verdict on this shipping metric against its target, on the same GOOD, BAD and NONE vocabulary as the other two tables. |
target_value | float64 | Shipping table. The target Amazon ships with the row, for this metric and this window. Compare the row's own rate against it rather than carrying a number around in code. Never money. |
target_condition | string | Shipping table. Which side of target_value counts as meeting it — GREATER_THAN, LESS_THAN or EQUALS in Amazon's schema. The direction matters here, because some shipping metrics pass by being low and others by being high. |
rate | float64 | Shipping table. The metric's rate for its window. Never money, and the scale is not established here — compare it against the target_value in the same row rather than against a number of your own. |
order_count | int64 | Shipping table. Orders in the window, on the metrics measured over orders. |
late_shipment_count | int64 | Shipping table. Shipments counted as late in the window — the count behind the late shipment rate rows. |
cancellation_count | int64 | Shipping table. Cancellations counted in the window. |
shipment_count | int64 | Shipping table. Shipments in the window, on the metrics measured over shipments rather than orders. |
valid_tracking_count | int64 | Shipping table. The count of valid tracking behind the valid tracking rate: Amazon's reference pairs validTrackingCount with shipmentCount on validTrackingRate rows. It is not the same column as shipment_count_with_valid_tracking, which belongs to the on-time delivery rate. |
shipment_count_with_valid_tracking | int64 | Shipping table. Shipments in the window carrying valid tracking, as the denominator of the on-time delivery rate: Amazon's reference pairs shipmentCountWithValidTracking with onTimeDeliveryCount on onTimeDeliveryRate rows, where valid_tracking_count belongs to validTrackingRate rows instead. |
on_time_delivery_count | int64 | Shipping table. Deliveries counted as on time in the window, measured against shipment_count_with_valid_tracking rather than shipment_count — that is the pair Amazon's reference gives the on-time delivery rate. |
total_unit_count | int64 | Shipping table. Units in the window — the denominator of the unit-grain delivery metric, which counts units rather than shipments. |
unit_on_time_delivery_count | int64 | Shipping table. Units delivered on time in the window. This pair only appears where the marketplace carries the unit on-time delivery metric at all: the US and DE documents did, the CA and BR ones did not. |
Use cases
Reconciling a dashboard against the Account Health screen. The three tables were drawn to mirror the page's own three sections, so a customer service number that does not match the screen is a bug in one row, not a modelling argument. metric, reporting_date_from and reporting_date_to identify exactly which figure on the page a row is restating.
Watching a metric move without a time series. The file has no history in it — each pull is a snapshot. Keeping the snapshots and comparing rate for the same metric across them is the only way to see a trend, and it is worth starting before you need it, because a snapshot you did not keep is gone.
Alerting without hardcoding thresholds. target_value and target_condition ride along with each row, so a check can ask whether rate is on the right side of the target Amazon shipped today rather than the one someone typed into a config last year. status carries Amazon's own verdict on the same comparison.
Splitting late shipment rate by window. Because late shipment rate arrives as a list of windows, the shipping table holds several rows for it. Comparing the shorter window against the 30-day one is how you tell a metric that is recovering from one that is still sliding, before the headline figure catches up.
Comparing marketplaces honestly. Pulls from different marketplaces land in the same tables, each row naming its own reported_marketplace_id. Bear in mind the metric set differs — a marketplace with no unitOnTimeDeliveryRate row does not have a worse delivery record, it has a different metric set.
Separating the invoice metrics from the order ones. invoice_defect_count, missing_invoice_count and late_invoice_count sit beside the order-based components in the same table but answer a different operational question, usually owned by a different team than the one watching shipments.
Limitations and gotchas
Nothing here is safe to day-partition on. Every timestamp in the file is a metric's own rolling measurement window, not a requested data range, and the windows differ per metric and per row. Treating reporting_date_to as "the day this data is about" silently invents a time series that does not exist. The report is a snapshot, and the date that identifies a pull is the snapshot date stamped on it.
A missing row is not a zero. Metrics that a marketplace does not carry emit no row at all. Code that reads a metric's rate by looking up a row and defaulting to 0 when it finds none will report a perfect score for a metric that was never measured.
One file is one marketplace. Do not stamp rows with the marketplace you requested — read reported_marketplace_id. That is the column the extractors carry precisely so a file that ever spans marketplaces is visible rather than silently relabelled.
The warning states are not in the tables. The document has a warningStates list that was empty in the production files fawcett has observed, so its element shape has never been seen and it is deliberately not profiled. Because the JSON extractors write only profiled fields, a populated element would be invisible — it would not land anywhere and nothing would complain. If you are looking for a warnings table, that is why there is not one; check a real file before assuming there are no warnings.
Do not sum a column across metrics. The tables are long, and rate, order_count and the count columns mean whatever the row's metric says they mean. Summing order_count over a table adds together denominators from different metrics measured over different windows.
The targets are Amazon's, and the consequences are not in the file. target_value, status and ahr_score say how a metric stands against the threshold Amazon shipped with it. What Amazon does at any given value — and what counts as at risk — is policy, and this file does not carry it. Read the account's own Account Health page and Amazon's policy pages for that.
Do not assume the component counts add up to the headline one. order_with_defects_count counts orders while the claim, chargeback and negative feedback columns count events, and nothing in the evidence settles the arithmetic between them — in Amazon's own schema example those three components together exceed the orders-with-defects count. The invoice columns may run the other way: that schema describes the invoice defect count as the total "due to missing invoice and late invoice", and its example does add up exactly. A document's example is not evidence about a real file, so check one before a report relies on either.
Check the scale before anything compares against a number of its own. Amazon's report schema writes every rate in its examples as a decimal below 1, and then describes the value as a rate "in percentage". The document contradicts itself, so this page does not settle whether rate and target_value arrive as fractions or as percentages. Comparing rate against the target_value in the same row is safe either way, because both come out of the same file; a comparison against a hardcoded figure is not.
The example rows on this page are illustrative. The marketplace ids in them are real, but every number beside them — including target_value — was made up to show the shape of a row. Amazon ships the target with each row for exactly this reason: read it from your own file, never off this page.
FAQ
GET_V2_SELLER_PERFORMANCE_REPORT. It answers a JSON document rather than a flat file, and it takes no date range — every window inside it is a trailing window Amazon chose for that metric.
It is that page as a file. The document mirrors the page's own three sections, which is why it lands as three tables: customer service performance, policy compliance and shipping performance.
Because the metric set varies by marketplace. The US and DE documents carried unitOnTimeDeliveryRate and the CA and BR ones did not, and a metric a marketplace does not carry emits no row rather than an empty one.
No. There is no date range to request and no history inside the file, so each pull is a snapshot of where the metrics stood. A history is something you build by keeping every pull.
Every validated document carried exactly the requested marketplace's entries, so several marketplaces means several pulls. Read the reported marketplace id column on each row rather than assuming the marketplace you asked for.
It gives you Amazon's own status and target for each metric, plus the account health rating score, which is what the Account Health page compares. What Amazon does at a given value is policy rather than data, and it is not in this file.