-
Monthly Performance Report Max now runs on Vendor Central accounts, and on a
whole brand at once. Until now the figure battery behind the brief only knew
Seller Central tables, so a vendor account came back empty and the report had to
be built by hand. mixshift report battery now takes one seller id or several
(repeat --seller-id, or --brand <slug> to take every account in brand context that
is not marked inactive, since a winding-down account still sold this month), works out
each account's channel from your MixShift account row, runs
the right battery for it (vendor sales, glance views, vendor inventory and
procurable out-of-stock for Vendor Central), lines every account up on the same
day count, and rolls up what can honestly be added (ordered revenue, units, ad
spend and sales) within one marketplace currency. Traffic and conversion stay per
channel because sessions and glance views are not the same thing, and a brand
that sells in two currencies gets two roll-ups rather than a made-up total. Ad
figures come from the daily campaign table on every channel. New flags for Vendor
Central: --revenue-basis ordered|shipped, --oos-rate-threshold, and --attribution
to choose the ad attribution columns.
-
Monthly Performance Report Max ad sales and ad orders now match Report Center by
default, and every brief says which attribution basis it used. The figure battery
behind the brief summed click-attributed sales (14 day on Vendor Central, 7 day for
Sponsored Products on Seller Central), which reads about 2% below the Ad Sales and Ad
Orders figures in Report Center on an account that runs view-based Sponsored Display, and
the brief did not say why. The battery now offers a legacy_sales basis that sums
Amazon's reported Sales and Orders per campaign, the same figures Report Center prints,
and uses it unless mixshift report battery --attribution all_14 or sc_default asks for
the click-only reading. The figures document records the basis applied with a
plain-language sentence, and the brief quotes it once as a footnote under the first ad
figure and again in its method notes, so a reader comparing the two reports knows
whether they agree by construction or differ by view-attributed sales.
-
Monthly Performance Report Max pulls its warehouse figures through the
MixShift service. The figure battery behind the brief (data-aligned windows,
dark-day normalization, the settled-window check, movers and reconciliation,
out-of-stock days, page-view-weighted Buy Box by item) now runs inside the
service and is fetched with one command, mixshift report battery, instead of a
script bundled with the skill. Same figures, same JSON, same per-section
degrade-and-label behavior; nothing changes in the brief. The call needs the
token-based sign-in (mixshift auth login, or a service credential for
unattended runs). The annotated query reference that shipped with the skill has
moved alongside the battery; the skill keeps its six traps in plain language.
-
Monthly Performance Report Max checks more of what used to slip past review. The
figure battery now says whether added traffic converted and whether it was bought
(incremental conversion and the paid share of the visitor gain), serves daily ad spend by
campaign type so an open-window ACOS prints its settled projection the same way every
month, and tells a data-lag gap apart from a coverage gap. The prose lint flags a
superlative with no figure behind it, a percentage followed by "less" or "off", a points
value with no basis, an instruction addressed to nobody, a literal %%, a currency
figure missing its thousands separators, a title or footer carrying another
marketplace's label, and a bottom line thinner than the executive read; the brand's own
reporting.voice_lint phrases are now enforced by the same lint. Grading last month's
commitments is a required section after the first run. A structural event dated to a
month (2026-04) now syncs to the timeline as the first (or last) day of that month
instead of failing silently, and context sync names each failed event and the reason.
-
Amazon Marketing Cloud can now answer what a customer is worth, not only
what an ad did. Ask for retail purchases, lifetime value by ASIN, purchase
cohorts or repeat-purchase analysis and the AMC skill knows the dataset those
questions need. Amazon Retail Purchases is a paid AMC dataset covering every
Amazon store purchase of your products across up to five years, whether or not
an ad was involved, which is what makes long-window customer questions
possible at all: the free AMC tables only see purchases Amazon could tie to an
ad, over about thirteen months. The skill now carries the table's full column
list, the six column traps that quietly produce a wrong answer instead of an
error (its date column is not the one the other AMC tables use, there is no
total-sales column, prices are in the marketplace's own currency and Amazon
will not convert them, its month column is a number from one to twelve rather
than a year-and-month, one order spans many rows so counting rows overcounts
orders, and item titles drift over a long window), how the numbers line up against
the Seller Central and Vendor Central reports a client already has, and three
query recipes, each labelled with how far it has actually been proven: a
customer-value segmentation, revenue per buyer by ASIN, and acquisition
cohorts. All three have since been run to completion against a live subscribed
account, which is covered in its own note below. Every column and its
privacy floor was checked against a real subscribed account rather than taken
from documentation, and asking Amazon for a table's schema now returns those
floors directly, so the guidance can be confirmed rather than trusted.
-
Every Amazon Retail Purchases recipe has now been run for real, and the
lifetime-value questions are easier to find. The revenue-per-buyer and
acquisition-cohort queries previously shipped marked as compiling but with
their numbers unchecked. Both have now been run end to end against a live
subscribed account: revenue per buyer lands within 0.78% of the same window's
Business Reports revenue, and the cohort month arithmetic is correct across a
year boundary. Running them also turned up a trap now documented: submitting a
window in a local timezone reaches a few hours into the next UTC day, which
shows up as a tiny extra month sitting beside full ones and reads as a
collapse in new customers when it is nothing of the kind. Asking for help now
also surfaces these questions in the words people use for them, so you no
longer have to know that Amazon Marketing Cloud is the thing that answers
"what is a customer worth after their first order".
-
AMC now says whether a paid dataset is actually switched on before you
query it. A query against a dataset the advertiser is not subscribed to
fails when Amazon compiles it, and the message never mentions the
subscription, so it reads as a broken query and sends you off correcting SQL
that was never wrong. Asking about an instance now returns which paid datasets
are active on it. Because these subscriptions are time-limited, this is also
the first thing to check when a query that worked last month stops working.
-
AMC schema lookups no longer make you read the whole catalog to find one
table. Listing every data source in an instance returns each table with all
of its columns, across more pages than the default request returns, so it was
both large and easy to read as truncated ("that table does not exist" when it
simply had not been paged to yet). You can now ask for a single named table
and get just its columns back. The AMC guidance also now states the clean-room
rule that rejects more first queries than any SQL mistake does: shopper-level
identifiers can be grouped and joined inside a query, but what comes back has
to be aggregated, and a result that arrives empty may be Amazon's privacy
floor rather than an absence of sales.
-
Sponsored Brands bid and state changes now say what Amazon actually
requires, and a bad one is caught before it reaches your account. Updating
an SB keyword, product target or negative target needs the ad group's id
alongside the entity's own id. That was missing from the guidance, so a
change could look correct, preview cleanly, and then be rejected by Amazon
only once it was already being applied to a live account. The guidance now
carries the requirement (and the correct field name for negative targets,
which Amazon calls targetId), and a missing required field is now caught in
the preview with the fix named, so nothing is sent. This also fixes SB
keyword and target ids being handed back a few digits off, which made bid
changes on some of the highest-performing keywords fail as not found.
-
Amazon failures now report what actually went wrong instead of "unknown".
When a call to Amazon failed, some failures arrived labelled unknown even
though MixShift knew exactly what had happened: a retired report type, an
expired listings change set, a schema that moved, writes not enabled for your
account. The message you read was already correct; the machine-readable
kind in --json was not, so scripts and agents branching on it could not
tell a permanent problem from a temporary one and would retry things that
were never going to succeed. Fourteen failure kinds are now reported
accurately, and their exit codes are unchanged (they keep exit code 1, exactly
as before), so nothing you have scripted around them behaves differently.
Two small things alongside. If the service ever sends a kind this version does
not recognise, --json now carries the raw value as unrecognized_kind so it
can be reported. And on that same rare path, the exit code now follows the
HTTP status where the status is unambiguous (a 429 is treated as throttled
and backed off rather than aborted; a 400 is bad_request only when Amazon's
own error code is present) instead of always being 1.
-
MixShift Intelligence failures are reported more accurately too. Two more
service kinds are recognised, and a credential that lacks the Intelligence
scope now reports exactly that (insufficient_scope, exit code 12) instead
of being mistaken for an account with Intelligence switched off. A gateway
rate limit reports as throttled (exit code 8). On the rare path where the
service sends a kind this version does not recognise, the exit code follows
the HTTP status where it is unambiguous (202 not ready, 400 bad params, 429
busy) instead of always being 1.
-
The data catalog now warns that DSP conversions can sit on a creative-less
row. Amazon reports some DSP conversions against an "Unallocated" creative
that has no cost and no impressions, and the dsp_campaigns_metric entry did
not say so. Anyone breaking DSP performance out by creative type, or filtering
away rows with no spend, was silently dropping those conversions: on the
accounts we checked they carried 4 to 12 percent of attributed sales. The
catalog entry now states that these rows are additive rather than duplicates,
that Amazon's own line-item totals already include them, and that they have to
be kept when you group by creative type. Doc-only: nothing about the data
itself changed.
-
A report request that Amazon rate-limits now waits and asks again, instead
of failing immediately. Asking Amazon to build a report can come back "too
many requests", which is a momentary condition and not a problem with the
request. Waiting on a report that already exists has always handled that
gracefully; asking for one in the first place did not, so a busy moment ended
the whole pull and anything running it on a schedule recorded a failure and
tried again from scratch on its own timer. Both sides now behave the same way:
wait a little longer each time, then ask again, within the time budget you set.
A request that is genuinely wrong still fails straight away rather than being
retried.
-
A report waiting in Amazon's queue is no longer checked flat out, and a run
that stops now says so. Some report types, Search Query Performance most of
all, can sit in Amazon's queue for hours. The plugin used to re-check such a
report at the same rate for as long as you were willing to wait, which does
not make it arrive sooner and competes for the same Amazon limit the report
itself needs. It now waits longer between checks the longer a report stays
queued, and tells you when the next check is due. Reports that finish in the
normal window are unaffected. Separately, when a run reaches its wait limit it
now makes clear that this is a wait rather than a failure, that the report is
still queued at Amazon, that you can resume that exact run instead of starting
over, and that asking for the same window again only queues a second copy
behind the first.
-
Asking for sales by month no longer costs a round of guessed column names.
Tables that hold the same idea do not always spell it the same way: daily
totals call revenue SalesAmount while the SKU-level version of the same
report calls it Amount, ad sales is Sales, and nothing anywhere is called
Date. Only the date column was ever published, so a question phrased in
plain English could turn into two or three rejected queries before landing.
Describing a table now names its money, units and ASIN columns alongside its
date column, and names the plausible-but-wrong spellings outright, so the
first query is the one that runs.
-
A lapsed Amazon authorization is now reported once, instead of failing
every step of what you asked for. When an advertiser's grant has expired,
no call against that account can succeed until someone re-connects it. The
guidance and the error message both used to end by suggesting a retry, so a
request covering several changes would attempt each one and fail each one in
turn, and you would watch a whole campaign build fail a step at a time
without ever being told the account simply needed re-authorizing. Both now
say plainly that this is terminal until a person acts, so you are told once,
up front, with the fix named, and are also told which changes had already
been applied before it stopped.
-
The help map now lists Monthly Performance Report Max. Asking for help in
chat renders the plugin's capability map, and the max tier of the monthly
report was missing from its reporting group even though it has been available
since 0.8.9. It now appears next to the standard monthly report, with the
phrase to say to start it.