WooCommerce Profit Margin Report with AI: Find Low-Margin Products
WooCommerce tells you what each product earned, not what it left you. A WooCommerce profit margin report needs one more number, the cost of goods, and with BEAR's MCP server connected you get that report by asking your AI assistant: "which products actually make me money?" It answers with the margin per product for the period you name, worst first, so products sold below cost are at the top of the list. Below is where the cost comes from, what the report calculates, why some products are left out, how to fix missing costs in bulk, and how discounts show up in the margin.
Before you start
You need BEAR with its MCP server switched on and an AI assistant that supports MCP connected to it, such as Claude in the browser, the desktop app or Claude Code. The report combines sales from WooCommerce Analytics with costs saved on your products, so Analytics must be enabled with its import of past orders finished, and at least some products need a cost. The connection steps are in the MCP server documentation.
Where the cost comes from
BEAR reads WooCommerce's own cost of goods. Once the Cost of Goods Sold feature is switched on under WooCommerce → Settings → Advanced → Features, a Cost of goods field appears on every product and every variation. That value is stored in the meta key _cogs_total_value, and that is the number the margin report uses. If the feature is switched off but products still carry values in that meta key, for example from an import, BEAR reads the meta key directly.
- Costs kept by other plugins are not read. A cost price stored by the Cost of Goods extension (
_wc_cog_cost), by ATUM or in a custom field of your own does not reach the report. Copy it into WooCommerce's field first; bulk editing cost of goods shows how to move costs from one field to another in a single run. - Variations need their own full cost. The report uses the cost saved on each variation. A variation with no cost of its own, relying on the cost of its parent product, is counted as a product without cost. A variation whose cost is entered as an amount added to the parent's cost is counted with that added amount only. For a correct report, give every variation its full cost.
- The cost is today's cost. BEAR multiplies the units sold by the product's current cost. It does not use the cost WooCommerce recorded on each order at checkout, so after a supplier changes prices and you update your costs, earlier periods are recalculated with the new cost.
- A missing cost is never treated as zero. A zero cost would report the whole revenue as profit. Products without a cost are left out of the figures and counted, as explained below.
Ask for a WooCommerce profit margin report
Which products actually make me money? Show me the margin per product for the last three months, worst first.
- The period. "The last three months" becomes a start date three months back and an end date of today, in your shop's time zone.
- The products. For a shop-wide question the assistant asks the margin report (
woobe_margin) to cover the whole catalogue. BEAR takes every product and variation that sold in the period, the top 1,000 by revenue at most, with each variation as its own row. If more than 1,000 items sold, the answer says how many were looked at, so the assistant can tell you the list is not complete. - The calculation. For each product with a cost: units sold, net revenue, unit cost, total cost (unit cost times units), margin (net revenue minus total cost) and margin as a percentage of net revenue.
- The products without cost. Every product that sold without a cost on file is left out of the rows and the totals, and the answer gives their number. The assistant is instructed to tell you that number, because a margin computed over part of the catalogue is not your shop's margin.
- The totals. Net revenue, total cost, total margin and the overall percentage, all for the costed products only.
- The order. Worst margin first by default. You can ask for the lowest percentage first instead, or for the products with the most revenue first.
Net revenue here means revenue on goods after coupon discounts, without tax and shipping, the same figure WooCommerce Analytics reports as net sales. Sales count when the order is Completed, Processing or On hold, unless you name other statuses. An order refunded in full drops out because its status becomes Refunded; partial refunds are not deducted, so the report shows the margin on what was sold.
For a group of products, such as one category, one brand or one supplier's range, ask for it in the same sentence: "margin of the products in the Mugs category since January". The assistant first selects those products with a BEAR filter, up to 500 at a time, and the totals then describe that group.
The prepared question "Where the money is"
Ask your assistant what it can do, and among BEAR's prepared questions it offers Where the money is: gross margin per product over the last three months, lowest percentage first, up to 40 rows. BEAR offers it only when at least one product in the shop has a cost recorded; without any cost there is no margin to show. You can move its start ("the same since January"); its end is always today.
Products sold below cost
Because the list starts with the worst margin, products sold at a loss come first, with a negative margin. That is where to look, and the usual causes are few:
- A sale price that went below cost, or stayed active longer than planned.
- A coupon that took the price under cost. Coupon discounts are already subtracted from net revenue, so a heavily discounted product shows a thin or negative margin.
- A wrong cost: a cost per pack on a product sold per piece, a cost entered in another currency, or a typo with an extra digit.
- An outdated cost after a supplier price change.
Ask the assistant to explain the top of the list: "for the five products with a negative margin, show the price they sold at and their cost". If the price is wrong, the next step is a price change; if the cost is wrong, correct the cost. Both are separate requests that go through a preview.
Why the margin is empty or incomplete
- No product has a cost. The prepared question is not offered, and a margin request leaves every sold product out as having no cost.
- The cost lives in another plugin's field. Only WooCommerce's own cost of goods is read; copy the costs over as described above.
- Variations rely on the parent's cost. They are counted as without cost until each variation has its own value.
- Nothing sold in the period. The answer says there is no margin to report. Widen the period.
- Sales figures are missing. The report needs WooCommerce Analytics. If Analytics was enabled recently, its import of past orders may still be running; check WooCommerce → Status → Scheduled Actions or start the import of historical data in Analytics → Settings. On shops where Analytics imports on a schedule, the newest orders arrive with the next import, and the answer says how many are not counted yet.
- The group is too large. A selection of more than 500 products is refused with the count; narrow the filter or ask for the whole shop.
Each case is handled the same way: BEAR reports what it left out and why, rather than filling the gap with an estimate.
Fixing costs in bulk
When the report says that 80 sold products have no cost, the fastest fix is a bulk edit of the cost field. There are two ways to do it.
In BEAR's editor. Attach _cogs_total_value as a number field in the Meta Fields tab, switch its column on, filter the products and set the cost for all of them, raise it by a percentage, or calculate it as a share of the regular price. The cost of goods bulk edit guide walks through each of these, and Meta Fields explains attaching a key.
Through the assistant. Once the cost field is attached in the Meta Fields tab, it is one of the fields the assistant can bulk edit, just like a price:
Set the cost of every variation in the Mugs category to 4.20.
The assistant finds the products, tells you how many there are and shows a preview of the new values. The change is written only after you confirm that exact number, it is recorded in History, and it can be rolled back as a whole. Raising costs after a supplier increase works the same way: "increase the cost of all products tagged SupplierA by 8%". For variable products, ask for the cost to be set on the variations, so that each one has its own full value for the margin report.
In the free version of BEAR, the Meta Fields tab works with two meta fields, and an assistant can write to at most 100 products every 30 minutes; the details are in the free version limitations. Reading the margin report is not limited.
Promotions and margin
The margin report already reflects every discount: revenue is counted at the price customers actually paid, after sale prices and coupons. A promotion that sold well but cut too deep shows up as a lower margin on exactly the products it touched.
To see the discounts themselves, ask "which promo codes are being used, and how much are they costing me?". BEAR's prepared question What the discounts cost lists every coupon used in the last six months with the number of orders that used it, the total discount it gave away, the average discount per order and its share of all coupon orders, sorted by the money given away. It is offered only on shops that have at least one coupon. A popular code and an expensive code are rarely the same, and this table tells them apart.
Before the next sale, check it against your costs. With the cost field attached in BEAR, the assistant can read the costs of the products you plan to discount and list those that would sell below cost at the new price, before you approve any change.
Ready prompts for margin checks
- "Which products actually make me money? Last three months, worst margin first."
- "Show me every product sold below cost since January."
- "Margin by percentage for the Kitchen category this year, lowest first."
- "Top 20 products by revenue last quarter with their margin."
- "How many of the products sold this quarter have no cost recorded?"
- "Which coupons cost me the most in the last six months?"
- "If I put the Garden category on sale at 25% off, which products would sell below cost?"
- "Set the cost of the products with SKU starting MUG- to 4.20, show me the preview first."
What the report reads and what a fix writes
The margin report and the coupon report are read-only. Asking for them changes nothing, nothing is added to History, and there is nothing to undo. Correcting costs or prices is a write and follows the rules of every bulk edit through BEAR: a preview before anything is saved, the exact product count to confirm, an entry in History, and a rollback of the whole run if you change your mind. Access to the reports can be closed for a particular shop manager, as described in sales reports with AI, which also covers the other sales figures you can ask for.
Questions
Is this my net profit?
No. It is the gross margin on goods: revenue after discounts, without tax and shipping, minus the cost of goods. What you pay your carrier, payment gateway fees, advertising and overheads are not stored on products or orders in WooCommerce, so no report can subtract them.
Why do I see variations but not the variable product?
A variable product sells nothing itself; its variations do. Each variation is a row of its own, which also shows when one size or colour earns far less than the others.
Does the margin of last year change when I update a cost today?
Yes. The report always uses the cost currently saved on the product, so update costs when your purchase price changes and keep in mind that older periods are recalculated with it.
Does it work on a multi-currency shop?
With FOX – WooCommerce Currency Switcher, revenue from every order is converted to your base currency at the rate stored on the order. The cost is taken as you entered it, so enter costs in your base currency.
Checklist
- WooCommerce's Cost of Goods Sold feature holds your costs, or they are copied into
_cogs_total_value. - Every variation has its own full cost.
- Costs are current and in your base currency.
- WooCommerce Analytics is enabled and has imported past orders.
- The answer's count of products sold without a cost is zero, or you know which they are.
- Products with a negative margin are checked: price, coupon or cost.
- Any correction is previewed, the count confirmed, and the run is visible in History.
If the margin of a product does not match your own calculation, post the question, the period and the product on the BEAR support forum.