The post-promo review is booked for an hour and the first twenty minutes go on whose number is right. Sales brought a lift figure built from the retailer POS file for the four feature weeks. Finance brought a spend figure built from deductions that landed six weeks after the display came down, measured against an accrual booked on shipments. Both describe the same promotion at the same account, and the meeting has to decide whether to run it again in the autumn.
Three feeds have to agree on one promotion identity before any ROI number is worth reading: the promo plan, the shipments, and the POS. Agreement means each of the three can say which promotion a row belongs to, at which account, for which products, in which weeks. AI trade promotion planning pays off on the far side of that agreement and adds little before it, because a model handed three feeds that disagree returns a confident average of them.
The three feeds that have to agree
The plan lives where it was made: a workbook by account, sometimes a promotion module in the ERP, usually with an email thread that amended both. It holds the intent, which is the mechanic, the weeks, the products and the money committed against them. What it rarely holds is a stable identifier, so the same feature appears as Q3 grocery feature in one row and GRO wk32-35 BOGO in another, and the two are the same promotion only because one person remembers that they are.
Shipments sit in the ERP, in NetSuite or QuickBooks, and this is the one feed carrying your own product codes and your own money. It also runs early. Promotional volume ships ahead of the feature, commonly two or three weeks ahead, so a shipment total cut to the promotion weeks attributes the pre-build to the period before the promotion existed, and the same total cut to the wrong account level mixes a banner deal with a division deal.
The POS feed, arriving from a retailer portal, a distributor depletion report or syndicated data you buy, is the only one that knows what left the shelf. It names products by the retailer item number and time by a retail week ending Saturday (which is why a four-week feature often straddles two of your own fiscal months). Distributor depletions are later still and often arrive without store detail, so a promotion measured through a distributor market is measured at a coarser grain than the same promotion at a direct account.
What one promotion identity has to carry
A promotion identity is a small piece of data with five parts, and each part exists because a promotion review has failed on it.
- The account at the level the money was agreed, which is the banner for some retailers and one division for others, because spend committed at the banner cannot be split across divisions afterwards without inventing the split.
- The products at pack grain, so a club pack and a grocery pack of the same product are not averaged into one lift number by a case conversion applied at the wrong level.
- Two windows rather than one: the weeks the promotion ran at the shelf, and the earlier weeks the promotional volume shipped in.
- The mechanic and the spend basis, because off-invoice money reduces the invoice on the day and billback money arrives later as a deduction, and treating them as one line makes net revenue depend on which mechanic the buyer preferred.
- The baseline, labelled as a modelled number, with the method written beside it rather than inside a formula in one workbook.
Nothing on that list is hard to compute. All of it is hard to agree, because the five parts are spread across the ERP, the retailer portals, the distributor emails and the spreadsheet where the calendar lives, and joining them is a person with a lookup table and a memory of last year. That is where the same question starts producing different answers on different days: the join is rebuilt each quarter, so it is never quite the join it was. If what you want is the tool comparison rather than the measurement argument, Trade spend management software: what to look for sets out which category of tool owns which half of the loop.
What AI trade promotion planning adds once they agree
Given a joined history, the useful AI work is the work nobody has hours for. Deduction lines arrive as free text in the account reference format, and a language model is good at proposing which agreement each line belongs to and flagging the ones it cannot place, which turns an unread report into a queue. Every combination of account, pack and mechanic can be scanned for the features that ran below plan, rather than the handful a human had time to check. Questions asked in plain language during the review get answered while the review is happening, and a calendar variant for next quarter can be drafted and argued with.
What stays human is the commitment. A proposed calendar is a proposal until a national account manager has traded it against a buyer, and a deduction the model could not place is a phone call rather than a write-off. Automation earns its place here by raising the exceptions, which are the promotion that ran on different dates than the plan recorded, the account that took a deduction against a feature it never ran, and the pack that shipped under a code retired in March.
We built Permute for the join underneath all of that. We connect the ERP holding shipments and accruals, the retailer and distributor files that only ever arrive as spreadsheets, Excel and Google Sheets where the promo calendar and the fund tracker live, and the rest of the systems we connect, then resolve accounts and products so a shipment line, a depletion row and a deduction reference land on the same promotion. Promotion window, incremental volume and net spend are written once as explicit rules with effective dates, so a change to a mechanic in March applies from March and leaves the first quarter as it was reported. The dashboard, the scheduled post-promo pack and a plain-language question then read from one layer, which is what the Data Activation layer is for: the trade manager asking which features ran below plan and finance opening the monthly review see the same number, with the shipment, depletion and deduction rows sitting behind it. Two limits belong in the same breath. We read from the systems we connect and do not write back, so an approved calendar is still committed in your planning suite and the accrual entry is still raised in the ERP. And we are not a forecasting engine: we hold the baseline definition and its inputs, and the counterfactual stays a modelled number with an owner.
Join one quarter of promotions to their spend
Connect your ERP, one retailer feed and the plan spreadsheet, then ask which features ran below plan.
What AI cannot fix while the feeds disagree
Unmatched spend does not announce itself in an answer. Where a share of deductions has never been tied to a promotion, that share sits inside every ROI figure as noise, and a model reports the figure without the caveat unless the caveat is in the data it was given. The same holds for coverage: a lift number computed over the accounts whose files arrived reads as a lift number for the brand.
Borrowed volume is the second thing no model recovers on its own. A deep feature that pulls household demand forward shows a clean lift when the measurement window closes on the last feature week, and the payback lands in the fortnight after it as a decline somebody attributes to seasonality. Fixing that is a window definition and a baseline method, both of them decisions rather than outputs.
Then the ground moves. A retailer restates a month, a store list is corrected, a distributor resends a file, and the ROI you reported last quarter changes after you presented it. A layer that versions each feed records the restatement, while a workbook overwritten in place leaves no trace that the figure was ever different. The mechanics of getting those feeds in on a schedule are covered in How to automate POS data analysis, and the cost side of the same rows, once trade spend has landed on the SKU that carried it, is SKU-level margin analysis across channels.
Before you trust a promotion ROI number
Take one promotion that went badly and one remittance into the next review, and put the number through five tests. Anything that survives them can be quoted to a buyer.
- Show this deduction matched to the promotion that caused it, in the account reference format, with no manual mapping step in between.
- Show the lift for a four-week feature whose volume shipped in the three weeks before it, and show which weeks that volume was attributed to.
- Show the same promotion ROI to a trade manager and to finance, then point at where net spend and incremental volume are written down.
- Restate one retailer month after the review was presented, then show which reported figures moved and which held.
- Show the shipment, depletion and deduction rows behind one lift figure, by account and pack, without an export.
A brand that can do the first two is measuring promotions; a brand that cannot is reporting them. The distributor and broker side of the same question, meaning who is delivering the distribution you paid for, sits in Vendor scorecard software: what to look for, and who can see account-level spend, including which accounts a broker is scoped to, is covered in how the data is handled. For the mechanism underneath the definitions and the trail back to source rows, what a context layer actually does is the shorter version, and the rest of the consumer brands library carries the adjacent decisions.
Bring one promotion nobody could agree on
We will trace it from the plan through shipments and POS to the deduction, and show where the identity breaks.
Questions trade and finance teams ask about promotion ROI
Do we need a trade promotion planning suite before any of this?
Only where the planning process is the failure. A suite is worth buying when commitments are made in email and nobody can say what funds remain at an account, because that is a control problem the calendar owns.
Measurement is a separate build. A suite knows what you planned to spend and learns what you spent from feeds it does not own, so brands with an orderly calendar and an unreadable ROI number are missing the join rather than the workflow.
How long should the measurement window be?
Long enough to include the pre-build and the payback, which in practice means the shipment weeks before the feature and two to four weeks after it. The exact tail is a decision to write down per retailer rather than a setting to discover per analysis.
Reporting the feature weeks alone is the most common way a promotion that lost money reads as a success.
Can AI set the promo calendar for next quarter?
It can draft one and explain the reasoning, which is useful input to a negotiation. It cannot commit one: we read from the systems we connect and do not write back, so the plan is still entered and approved where your team approves plans.
The risk worth naming is a draft built on unmatched spend, which repeats the mechanics of last year with more confidence than the numbers support.
How is a promotion measured in a distributor market?
At the grain the depletion report supports, which is usually the distributor and the week rather than the store. Treat it as its own feed with its own lag instead of folding it into direct retailer numbers, because a shared measure built on the weaker feed drags the whole picture down to it.
The workable target is knowing which depletions fell inside the promotion window, and being explicit that store-level attribution is unavailable there.