Net profit is only as honest as the COGS underneath it. In Magento catalogs, COGS goes wrong in a handful of predictable ways — and each one makes margin look better than it is.
Here are the five we see most often, roughly in order of how much damage they do.
1. Bundle and configurable parents synced at €0 cost
This is the single biggest offender. Magento often stores real cost on the child simple products while the parent line — the one that actually carries the order revenue — syncs with cost = 0.
A €90 “Starter Kit” with three simples worth €25 combined in real cost can show up in your P&L as €90 of pure margin. We covered the mechanics in detail in Magento Bundle COGS: Why Parent Cost = 0 Inflates Your Margin — if you sell any bundles, configurables, or grouped products, read that one next.
Fix: roll child costs up onto the parent line at sync time, and persist the computed kit cost so resyncs stay stable.
2. Stale supplier costs
Product cost attributes get set once at catalog creation and then quietly go stale for years. Supplier price increases, currency moves, and new freight surcharges never make it back into Magento's cost field.
The result is a slow, invisible drift: COGS understates true cost a little more every quarter, and margin looks a little better than reality every quarter too.
Fix: treat product cost like a price — review it on a schedule (quarterly at minimum), not only when someone happens to notice.
3. Ignoring landed costs
Unit cost from your supplier invoice is not the same as landed cost. Duties, customs clearance, freight-in, and inspection fees can add 10-30% on top of the invoice price for imported goods — and almost none of that ends up in the Magento cost attribute.
If you import inventory and your cost attribute is literally just "what the supplier billed me," your true COGS is higher than what any Magento report — or profit tool reading that field — will show.
Fix: either blend landed cost into the per-unit cost attribute at the time of a purchase order, or track landed cost as a separate expense category so it still lands somewhere in your P&L.
4. No COGS clawback on refunds
When a customer returns an item, the revenue reverses — but does the COGS reverse with it? Many setups subtract the refunded amount from revenue and stop there, leaving the original COGS fully booked against an order that no longer generated any margin.
Partial refunds on bundles make this worse: refunding one item out of a three-item kit should claw back roughly a third of the kit's cost, not zero and not all of it. We go deeper on refund timing (and why it matters which day the clawback lands on) in Cash vs Cohort: Where Magento Refunds Go in Your P&L.
Fix: proportional COGS clawback on every refund line, matched to the item and quantity actually returned.
5. New SKUs launch with zero cost
A new product goes live, starts selling on day one, and nobody has set a cost attribute yet because the ops team is still finalizing supplier pricing. For the first sync (sometimes the first week), every sale on that SKU books as 100% margin.
For a slow mover this barely registers. For a launch that gets pushed hard on paid social, it can distort a week or two of “this campaign is amazing” reporting before the real numbers land.
Fix: block new SKUs from going live in ads until a cost attribute exists, or at minimum flag zero-COGS revenue so you know to discount early performance data.
How to audit yourself in 20 minutes
- Export the last 7 days of order lines with revenue and COGS
- Sum revenue with COGS = 0
- Divide by total revenue — that is your zero-COGS share
- Sort the zero-COGS rows by SKU; bundles and new launches usually dominate
If that share is above 15%, do not trust net profit or POAS until it is fixed. Verid surfaces this automatically — see how COGS setup works in the docs — and flags weekly zero-COGS coverage before it distorts a scaling decision.
Why this matters more once you run ads
Every one of these five mistakes inflates the same number: contribution margin. That number is what tells you whether a campaign is actually working, and increasingly it is also what feeds Google Ads bidding directly — see Profit-Based Google Ads Conversions for Magento.
Fix COGS first. Everything downstream — POAS, net profit, profit-based bidding — inherits whatever error is sitting in this one field.
Start a trial and Verid will flag your current zero-COGS share on the first Magento sync.