Top finding for the Finance Controller. SKUs whose unit margin has materially eroded in the last quarter.
At a glance
SKUs whose margin percentage has materially eroded vs the prior quarter inside Sage Intacct. The Controller’s “what is getting worse” worklist, sliced by every Intacct dimension (Department, Location, Project, Item, Class, Customer, Vendor, Employee).
| What it counts | Per-Item margin % comparison: this 90D vs prior 90D, computed off the Intacct GL Detail (revenue lines minus COGS lines, both filtered to the same Item dimension). Surfaces Items where the absolute margin % drop exceeds 20 percentage points (configurable). |
| Tax treatment | Net of tax. Sage Intacct posts US sales tax, VAT, and GST to separate liability accounts via the Tax Solution module or AvaTax connector; this card sums revenue and COGS accounts only. |
| Shipping | Configurable. Most Intacct distribution charts route shipping income to a 4900 Shipping Revenue account and outbound freight to a 5800 Freight account. Both are included by default; tune the field map to exclude either. |
| Currency | Reporting currency at the Top Level entity (typically USD). Per-entity views translate at the configured cadence (transaction-date, period-end, or period-average) per the Currency module setup. |
| Entity scope | Respects dashboard filter. Multi-Entity Console accounts can run consolidated (with eliminations on inter-co transfer pricing) or per-entity. |
| Dimensional cut | The card surfaces Item-level erosion by default, but every Intacct dimension is queryable: erosion by Department, by Location, by Project (essential for project-based services), by Class, by Customer (the B2B contract-renewal signal), by Vendor (the supplier-cost-shock signal). |
| Minimum revenue threshold | $5K monthly to filter noise from low-volume Items. |
| Time window | 90D vsP |
| Alert trigger | any SKU dropped >20% margin, sentiment margin_erosion |
| Revenue recognition (Contracts) | If the merchant runs Intacct Contracts and Revenue Management, the card uses recognised revenue only. Deferred revenue is excluded. |
| Implementation Partner alignment | Most Intacct merchants are paired with an Intacct-certified Implementation Partner who owns the Chart of Accounts. This card respects the Partner’s revenue-and-COGS account mapping; misaligned accounts (e.g. shipping booked to expense rather than revenue) shift the margin headline. |
| Roles | owner, finance |
Calculation
Calculated automatically from your Sage data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A US B2B distributor on Sage Intacct Multi-Entity Console. Three entities: a US parent (Vortex Distribution Inc, USD), a Canadian sub (Vortex Distribution Canada, CAD), and a fulfilment entity (Vortex Logistics Inc, USD intercompany only). Annual revenue ~$72M. The Department and Location dimensions are populated on every transaction line; Class is used to separate Wholesale from Retail D2C. Reporting currency USD. Comparing 14 Jan 26 to 12 Apr 26 vs 14 Oct 25 to 13 Jan 26.| Item | Description | Department | Class | Prior margin % | This margin % | Drop (pp) | Period revenue |
|---|---|---|---|---|---|---|---|
| BR-A-001 | Brand A Premium Tee, Black M | Apparel | Wholesale | 41% | 37% | -4pp | $172K |
| BR-A-014 | Brand A Premium Polo | Apparel | Wholesale | 50% | 47% | -3pp | $118K |
| BR-B-022 | Brand B Hoodie, Grey | Apparel | Wholesale | 36% | 11% | -25pp | $396K |
| BR-C-088 | Brand C Tee, Clearance | Apparel | Retail D2C | 27% | 4% | -23pp | $88K |
| BR-D-014 | Brand D Discounted Sub-style | Apparel | Retail D2C | 22% | -10% | -32pp | $56K |
| SVC-IMPL-AOC | Implementation Services, AOC tier | Services | Wholesale | 64% | 38% | -26pp | $310K |
- Four Items trip the alert (drops greater than 20pp), and the Sage Intacct dimensional cut is what makes the diagnostic actionable. A single number (“margin is down”) is a complaint; an Item-by-Department-by-Class worklist is an action. The four alerts here decompose to: BR-D-014 (-32pp) is a pricing decision gone wrong inside the Retail D2C Class, BR-B-022 (-25pp) is a high-volume cost shock inside the Wholesale Class, BR-C-088 (-23pp) is a clearance event also Retail D2C, and SVC-IMPL-AOC (-26pp) is a project-based services line where billable utilisation collapsed. Each goes to a different Department owner. Without the dimensional cut, the same four would land as a generic margin-decline ticket on the Controller’s desk; with the cut, BR-B-022 and BR-D-014 route to Apparel merchandising, BR-C-088 routes to Retail D2C clearance management, and SVC-IMPL-AOC routes to the Services Department lead.
- BR-D-014 dropped 32pp into negative margin (-10%), meaning the business is paying customers to take this product. Most likely cause: Retail D2C discount pricing pushed below the landed-cost floor, with merchandising authorising a 60% off promotion without checking landed cost in the Item record. Less common but real: an upstream cost spike (freight surcharge, supplier price increase) booked through the Vortex Logistics intercompany entity that pushed the inbound landed cost above the discounted price. The Controller pings merchandising the same morning. Annualised at the current Retail D2C revenue rate, BR-D-014 alone is bleeding 0K target.
- **BR-B-022 (-25pp from 36% to 11%) is the most financially concerning of the alerts because it is a high-volume Wholesale Item at 396K is $99K of dollar margin loss in a single quarter, more than the other three alerts combined. Big-revenue Item plus modest-percentage drop almost always wins on dollar impact. The card surfaces percentage-pp drop because that triggers anomaly detection cleanly, but the action priority is dollar impact. A Controller working the worklist should sort by
period_revenue * abs(margin_drop_pp)to prioritise dollars. On this account, BR-B-022 traces back to a Vendor-dimensioned cost-shock: a freight surcharge on a hoodie line manufactured in Vietnam that the Apparel Department had not pushed through to Wholesale price. - SVC-IMPL-AOC (-26pp) is the Project-dimension finding that only Sage Intacct can produce cleanly. This Implementation Services line was tagged to Project
PRJ-AOC-2025. The drop is because the project ran 38% over its planned hours (project tracking inside Intacct’s Projects module shows 1,420 actual hours against 1,030 budgeted), which booked through to project cost without a corresponding Project price uplift. Both prior-period and this-period revenue tagged to the same Project; the prior-period had healthier utilisation. NetSuite can produce a similar finding through SuiteProjects or the Projects module, but the dimensional join from GL Detail to Project is one Intacct API call (the same line carries both the revenue account hit and the Project tag), where in NetSuite it requires the Projects subrecord join. For services-heavy or project-based commerce (digital agencies, consultancies, B2B implementation services), Intacct’s Project dimension is the killer integration on this card. - The healthy-but-eroding watchlist (BR-A-001 at -4pp, BR-A-014 at -3pp) is below the alert threshold but the trend is worth tracking, especially because the same Brand (Brand A) shows two consecutive Items softening in the Wholesale Class. Two Items in the same Brand softening at the same time is a brand-level signal: probably a Vendor cost tick, possibly a freight pattern, or a competitive pricing shift in the channel that forced a price reduction. The card supports a configurable Watchlist threshold (typically 3-5pp) that surfaces the early-warning cohort without firing the alert. On this account, the Brand A erosion turned out to be a 3% Vendor cost increase that had been quietly absorbed for two quarters before the merchandiser caught it; surfacing it earlier through the Watchlist would have saved roughly $36K of cumulative margin.
Sibling cards merchants should reference together
| Card | Why pair it with Margin Erosion Alerts |
|---|---|
| Margin by SKU | Current snapshot of per-Item margin, dimension-tagged. The spot view; this card is the trend. |
| Gross Margin Percentage | Aggregate roll-up. Use to confirm whether Item-level erosion has reached the headline. |
| Average Landed Cost per Unit | The upstream cost driver. If margin is eroding because landed cost is rising, this card surfaces the pattern. |
| Landed Cost Variance vs Standard | Variance details by Vendor dimension. The diagnostic pair to BR-B-022-style cost-shock alerts. |
| Top SKUs by Inventory Value | Volume cross-check. A high-revenue eroding Item is the dollar-impact priority. |
| Margin Compression | Aggregate-level erosion alert. Pair with this card to triangulate whether erosion is concentrated or broad. |
| Total COGS | The denominator-side roll-up. A COGS spike usually predicts this card’s alerts a period later. |
Reconciling against the vendor’s own dashboard
Where to look in Sage Intacct: Sage Intacct does not expose a native period-over-period margin-erosion alert; the comparison is one of the gaps that Vortex IQ fills. The closest manual approaches inside Intacct are:Reports → Financial → Income Statement with the Item dimension pinned (run twice for the two windows, manually diff the per-Item margins in a spreadsheet) Interactive Custom Report (ICR) built against the GL Detail data source:The Implementation Partner pattern is the key reconciliation point: most Sage Intacct merchants run their margin reporting through their Partner’s monthly board pack rather than through the Intacct UI directly. If the card’s number differs from the Partner’s pack, ninety percent of the time the discrepancy is in Chart of Accounts mapping, not in arithmetic. Vortex IQ’s field map is the single place to align both views. Common reconciliation pitfalls when building this manually:SUM(credit_revenue)minusSUM(debit_cogs)per Item, with a calculated column for the period-vs-period delta. An Intacct-certified Implementation Partner can build the ICR in roughly 60 to 90 minutes; once built, it becomes the “tie out” report the Controller runs every month-end Reports → Order Entry → Sales Item Profitability for Item-level margin trend over time (no automatic alert on threshold breaches) Custom Reports with the Department or Project dimension filter for the dimensional cuts on the Worked Example
- Cost basis drift mid-period: Intacct’s Item average cost updates with each Inventory Adjustment or Purchase Receipt, so an Item’s “this period” margin uses a different cost basis at different points within the period. The card uses period-end average cost; an ICR using transaction-line cost can produce different per-Item margins.
- Refund and Credit Memo handling: a Credit Memo against an Invoice in the prior period drags margin in the current period if it posts in the current window. The card normalises to invoice-date economics; a naive ICR filtered to current-period Invoice transactions distorts.
- Discount line items: Intacct’s Order Entry module typically applies trade and term discounts at the Item line, but some setups post discounts as separate Discount line items. The ICR needs to allocate discount lines back to the Item before computing margin. Most merchants get this wrong on the first attempt.
- Project-dimension revenue recognition: Items tagged to a Project under Intacct Contracts and Revenue Management show recognised revenue, not invoiced revenue. The ICR must filter the same way or the Project Items read different margins on the two reports.
| Reason | Direction | Why |
|---|---|---|
| Threshold setting | Either | Default 20pp; some Controllers set 10pp for tighter monitoring on stable B2B distribution, others 25-30pp for volatile Retail D2C. The number of Items surfaced is sensitive to this. |
| Minimum revenue threshold | Either | 10K for top-200-Item focus, others $1K for a wider net. Tunable per workspace. |
| Window definition | Either | Default 90D vs prior 90D smooths promotional spikes. 30D vs prior 30D would generate roughly 4x more alerts because seasonal mix moves margin within shorter windows. |
| Cost basis drift | Either | Card uses period-end average cost as the basis for both windows. An ICR using transaction-line cost produces slightly different margins because cost moves within the period. Differences usually under 1.5pp per Item. |
| Discount allocation | Either | Card allocates promotional discount lines back to the Item before computing margin. Manual ICRs that miss this allocation can show inflated margins on promoted Items. |
| Multi-Entity Console eliminations | Either | Top Level entity with eliminations enabled removes inter-co transfer-pricing distortions; per-entity views do not. An Item sold inter-company (US to Canada in the worked example, US to Vortex Logistics for fulfilment) reads differently at the consolidated level vs each entity. |
| Revenue recognition (Contracts module) | Card lower | If the merchant runs Intacct Contracts, deferred revenue is excluded; the card uses recognised revenue only. SaaS-adjacent Items show lower per-period margin under Contracts than they would under invoice-on-billing accounting. |
| FX cadence on multi-entity Items | Small | Each entity translates at its configured cadence (transaction-date, period-end, period-average). Pure FX impact on margin is usually under 1pp; large swings only matter if the Item’s revenue and cost are in different currencies and FX moved sharply. |
| Marketplace-fee inclusion | Either | Some Intacct Charts route Amazon / eBay marketplace fees into a 5xxx COGS-class account; others leave them in 6xxx OpEx. The card respects whatever the GL mapping shows. Reclassifying mid-period creates a one-time margin shift. |
| Card | Expected relationship | What the comparison reveals |
|---|---|---|
| Commerce-platform per-product margin reports | Sage Intacct is the source-of-truth | Shopify, BigCommerce, and Adobe Commerce track per-variant cost as a single static field that rarely updates. They cannot generate a period-over-period margin trend because they do not capture cost history. Intacct does, dimensionally. This is one of the structural reasons Sage Intacct is the only viable source for margin-erosion analysis on a multi-channel commerce business. |
| shopify.gross_margin | Shopify margin > Intacct margin | Shopify’s variant-level cost is rarely updated as freight surcharges hit. The Shopify number lags reality by 30 to 90 days; the Intacct number is current. An Item showing erosion on this card but stable margin on Shopify is the signal that merchandising needs to update Shopify cost fields. |
| google_ads.cost per-Item | Indirect, but critical | An eroding-margin Item still receiving high ad spend is the killer cross-channel finding. Intacct says “this product is unprofitable”, Google Ads says “we are spending money to acquire customers for this product”. The intersection is “we are paying to lose money”, which the Dead Stock with Active Ad Spend cross-channel card surfaces explicitly. |
| facebook_ads.spend per-product | Indirect, similar dynamic | Facebook / Meta ad spend on eroding-margin Items is the same kill-shot finding for D2C brands. |
| Landed Cost Variance vs Standard | Causal | If margin is eroding because landed cost is rising, this card surfaces the Item and Landed Cost Variance surfaces the Vendor-dimensioned cause. The two together are the diagnostic pair. |
| stripe.fees + paypal.fees | Indirect, hidden margin tax | Payment processing fees (2.5 to 3% of GMV) eat real margin even when not classified into COGS. Some Controllers reclassify into COGS for “true product margin”; if you do, expect this card to read 1.5 to 2.5pp lower across the board. |
| Inventory Carrying Cost | Indirect, hidden margin tax | Carrying cost on slow-moving Items eats margin too. An Item showing 4% margin on this card and sitting in 91-180 aging is closer to break-even economics than the headline suggests. |